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.
pon suhdevahvistus (Kp).ion integraalivahvistus (Ki).don derivaattavahvistus (Kd).imaxon 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.erroron nykyinen virhe (tyypillisestitarget - measurement).scaleron 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 metodillaPID.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 seuraavaPID.get_pid()-kutsu alustaa derivaattasuodattimen uudelleen.