Модуль IV·Статья II·~4 мин чтения

ПИД-управление и синтез регуляторов

Линейное управление и устойчивость

Превратить статью в подкаст

Выберите голоса, формат и длину — AI запишет аудио

ПИД-управление и синтез регуляторов

ПИД-регулятор — самый распространённый промышленный регулятор: по разным оценкам, более 90% контуров регулирования в индустрии используют ПИД или его модификации. Он прост, требует минимальных знаний о модели объекта, и при правильной настройке обеспечивает приемлемое качество для большинства задач. Понимание ПИД и методов его синтеза — базовый навык инженера по автоматизации.

Структура ПИД-регулятора

Уравнение: u(t) = K_P·e(t) + K_I·∫₀^t e(τ) dτ + K_D·de(t)/dt,

где e(t) = r(t) − y(t) — ошибка слежения (разность между уставкой r и фактическим выходом y), а K_P, K_I, K_D — коэффициенты регулятора.

Три составляющие — три «характера»:

  • Пропорциональная (P). u_P = K_P·e. Чем больше отклонение, тем сильнее реакция. Снижает установившуюся ошибку, но не устраняет её полностью (всегда остаётся «статическая ошибка»). Большой K_P → быстрая реакция, но возможно перерегулирование и потеря устойчивости.

  • Интегральная (I). u_I = K_I·∫e dτ. «Помнит» накопленную ошибку → устраняет статическую ошибку (даже при малом постоянном e интеграл накапливается, пока u не достигнет нужного уровня). Риск integral windup: при ограничении на u (например, u ≤ u_max) интеграл может неконтролируемо расти, давая большой выброс при разгрузке.

  • Дифференциальная (D). u_D = K_D·ė. Реагирует на скорость изменения ошибки → уменьшает перерегулирование, добавляет «демпфирование». Чувствительна к шуму измерений (производная шума огромна). Часто используется фильтрованная производная: u_D = K_D·s/(τ_f·s + 1)·e.

Синтез ПИД: эмпирические методы

Метод Зиглера-Никольса (1942), вариант 1 — реакция на ступеньку.

  1. Подайте u(t) = 1 (ступенька), запишите y(t).
  2. По графику оцените L (запаздывание — время до начала реакции) и T (постоянная времени — время до 63% установившегося значения).
  3. Установите: K_P = 1.2·T/L, T_I = 2·L (T_I = K_P/K_I), T_D = 0.5·L (T_D = K_D/K_P).

Метод Зиглера-Никольса, вариант 2 — предельный цикл.

  1. Установите K_I = K_D = 0, увеличивайте K_P до тех пор, пока система не войдёт в незатухающие колебания.
  2. Запомните K_cr (критическое усиление) и T_cr (период колебаний).
  3. Для ПИД: K_P = 0.6·K_cr, T_I = 0.5·T_cr, T_D = 0.125·T_cr.

Метод даёт «грубую» настройку с перерегулированием 10-25%. Для лучшего качества используют Cohen-Coon, IMC (Internal Model Control), λ-tuning.

Передаточные функции

Преобразование Лапласа превращает дифференциальные уравнения в алгебраические. Для LTI-системы:

Y(s) = G(s)·U(s), G(s) = C·(s·I − A)⁻¹·B + D — передаточная функция.

Для двойного интегратора G(s) = 1/s². Для апериодического звена первого порядка G(s) = K/(τ·s + 1).

ПИД в s-области: G_PID(s) = K_P + K_I/s + K_D·s = (K_D·s² + K_P·s + K_I)/s.

Синтез в частотной области

Цель: обеспечить устойчивый замкнутый контур с заданными запасами:

  • Phase Margin (PM, фазовый запас) ≥ 45° — допустимое изменение фазы до потери устойчивости.
  • Gain Margin (GM, запас усиления) ≥ 6 дБ (фактор 2) — допустимое изменение усиления.
  • Bandwidth (полоса пропускания) — частота, на которой |G_замкнутая| = −3 дБ.

Диаграмма Боде: Графики |G(jω)| и arg G(jω). Позволяют визуально найти запасы устойчивости и определить, как менять K_P, K_I, K_D.

В MATLAB/Python пакеты Control Toolbox, python-control автоматизируют процесс: pid(K_P, K_I, K_D), bode(G), margin(G), pidTuner.

Численный пример: ПИД для G(s) = 1/(s·(s+1)·(s+5))

Объект интегрирующего типа третьего порядка.

Метод предельного цикла. Подбираем K_P, при котором система на границе устойчивости. Подставляя s = jω в характеристическое уравнение 1 + K_cr/(jω·(jω+1)·(jω+5)) = 0: ω_cr = √5 ≈ 2.236, K_cr = 30.

Зиглер-Никольс: K_P = 0.6·30 = 18, T_I = 0.5·(2π/ω_cr) = 1.405 → K_I = K_P/T_I ≈ 12.81. T_D = 0.125·(2π/ω_cr) = 0.351 → K_D = K_P·T_D ≈ 6.32.

Симуляция (Python control): на ступеньку r(t) = 1 — время установления ~3 с, перерегулирование ~25%, статическая ошибка 0. Дальнейшая ручная настройка (снижение K_D, увеличение T_I) даёт перерегулирование 10%.

Анти-windup и практические трюки

Clamping: при насыщении u (u > u_max) останавливаем интегрирование e. Back-calculation: скорректировать интеграл на (u_сатур − u_расчётное)/T_t. Bumpless transfer: при переключении между ручным и автоматическим режимами интеграл инициализируется так, чтобы u не «подскочило».

Реальные применения

  • Промышленная автоматизация. Регуляторы температуры в печах (плавление стали, обжиг керамики), давления (компрессоры, насосы), уровня (резервуары, котлы) — почти всегда ПИД. Stratегия настройки: «80% задач решаются ПИ, 15% — ПИД, 5% требуют MPC или адаптивного управления».
  • Бытовая техника. Терморегуляторы холодильников, утюгов, мультиварок — упрощённые ПИ. Современные котлы (Vaillant, Buderus) — ПИД с адаптивной настройкой.
  • Аэрокосмическая. Внутренние контуры автопилота самолёта (поддержание тангажа, крена, рыскания) — каскадные ПИД. Внешние контуры (траектория, высота) — более сложные регуляторы поверх ПИД.
  • Робототехника. Управление каждым суставом манипулятора — ПИД (часто с feedforward-членом для компенсации гравитации). Уровень: 1 ПИД на сустав, 5-7 суставов на руку — итого 5-7 параллельных ПИД.

Задание. Объект управления: G(s) = 1/(s·(s+1)·(s+5)). (а) В Python (python-control или scipy) постройте диаграмму Боде. (б) Методом предельного цикла найдите K_cr, ω_cr. Настройте ПИД по Зиглеру-Никольсу. (в) Симулируйте отклик на единичную ступеньку r(t) = 1. Оцените: время установления (5%), перерегулирование, статическую ошибку. (г) Подстройте K_P, K_I, K_D вручную для достижения перерегулирования < 10% при минимальном времени установления. (д) Сравните с MATLAB pidTuner или вашим аналогом — какие параметры выдаёт автоматический тюнер?

§ Акт · что дальше