pid — Пропорційно-інтегрально-диференційний регулятор¶
Модуль pid надає простий клас пропорційно-інтегрально-диференційного (PID) регулятора з фільтрацією похідної нижніх частот та обмеженням насичення інтегратора.
Приклад:
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)¶
Створити PID-регулятор.
p— пропорційний коефіцієнт підсилення (Kp).i— інтегральний коефіцієнт підсилення (Ki).d— диференційний коефіцієнт підсилення (Kd).imax— абсолютне максимальне значення, до якого обмежується інтегральна складова (ліміт захисту від насичення). Вихід інтегратора обмежений діапазоном[-abs(imax), +abs(imax)].
Диференційна складова фільтрується фіксованим фільтром нижніх частот першого порядку з частотою зрізу 20 Гц.
- get_pid(error: float, scaler: float) float¶
Обчислити та повернути вихідне значення PID-регулятора для заданої похибки
error.error— поточна похибка (зазвичайtarget - measurement).scaler— мультиплікативний коефіцієнт масштабування, що застосовується до суми пропорційної та диференційної складових, а також до приросту інтегратора.
Часовий інтервал між послідовними викликами вимірюється внутрішньо за допомогою
time.ticks_ms(). Якщо між викликами минає більше 1000 мс (або при першому виклику), інтегратор скидається черезPID.reset_I(), а часовий інтервал вважається рівним нулю для цього кроку.Повертає вихідне значення PID-регулятора у вигляді
float.
- reset_I() None¶
Скинути стан інтегратора. Очищує накопичену інтегральну складову до нуля та очищує кешоване значення похідної (встановлює
NaN), щоб наступний викликPID.get_pid()повторно ініціалізував фільтр похідної.