pid — Proportionell-Integrerande-Deriverande regulator

Modulen pid tillhandahåller en enkel klass för en Proportionell-Integrerande-Deriverande (PID) regulator med lågpassfiltrering av deriverandetermen och clampning mot integratormättnad (windup).

Exempel:

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)

Skapa en PID-regulator.

  • p är den proportionella förstärkningen (Kp).

  • i är den integrerande förstärkningen (Ki).

  • d är den deriverande förstärkningen (Kd).

  • imax är det absoluta maxvärde som integratortermen begränsas till (anti-windup-gräns). Integratorns utdata begränsas till intervallet [-abs(imax), +abs(imax)].

Deriverandetermen filtreras av ett fast lågpassfilter av första ordningen med en gränsfrekvens på 20 Hz.

get_pid(error: float, scaler: float) float

Beräkna och returnera PID-regulatorns utdata för det angivna error.

  • error är det aktuella felet (vanligtvis target - measurement).

  • scaler är en multiplikativ skalfaktor som tillämpas på summan av proportionell + deriverande term och på integratorns inkrement.

Tidsskillnaden mellan på varandra följande anrop mäts internt med time.ticks_ms(). Om mer än 1000 ms förflyter mellan anropen (eller vid det första anropet) nollställs integratorn via PID.reset_I() och tidsskillnaden behandlas som noll för det steget.

Returnerar PID-utdatan som en float.

reset_I() None

Nollställ integratorns tillstånd. Rensar den ackumulerade integraltermen till noll och rensar det cachade deriverandevärdet (sätts till NaN) så att nästa anrop till PID.get_pid() återinitierar deriverandefiltret.