pid — Controlador Proporcional-Integral-Derivativo

O módulo pid fornece uma classe simples de controlador Proporcional-Integral-Derivativo (PID) com filtragem passa-baixo do termo derivativo e limitação de saturação 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-saturação). A saída do integrador é limitada ao intervalo [-abs(imax), +abs(imax)].

O termo derivativo é filtrado por um filtro passa-baixo fixo de primeira ordem com uma frequência de corte de 20 Hz.

get_pid(error: float, scaler: float) float

Calcula e devolve a saída do controlador PID para o error fornecido.

  • error é o erro atual (tipicamente target - measurement).

  • scaler é um fator de escala multiplicativo aplicado à soma proporcional + derivativa e ao incremento do integrador.

O delta de tempo entre chamadas sucessivas é medido internamente usando time.ticks_ms(). Se decorrerem mais de 1000 ms entre chamadas (ou na primeira chamada), o integrador é reiniciado via PID.reset_I() e o delta de tempo é tratado como zero nesse passo.

Devolve a saída do PID como um float.

reset_I() None

Reinicia o estado do integrador. Limpa o termo integral acumulado para zero e limpa o valor derivativo em cache (definido como NaN) de modo a que a próxima chamada a PID.get_pid() reinicialize o filtro derivativo.