看完你就懂的PID算法

PID算法简介

PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。顾名思义,PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。PID算法已经有105年的历史了,它在很多地方都有它的应用,如汽车的定速巡航、3D打印机的温湿度控制器、自平衡小车、四旋翼等等。PID控制的实质就是根据输入的偏差值,按照比例、积分、微分的函数关系进行运算,运算结果用以控制输出
连续控制系统的理想PID控制规律为:在这里插入图片描述
Kp——比例增益,Kp与比例度成倒数关系;

Tt——积分时间常数;

TD——微分时间常数;

为什么要使用PID(生活实例)

假设有一个水池,我们要给它加水到一定的高度并且保持不变。每次让人去加水并测试距离要保持高度差多少,通过比例来控制是一定可以完成的。但是一旦出现水池漏水的情况。一边加水一边漏水,当加水的速度与漏水的速度恰好相等时,那么就会存在一个液位差!那么就会导致控制系统中会一直存在一个静态误差。(当漏水的速度为1cm/s时,而补偿系统用误差(err)乘以Kp时也刚好等于1cm/s的速度往里面补水)就会导致刚补进去的水就会漏掉。就会导致始终有一段固定的误差没有进行弥补,所以我们就需要一个输出系统检测,然后通过检测来弥补这个误差
在这里插入图片描述

比例控制算法

还是用生活中实际的实例来举例说明吧!比如我想稳定一壶水的温度为50度,水温低于50度就加热,水温低于50度就降温,水温接近就轻轻加热,水温差值大就努力加热。这就是Kp的作用保持偏差与比例的一个调节
假设水的初始温度为5摄氏度,目标温度为50摄氏度。那么当前时刻的温度和目标温度存在一个误差error,且error为45时,此时通过加热来控制水温。如果单纯的用比例控制算法,就是指升高的温度T和误差error是成正比的。即
T=kperror
假设kp取0.6,
那么t=1时(表示第1次升温,也就是第一次对系统施加控制),那么T=0.6
45=27,所以这一次升高的温度会使水温在5的基础上上升27,达到32。
接着,t=2时刻(第2次施加控制),当前水温为32,所以error是28。u=28*0.4=11.2,会使水位再次上升11.2,达到43.2。
如此循环下去就会发现水温可以近似到达50度,但是多多少少会有一些误差,不能刚刚好到大50度。

微分控制算法

还是水温加热的例子,当要保持水温为50度的时候不管是加热还是降温都不能直接刚刚好达到50度,温度会在50度上下晃晃悠悠的一个小范围的摆动。我们就需要另一个量KD这种摆动更加平缓。也就是如果P让车开的太快,D就要让P尽快的刹车。
微分,说白了在离散情况下,就是error的差值,就是t时刻和t-1时刻error的差,即T=kd*(error(t)-error(t-1)),其中的kd是一个系数项。可以看到,在刹车过程中,因为error是越来越小的,所以这个微分控制项一定是负数,在控制中加入一个负数项,他存在的作用就是为了防止汽车由于刹车不及时而闯过了线。从常识上可以理解,越是靠近停车线,越是应该注意踩刹车,不能让车过线,所以这个微分项的作用,就可以理解为刹车,当车离停车线很近并且车速还很快时,这个微分项的绝对值(实际上是一个负数)就会很大,从而表示应该用力踩刹车才能让车停下来。
那么切换到刚才水加温的例子,就是水温快要接近50度时加入微分项,可以避免水温超过50度,说白了就是让这种波动更加平缓。

积分控制算法

依旧拿水加温的例子,P在加温但是外界的环境散热很快,P觉得自己很快就到50度了就一直在这个缓慢的加热,D也看到P比较稳定也就不动作啦,但是这个时候水是永远加热不到50度的(存在偏差)。那么这个时候就需要增加功率,也就需要一个KI的值设置一个积分量只要现有的值和目标值有偏差就不断的对偏差进行积分的累加。这样随着时间的推移系统就知道自己没有达到目标的温度,这时候就应该增加功率最后总是能够达到目标的。所以 I 的作用就是减小静态误差,让受控物体更接近目标值
还是用上面的例子,如果仅仅用比例和微分,可以发现存在暂态误差,最后的水温就卡在43.2摄氏度了。于是,在控制中,我们再引入一个分量,该分量和误差的积分是正比关系。所以,比例+积分控制算法为:
T=kp*error+ ki∗∫∫error
还是用上面的例子来说明,第一次的误差error是45,第二次的误差是28,至此,误差的积分(离散情况下积分其实就是做累加),∫∫error=45+28=73。 这个时候的控制量,除了比例的那一部分,还有一部分就是一个系数ki乘以这个积分项。由于这个积分项会将前面若干次的误差进行累计,所以可以很好的消除稳态误差(假设在仅有比例项的情况下,系统卡在稳态误差了,即上例中的43.2,由于加入了积分项的存在,会让输入增大,从而使得水温可以大于43.2,渐渐到达目标的50)
讲到这里,相信大家对PID有了一定的理解,剩下的就是实践了。在真正的工程实践中,最难就是是如何确定三个项的系数,这就需要大量的实验以及经验来决定了。通过不断的尝试和不断的思考,才能得到合适的系数,实现优良的控制器。同时借鉴了另一位博主的文章(链接)希望对大家有帮助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章