pid — Régulateur proportionnel-intégral-dérivé

Le module pid fournit une classe simple de régulateur proportionnel-intégral-dérivé (PID) avec filtrage passe-bas du terme dérivé et limitation de l’emballement de l’intégrateur.

Exemple

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)

Construit un régulateur PID.

  • p est le gain proportionnel (Kp).

  • i est le gain intégral (Ki).

  • d est le gain dérivé (Kd).

  • imax est la valeur absolue maximale à laquelle le terme intégrateur est limité (limite anti-emballement). La sortie de l’intégrateur est bornée à l’intervalle [-abs(imax), +abs(imax)].

Le terme dérivé est filtré par un filtre passe-bas du premier ordre fixe ayant une fréquence de coupure de 20 Hz.

get_pid(error: float, scaler: float) float

Calcule et renvoie la sortie du régulateur PID pour l’erreur error donnée.

  • error est l’erreur actuelle (généralement target - measurement).

  • scaler est un facteur d’échelle multiplicatif appliqué à la somme proportionnel + dérivé ainsi qu’à l’incrément de l’intégrateur.

L’écart temporel entre des appels successifs est mesuré en interne à l’aide de time.ticks_ms(). Si plus de 1000 ms s’écoulent entre deux appels (ou lors du premier appel), l’intégrateur est réinitialisé via PID.reset_I() et l’écart temporel est considéré comme nul pour cette étape.

Renvoie la sortie PID sous forme de float.

reset_I() None

Réinitialise l’état de l’intégrateur. Remet à zéro le terme intégral accumulé et efface la valeur dérivée mise en cache (réglée à NaN) afin que le prochain appel à PID.get_pid() réinitialise le filtre dérivé.