ПИД-регулятор на Python: от формулы до кода
Что такое ПИД
ПИД-регулятор (пропорционально-интегрально-дифференциальный) — основа большинства систем автоматического управления. Поддерживает заданное значение (уставку) несмотря на возмущения.
Формула: u(t) = Kp*e(t) + Ki*∫e(t)dt + Kd*de(t)/dt
Где e(t) — ошибка (разница между уставкой и текущим значением).
Реализация на Python
import time
class PIDController:
def __init__(self, kp, ki, kd, setpoint):
self.kp = kp
self.ki = ki
self.kd = kd
self.setpoint = setpoint
self._integral = 0
self._prev_error = 0
self._prev_time = time.time()
def compute(self, measured_value):
now = time.time()
dt = now - self._prev_time
if dt <= 0:
return 0
error = self.setpoint - measured_value
self._integral += error * dt
derivative = (error - self._prev_error) / dt
output = (self.kp * error +
self.ki * self._integral +
self.kd * derivative)
self._prev_error = error
self._prev_time = now
return output
Ограничение интегральной составляющей
Без ограничения интеграл может накопиться до огромных значений (integral windup). Добавляем clamp:
self._integral = max(-100, min(100, self._integral))
Подбор коэффициентов
Метод Циглера-Никольса: увеличивай Kp до появления устойчивых колебаний, запиши период Pu и критическое усиление Ku. Затем: Kp=0.6Ku, Ki=1.2Ku/Pu, Kd=0.075KuPu.
На практике чаще подбирают вручную: сначала P, потом I для устранения статической ошибки, D — только если нужно ускорить реакцию.