初探PID—速度闭环控制

简介: 本文简单介绍了什么是PID,PID的作用,给出了PID实现程序。


🎀 文章作者:二土电子
🐸 期待大家一起学习交流!


由于在调PID时意外把板子烧了,目前只完成了比例调节的调试,整个程序也不太完善,本文当前仅作记录,后续会完善更改。
——2023.07.26

一、什么是PID

PID是常用的一种控制算法,其中P(proportional)是比例,I(integral)是积分,D(derivative)是微分。PID算法的原理图如下

dff6b351e07a5d72328a70206f2df14e_64ae6b76dbeb457bac898e1b4c359661.png

  • 比例环节
    比例环节系数Kp用来控制速度快速趋近目标值,Kp越大,趋近速度越快,但是容易产生震荡,就是反复在目标值上下横跳。Kp越小,调节速度越慢。
  • 积分环节
    积分环节使用来消除静态误差的。比如我们设定的目标值为200,只靠比例调节会发现,速度有可能固定在185不动了。这时候就需要积分环节出手。只要我们的实际值与目标值存在偏差,就会不断地对偏差进行积分(累加)。积分系数Ki越大,调节效果越明显。使用积分调节时需要注意,需要设置一个积分限制,防止在一开始就累加偏差。
  • 微分环节
    微分环节是让车速快速稳定下来,实际就是产生一个阻尼效果。

另外,PID分为增量式PID和位置式PID,这里暂不做介绍,后续补充。

二、PID有什么用

知道了什么是PID,那么我们用PID来做什么?在智能车中PID可以用来控制电机转速,实现速度的闭环控制。举一个例子,做过智能车的小伙伴可能遇到过,智能车四个轮子,给相同的占空比,发现智能车无法走直线,这是因为四个轮子转速不相同。如果加上PID,可以根据目标转速给四个车轮不同的占空比来实现四个轮子转速相同。

测量转速需要用到编码器,这里暂不做介绍,后续会详细介绍电机和编码器。

三、PID程序实现

这里简单给出一个PID的实现程序,仅供参考。

u16 Speed_Pid_Ctrl (int targetSpeed,int actualSpeed)
{
   
    float bias = 0;   // 目标值与实际值的差值
    static float lastBias = 0;   // 上次偏差
    static float lastLastBias = 0;   // 上上次偏差
    static float pwmDuty = 0;   // PWM占空比

    // 比例调节系数范围1.6
    float kp = 1.6;   // 比例调节
    float ki = 0;   // 积分调节
    float kd = 0;   // 微分调节

    printf ("target = %d actual = %d\r\n",targetSpeed,actualSpeed);

    lastLastBias = lastBias;
    lastBias = bias;

    bias = (float)targetSpeed - (float)actualSpeed;

    pwmDuty += kp * (bias - lastBias) + ki * bias + kd * (bias - 2 * lastBias + lastLastBias);

    // 限幅
    if (pwmDuty >= 999)
    {
   
        pwmDuty = 999;
    }

    return (u16)pwmDuty;
}
相关文章
uniapp上传文件时用到的api是什么?格式是什么?
uniapp上传文件时用到的api是什么?格式是什么?
|
存储 监控 算法
ClickHouse源码分析-压缩算法大揭秘
ClickHouse在近年来增加了很多压缩算法,最主要的改进还是为了更好的适应时序场景,提高压缩率,节省存储空间。本期就给大家带来ClickHouse的压缩算法介绍。
5942 0
ClickHouse源码分析-压缩算法大揭秘
|
资源调度 前端开发 JavaScript
React的测试:使用Jest和React Testing Library进行深入探索
【4月更文挑战第25天】本文探讨了使用Jest和React Testing Library进行React测试的方法。Jest是Facebook推出的JavaScript测试框架,适合React测试,提供全面的API和功能。React Testing Library侧重于组件行为,提倡按用户交互方式测试。安装这两个工具后,可通过编写测试用例(如模拟点击事件)来验证组件功能。运行Jest可执行测试并显示结果。此外,还介绍了高级测试技巧和模拟功能,强调了它们对于确保组件正确性、提升开发效率的重要性。
|
7月前
|
机器学习/深度学习 人工智能 算法
面向工业4.0的AI Agent多任务协作与调度系统设计
随着人工智能(AI)技术的飞速发展,智能制造成为现代工业的核心驱动力。传统制造系统在面对多任务、高频次和动态变化的调度需求时,往往效率低下。而基于AI Agent的多任务协作与调度机制为解决这一问题提供了全新思路。本文聚焦于面向智能制造场景中,如何通过AI Agent实现多任务协作调度,并引入强化学习方法进行算法优化。
|
11月前
|
传感器 人工智能 运维
2025年最新设备巡检系统评测,哪款更适合你
本文将从评测角度,带你了解各类设备巡检系统的特点和适用场景,并重点剖析草料二维码的优势,帮助企业在预算、环境和技术水平等因素下,选择最适合的巡检方案。
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
1891 15
基于Adaboost模型的数据预测和分类matlab仿真
AdaBoost(Adaptive Boosting)是一种由Yoav Freund和Robert Schapire于1995年提出的集成学习方法,旨在通过迭代训练多个弱分类器并赋予分类效果好的弱分类器更高权重,最终构建一个强分类器。该方法通过逐步调整样本权重,使算法更关注前一轮中被误分类的样本,从而逐步优化模型。示例代码在MATLAB 2022A版本中运行,展示了随着弱分类器数量增加,分类错误率的变化及测试数据的分类结果。
522 13
|
存储 人工智能 数据处理
《C++赋能:有限硬件下多 AI 模型的共享与复用之道》
在AI发展迅速的当下,面对有限的硬件资源,利用C++的特性实现多模型的高效共享与复用成为关键。通过面向对象编程将模型抽象化,利用内存池技术优化内存管理,设计通用数据处理模块减少重复处理,运用多线程提高计算效率,实现模型的高效序列化与反序列化,从而在资源受限的环境中最大化发挥AI的优势,推动技术的实际应用。
236 5
|
算法
PID算法原理分析及优化
今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。 在大学期间,参加的智能汽车竞赛中就使用到了PID经典控制算法,对于智能小车的调试更加的方便。 一、PID原理 PID控制方法将偏差的比例(proportional)、积分(integral)、微分(derivative)通过线性组合构成控制量,对被控对象进行控制。 常规的PID控制系统如图所示: 系统的输入r(t)为控制量的目标输出值,输出y(t)为控制量的实际输出值,e(t)为输出量目标值与实际值
630 1
|
机器学习/深度学习
神经网络中权重初始化的重要性
【8月更文挑战第23天】
688 0