本帖最后由 碧云天书 于 2013-2-12 17:00 编辑
McuPlayer 发表于 2012-9-10 09:17
PID最简单的变种----分段式PID
正在做PID温控程序,参考了楼主的贴。但是,发现PID程序似乎有点问题。
看楼主的程序,应该是独立积分式算法,该算法的核心算式如下
y(k) = Kp * e(k) + Ki * i(k) + Kd*(e(k) –e(k-1)) ,其中的 i(k) = i(k-1) + e(k)
详细推导过程可以参考https://bbs.21ic.com/icview-252576-1-1.html
5楼的程序段如下,前三行刚好就是独立积分式的算式。但是,第四行应该是多余的。
pid = kp * e0
pid = pid + ki * (e0 + e1 + e2 + e3)
pid = pid + kd * (e0 - e1)
out = out + pid ------ 是否是 y(k) = y(k-1) + pid 的意思?
如果我理解没有错误,加上第四行以后,算式就变成了 y(k) = y(k-1) + Kp*e(k) + Ki*i(k) + Kd*(e(k)-e(k-1))
这与增量式的PID算法形似,但算式中Kp、Ki和Kd的意义就完全不同了。
增量式PID算式为 y(k) = y(k-1) + Kp * (e(k) – e(k-1) +Ki*e(k) + Kd* (e(k) -2*e(k-1) +e(k-2))
可见,楼主程序中的kp实际上是PID算法中的Ki,kd实际上是Kp。
因此,在5楼图例中,添加kp(实际上是Ki)后,温度控制能够达到足够高的精度,这刚好与PID原理中提到的积分环节能够消除误差是一致的。
|