Продолжаем начатую тему, посвященную работе ПИД-регулятора, и сегодня речь пойдет непосредственно и исключительно о настройке ПИД-регулятора. Начнем, как полагается, с теоретических моментов, затем же плавно перейдем к практическому примеру на базе регулятора температуры на STM32, созданному нами в той, первой, статье.
Настройка ПИД-регулятора. Теория.
И, собственно, данная настройка заключается в том, чтобы вычислить или подобрать оптимальные значения коэффициентов:
- K_p - коэффициент усиления пропорциональной составляющей
- K_i - коэффициент усиления интегрирующей составляющей
- K_d - коэффициент усиления дифференцирующей составляющей
По большому счету, при использовании ПИД-регулятора необходимо построить модель всей системы в целом и математически вычислить необходимые значения коэффициентов. В таком случае значения можно рассчитать очень точно. Но на практике математический расчет коэффициентов - задача далеко не тривиальная и требует глубоких знаний теории автоматического управления, поэтому в большинстве случаев используются другие, упрощенные, методы настройки.
Существует целый ряд различных способов, которые определяют вполне конкретные шаги, которые необходимо предпринимать. Мы же разберем один из них, а именно - метод Циглера-Никольса, ввиду того, что он получил наибольшее распространение и популярность.
Метод Циглера-Никольса.
Заключается он в последовательном выполнении следующих операций:
- Обнуляем все коэффициенты регулятора.
- Задаем некоторое целевое значение регулируемого параметра (например, температуры).
- Постепенно начинаем увеличивать пропорциональный коэффициент и следим за реакцией системы.
- При определенном значении K_p возникнут незатухающие колебания регулируемой величины.
- Фиксируем это значение, а также период колебаний системы.
На этом практическая часть метода заканчивается. Из полученных значений рассчитываем коэффициенты:
K_p = 0.6\cdot K \\ K_i = (2\cdot K_p)\medspace/\medspace T \\ K_d = (K_p\cdot T)\medspace/\medspace 8
Здесь K – тот самый коэффициент пропорциональной составляющей, при котором возникли колебания, а T – период этих колебаний. Рассмотрим псевдо-пример для получения более полного представления о данном процессе. Пусть при K_p равном 10, возникают колебания следующего рода:
Период составляет 0.1 с. Производим расчеты по вполне конкретным формулам и получаем:
K_p = 0.6\cdot 10 = 6 \\ K_i = (2\cdot 6)\medspace/\medspace 0.1 = 120 \\ K_d = (6\cdot 0.1)\medspace/\medspace 8 = 0.075
Все, на этом процедура окончена.
Метод довольно прост, но применить его можно далеко не всегда. И получаемые результаты также будут оптимальными далеко не всегда. На практике я метод Циглера-Никольса применял считанное число раз, больше доверяясь экспериментально-аналитическому способу, которому и буде посвящена последующая часть статьи.
Суть метода можно описать максимально кратко:
- Берем систему.
- Меняем один из коэффициентов.
- Смотрим за реакцией системы.
- Анализируем произошедшее и принимаем решение о дальнейших действиях.
Данный метод также вполне можно назвать «методом проб и ошибок», тем не менее это работает. Главное иметь представление о том, как система функционирует и как она реагирует на изменения, чтобы производимые манипуляции не носили хаотичный, близкий к случайному характер. Кроме того, не следует менять несколько значений сразу, тогда отслеживание результата становится практически неосуществимым. Поменяли-посмотрели-поменяли-посмотрели…
Сами значения коэффициентов могут принимать абсолютно разные значение, от 0 до десятков-сотен тысяч. Это все зависит, в первую очередь, от конкретной системы, и следует даже просто из того, что регулируемые и регулирующие параметры могут быть абсолютно разными.
Пусть, к примеру, у нас температура может меняться от 20°C до 40°C, при этом мощность нагревателя – от 100 Вт до 1000 Вт. Это частный случай. Берем абсолютно другую систему, там ПИД-регулятор контролирует угол наклона гиростабилизированной платформы. Объект регулирования – угол наклона, выходное воздействие – сигнал для управления двигателем, вращающим платформу. При этом рабочий диапазон углов: [-0.1°; 0.1°]. То есть изначально мы имеем абсолютно другие порядки участвующих в работе системы параметров, соответственно, и коэффициенты ПИД-регулятора могут иметь значения, разнящиеся на несколько порядков.
Перечислим еще некоторые свойства, которые призваны помочь в анализе работы системы и настройке ПИД-регулятора:
- Увеличение коэффициента усиления пропорциональной составляющей приводит к увеличению быстродействия, но снижению устойчивости системы.
- Интегральная составляющая служит для уменьшения статической ошибки, о чем мы говорили в предыдущей статье. При увеличении K_i компенсация ошибки будет происходить быстрее.
- Увеличение K_d позволяет повысить стабильность системы, но слишком большое значение может также стать причиной возникновения колебаний, поэтому, как и для остальных коэффициентов, нужно все манипуляции производить аккуратно и в меру.
Не для всех систем целесообразно использовать все три составляющие, иногда достаточно и нескольких из них. Собственно, на этой ноте переходим к практическому примеру настройки ПИД-регулятора. Произведем базовую, максимально наглядную, настройку, дабы получить в первом приближении нормально функционирующую систему. Система крайне инертная и медленная по своей сути, так что можно столкнуться с проблемами, напоминаю структурную схему творения:
Пример настройки ПИД-регулятора на микроконтроллере STM32.
Итак, проект мы создали в первой части, сейчас же целенаправленно займемся настройкой значений:
float Kp = 0; float Ki = 0; float Kd = 0;
На данный момент все коэффициенты в нуле, то есть регулятор не функционирует. Начинаем последовательно производить настройку описанным экспериментально-аналитическим способом. Прикинем возможные диапазоны значений. Итак, пусть невязка (разница между текущим значением температуры и целевым) равна 1°C. Выходной сигнал может изменяться от 0 до 1000 (длительность импульсы ШИМ-сигнала для управления охлаждением). Если поставим K_p равным 100, то на это значение невязки получим длительность импульса выходного ШИМ-сигнала равной 100, вполне адекватное значение.
Для анализа поведения системы будем производить следующее:
- Задаем целевое значение 30°C, ждем пока система стабилизируется.
- Задаем целевое значение 40°C, аналогично ожидаем эффекта.
- Строим график зависимости температуры датчика от времени и анализируем полученное.
Приступаем, тест №1:
Видим, что все точно в соответствии с теорией – при использовании только пропорциональной составляющей система не может выйти на требуемые значения из-за статической ошибки. Отлично, добавим интегрирующую составляющую, задав некоторое значение K_i:
На этот раз уже все иначе – целевое значение более-менее установить удается, но имеем неслабый выброс при подходе к значению. Логичным шагом будет увеличение коэффициента усиления дифференцирующей составляющей:
Так, стало получше (амплитуда выброса уменьшилась), увеличиваем K_d еще:
Отлично, выброс практически погасили, но выходить на нужное значение хотелось бы побыстрее. Вывод очевиден – увеличиваем коэффициент усиления пропорциональной составляющей (K_p):
Вот, намного приятнее, посмотрим на последние два варианта друг относительно друга:
Вполне себе ничего результат в итоге. Опять же система очень инертная изначально, датчик производит измерения не слишком быстро, да и шаг дискретизации приличный - 0.125 °C. Так что результат вполне годный. Наблюдаемые промежуточные графики очень хорошо демонстрируют суть протекающих процессов, а это и было нашей целью – получение наглядного примера, дополняющего рассмотренные теоретические аспекты. Так что на этом заканчиваем на сегодня, следите за обновлениями и спасибо за внимание 🤝
Ссылка на проект - MT_PID_Project.
Было бы интересно увидеть практическую реализацию:)
Спасибо! Очень интересно!
мы в универе по другому считаем коэффициенты.
Можно привести ссылки на литерутуру, где можно почитать.
Лучше всего в интернете читать, то есть всякие статьи от производителей, например )
Я просто пока не имел опыта работы с ПИД регуляторами и другими, и не имею понятия даже какие статьи и от каких прозводилей смотреть.
Касательно практики не имел, на моделях в матлабе много раз моделили в универе, а вот как в жизни они работают хз, хотя слышал что те коэффициенты что в матлабе получаются, от жизни слишком сильно отличаются) В жизни подбирают их, а не считают)
Ну обычно считают, подставляют, ничего не работает как надо, и после этого начинается уже анализ системы и реакции на изменение коэффициентов )
Вот пдфка, если я не ошибаюсь здесь в общих чертах неплохо описано - http://rusfolder.com/39952874
В большинстве случаев достаточно как-раз ПИ регулятора или даже И, особенно если процессы вялотекущие, отопление, печки, там не имеет значения за час переходной процесс устаканивается или за полтора. Дифферинциальная составляющая вообще адова жесть, особенно когда с датчиков идет шум, шум усиливается и на выходе полный бред. ПИ регулятор в условиях шумных датчиков намного лучше.
Полезная статья. У меня на работе частенько возникает проблема с коэффициентами. Но за долгое время уже более менее подобрали их и сейчас стараемся их не трогать.
У нас на оборудовании плиты нагрева меняются в зависимости от выпускаемой продукции и поэтому приходится менять коэффициенты при смене плит. Помогает то что на станке всегда можно график температуры построить и отследить колебания
процесс то вялотекущий, пара часов... но: при перебросе температуры хоть на несколько градусов появляются пузырьки в термоотверждаемом материале, результат - электрический пробой этого материала при эксплуатации - деталь с пузырьками у нас идет в брак... При увеличении времени техпроцесса - придется гонять печь круглосуточно и организовывать ночные смены. Технолог не может решиться, куда при этом приписать время разогрева и взять на себя ответственность за нарушение технологии, данной изготовителем материала. Ставить детали в заранее разогретую печь неудобно и даже опасно. Да и печь успевает подостыть и регулятор начинает новый "заброс". Экспериментировать с подбором коэффициентов просто некогда.
Очень полезные и информативные у вас статьи. Начинал по ним знакомство и STM32 и с USB, теперь вот и ПИД... Огромное СПАСИБО!!!))
Настраивая регуляторы на АСУТП крупнотонажных производств (НПЗ и тд.) ощутил как действительность крепко бьёт обухом по голове теоретиков, т.е. меня. И вся изучаемая ранее теория ушла на нет.
Суть в том что рассчитать настройки регулятора можно и по всякому, но реально включить регулятор на работающей установке - сами понимаете... Поэтому всегда применял пошаговое приближение к оптимальным (на мой взгляд) настройкам. Многое зависит от взаимосвязей, установка - это единая динамическая система...
Как нас учили: регулирует П-составляющая, а И-составляющая подстраивается и убирает статическую ошибку... И какое же мое было удивление, когда теория ку-ку! Реально я использовал И-составляющую, а П только подстраивал для улучшения динамики.
Как-то так... мысли в слух. Пойду еще почитаю, поразбираюсь с платкой STM32F103.
Спасибо за Ваши труды!
Спасибо за хороший отзыв!
добрый день
мне показалось, или первая формула должна быть примерно следующая:
Kp = Kp(threshold) * 0.6
"Постепенно начинаем увеличивать пропорциональный коэффициент и следим за реакцией системы.
Фиксируем коэффициент K, при котором это произошло.
Из полученного коэффициента K рассчитываем пропорциональный коэффициент ПИД-регулятора"
K_p = K * 0.6
мы находим пропорциональный коэффициент из пропорционального коэффициента ??
Условно говоря - да.
Сначала у нас есть только пропорциональный коэффициент. Его увеличиваем и получаем какое-то значение. Затем переходим к системе со всеми тремя коэффициентами и их значения рассчитываем из того, которое получено в системе только с одним коэффициентом.
Вроде бы все хорошо, только для начала настройки нужно знать уравнение ПИД регулятора, реализованного в контроллере. Часто бывает,. что уравнение бывает MV= K/100*(e(t)+...) или MV=K*(e(t)+...) только тогда можно нормально задаться начальными значениями для К и производить настройку методом перечисленным выше.