(редакция статьи "PID Without a PhD" от JHM)

 

Исходная статья: [http://www.embedded.com/2000/0010/0010feat3.htm]

Автор: Tim Wescott

Перевод: © Ботов Антон aka =DeaD=, 2008

 

ПИД управление

 

PID=ПИД означает "proportional=пропорциональный", "integral=интегральный", "derivative=дифференциальный". Эти три термина описывают простейшие элементы ПИД-контроллера. Каждый из этих элементов выполняет свою задачу и оказывает свое специфическое воздействие на функционирование системы.

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

 

Простейший ПИД-контроллер

Рисунок 1. Простейший ПИД-контроллер

 

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

 

Объекты управления

 

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

  • Двигатель с редуктором;
  • Бесконтактная система сверхточного позиционирования;
  • Термосистема;

Каждая из этих систем имеет различные характеристики и требует различных подходов в управлении для достижения оптимальных результатов.

 

Двигатель с редуктором

 

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

 

Схема управления двигателем с редуктором

 

Рисунок 2. Схема управления двигателем с редуктором

 

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

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

 

График положения вала при старте

 

Рисунок 3. График положения вала при старте

 

На рисунке показано поведение системы при подаче некоторого фиксированого напряжения в момент времени t = 0 (мы рассматриваем общие примеры, поэтому примем напряжение в 1). Из графика видно, что мотор не сразу набирает соответствующую напряжению скорость, но после того, как набрал (при t=0.2), дальше он её поддерживает.

 

Бесконтактная система сверхточного позиционирования

 

В некоторых случаях необходимо с сверхвысокой точностью управлять положением некоторого объекта. Систему, решающую эту задачу, можно построить из свободно перемещающейся механической платформы, пары "катушка + магнит" (аналогичной применяющимся в громкоговорителях) и бесконтактного датчика положения. Такие решения применяются в механизмах оптической стабилизации в фото/видеотехнике, или в других системах, где нужно с высокой точностью перемещать небольшой элемент устройства.

 

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

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

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

 

График движения при фиксированном воздействии

 

Рисунок 5. График движения при фиксированном воздействии

 

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

 

Термосистема

 

В этом примере вместо двигателя мы будем использовать нагреватель.

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

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

 

График поведения термосистемы при нагреве котла

 

Рисунок 7.

 

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

 

Элементы контроллера

 

Пропорциональное управление

 

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

 

Рисунок 8 показывает что происходит, когда пропорциональное управление применяется к системе двигателя с редуктором.

 

Пропорциональное управление двигателем с редуктором

 

Рисунок 8.

 

Для малого значения коэффициента (pGain = 1) двигатель приходит к нужному положению, но достаточно медленно. Увеличение коэффициента (pGain = 2) приводит к более быстрой реакции системы. Однако если дальше увеличивать коэффициент (pGain = 5, pGain = 10), то двигатель конечно более быстро достигает требуемого положения, но дальше идёт "перелёт" (общепринятый термин которым обозначается этот эффект вТАУ - "Перерегулирование", примечание переводчика), из-за чего система не приходит к требуемому положению быстрее, чем при меньших коэффициентах. Если мы продолжим увеличивать коэффициент, то мы достигнем ситуации, когда система станет бесконечно осциллировать (колебаться) вокруг заданной точки и никогда не придет в нужное состояние.

Система двигателя с редуктором "перелетает" необходимое положение при больших коэффициентах из-за задержки с реакцией на управляющее воздействие. Если вы вернетесь к рисунку 2, то вы увидите, что двигатель не сразу начинает вращаться при подаче на него управляющего сигнала. Эта задержка, плюс задержка обратной связи по датчику — вот что приводит к "перелёту" через требуемое положение на рисунке 8 (возможно более понятным будет следующее объяснение: перерегулирование связано с инерцией мотора и редуктора — прим. переводчика).

 

Пропорциональное управление системой сверхточного позиционирования

 

Рисунок 9. Пропорциональное управление системой сверхточного позиционирования

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

 

Пропорциональное управление термосистемой

Рисунок 10. Пропорциональное управление термосистемой

 

Рисунок 10 показывает что происходит, когда вы строите контроллер температуры на основе метода пропорционального управления. Кроме всего прочего на графиках я показал реакцию системы на внешнее воздействие в виде повышения температуры окружающей среды в момент времени t=2с. Однако видно, что независимо от этого воздействия пропорциональное управление не позволяет установить желаемую температуру. Увеличение коэффициента помогает, но даже при pGain=10 температура котла остается ниже требуемой, и вы начинаете наблюдать сильные "перелёты" через требуемую величину, которые продолжаются без конца (это называется "ringing").

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

 

Интегральное управление

 

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

 

Интегральное управление само по себе обычно снижает стабильность системы или вообще делает систему нестабильной. 

На рисунке 11 приведены результаты управления двигателя с редуктором контроллером реализующим чисто интегральное управление (pGain = 0). Как видно система вообще не стабилизируется. Как и в случае с системой сверхточного позиционирования с пропорциональным управлением у двигателя с редуктором под чистым интегральным управлением колебания будут становиться только больше и больше, пока это во что-нибудь не упрётся (хорошо если это будет программное ограничение, а не разрушение механической системы).

 

Интегральное управление термосистемой

 

Рисунок 12. Интегральное управление термосистемой

 

Рисунок 12 показывает как себя ведёт термосистема под чистым интегральным управлением. Как видно время стабилизации системы стало значительно больше, чем при пропорциональном управлении (см. рисунок 10), но зато теперь система стабилизируется при требуемом состоянии, даже при некоторых внешних воздействиях. Если вам не требуется малое время выхода на требуемое состояние — этот метод вам вполне подойдет.

Из последнего графика ясно, как используется интегральный компонент управления. В состоянии интегратора "запоминается" всё что произошло в предыдущие моменты времени и это позволяет контроллеру избегать "долгосрочных ошибок", т.е. поведения при котором мы видим что не достигли требуемого положения, а никакого управляющего воздействия не вносим. Однако у этой медали есть и обратная сторона — контроллер всегда реагирует с некоторым запозданием, когда система уже длительное время получает совершенно неправильные команды. Чтобы стабилизировать предыдущие две системы нам потребуется добавить в принятие решения немного информации о текущем состоянии системы, которое мы имеем в пропорциональной компоненте.

 

Пропорционально-интегральное управление двигателем с редуктором

Рисунок 13. Пропорционально-интегральное управление двигателем с редуктором

 

Рисунок 13 показывает как ведёт себя двигатель с редуктором под пропорционально-интегральном (ПИ) управлением. Сравните это с рисунками 8 и 11. Время на стабилизацию увеличилось по сравнению с чисто пропорциональной схемой, но стабилизация идёт в правильное положение, которое и требовалось.

 

Рисунок 14 показывает, что будет происходить, если применить к термосистеме ПИ-управление. Котёл так же придёт к требуемой температуре, как и в случае чистого интегрального управления (см. рисунок 12), но с ПИ-управлением произойдёт это в два-три раза быстрее. График показывает время стабилизации до требуемой температуры близкое к возможному пределу достигаемому с помощью ПИ-регуляторов на такого типа системах.

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

Скорость изменения состояния интегратора равна среднему отклонению умноженному на коэффициент интегратора умноженному на частоту цикла управления. Так как интегратор сглаживает замеры отклонения по времени, допустимы некотороые отклонения от нормальной частоты вызова управляющего цикла, но в любом случае эти отклонения должны быть чем-то ограничены. В худшем случае рекомендуется, чтобы частота вызова цикла управления не отклонялась более чем на 20% на каждом участке из 10 вызовов. Иногда лучше пропустить часть значений, чтобы сохранить требуемую частоту вызова управляющего цикла. Однако несмотря на это я для ПИ-контроллера предпочитаю системы, в которых точность вызова цикла управления лежит в пределах 1-5%.

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

 

"Вылетание" пропорционально-интегрального управления

Рисунок 15. "Вылетание" пропорционально-интегрального управления

 

Рисунок 15 показывает эффект "вылетания" интегратора. Я использовал двигатель с редуктором и контроллер с примера рисунка 13 и ограничил скорость мотора до 0.2. Не только контроллер выдаёт управляющий сигнал, который не может быть реализован двигателем, но и вся система показывает значительный "перелёт". Реально требуемое положение достигается за 5 секунд, он обратный сигнал не подаётся еще в течение 3 секунд, поскольку в интеграторе еще осталось накопленное отклонение, указывающее на то, что надо продолжать двигаться вперёд, и проходит порядка 15 секунд, пока система не стабилизируется.

 Ограничение "вылетания" пропорционально-интегрального управления

Рисунок 16. Ограничение "вылетания" пропорционально-интегрального управления

 

Простейший и самый прямой способ борьбы с "вылетанием" интегратора это установка ограничений на его накопленное значение, как я показал в примере кодирования такого интегратора. Рисунок 16 показывает что происходит когда в приведенных выше условиях на интегратор наложены ограничения в размере максимально допустимого управляющего воздействия на двигатель (iMin=-0.2, iMax=0.2). Выход контроллера всё еще больше допустимого для двигателя (из-за пропорциональной части), но теперь интегратор "вылетает" значительно меньше и система начинает стабилизироваться на 5-й секунде и заканчивает примерно на 6-й секунде.

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

 

Дифференциальное управление

 

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

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

 

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

 

Пропорционально-дифференциальное управление системой сверхточного позиционирования

Рисунок 17. Пропорционально-дифференциальное управление системой сверхточного позиционирования

 

Рисунок 17 показывает как ведёт себя эта система под пропорционально-дифференциальным (ПД) управлением. Система стабилизируется меньше чем за 1/2 секунды по сравнению с несколькими секундами требующимися для других систем.

 

ПИД-управление термосистемой

Рисунок 18. ПИД-управление термосистемой

 

Рисунок 18 показывает как себя ведёт термосистема под ПИД-управлением. Как видно из графиков этот подход существенно улучшает качество управления системой.

Дифференциальная компонента управления очень мощная, но она же и самая проблемная из всех типов управления представленных здесь.

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

 

Настройка ПИД-регулятора

 

 

Настройка дифференциальной компоненты

 

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

 

Настройка пропорциональной компоненты

 

Если вы еще не установили коэффициент пропорциональной компоненты, назначьте ему некоторое стартовое значение (от 1 до 100). Ваша управляемая система либо покажет ужасающе медленную реакцию на команды, либо начнет колебания. Если вы видите колебания — уменьшайте коэффициент в 10 раз, пока эти колебания не прекратятся. Если вы не наблюдаете колебания, увеличивайте коэффициент в 10 раз пока не начнутся колебания или значительные "перелёты" через целевое положение. Теперь уже с коэффициентом 2 найдите такой коэффициент, что он всё еще не вызывает колебаний или "перелётов", а умноженный на 2 уже вызывает, теперь можно немного его уменьшить пока вам не понравится действие системы.

 

Настройка интегральной компоненты

 

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