Модуль 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 — реакция на ступеньку.
- Подайте u(t) = 1 (ступенька), запишите y(t).
- По графику оцените L (запаздывание — время до начала реакции) и T (постоянная времени — время до 63% установившегося значения).
- Установите: 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 — предельный цикл.
- Установите K_I = K_D = 0, увеличивайте K_P до тех пор, пока система не войдёт в незатухающие колебания.
- Запомните K_cr (критическое усиление) и T_cr (период колебаний).
- Для ПИД: 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 или вашим аналогом — какие параметры выдаёт автоматический тюнер?
§ Акт · что дальше