4-PID算法中D的作用的实验研究
在前面的学习中,我们知道了如果Kp比较大,则由于PWM调制点比较迟,导致加热时间比较久,进而产生较大的超调。而在很多工业设备中,过高的温度是不允许的。比如一些纸浆机,过高的温度会导致设备/模具损坏,所以超调的抑制非常重要。那怎么样才能抑制超调呢?
我们来分析一下加热棒被加热时的特点。
1.当测量温度小于目标温度时,无论是比例项还是积分项,它们对有效加热时间的贡献都是正的,所以叠加后会延长整体的加热时间并进而导致温升过快--当然,我们考虑的是加热大于散热的情况。
2.当测量温度大于目标温度时。比例项和积分项都是负的,对有效加热时间的贡献是负的。
由加热棒的加热特点可知,我们需要对测量温度小于目标温度时的情况进行重点关注。当测量温度小于目标温度时,我们需要在PID的输出中增加一个对温度增加敏感的项,温度增加快,它的值就大,温度增加小,它的值就小,而且它起的作用和比例项、积分项的作用相反,也就是说它对有效加热时间的贡献是负的。
那该选项应该是怎么样的呢?下面我们结合图1来分析。

图1中为单纯比例项作用时的情况。由图可见
①当时间从1增加到2时,温度增加4°。
②当时间从2增加到3时,温度增加8°。
③当时间从3增加到4时,温度增加10°。
可以看到时间从1到4时,温度增加越来越快,所以抑制项也要越来越强,也就是说新增加的抑制项应该与温度的变化率成正比,即具有如下关系:
Dout = Kd’ * ΔEk/Δt (1)
其中,Dout为抑制项的输出,Kd’为比例系数,ΔEk/Δt 为温度的变化率,(ΔEk = lastPv - Pv为前后相邻两次测量出的温度的差(温度的变化),Δt为前后两次测量的时间差)。lastPv为上一次测量出的温度,Pv为当前测量出来的温度。
因为
ΔEk = lastPv - Pv (2)
=( Sv - Pv) - (Sv - lastPv)
其中Sv-Pv为当前测量温度和目标温度之差。Sv - lastPv为上一次的测量温度和目标温度之差。所以ΔEk又可以写成
ΔEk =lastEk -Ek (3)
该公式就是当前各大教材、各大网站给出的温差变化的公式。不过在本教程中,我们直接使用公式(2)而不是公式(3)。
下面我们回到式(1)继续讨论,如下:
①从t = 1到t = 2时,Dout = Kd’ * (32 - 34) /1 = Kd’*(-2);
②从t = 2到t=3时,Dout = Kd’ * (34 - 42)/1 = Kd’ * (-8);
由于通常情况下Kd’都设置为正值,所以升温时Dout的结果是一个负值,它对整体输出的贡献与Kp、Ki的相反--也即会对温度的增加起到抑制效果。
实际上,式(1)可以做如下变化
Dout = Kd’ * ΔEk/Δt = Kd’ * dEk/dt (4)
由(4)式可以看到,这是一个微分方程,用于描述Dout变化趋势,所以Dout实际上就是微分项的输出,而Kd’为微分系数。
加入微分项后,PID的输出变为了式(5)的样子:
out = Kp * Ek + Ki * SEk + Kd *ΔEk (5)
其中,Kd = Kd’/dt为重新定义后的微分系数。由于微分项和温度的变化率相关,所以它只能阻碍而不能阻止温度的变化。
下面我们假设Kd = 300,然后来看一下微分项的抑制效果。其中Kp = 2, Ki = 0,先去掉积分效果。
先来看没有微分项时的结果,如图1所示。

下面是增加微分项后的结果。

由图2可以看到,增加微分项后,能够有效抑制超调。但是在温度反转的时候由于微分项会非常大,所以反转非常困难,这时候就需要积分项的累积去抵消掉这个大的反转,使得温度能够回到目标位置。如果没有积分项,结果很可能是曲线一直发散(换句话说,如果看到曲线发散,大概率是微分太大了)。
关于PID介绍的更多内容,我们将在近期正点原子平台的第三期教学给大家分享。在这一期的教学中,我们将推出自整定方法和PID模糊控制,关于PID的模糊控制,应该是全网第一个实战的项目,结果也不错。
如果大家有兴趣,可以关注公众号: O老师讲32
或者直接扫码添加
