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.
pest le gain proportionnel (Kp).iest le gain intégral (Ki).dest le gain dérivé (Kd).imaxest 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
errordonnée.errorest l’erreur actuelle (généralementtarget - measurement).scalerest 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é viaPID.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é.