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.
pje proporcionální zisk (Kp).ije integrační zisk (Ki).dje derivační zisk (Kd).imaxje 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.errorje aktuální odchylka (typickytarget - measurement).scalerje 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.