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 (vanligtvistarget - 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 viaPID.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 tillPID.get_pid()återinitierar deriverandefiltret.