Настройка коэффициентов и перерегулирование
Одни и те же три коэффициента могут дать и плавный выход, и яростные колебания. Учимся их подбирать.
Перерегулирование (overshoot) — превышение выходом уставки перед тем, как он на ней установится; ключевой показатель качества переходного процесса.
Настройка ПИД — компромисс между скоростью и плавностью. Качественные эффекты коэффициентов:
| Увеличить | Эффект |
| $K_p$ | быстрее реакция, но больше перерегулирование и колебания |
| $K_i$ | убирает остаточную ошибку, но замедляет и может раскачать |
| $K_d$ | гасит колебания и перерегулирование, но усиливает шум |
Сравним две настройки
Возьмём систему «масса» (двойной интегратор) и сравним «агрессивный» П-регулятор (большой $K_p$, нет $D$) против сбалансированного ПД. Считаем максимальное значение $y$ — индикатор перерегулирования.
def simulate(Kp, Kd, steps=60):
sp = 1.0
y, v, prev = 0.0, 0.0, 1.0
dt = 0.05
ymax = 0.0
for _ in range(steps):
e = sp - y
deriv = (e - prev) / dt
u = Kp*e + Kd*deriv
v += u * dt # масса: ускорение = u
y += v * dt
prev = e
ymax = max(ymax, y)
return round(y, 3), round(ymax, 3)
y1, peak1 = simulate(Kp=5.0, Kd=0.0) # только P, агрессивно
y2, peak2 = simulate(Kp=5.0, Kd=3.0) # P + D, демпфировано
print("только P: итог y =", y1, " пик =", peak1)
print("P + D: итог y =", y2, " пик =", peak2)Вывод:
только P: итог y = 0.114 пик = 2.0 P + D: итог y = 1.004 пик = 1.047
Чистый П-регулятор без демпфирования раскачивает массу — пик $2.0$ (100% перерегулирования), и система не успокаивается, болтаясь вокруг уставки. Добавление $D$ гасит колебания: пик всего $1.047$, выход аккуратно встаёт на $\approx 1.0$.
Как работает под капотом
Для «массы» (нет естественного трения) пропорциональный регулятор ведёт себя как пружина без амортизатора — система превращается в незатухающий осциллятор. Дифференциальный член добавляет «вязкое трение», пропорциональное скорости ошибки, и колебания затухают. Это иллюстрирует, почему для инерционных приводов $D$-член часто обязателен.
Правила настройки
- Начни с $K_i = K_d = 0$, поднимай $K_p$ до появления лёгких колебаний.
- Добавь $K_d$, чтобы погасить перерегулирование.
- Введи $K_i$, чтобы убрать остаточную ошибку, — небольшим, иначе раскачает.
- Есть и формальные методы (Циглера-Никольса), но «вручную» по этим шагам работает в большинстве учебных задач.
Частые ошибки
- Гнаться за скоростью большим $K_p$ — получишь звон и перерегулирование.
- Ставить большой $K_d$ при шумном датчике — управление задёргается.
- Настраивать на одной рабочей точке и ждать, что подойдёт везде (нелинейные системы).
Итог
- Перерегулирование — превышение уставки в переходном процессе.
- $K_p$ ускоряет, но раскачивает; $K_d$ демпфирует; $K_i$ убирает статическую ошибку.
- Для инерционных систем $D$-член часто необходим, иначе незатухающие колебания.
- Настройка — пошаговый компромисс между быстротой и устойчивостью.