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.

  • p is de proportionele versterking (Kp).

  • i is de integrerende versterking (Ki).

  • d is de differentiërende versterking (Kd).

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

  • error is de huidige fout (gewoonlijk target - measurement).

  • scaler is 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 via PID.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 van PID.get_pid() het afgeleide filter opnieuw initialiseert.