pid — Proportional-Integral-Derivative-säädin

pid-moduuli tarjoaa yksinkertaisen Proportional-Integral-Derivative (PID) -säädinluokan, jossa on derivaattaosan alipäästösuodatus ja integraattorin saturaation rajoitus.

Esimerkki:

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)

Rakentaa PID-säätimen.

  • p on suhdevahvistus (Kp).

  • i on integraalivahvistus (Ki).

  • d on derivaattavahvistus (Kd).

  • imax on itseisarvoltaan suurin arvo, johon integraattoritermi rajataan (anti-windup-raja). Integraattorin ulostulo on rajattu väliin [-abs(imax), +abs(imax)].

Derivaattatermi suodatetaan kiinteällä ensimmäisen kertaluvun alipäästösuodattimella, jonka rajataajuus on 20 Hz.

get_pid(error: float, scaler: float) float

Laskee ja palauttaa PID-säätimen ulostulon annetulle virheelle error.

  • error on nykyinen virhe (tyypillisesti target - measurement).

  • scaler on kerroin, joka kohdistetaan suhde- ja derivaattatermin summaan sekä integraattorin lisäykseen.

Peräkkäisten kutsujen välinen aikaero mitataan sisäisesti funktiolla time.ticks_ms(). Jos kutsujen välillä kuluu yli 1000 ms (tai ensimmäisellä kutsulla), integraattori nollataan metodilla PID.reset_I() ja aikaero käsitellään kyseisellä askeleella nollana.

Palauttaa PID-ulostulon tyyppinä float.

reset_I() None

Nollaa integraattorin tilan. Tyhjentää kertyneen integraalitermin nollaan ja tyhjentää välimuistissa olevan derivaatta-arvon (asettaa arvoon NaN), jotta seuraava PID.get_pid()-kutsu alustaa derivaattasuodattimen uudelleen.