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