pid — Controlador proporcional-integral-derivativo¶
El módulo pid proporciona una clase sencilla de controlador proporcional-integral-derivativo (PID) con filtrado paso bajo del término derivativo y limitación del efecto windup del integrador.
Ejemplo:
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)¶
Construye un controlador PID.
pes la ganancia proporcional (Kp).ies la ganancia integral (Ki).des la ganancia derivativa (Kd).imaxes el valor máximo absoluto al que se limita el término integrador (límite anti-windup). La salida del integrador queda acotada al rango[-abs(imax), +abs(imax)].
El término derivativo se filtra mediante un filtro paso bajo fijo de primer orden con una frecuencia de corte de 20 Hz.
- get_pid(error: float, scaler: float) float¶
Calcula y devuelve la salida del controlador PID para el
errordado.errores el error actual (normalmentetarget - measurement).scaleres un factor de escala multiplicativo aplicado a la suma proporcional + derivativa y al incremento del integrador.
El intervalo de tiempo entre llamadas sucesivas se mide internamente usando
time.ticks_ms(). Si transcurren más de 1000 ms entre llamadas (o en la primera llamada), el integrador se reinicia mediantePID.reset_I()y el intervalo de tiempo se trata como cero para ese paso.Devuelve la salida del PID como un
float.
- reset_I() None¶
Reinicia el estado del integrador. Pone a cero el término integral acumulado y borra el valor derivativo en caché (lo establece en
NaN) de modo que la siguiente llamada aPID.get_pid()reinicialice el filtro derivativo.