pid — Proportionele-integrerende-differentiërende regelaar¶
De pid module biedt een eenvoudige Proportionele-Integrerende-Differentiërende (PID) regelaarklasse met laagdoorlaatfiltering van de afgeleide term en begrenzing van de integrator-windup.
Voorbeeld:
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)¶
Construeert een PID-regelaar.
pis de proportionele versterking (Kp).iis de integrerende versterking (Ki).dis de differentiërende versterking (Kd).imaxis de absolute maximale waarde waartoe de integratorterm wordt begrensd (anti-windup-limiet). De integratoruitvoer wordt beperkt tot het bereik[-abs(imax), +abs(imax)].
De afgeleide term wordt gefilterd door een vast eerste-orde laagdoorlaatfilter met een kantelfrequentie van 20 Hz.
- get_pid(error: float, scaler: float) float¶
Berekent en retourneert de uitvoer van de PID-regelaar voor de opgegeven
error.erroris de huidige fout (gewoonlijktarget - measurement).scaleris een vermenigvuldigende schaalfactor die wordt toegepast op de som van de proportionele + afgeleide term en op de integrator-toename.
Het tijdsverschil tussen opeenvolgende aanroepen wordt intern gemeten met
time.ticks_ms(). Als er meer dan 1000 ms verstrijken tussen aanroepen (of bij de eerste aanroep), wordt de integrator gereset viaPID.reset_I()en wordt het tijdsverschil voor die stap als nul behandeld.Retourneert de PID-uitvoer als een
float.
- reset_I() None¶
Reset de toestand van de integrator. Wist de opgebouwde integraalterm naar nul en wist de in cache opgeslagen afgeleide waarde (ingesteld op
NaN) zodat de volgende aanroep vanPID.get_pid()het afgeleide filter opnieuw initialiseert.