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.

  • p je proporcionalno pojačanje (Kp).

  • i je integralno pojačanje (Ki).

  • d je derivacijsko pojačanje (Kd).

  • imax je 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.

  • error je trenutna pogreška (obično target - measurement).

  • scaler je 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 putem PID.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 poziv PID.get_pid() ponovno inicijalizira derivacijski filtar.