Ich versuche, einen grundlegenden PID-Algorithmus auf einem Arduino Leonardo zu implementieren, um heißes und kaltes Leitungswasser mit servogesteuerten Ventilen zu mischen. Ziel ist es, die Temperatur so nahe wie möglich an einem Sollwert zu halten. Besonders wichtig ist es zu verhindern, dass die Ausgangstemperatur den Sollwert überschreitet, um den Benutzer vor Verbrennungen zu schützen. Zweitens ist es wichtig, die Temperatur so schnell wie möglich in die Nähe des Sollwerts zu bringen.
Bei kleinen Temperaturänderungen scheint eine Standardimplementierung des PID-Algorithmus in Ordnung zu sein. Ich weiß aber nicht, wie ich die langen Verzögerungen berücksichtigen soll, die auftreten können, wenn auf das Erreichen des Ventils mit heißem Wasser gewartet wird, da diese Verzögerungen nach dem Ändern der Ventilpositionen viel länger sind als die Standardverzögerungen.
Offensichtlich kann es abhängig von der Länge der Warmwasserleitung und der Zeit seit dem letzten Gebrauch des Warmwassers mehrere zehn Sekunden dauern, bis das Warmwasser das Ventil erreicht. Während dieser Zeit bleibt die Wassertemperatur bei einer niedrigen Temperatur ziemlich konstant und das Warmwasserventil öffnet bald 100%. Die Integralkomponente beginnt, einen großen Fehlerwert zu akkumulieren.
Wenn heißes Wasser schließlich das Ventil erreicht, steigt die erfasste Temperatur sehr schnell auf die maximale Heißwassertemperatur an. Aufgrund des großen Integralfehlers wird das Warmwasserventil für eine lange Zeit auf 100% gehalten, nachdem die Temperatur den Sollwert überschritten hat, da darauf gewartet wird, dass der Integralwert auf normale Werte reduziert wird. Das Ergebnis ist also Wasser mit maximaler Temperatur für einige (zehn) Sekunden.
Ich bin nicht sicher, wie ich diese möglicherweise lange Verzögerung erklären soll . Wäre es in einem solchen Fall sinnvoll, eine obere (und untere) Grenze für den Integralfehlerwert festzulegen, um die maximale Antwortzeit zu begrenzen? Dies scheint den Zweck der Integralkomponente außer Kraft zu setzen und würde auch nach Erreichen des Sollwerts noch eine gewisse Verzögerung verursachen.
Oder gibt es eine bessere Möglichkeit, schnelle Eingangsänderungen nach einer langen Verzögerung zu verarbeiten?
Danke für jeden Rat!