增量型PID算法的温控器验证(excel表格)
增量型PID算法的温控器验证(excel表格)
增量型pid的最简单、准确理解,参考链接: 【转载】啥是PID?PID有什么用?PID可以让你控制你想控制的东西!.
班门弄斧讲PID
简单点写就是:
U(k) = U(k-1)+Kp*(E[k]-E[k-1])+KiE[k]+Kd(E[k]-2E[k-1]+E[k-2])
即:
1)本次的输出 = 上次输出+pid的计算值;
2)Ek = k时,实际采集值和目标值之间的误差
3)比例变换P:对k次和k-1次的误差做减法,再进行比例变换。即,看上次输出U(k-1)的效果导致误差变大还是变小,从而影响本次的Uk输出;
4)微分变换D:(E[k]-2E[k-1]+E[k-2])是----->>>>k次和k-1次的误差做减法,加上,k-1次和k-2次的误差做减法,可以看作2次误差的误差----- 误差的误差E[k]-E[k-1]和E[k-1]-E[k-2])-------做了减法,如何理解呢:
以温控器为例:
从0度加热到100度,采集5次的温度分别为:
当前温度 | Ek | Ek-1 | Ek-2 | Kd的乘数 |
---|---|---|---|---|
0 | 100 | 0 | 0 | 100 |
10 | 90 | 100 | 0 | -110 |
30 | 70 | 90 | 100 | -10 |
60 | 40 | 70 | 90 | 10 |
从4次测量看,Kd在0度和60度时,提高了当次Uk的输出(Kd为正数),而10和30度时,降低了Uk的输出。
Kd是阻尼系数,也就是说阻碍Uk的剧烈变化,0度时,Uk的输出特别大,所以在10度时,Kd要求Uk小一点。
其中,当Ek很小时,也就是说测量值和目标值差距小的时候,阻尼效果就很小了,所以不会对输出造成影响。
5)积分变换I:很好理解,Ki*E[k],也就是说,只要Ek不为0,就提高Uk,如果Ek为负数,就降低Uk
6)Kp,Ki,Kd三个系数都为正数,输出的高低靠Ek的正负来调节。
温控实例
约定:
项目 | 数值 | 备注 |
---|---|---|
当前温度 | 0 | |
目标温度 | 100 | |
单位体积的水每单位时间每100火力,增加的温度 | 10 | |
单位体积的水每单位时间温度下降 | -1 | 不加热就会降温 |
输出火力最大值 | 1000 | 炉子也是有底限的 |
输出火力最小值 | 0 | 炉子不是冷冻机 |
图标样式如下
比例变换P
最高温度89度
最高温度96度
积分变换I
最终到100度了,就是过冲有点厉害
基本不冲动了,第58行,冲到了100度。
速度太慢,p加到2,i加到0.02,36行就冲到100了。
微分变换D
从上图看,达到100度后,实际的Kd乘数已经很小了,所以,在本例种,对最后的输出或最后的平衡影响不大。