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 p az arányos erősítés (Kp).

  • Az i az integráló erősítés (Ki).

  • A d a deriváló erősítés (Kd).

  • Az imax az 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 error az aktuális hiba (jellemzően target - measurement).

  • A scaler egy 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 a PID.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 a PID.get_pid() következő hívása újrainicializálja a deriváló szűrőt.