由于本小白在学习增量式PID时,查询了许多资料,但对增量式PID三个算法始终理解的比较模糊,于是自己通过公式进行模拟,最终对PID三个参数有了一些自己的看法,下面我会通过对每一个参数进行分析,希望能够帮助初学增量式PID的小伙伴更好的理解.
目录
前言
由于大部分学习PID的同学最开始都是接触位置式PID,对于增量式PID的使用较少,本文通过自己增量式PID的理解,来分析一下位置式PID与增量式PID的区别和适用环境,在此声明一下本文仅以个人理解分析,如有错误还请指正.
一、什么是增量式PID?
1.通过之前对位置式PID的学习,我们知道主要PID的输出主要由P这个参数进行比例输出,I积分作为后面对静态误差的消除,而D是对系统速度的阻尼,防止过冲和超调的作用,由此可以看出位置式的PID达到稳定时需要一个误差通过P输出一个值或通过积分I来输出一个值供系统维持一个没有误差的状态(一般位置式使用在不需要一个输出值去维持一个稳定的状态的情况下,因为如果通过位置式PID要维持一个稳定的输出,它只能通过P和一个静态误差或I积分输出,这可能需要一个较大误差或积分,或加大P和I的参数值).
2.那么对于一个需要输出一个稳定值的系统我们还可以使用增量式PID算法,那么增量式PID算法是什么呢?我们可以理解为对一个输出量的调整,它的输出本身是一个变化值去对输出量的加减,与位置式不通,增量式不需要一个误差或误差积分去维持输出,因此当误差为0时增量式PID就输出为0了,它不在去增加或减少输出量,此时系统就维持在一个没有误差但有输出的情况(例如水温控制,需要一个持续输出来控制温度),因此,增量式PID对系统控制比较稳定,即使在一个控制系统中突然去掉PID它也会维持当时的输出继续进行,而位置式一旦去掉PID那就输出为0了,对于一些控制体系比较危险.
二、增量式PID三个参数的分析
1.P算法(KP*(errk-errk-1))
通过公式可以看出,这个值的输出是与本次误差和上一次误差决定的,也就是说当我误差保持不变它就不会输出,通过我对PID的模拟,我发现这个值有两种情况,一种是当误差改变时它会一直往一个方向改变,就像轻轻推一个静止的物体它会一直加速运动,这显然不是我们要的,那另一种则是它会一直维持一个误差,也就是说,当只有P算法时,它不会消除误差而是维持误差,例如一个误差为4,当你人为去改变误差为3时,那么P算法会去维持误差为4,也就是说P算法不是消除误差的而实是维持误差,与位置式不一样.但它的作用是与位置是一样,也就是增加反应,只不过它是增加维持误差的响应,也就是说当误差为2时,人为改变误差为1,而P维持误差为2的响应时间.
2.I算法(I*(errk))
通过公式可以看出,这个值与位置式PID的P是一样的,唯一区别在于它是一个累加的输出,也就是说在增量式PID中是通过这个值来减小误差从而靠近目标值,由于它是累加的,所以只要存在误差就会加大输出,因此增量式PID中不会有静态误差,但由于它是累加式的靠近目标值,所以一般这个I值不会太大还会受到P的影响因此它响应到目标值会比较慢,从而使得增量式PID适用于慢响应的系统.
3.D算法(D*(errk-errk-1-errk-2))
通过公式可以看出,这个D算法是对系统加速度的阻碍,也就是和位置式的D应该作用类似,只不过一个是对响应的速度作用,一个是对响应的加速度作用.
三、代码展示
代码如下(示例):
PID_out+=p*(errk-errk-1)+i*errk+d*(errk-2*errk-1+errk-2);
总结
本文根据自己对增量式PID的理解来分析,难免存在错误,若发现望告知以及时修正,还有对于不同的系统需根据实际需求来选择合适的PID算法进行控制.如果需要其他有关嵌入式的知识讲解,请评论区留言,知道的会以自己的方式进行讲解.