Arduino Leonardoに基本的なPIDアルゴリズムを実装して、サーボ制御バルブを使用して温水と冷水を混合しようとしています。目標は、温度を可能な限り設定点に近づけることです。特に重要なのは、ユーザーを火傷から保護するために、出力温度が設定値をオーバーシュートしないようにすることです。第二に重要なことは、温度を可能な限り迅速に設定点に近づけることです。
温度のわずかな変化に対して、PIDアルゴリズムの標準的な実装は正常に機能するようです。しかし、お湯がバルブに到達するのを待つときに発生する可能性のある長い遅延を考慮する方法はわかりません。これらの遅延は、バルブ位置を変更した後の標準遅延よりもはるかに長いためです。
明らかに、温水ラインの長さと最後に温水を使用してからの時間に応じて、温水がバルブに到達するまでに数十秒かかることがあるため、この間、水温は低温でほぼ一定のままです温水バルブはすぐに100%開きます。積分成分は大きなエラー値を蓄積し始めます。
お湯が最終的にバルブに到達すると、検出された温度は非常に急速に上昇し、最大お湯温度になります。積分誤差が大きいため、温度が設定値を超えた後、積分値が通常レベルに低下するのを待つため、温水バルブは長時間100%に保持されます。したがって、結果は数秒(10秒間)の最高温度の水になります。
この可能性のある長い遅延を説明する方法がわかりません。そのような場合、最大応答時間を制限するために、積分誤差値の上限(および下限)を設定するのが賢明でしょうか?これは、積分コンポーネントの目的を無効にしているようであり、設定点に到達した後もまだいくらかの遅延を課します。
または、長い遅延後の高速入力変更を処理するより良い方法はありますか?
アドバイスをありがとう!