pid — Arányos-integráló-deriváló szabályozó¶
A pid modul egy egyszerű arányos-integráló-deriváló (PID) szabályozó osztályt biztosít, deriváló aluláteresztő szűréssel és integrátor-telítődés (windup) korlátozással.
Példa:
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)¶
PID-szabályozó létrehozása.
A
paz arányos erősítés (Kp).Az
iaz integráló erősítés (Ki).A
da deriváló erősítés (Kd).Az
imaxaz az abszolút maximális érték, amelyre az integrátor tagja korlátozódik (anti-windup korlát). Az integrátor kimenete a[-abs(imax), +abs(imax)]tartományra van korlátozva.
A deriváló tagot egy rögzített, elsőrendű aluláteresztő szűrő szűri, amelynek levágási frekvenciája 20 Hz.
- get_pid(error: float, scaler: float) float¶
Kiszámítja és visszaadja a PID-szabályozó kimenetét az adott
errorértékhez.Az
erroraz aktuális hiba (jellemzőentarget - measurement).A
scaleregy multiplikatív skálázótényező, amelyet az arányos + deriváló összegre és az integrátor növekményére alkalmaz.
Az egymást követő hívások közötti időkülönbséget belsőleg a
time.ticks_ms()segítségével méri. Ha a hívások között több mint 1000 ms telik el (vagy az első hívásnál), az integrátor aPID.reset_I()segítségével visszaáll, és az időkülönbséget az adott lépésnél nullának tekinti.A PID kimenetét
floatértékként adja vissza.
- reset_I() None¶
Visszaállítja az integrátor állapotát. Nullára törli a felhalmozott integráló tagot, és törli a gyorsítótárazott deriváló értéket (
NaNértékre állítja), így aPID.get_pid()következő hívása újrainicializálja a deriváló szűrőt.