Ручная настройка и компромиссы коэффициентов

Как подобрать Kp, Ki, Kd: ручной метод и эксперименты на симуляции.

Настройка (tuning) ПИД — это подбор трёх коэффициентов под конкретный объект так, чтобы получить быстрый, точный и устойчивый отклик.

Зачем нужна настройка

Один и тот же ПИД с одними коэффициентами отлично управляет печью и разваливается на дроне — потому что у объектов разная динамика. Коэффициенты Kp, Ki, Kd нужно подбирать под объект. Плохая настройка — самая частая причина проблем на практике: система либо вялая, либо раскачивается, либо дико перерегулирует. Хорошая новость: есть проверенные стратегии, которые приводят к рабочей настройке за разумное число попыток.

Ручная настройка: пошаговый рецепт

Самый понятный подход — настраивать составляющие по очереди, наблюдая за откликом:

  1. Обнулите I и D. Увеличивайте Kp, пока система не станет достаточно быстрой, но ещё без сильных колебаний. Останется небольшая остаточная ошибка — это нормально.
  2. Добавьте I. Понемногу увеличивайте Ki, пока остаточная ошибка не исчезнет. Слишком большой Ki добавит перерегулирование и колебания — отступите.
  3. Добавьте D. Увеличивайте Kd, чтобы погасить перерегулирование и колебания. Слишком большой Kd сделает систему нервной к шуму — отступите.

Как работает под капотом: эксперимент с коэффициентами

Прогоним один объект с разными настройками и посмотрим на показатели. Это и есть «настройка на симуляции» — то, чем инженеры занимаются часами перед выкатом на железо.

def run(Kp, Ki, Kd):
    m, b, kc, dt = 1.0, 0.3, 4.0, 0.05
    sp, x, v = 1.0, 0.0, 0.0
    integral, prev = 0.0, sp
    peak, ys = 0.0, []
    for _ in range(600):
        e = sp - x
        integral += e*dt
        d = (e - prev)/dt; prev = e
        F = Kp*e + Ki*integral + Kd*d
        a = (F - b*v - kc*x)/m
        v += a*dt; x += v*dt
        ys.append(x); peak = max(peak, x)
    # время установления (коридор 2%)
    settle = 0.0
    for i in range(len(ys)-1, -1, -1):
        if abs(ys[i]-sp) > 0.02:
            settle = (i+1)*dt; break
    return (peak-1)*100, settle, sp-ys[-1]

print("настройка        перерег%  t_settle  стат.ошибка")
for name,(Kp,Ki,Kd) in [("только P    ",(6,0,0)),
                        ("PI          ",(6,2,0)),
                        ("PID мягкий  ",(6,2,3)),
                        ("PID жёсткий ",(12,2,3))]:
    o,s,e = run(Kp,Ki,Kd)
    print(f"{name}    {o:6.1f}   {s:6.2f}    {e:8.4f}")

Вывод:

настройка        перерег%  t_settle  стат.ошибка
только P          11.8    30.00      0.4035
PI                32.5    30.00      0.0442
PID мягкий        -0.1    13.80      0.0006
PID жёсткий       -0.5    19.25      0.0051

Таблица наглядно показывает компромиссы: чистый P оставляет ошибку, PI её убирает ценой перерегулирования, D гасит перерегулирование, а рост Kp ускоряет, но снова добавляет раскачки. Настройка — это поиск точки баланса в этом пространстве под требования задачи.

Компромиссы быстродействие/устойчивость/перерегулирование

Запомните три тяги, которые конкурируют. Быстродействие требует большого Kp. Устойчивость требует не задирать Kp и добавить Kd. Точность (ноль ошибки) требует Ki, но он же добавляет перерегулирование. Нельзя выкрутить всё на максимум — приходится выбирать. Для лифта приоритет — ноль перерегулирования; для дрона — скорость; для термостата — точность и спокойствие.

Влияние каждого коэффициента: памятка

Полезно держать в голове сводную таблицу эффектов, которую инженеры называют «эвристикой ПИД». Увеличение Kp: быстрее реакция, меньше статическая ошибка, но больше перерегулирование и ближе к неустойчивости. Увеличение Ki: устраняет статическую ошибку, но замедляет, добавляет перерегулирование и колебания. Увеличение Kd: гасит перерегулирование и улучшает устойчивость, но усиливает шум и при избытке тормозит реакцию. Важная оговорка: эти правила приблизительны и взаимозависимы — коэффициенты влияют друг на друга, и изменение одного может потребовать пересмотра остальных. Поэтому настройка — это итеративный танец, а не однократная подстановка; таблица задаёт направление, а финальные значения находятся экспериментом.

Частые ошибки

  • Крутить все три коэффициента одновременно. Невозможно понять, что на что влияет. Меняйте по одному.
  • Настраивать «на глаз» без метрик. Считайте перерегулирование и время установления численно — глаз обманывает.
  • Настроить на одном режиме. Объект может вести себя иначе при другой нагрузке; проверяйте на разных уставках и возмущениях.

Итоги

  • Настройка — подбор Kp, Ki, Kd под динамику конкретного объекта.
  • Ручной рецепт: сначала Kp (скорость), потом Ki (убрать ошибку), потом Kd (погасить раскачку).
  • Быстродействие, устойчивость и точность конкурируют — настройка всегда компромисс.
Проверьте себя
1. В каком порядке обычно ведут ручную настройку ПИД?
AСначала D, потом I, потом P
BСначала Kp (скорость), потом Ki (убрать ошибку), потом Kd (погасить раскачку)
CВсе три сразу
DТолько Ki
2. Что обычно даёт чрезмерный Ki?
AЗамедление системы
BПеререгулирование и колебания
CУсиление шума
DОстаточную ошибку
3. Почему нельзя одновременно максимизировать быстродействие, устойчивость и точность?
AИз-за ограничений датчика
BЭти цели конкурируют: большой Kp ускоряет, но раскачивает, Ki точен, но перерегулирует
CИз-за нехватки памяти
DМожно, если Kd очень большой