Интерактивный симуляторНачальный

Симулятор ПИД-регулятора (PID) для робототехники

Настраивайте пропорциональный, интегральный и производный коэффициенты, визуализируя отклик, ошибку, насыщение и возмущения в симуляторе ПИД-регулятора.

Категория
Системы управления
Время
60–120 min
Платформа
Браузер · Arduino
Техническая схема: Симулятор ПИД-регулятора (PID) для робототехникиRESPONSETIMESETPOINT

01 / Начните здесь

Введение

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

Live lab / Deterministic sampled control loop

PID controller simulator

Drive a second-order plant toward a setpoint. Tune each gain, inject a load, and watch response, error, and control effort in real time.

Browser native
This simulator plots a PID controller's response, error, and control effort over time. Use the controls below to run it, or read the full theory and algorithm after this lab.

Three stacked plots share a scrolling time axis: measured output against the setpoint line, tracking error around zero, and control effort inside the shaded actuator-limit band.

Simulation

Paused. Press Start or Step to begin.

Setpoint & timing
PID gains
Disturbance
Setpoint
1.00
Measured
0.000
Error
1.000
Control
0.000
Overshoot
0%
Steady-state error
1.000

Keyboard: focus the plots, then use Space to run/pause, N to step, R to reset, G to toggle the load, and F for full screen.

Управление

Симулятор предоставляет уставку, пропорциональный, интегральный и производный коэффициенты, интервал дискретизации, предел исполнительного механизма и величину возмущения. Согласованные графики показывают уставку, измеренный выход, ошибку и усилие управления. Сброс очищает память регулятора, чтобы эксперименты оставались сравнимыми.

Теория

Регулятор с обратной связью вычисляет ошибку как уставку минус измерение. Пропорциональное действие реагирует сразу, интегральное накапливает постоянную ошибку, а производное реагирует на скорость изменения. Их сумма становится командой исполнительному механизму.

Возможности регулятора ограничены объектом. Слишком медленная дискретизация скрывает движение; превышение предела исполнительного механизма приводит к насыщению; зашумлённые измерения делают нефильтрованную производную неустойчивой. Поэтому настройка — это эксперимент одновременно с регулятором и системой.

График переходного отклика, сравнивающий три настройки системы второго порядка. Кривая с большим коэффициентом перерегулирует уставку и колеблется до установления. Хорошо настроенная кривая быстро нарастает с небольшим перерегулированием и быстро устанавливается. Кривая с малым коэффициентом нарастает медленно и никогда не перерегулирует.
Демпфирование формирует переходный отклик: слишком большой коэффициент вызывает перерегулирование и звон, слишком малый даёт вялый отклик, а сбалансированная настройка быстро устанавливается. Скачать SVG

Алгоритм

  1. Считывайте измерение через фиксированный интервал и вычисляйте ошибку.
  2. Накапливайте ограниченный интеграл с использованием фактического шага времени.
  3. Оценивайте производную по измерению или ошибке и применяйте подходящую фильтрацию.
  4. Складывайте три взвешенных слагаемых и ограничивайте результат диапазоном исполнительного механизма.
  5. Применяйте команду, сохраняйте предыдущий отсчёт и записывайте метрики.
  6. Сбрасывайте интеграл и историю при существенном изменении режима управления или объекта.

Исходный код

В этой реализации есть простая защита от интегрального насыщения:

float updatePid(float setpoint, float measured, float dt) {
  const float error = setpoint - measured;
  const float derivative = (error - previousError) / dt;
  const float candidateIntegral = integral + error * dt;
  const float raw = kp * error + ki * candidateIntegral + kd * derivative;

  const float output = constrain(raw, outputMin, outputMax);
  if (raw == output) integral = candidateIntegral;
  previousError = error;
  return output;
}

Промышленные контроллеры также определяют поведение при недействительных измерениях, превышении времени выполнения цикла, переходах режима и отказах исполнительного механизма.

Допущения и отличия от реального оборудования

Объект здесь — упрощённая модель второго порядка с известными массой, демпфированием и задержкой, которые задаются ползунками, а не настоящий двигатель с трением, мёртвой зоной, моментом, снижающимся с ростом скорости, и нагревающимся драйвером. Дискретизация фиксирована по построению, поэтому производная составляющая остаётся управляемой; на Arduino вызов delay() или другая блокирующая работа вызывают дрожание интервала, и составляющая D ведёт себя некорректно даже при неизменных коэффициентах. Насыщение исполнительного механизма моделируется жёстким ограничением с защитой от интегрального насыщения, но у физической системы также есть ограничения тока, просадка питания и нагрев, меняющие предел во время работы. Настройте переходный процесс здесь, затем проверьте на реальной системе, где объект известен лишь приближённо.

