电子控制经典不衰的算法——PID,附上国电赛的核心程序和建议

电子专业 徐 自远 600℃

PID,作为很早的负反馈调节算法,在控制领域是比较经典的,并且因为精确且容易实现而被广泛应用。我是在大二时候为了参加15年的全国大学生电子设计大赛时候学习的。我做的是控制的板球系统,要是大家需要那时候的程序点赞关注,评论区留言邮箱即可,互相学习。

PID逻辑图

接下来介绍下PID的具体含义。

P(Proportion),比例,是输入偏差乘以一个常数

I(Integral),积分,是对输入偏差进行积分运算

D(Derivative),微分,对输入偏差进行微分运算

具体的实现公式是

Y=P*△X+I*∫△Xdt+D*(d△X/dt)

又是麻烦的公式

一个抽象的公式不容易理解,下面就拿人跑到某个固定位置来举例。比如在坐标轴上,Y是指速度,X是当前位置。从0跑到100,△X是100和当前位置的差值,P的作用就是给你提供一个向前跑的动力,让系统更快的运行到目标位置。那可能会说,那正好当到达目标△X是0.输出速度也是0了,刚好实现了精确的到达。但这在实际中其实是很难做到的,比如温度控制系统,实际温度为10度,我要通过加热把温度提升到40度,这里难道我们能一次性准确的给系统加30度?显然这是做不到的。那么P的最终结果是使我们朝着100这个方向运动。P值越大,系统运行速度加快,但同时在预定位置容易产生来回的振荡;P值越小,振荡变小但运行到预定位置的速度会变慢。

P调节建议过冲点,用D补偿

为了精确到达100的位置,引入参数D,它是对P的一种抑制,就像人跑到快到100时候的减速,D的作用就是那个减速,使系统精确的到达指定的位置。通过公式看出,随着越来越接近目标,△X是在不断不小的,所以d△X/dt是个负值,所以叫做负反馈调节。

I的作用是积分,维持在静态的稳定。比如恒温箱的温度控制到了50,但系统一直往小于50度的方向有偏移,那随着时间累积,I就是给以补偿,使得这种偏移减小甚至抑制。

下面结合国赛的程序做具体分析,用的是STM32,程序是C写的,核心的截图如下

这个是15年电赛的PID程序。最后函数得到的数值作为舵机的PWM值,从而实现板球系统的控制。公式的实现是在-Zoom.P*ierror1+Zoom.I *sumY-Zoom.D *derror1这句上,ierror1是所处位置和预定位置的差值,sumY是累积的积分,derror1是前后两次采样ierror1的差值。

15年做的板球系统

我这边没有用到I,就是没有积分,用的PD调节,因为这个系统一直是在调整位置,要让板子上的球从位置A到位置B,所以没有维持静态平衡的必要。这里要注意的是,采样频率的控制。我这边的计算都是在中断中进行的,这就要保证进入中断的时间要和你收到位置更新数据的时间保持一致。一开始我进入中断的频率过快,数据一致没变,那么derror1基本是0,得到的结果基本是靠P调节,根本没有实行负反馈。

最后设定80ms进一次中断进行运算

这个介绍的是最基本的PID算法,还有增量,串环等。这东西确实要自己亲手写一遍,走过一遍才能准确把握到这个算法,光看不实践确实效果不是很好会。

13年的倒立板模型

感谢大家的阅读,希望大家点赞关注,我会发些通信电子方面的科普性内容,大家一起互相学习。好好学习,天天向上。新手上路,多多包涵。

 

 

电子控制经典不衰的算法——PID,附上国电赛的核心程序和建议http://t.bytedance.com/Norx9g/

转载请注明:徐自远的乱七八糟小站 » 电子控制经典不衰的算法——PID,附上国电赛的核心程序和建议

喜欢 (0)

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号