PID算法随笔
-
pid algorithm
PID是比例、积分、微分的简称,PID控制的难点不是编程,而是控制器的参数整定。
- sensor 采样序列:
x1、x2、x3 ... ... ... x[k-2]、x[k-1]、x[k]
1. 分析比例 P :
E[k] = Sv - x[k];
- E[k] > 0 : 未达标
- E[k] = 0 : 刚好达标
- E[k] < 0 : 超标
Pout = Kp * E[k] + C .............. 比例控制算法
C: 当E[k] = 0 时,为避免系统失控,需额外增加常数C
2. 分析积分 I :
- 历史偏差序列: E[k] = Sv - x[k]
E1, E2, E3 ... ... ... E[k-2], E[k-1], E[k]
S[k] = E1 + E2 + E3 ... ... ... E[k-2] + E[k-1] + E[k]
- S[k] > 0 : 过去这段时间里 多数未达标
- S[k] = 0 : 刚好达标
- S[k] < 0 : 过去这段时间里 多数超标
Iout = Kp * S[k] + C .............. 积分控制算法
3. 分析微分 D :
- 最近两次偏差相减: D[k] = E[k] - E[k-1]
- D[k] > 0 : 偏差有增加趋势
- D[k] = 0 :
- D[k] < 0 : 偏差正在减小
Dout = Kp * D[k] + C .............. 微分控制算法
注意:微分算法只是确定偏差有没有变化,而不是有没有偏差
-
位置式pid
T :sensor 采样有效值的周期,例如:50ms采样周期,T=50
Ti :积分时间, 消除稳态误差,提高控制精度;
主要用在系统接近稳定了以后,用来微调精确度,时间越长,精度越高。
根据实际情况选择,如温控选择3000-5000左右。
Td:微分时间,取值越小,提前预调的时间越短,如流量控制,一般取值几十至上百,
而温控一般取值几千不等
-
增量式pid
-
调试经验
开始调节Pid算法时,千万不要讲pid这三项全部加上一起调。要先调其中1项或者2项。例如先调P或者PD。
最后再加I(积分)。
- Kp选取经验:
一般,刚开始时,求稳一些,可以将Kp从0.1开始取,然后一点点累加上去调节。
Kp的值越大,越容易使系统振荡,并产生超调,但是Kp太小,调节速度又会很慢,所以需要多次试验,
并折中去一个合适的值。
- Td 选取经验
Td是微分系数,可以减小调整时间,从而改变系统的动态性能. 调微分时,一般建议是将P和D放在一起去调,Td值的意义是:提前多久进行预调节。 刚开始调,不确定值取多少时,可以先从小值一点点累加,例如先给10,然后给50,然后100,200,500,1000,2000这样去试。一般反应较快的系统,取值越小。而反应较慢的系统,取值就要很大。
只有时间滞后的系统才需要附加微分参数。如果画蛇添足加上这个参数反而会使系统的控制受到影响。
- Ti 选取经验
Ti 是积分系数, 它主要用来 消除稳态误差,提高控制精度。只要有足够的时间,积分控制将能完全消除误差,但积分作用太强会使系统超调加大,甚至使系统出现振荡。在系统控制到非常接近目标值时,才起作用。用来消除非常微小的误差。