Схема соединений

Датчик обратной связи сообщает фактический выход; он не заменяет ограничение тока или аппаратный аварийный останов. Регулятор сравнивает уставку с отфильтрованным показанием датчика, а затем управляет исполнительным механизмом через ШИМ-каскад (PWM), рассчитанный на нагрузку.

Блок-схема замкнутого контура обратной связи ПИД-регулятора. Уставка поступает в суммирующий узел, полученная ошибка — в ПИД-регулятор, его выход поступает на ШИМ-каскад (PWM), который воздействует на исполнительный механизм и объект, а датчик измеряет выход объекта и возвращает его в суммирующий узел со знаком минус.
Замкнутый контур ПИД-регулятора: датчик замыкает путь от выхода объекта к суммирующему узлу, где из уставки вычитается обратная связь. Скачать SVG

Управляемые эксперименты

Читать о перерегулировании и намеренно получать его — не одно и то же. Каждый эксперимент ниже занимает несколько минут и изолирует ровно один эффект.

1. Найдите предельный коэффициент

Установите Ki и Kd в ноль. Увеличивайте Kp, пока выход не начнёт колебаться с постоянной амплитудой — не растущей и не убывающей. Запишите коэффициент (Ku) и период колебаний (Tu).

Для первой настройки достаточно этих двух чисел:

Регулятор Kp Ki Kd
PID (классический) 0.6 Ku 1.2 Ku / Tu 0.075 Ku Tu
PID (без перерегулирования) 0.2 Ku 0.4 Ku / Tu 0.066 Ku Tu

Введите эти значения и сравните. Классическая строка агрессивна и перерегулирует на 20–40%; вторая достигает цели без перерегулирования, но занимает больше времени. Ни одна из них не является «правильной» — это разные ответы на разные требования, в чём и состоит суть.

2. Посмотрите, как происходит накопление интеграла

Установите низкий предел исполнительного механизма — около 20% диапазона, — затем задайте большой ступенчатый скачок уставки. Посмотрите на график усилия управления: оно мгновенно насыщается и остаётся там, а интеграл продолжает накапливать ошибку, на которую не может повлиять. Когда выход наконец достигает уставки, накопленная интегральная составляющая разгружается, и система выходит далеко за цель.

Теперь увеличьте предел и повторите с теми же коэффициентами. Перерегулирование в основном исчезает. Ничего в регуляторе не изменилось — именно в этом состоит урок. Накопление — свойство взаимодействия регулятора с насыщающимся исполнительным механизмом, а не коэффициентов.

3. Докажите, что контур убивает задержка, а не шум

Увеличивайте интервал дискретизации от минимального значения шагами, сохраняя коэффициенты. Качество отклика ухудшается задолго до того, как график станет шумным: перерегулирование растёт, затем появляются колебания, после чего система становится неустойчивой.

Интервал дискретизации Что видно при хорошей настройке
5 ms Чисто, как настроено
20 ms Немного больше перерегулирования
50 ms Видимый звон
100 ms Устойчивые колебания
200 ms Неустойчиво

Поэтому удаление вызова delay() из цикла робота часто улучшает слежение сильнее любой настройки. Устаревшую информацию нельзя восстановить коэффициентом.

4. Подайте шум на производную

Увеличьте величину возмущения при Kd, равном нулю, затем увеличьте Kd. Траектория усилия управления становится рваной задолго до того, как это происходит с выходом, — вы наблюдаете, как дифференцирование усиливает высокочастотные составляющие, как и должно быть.

Именно такое поведение заставляет людей считать D бесполезным и обнулять его. Настоящее исправление — на входе контура: отфильтруйте измерение или саму производную.

Что следует наблюдать

Настройка Ожидаемая форма Если видите другое
Только Kp, низкий Медленное нарастание, установившееся значение ниже уставки —
Только Kp, высокий Перерегулирование, звон, затухание Растущие колебания означают, что вы прошли Ku
Kp + Kd Быстрое нарастание, малое перерегулирование, небольшое установившееся смещение Рваное усилие означает, что D усиливает шум
Kp + Ki Точное достижение уставки, медленнее Проскок означает накопление или слишком большой Ki
Полный PID Быстро, минимальное перерегулирование, без смещения —

Постоянное смещение при P и D без I стоит один раз получить намеренно. Это самый наглядный пример того, для чего на самом деле нужен интегральный член: пропорциональное действие требует ненулевой ошибки, чтобы вообще дать выход, поэтому выход неизбежно остаётся немного ниже уставки.

