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