pid — Regulator proporcjonalno-całkująco-różniczkujący¶
Moduł pid udostępnia prostą klasę regulatora proporcjonalno-całkująco-różniczkującego (PID) z dolnoprzepustowym filtrowaniem członu różniczkującego i ograniczaniem nasycenia członu całkującego (anti-windup).
Przykład:
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)¶
Tworzy regulator PID.
pto wzmocnienie członu proporcjonalnego (Kp).ito wzmocnienie członu całkującego (Ki).dto wzmocnienie członu różniczkującego (Kd).imaxto bezwzględna maksymalna wartość, do której ograniczany jest człon całkujący (limit anti-windup). Wyjście członu całkującego jest ograniczone do zakresu[-abs(imax), +abs(imax)].
Człon różniczkujący jest filtrowany przez stały dolnoprzepustowy filtr pierwszego rzędu o częstotliwości odcięcia 20 Hz.
- get_pid(error: float, scaler: float) float¶
Oblicza i zwraca wyjście regulatora PID dla podanego błędu
error.errorto bieżący błąd (zazwyczajtarget - measurement).scalerto mnożnikowy współczynnik skalowania stosowany do sumy członów proporcjonalnego i różniczkującego oraz do przyrostu członu całkującego.
Różnica czasu między kolejnymi wywołaniami jest mierzona wewnętrznie za pomocą
time.ticks_ms(). Jeśli między wywołaniami upłynie więcej niż 1000 ms (lub przy pierwszym wywołaniu), człon całkujący jest resetowany za pomocąPID.reset_I(), a różnica czasu jest traktowana jako zero dla tego kroku.Zwraca wyjście PID jako
float.
- reset_I() None¶
Resetuje stan członu całkującego. Zeruje zakumulowany człon całkowy i czyści zbuforowaną wartość różniczkową (ustawia ją na
NaN), tak aby kolejne wywołaniePID.get_pid()ponownie zainicjalizowało filtr różniczkujący.