pid — Proporcionalno-integralno-derivacijski regulator¶
Modul pid pruža jednostavnu klasu proporcionalno-integralno-derivacijskog (PID) regulatora s niskopropusnim filtriranjem derivacijskog člana i ograničavanjem zasićenja integratora.
Primjer:
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)¶
Konstruira PID regulator.
pje proporcionalno pojačanje (Kp).ije integralno pojačanje (Ki).dje derivacijsko pojačanje (Kd).imaxje apsolutna maksimalna vrijednost na koju se ograničava integralni član (granica protiv zasićenja). Izlaz integratora ograničen je na raspon[-abs(imax), +abs(imax)].
Derivacijski član filtrira se fiksnim niskopropusnim filtrom prvog reda s graničnom frekvencijom od 20 Hz.
- get_pid(error: float, scaler: float) float¶
Izračunava i vraća izlaz PID regulatora za zadani
error.errorje trenutna pogreška (običnotarget - measurement).scalerje multiplikativni faktor skaliranja koji se primjenjuje na zbroj proporcionalnog i derivacijskog člana te na prirast integratora.
Vremenska razlika između uzastopnih poziva mjeri se interno pomoću
time.ticks_ms(). Ako između poziva prođe više od 1000 ms (ili pri prvom pozivu), integrator se ponovno postavlja putemPID.reset_I(), a vremenska razlika za taj korak tretira se kao nula.Vraća PID izlaz kao
float.
- reset_I() None¶
Ponovno postavlja stanje integratora. Briše akumulirani integralni član na nulu i briše spremljenu derivacijsku vrijednost (postavljenu na
NaN) tako da sljedeći pozivPID.get_pid()ponovno inicijalizira derivacijski filtar.