Переход к реальному оборудованию

Найденные здесь коэффициенты — это отправная точка, а не переносимое значение. Полностью переносится процедура; числа не переносятся, поскольку они описывают этот объект.

Эта лаборатория Настоящий робот
Интервал дискретизации точен Дрожит, если не измерять dt и не передавать его
Объект — чистая модель второго порядка Трение, мёртвый диапазон, момент, падающий со скоростью
Предел исполнительного механизма — жёсткое ограничение Также ограничения тока, просадка питания и нагрев
Нет шума датчика, пока вы его не добавите Шум есть всегда и редко бывает гауссовым
Объект никогда не меняется Напряжение аккумулятора, нагрузка и температура меняют его

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

Список оборудования

Компоненты

  • Микроконтроллер со стабильным таймером
  • Измеряемый объект системы, например двигатель постоянного тока (DC) или сервопривод
  • Энкодер, потенциометр или другой датчик обратной связи
  • Драйвер исполнительного механизма, рассчитанный на нагрузку
  • Стабилизированный источник питания и аварийный останов

Исследуйте граф

Где используется этот симулятор

Проекты, учебные пути и руководства, которые опираются на эту лабораторию.

Продолжайте сборку

Материалы для загрузки

Пользуйтесь этими справочными материалами на странице, пока работаете над проектом. Загружаемые пакеты проекта появятся только после публикации их исходников и версии.

Частые вопросы

Часто задаваемые вопросы

Что настраивать первым?

Начните с нулевых интегрального и производного коэффициентов. Увеличивайте пропорциональный коэффициент, пока отклик не станет полезным, но колебательным, затем добавьте демпфирование за счёт производной составляющей. Интегральный коэффициент добавляйте последним и только если остаётся повторяемая установившаяся ошибка. Распространённое эмпирическое правило: P даёт скорость, D уменьшает перерегулирование, а I устраняет смещение — добавляйте их именно в таком порядке, по одному.

Как не допустить перерегулирования ПИД-регулятора?

Перерегулирование обычно вызвано слишком сильным пропорциональным или интегральным действием. Сначала уменьшите пропорциональный коэффициент, затем увеличьте производный, чтобы затушить приближение. Если перерегулирование появляется только после достижения исполнительным механизмом предела, причина в накоплении интеграла, а не в коэффициентах, и вместо этого следует ограничить интегральную составляющую.

Почему мой ПИД-регулятор колеблется?

Устойчивые колебания почти всегда означают, что пропорциональный коэффициент слишком велик для контура или производная составляющая слишком слаба для демпфирования. Уменьшите пропорциональный коэффициент примерно вдвое, затем добавьте производную составляющую. Колебания также могут возникать из-за слишком медленного или нерегулярного контура, что делает производную составляющую ненадёжной.

Что такое накопление интеграла и как его предотвратить?

Накопление возникает, когда исполнительный механизм насыщается — двигатель работает на полной скорости, клапан полностью открыт, — а накопленная интегральная ошибка продолжает расти, поэтому после смены знака ошибки регулятор сильно перерегулирует. Предотвратите это ограничением (прекратите добавлять интеграл при насыщении выхода) или обратным пересчётом (сбрасывайте интеграл с помощью разницы между запрошенным и фактическим выходом).

Как быстро должен работать контур ПИД-регулятора?

Контур должен считывать данные в несколько раз быстрее, чем работает управляемая система, с постоянным интервалом. На микроконтроллере избегайте долгих блокирующих задержек: переменный или медленный цикл меняет эффективные интегральную и производную составляющие, даже если коэффициенты не менялись, и это частая скрытая причина плохой настройки.

Можно ли использовать только P и D?

Да. PD-управление без интеграла распространено, когда допустима небольшая установившаяся ошибка и нужно избежать накопления, а PI-управление без производной подходит для зашумлённых сигналов, где производная усиливала бы шум. Используйте только те слагаемые, которые нужны задаче, вместо безусловного запуска полного ПИД-регулятора.

Чем ручная настройка отличается от Ziegler–Nichols?

Ручная настройка меняет один коэффициент за раз, наблюдая за откликом, что интуитивно и безопасно для обучения. Ziegler–Nichols — метод на основе формулы, который выводит коэффициенты из точки устойчивых колебаний; он быстрее, но часто агрессивен, поэтому его результат обычно служит отправной точкой для дальнейшей ручной доработки.

Дополнительные материалы

Источники

Авторитетные источники, чтобы пойти глубже ограниченной учебной модели этого симулятора.