Controlador PID
O PID implementa um controlador Proporcional-Integral-Derivativo discreto com saturação de saida e anti-windup por back-calculation.
Formula
O anti-windup corrige o integrador quando a saida satura:
Uso basico
from synapsys.algorithms import PID
pid = PID(
Kp=2.0,
Ki=0.5,
Kd=0.1,
dt=0.01,
u_min=-10.0,
u_max=10.0,
)
setpoint = 5.0
y = 0.0
for _ in range(1000):
u = pid.compute(setpoint=setpoint, measurement=y)
# ... aplica u na planta, le novo y ...
Anti-windup
Sem anti-windup, o integrador continua acumulando erro durante a saturação, causando integrator windup: atraso excessivo ao sair da saturação.
Com back-calculation, quando u satura, o integrador e corrigido na direção oposta:
pid_sem = PID(Kp=5.0, Ki=10.0, dt=0.01)
pid_com = PID(Kp=5.0, Ki=10.0, dt=0.01,
u_min=-1.0, u_max=1.0)
# pid_com converge muito mais rapido ao sair de uma saturacao prolongada
Reset do estado
pid.reset() # zera integrador e erro anterior
Útil em trocas de modo (manual para automatico) ou ao mudar o setpoint abruptamente.
Referência da API
Consulte a referência completa em synapsys.algorithms — PID.