pid — Controlador Proporcional-Integral-Derivativo¶
O módulo pid fornece uma classe simples de controlador Proporcional-Integral-Derivativo (PID) com filtragem passa-baixa do termo derivativo e limitação anti-windup do integrador.
Exemplo:
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)¶
Constrói um controlador PID.
pé o ganho proporcional (Kp).ié o ganho integral (Ki).dé o ganho derivativo (Kd).imaxé o valor máximo absoluto ao qual o termo integrador é limitado (limite anti-windup). A saída do integrador é restringida ao intervalo[-abs(imax), +abs(imax)].
O termo derivativo é filtrado por um filtro passa-baixa fixo de primeira ordem com uma frequência de corte de 20 Hz.
- get_pid(error: float, scaler: float) float¶
Calcula e retorna a saída do controlador PID para o
errorinformado.erroré o erro atual (normalmentetarget - measurement).scaleré um fator de escala multiplicativo aplicado à soma proporcional + derivativa e ao incremento do integrador.
O intervalo de tempo entre chamadas sucessivas é medido internamente usando
time.ticks_ms(). Se mais de 1000 ms decorrerem entre chamadas (ou na primeira chamada), o integrador é reiniciado por meio dePID.reset_I()e o intervalo de tempo é tratado como zero para esse passo.Retorna a saída do PID como um
float.
- reset_I() None¶
Reinicia o estado do integrador. Zera o termo integral acumulado e limpa o valor derivativo em cache (definido como
NaN) para que a próxima chamada aPID.get_pid()reinicialize o filtro derivativo.