pid — Proportional-Integral-Derivativ-Regler¶
Das Modul pid stellt eine einfache Klasse für einen Proportional-Integral-Derivativ-Regler (PID) mit Tiefpassfilterung des Differenzialterms und Begrenzung des Integrator-Windups bereit.
Beispiel:
from pid import PID
pid1 = PID(p=0.07, i=0, imax=90)
while True:
error = 50 # error should be calculated as: target - measure
output = pid1.get_pid(error, 1)
# control value with output
class PID¶
- class pid.PID(p: float = 0, i: float = 0, d: float = 0, imax: float = 0)¶
Erstellt einen PID-Regler.
pist die Proportionalverstärkung (Kp).iist die Integralverstärkung (Ki).dist die Differenzialverstärkung (Kd).imaxist der absolute Maximalwert, auf den der Integratorterm begrenzt wird (Anti-Windup-Grenze). Die Integratorausgabe wird auf den Bereich[-abs(imax), +abs(imax)]beschränkt.
Der Differenzialterm wird durch einen festen Tiefpassfilter erster Ordnung mit einer Grenzfrequenz von 20 Hz gefiltert.
- get_pid(error: float, scaler: float) float¶
Berechnet die Ausgabe des PID-Reglers für den angegebenen
errorund gibt sie zurück.errorist der aktuelle Fehler (typischerweisetarget - measurement).scalerist ein multiplikativer Skalierungsfaktor, der auf die Summe aus Proportional- und Differenzialanteil sowie auf das Integrator-Inkrement angewendet wird.
Die Zeitdifferenz zwischen aufeinanderfolgenden Aufrufen wird intern mit
time.ticks_ms()gemessen. Wenn zwischen zwei Aufrufen mehr als 1000 ms vergehen (oder beim ersten Aufruf), wird der Integrator überPID.reset_I()zurückgesetzt, und die Zeitdifferenz wird für diesen Schritt als null behandelt.Gibt die PID-Ausgabe als
floatzurück.
- reset_I() None¶
Setzt den Integratorzustand zurück. Löscht den akkumulierten Integralterm auf null und löscht den zwischengespeicherten Differenzialwert (auf
NaNgesetzt), sodass der nächste Aufruf vonPID.get_pid()den Differenzialfilter neu initialisiert.