欢迎光临散文网 会员登陆 & 注册

PID算法中比例项(P)的作用和比例参数的选择

2023-01-31 22:14 作者:O老师讲32  | 我要投稿

1.1 P的作用

在上一个实验中,我们设定的PWM的每个周期的加热时间是固定的,可以看到温度一直在上升,如图1所示。


图1 固定占空比下温度的变化(红色线)

如果我们设定某个目标温度,比如60°,然后使用一个固定占空比的PWM信号去加热加热块,要想让加热块的温度能够固定在60°是非常困难的。有效时间短,加热抵不住散热,这样温度到不了60°,加热超过散热,温度又会一直上升,超过60°。

那有没有办法让温度固定在60°呢?有的。那就是测量温度距离目标温度比较远的时候全速加热,在接近目标温度时,降低PWM信号的每个周期的有效时间(当然,这个有效时间增加的热量要超过散掉的热量),超过目标温度后不再加热。具体实现时,我们可以这样操作:

1. 温度小于目标温度时,我们让PWM的有效加热时间与目标温度-测量温度的差值正相关。

也即两者具有以下关系:

out = Kp*(Sv - Pv)       (1)

其中,out代表有效加热时间。对于前面实验的设置,它就是装入定时器的捕获/比较寄存器的值。Kp是比例系数,Sv代表目标温度,Pv代表测量温度。

 

比如,我们设定Kp =20,Sv = 60, PWM的周期为500ms(对应的计数器次数为1000)

①当Pv = 30时, out = 20 * (60 - 30) = 600,此时一个PWM周期内有60%的时间是有效加热时间。

②当Pv = 40时,out = 20 * (60 - 40) = 400,此时一个PWM周期内有40%的时间是有效加热时间。

③当Pv = 50时,out = 20*(60 - 50) = 200,此时一个PWM周期内有20%的时间是有效加热时间。

可以看到,随着加热时温度的增加,目标温度和测量温度的差值变小,造成每个PWM的有效加热时间逐渐减小,这样升温慢慢变慢,温度就可以稳定在60°了。

在上面的讨论中,我们还看到,如果目标温度比测量温度大太多,比如目标温度-测量温度 = 55°,则此时out的值超过1000。由于一个计数周期最多1000,所以此时最多取1000的值装入TIM->CCRx即可。


2.测量温度大于目标温度。此时应该将PWM的有效加热时间设置为0,停止加热。

下面我们来看这样一个实验。实验参数为:

PWM周期为500ms,目标温度 = 60°(当前环境温度约为18°C)。为了增加测量精度,我们将温度值增加10倍来考虑,相应的,Kp的值要减小10倍。现在我们取Kp = 2。以下是实验结果。

实验1

图2 Kp = 2时的实验结果图


由图2可以看到,稳定后,实际温度在目标温度附近震荡。

为了方便观看Kp的作用,我们给出了不同Kp时的实验结果图


实验2  Kp = 1

图3 Kp = 1时实验结果图(没有能够稳定在目标温度)


实验3 Kp = 5(超调严重)

            

实验4 Kp = 0.5(超调少,但是稳定后没有到达目标位置)

可以看到,Kp的值比较小时,加热不足以抵掉散热,所以稳定后的温度比目标温度小。而在Kp较大时,由于P的调节作用比较迟,加热时间相对较长,而温度具有很大的滞后性,停止加热后温度会继续飙升,所以会有超调现象(实际温度超过目标温度),而且Kp的值越大,超调就越严重。


1.2 Kp的选择

在实际的温度控制中,我们可能直接使用目标温度-测量温度来计算输出,也有可能增加10倍或者100倍来计算输出。那此时比例系数Kp的值如何取呢?

 

这个要看你想在测量温度达到什么温度时使能比例控制而定。下面我们举常见的2种情况来说明。

1.将目标温度和测量温度放大10倍来考虑。

 

①你想在距离目标温度有30°时使能比例控制。距离目标温度为30°才控制,意味着(Sv - 30°)是一个临界点,在这个临界点,out刚好等于1000---即还在全速加热。而当测量温度超过这个距离后,out就小于1000了,它的值将随着温度的升高越来越小。所以,在临界点有:

out = Kp * (Sv*10 - Pv*10)  ->  1000  = Kp * (Sv*10 - (Sv * 10 - 30*10 ))  -> Kp = 3.33

 

②你想在距离目标温度有40°时使能比例控制。距离目标温度为40°才控制,意味着(Sv -40°)是一个临界点,在这个临界点,out刚好等于1000---即还在全速加热。而当测量温度超过这个距离后,out就小于1000了,它的值将随着温度的升高越来越小。所以,在临界点有:

out = Kp * (Sv*10 - Pv*10)  ->  1000  = Kp * (Sv*10 - (Sv * 10 - 40*10 ))  -> Kp = 2.5

 

其它同理。

 

2.将目标温度和测量温度放大100倍来考虑。

①你想在距离目标温度有30°时使能比例控制。距离目标温度为30°才控制,意味着(Sv - 30°)是一个临界点,在这个临界点,out刚好等于1000---即还在全速加热。而当测量温度超过这个距离后,out就小于1000了,它的值将随着温度的升高越来越小。所以,在临界点有:

out = Kp * (Sv*100 -Pv*100) -> 1000 = Kp * (Sv*100 - (Sv * 100- 30*100 ))  -> Kp = 0.333

 

②你想在距离目标温度有40°时使能比例控制。距离目标温度为40°才控制,意味着(Sv -40°)是一个临界点,在这个临界点,out刚好等于1000---即还在全速加热。而当测量温度超过这个距离后,out就小于1000了,它的值将随着温度的升高越来越小。所以,在临界点有:

out = Kp * (Sv*100 - Pv*100)->1000  = Kp * (Sv*100 - (Sv * 100 - 40*100 ))  -> Kp = 0.25

其它同理。

由于温度具有很大的滞后性,所以距离目标温度为40°的点是一个关键点,我们可以先在这个点计算出Kp的值代入PID的公式去计算PID的输出,并观察结果,然后再根据具体结果来调节Kp。

关于PID介绍的更多内容,我们将在近期正点原子平台的第三期教学给大家分享。在这一期的教学中,我们将推出自整定方法和PID模糊控制,关于PID的模糊控制,应该是全网第一个实战的项目,结果精度非常非常高。

 

如果大家有兴趣,可以关注公众号:   O老师讲32 

或者直接扫码添加


PID算法中比例项(P)的作用和比例参数的选择的评论 (共 条)

分享到微博请遵守国家法律