我正在尝试在Arduino Leonardo上实现基本的PID算法,以使用伺服控制阀将冷热水混合。目的是使温度尽可能接近设定值。尤其重要的是防止输出温度超过设定值,以保护用户免遭灼伤。其次重要的是尽快使温度接近设定点。
对于较小的温度变化,PID算法的标准实现似乎可以正常工作。但是我不知道如何解决在等待热水到达阀门时可能出现的长时间延迟,因为这些延迟比更改阀门位置后的标准延迟长得多。
显然,取决于热水管线的长度和自上次使用热水以来的时间,热水到达阀门需要花费数十秒的时间,因此在此期间,水温在低温下保持相当恒定热水阀很快就会打开100%。积分分量开始累积较大的误差值。
当热水最终到达阀门时,检测到的温度会迅速上升到最高热水温度。由于较大的积分误差,温度超过设定值后,由于等待积分值降低到正常水平,热水阀长时间保持在100%。因此,结果是几秒钟(数十秒)的最高温度水。
我不确定如何解决这种可能的长时间延迟。在这种情况下,为了限制最大响应时间,在积分误差值上设置一个上限(和下限)是否明智?这似乎无法达到积分部分的目的,并且在达到设定值后仍会出现一定的滞后。
还是有更好的方法来处理长时间的延迟后快速的输入变化?
感谢您的任何建议!