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() повторно ініціалізував фільтр похідної.