pre
最近在准备做一些事的时候可能需要用到PID算法,所以今天下午基于网上的一些教程和博客写了一遍,在写的过程中遇到了一些疑惑和坑,这里分享一个整个过程和最后的成果,留作日后参考。
需求
场景: 锅炉调温
现在有一加热热水锅炉,我们需要他稳定提供70度的热水,当前室温25度,用来加热的水是温度为50度的温水。
锅炉的加热功率能够瞬时加热水到40度,同时功率可以调整,支持从0W到最高瓦数的瞬时切换(这里都是测试数据,不要带入现实)
水会自然散热,散热曲线符合二次曲线,假设曲线为 0.2 *( temperature - environment)^2
增量式PID算法
(这里只使用了增量式的PID,所以不讨论其他类型的PID)
PID算法设计三个变量,分别是偏差的比例(P)、积分(I)和微分(D)。增量式PID套用的公式为
u(k)=Kp * [e(k)-e(k-1)]+Ki * e(k)+Kd * [e(k)-2e(k-1)+e(k-2)]
下面是对上式中变量的解释
u(k): PID的阶段输出,预期dt下的增量,几何意义上是,拟合曲线在当前时间tk下的切线斜率
Kp : 从公式中看出是用来动态调节步伐的,(进小远大)
Ki : 当前偏差的缩放洗漱
Kd : 对前两项值得2次修正调整,使最后的曲线尽可能平滑。 也就是减少扰动