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.

  • p to wzmocnienie członu proporcjonalnego (Kp).

  • i to wzmocnienie członu całkującego (Ki).

  • d to wzmocnienie członu różniczkującego (Kd).

  • imax to 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.

  • error to bieżący błąd (zazwyczaj target - measurement).

  • scaler to 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łanie PID.get_pid() ponownie zainicjalizowało filtr różniczkujący.