pid — Proporcionálně-integračně-derivační regulátor

Modul pid poskytuje jednoduchou třídu proporcionálně-integračně-derivačního (PID) regulátoru s derivační dolní propustí a omezením přebuzení integrátoru (windup).

Příklad:

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)

Vytvoří PID regulátor.

  • p je proporcionální zisk (Kp).

  • i je integrační zisk (Ki).

  • d je derivační zisk (Kd).

  • imax je absolutní maximální hodnota, na kterou je omezen integrační člen (mez proti přebuzení). Výstup integrátoru je omezen na rozsah [-abs(imax), +abs(imax)].

Derivační člen je filtrován pevnou dolní propustí prvního řádu s mezní frekvencí 20 Hz.

get_pid(error: float, scaler: float) float

Vypočítá a vrátí výstup PID regulátoru pro danou error.

  • error je aktuální odchylka (typicky target - measurement).

  • scaler je multiplikativní měřítkový faktor aplikovaný na součet proporcionálního a derivačního členu a na přírůstek integrátoru.

Časový rozdíl mezi po sobě jdoucími voláními je měřen interně pomocí time.ticks_ms(). Pokud mezi voláními uplyne více než 1000 ms (nebo při prvním volání), integrátor je vynulován pomocí PID.reset_I() a časový rozdíl je pro tento krok považován za nulový.

Vrací výstup PID jako float.

reset_I() None

Vynuluje stav integrátoru. Vymaže nahromaděný integrační člen na nulu a vymaže uloženou derivační hodnotu (nastaví ji na NaN), takže další volání PID.get_pid() znovu inicializuje derivační filtr.