Содержание
Сегодняшняя статья будет посвящена такой замечательной вещи, как ПИД-регулятор. По определению, пропорционально-интегрально-дифференциальный регулятор — устройство в цепи обратной связи, используемое в системах автоматического управления для поддержания заданного значения измеряемого параметра. Чаще всего можно встретить примеры, где ПИД-регулятор используется для регулировки температуры, и, на мой взгляд, этот пример прекрасно подходит для изучения теории и понимания принципа работы регулятора. Поэтому именно задачу регулировки температуры и будем сегодня рассматривать.
Итак, что у нас имеется?
Во-первых, объект, температуру которого необходимо поддерживать на заданном уровне, кроме того, эту температуру необходимо регулировать извне. Во-вторых, наше устройство на базе микроконтроллера, с помощью которого мы и будем решать поставленную задачу. Кроме того, у нас есть измеритель температуры (он сообщит контроллеру текущую температуру) и какое-нибудь устройство для управления мощностью нагревателя. Ну и поскольку необходимо как-то задавать температуру, подключим микроконтроллер к ПК.
Таким образом, у нас есть входные данные – текущая температура и температура, до которой необходимо нагреть/остудить объект, а на выходе мы должны получить значение мощности, которое необходимо передать на нагревательный элемент.
И для такой задачи, да и вообще любой похожей задачи, отличным решением будет использование пропорционально-интегрально-дифференциального регулятора 😉
Пропорциональная составляющая.
Здесь все просто, берем значение нужной нам температуры (уставку) и вычитаем из него значение текущей температуры. Получаем рассогласование (невязку). Умножаем полученную невязку на коэффициент и получаем значение мощности, которое и передаем на нагреватель. Вот и все ) Но при использовании только пропорциональной составляющей есть два больших минуса – во-первых, эффект от нашего воздействия наступает не моментально, а с запаздыванием, и, во-вторых, пропорциональная составляющая никак не учитывает воздействие окружающей среды на объект. Например, когда мы добились того, чтобы температуры объекта была равна нужному нам значению, невязка стала равна нулю, а вместе с ней и выдаваемая мощность стала нулевой. Но температура не может просто так оставаться постоянной, поскольку происходит теплообмен с окружающей средой и объект охлаждается. Таким образом, при использовании только пропорциональной составляющей температура будет колебаться около нужного нам значения.
Давайте разбираться, как ПИД-регулятор решает две выявленные проблемы )
Для решения первой используется дифференциальная составляющая. Она противодействует предполагаемым отклонениям регулируемой величины, которые могут произойти в будущем. Каким образом? Сейчас разберемся!
Итак, пусть у нас текущая температура меньше нужного нам значения. Пропорциональная составляющая начинает выдавать мощность и нагревать объект. Дифференциальная составляющая вносит свой вклад в мощность и представляет из себя производную невязки, взятую также с определенным коэффициентом. Температура растет и приближается к нужному значению, а следовательно невязка в предыдущий момент больше текущего значения невязки, а производная отрицательная. Таким образом, дифференциальная составляющая начинает постепенно снижать мощность до того, как температура достигла необходимого значения. С этим вроде разобрались, вспоминаем про вторую проблему регулятора 😉
А с ней нам поможет справиться интегральная составляющая. Как нам в программе получить интеграл? А легко – просто суммированием (накоплением) значений невязки, на то он и интеграл ) Возвращаемся к нашему примеру. Температура ниже значения уставки, начинаем подогревать. Пока мы нагреваем, значение невязки положительное и накапливается в интегральной составляющей. Когда температура “дошла” до нужного нам значения, пропорциональная и дифференциальная составляющая стали равны нулю, а интегральная перестала изменяться, но ее значение не стало равным нулю. Таким образом, благодаря накопленному интегралу мы продолжаем выдавать мощность и нагреватель поддерживает нужную нам температуру, не давая объекту охлаждаться. Вот так вот просто и эффективно =)
В итоге мы получаем следующую формулу ПИД-регулятора:
Тут u(t) – искомое выходное воздействие, а e(t) – значение невязки.
Частенько формулу преображают к следующему виду, но суть от этого не меняется:
Пожалуй, на этом закончим, разобрались мы сегодня как работает ПИД-регулятор, а в ближайшее время разберемся еще и как произвести подбор коэффициентов ПИД-регулятора )
Здесь приведен перевод апноута AVR221: Discrete PID controller on tinyAVR and megaAVR devices [1] (дискретный контроллер PID на микроконтроллерах серий tinyAVR и megaAVR).
Возможности описанного контроллера:
• Простой дискретный (цифровой) алгоритм PID-контроллера
• Можно реализовать на всех моделях микроконтроллеров AVR
• Функция управления PID использует 534 байта памяти программ (FLASH) и требует 877 циклов CPU (применен компилятор IAR, включена оптимизация по размеру кода)
Этот апноут описывает простую реализацию дискретного пропорционально-интегрально-дифференциального (дословный перевод Proportional-Integral-Derivative, PID) контроллера.
Когда необходимо применить регулирование выхода системы, отслеживая изменение опорного значения или состояния, может потребоваться некий алгоритм управления. Примером таких приложений может служить управление мотором, поддерживание температуры в печи, стабилизация напряжения, давления, потока жидкости, скорости, ускорения или других значений. Одним из таких алгоритмов является PID, который может использоваться для управления любой измеряемой величиной, когда она может быть затронута при манипулировании другими переменными процесса.
За все время использовалось много решений для управления, но в сравнении со всеми PID-контроллер получил репутацию "индустриального стандарта" из-за своей простоты и хорошего быстродействия. Чтобы получить больше информации по контроллерам PID их применению, обратитесь к другим источникам, например к книге "PID Controllers" K. J. Astrom & T. Hagglund (1995).
Рис. 1-1. Типичный отклик PID-регулятора на скачкообразное изменение входной опорной величины.
Примечание к рис. 1-1: ref – входное отслеживаемое воздействие, pi – отклик пропорционально-интегрального регулятора, p – отклик пропорционального регулятора, pid – отклик PID-регулятора.
[2 PID-регулятор]На рис. 2-1 схематично показана система с PID-регулятором. PID-контроллер сравнивает измеренную отслеживаемую величину y с опорным значение y0. Разность (или ошибка) e обрабатывается для вычисления нового входного значения для системы u. Это входное значение пытается подстроить измеряемую отслеживаемую величину так, чтобы она вернулась в нужное значение, соответствующее опорному. Получается схема с замкнутым циклом управления (управление с обратной связью).
Альтернативой схеме управления с замкнутой петлей управления является схема открытого цикла управления (без обратной связи). Такая схема проще, но во многих случаях является неудовлетворительной, и её часто невозможно реализовать из-за свойств самой системы. Путем добавления обратной связи по входу системы можно улучшить качество регулирования и даже быстродействие.
Рис. 2-1. Управление с обратной связью, с применением PID-регулятора.
Кроме того, в отличие от простых алгоритмов управления, PID-контроллер может управлять входным параметром u, основываясь на истории и скорости изменения опорного сигнала y0. Это дает повышение точности и стабильности в методе управления (см. рис. 1-1, где видно, что PID-регулятор дает меньше колебаний при отслеживании выходной величины).
Основная идея состоит в том, контроллер читает состояние какого-то сенсора. Затем он вычитает измеренное значение из опорного, и из этого получается значение ошибки. Эта ошибка может быть обработана тремя способами:
• отслеживание текущего значения, используя пропорциональное регулирование
• восстановление на основе предыдущего значения, используя интегрирование
• предсказывая будущее значение на основе дифференцирования.
На рис. 2-2 показана более подробная схема PID-контроллера, где Tp, Ti, и Td обозначают константы времени для пропорционального, интегрального и дифференциального условий соответственно.
Рис. 2-2. Схема внутреннего устройства PID-регулятора.
2.1 Пропорциональная составляющая PID-регулятора
Пропорциональное условие (P) подает на вход системы значение, пропорциональное ошибке. Использование только P-управления дает постоянную ошибку во всех случаях кроме тех, когда управляющий вход системы равен 0, и выходное отслеживаемое значение равно требуемому. На рисунке 2-3 статическая ошибка появляется после того, как изменилось требуемое (опорное, reference, ref) значение. Использование слишком большого коэффициента P-регулирования (Tp) в PID-регуляторе делает систему управления нестабильной.
Рис. 2-3. Отклик P-регулятора на скачкообразное изменение опорного параметра.
2.2 Интегральная составляющая PID-регулятора
Интегральное условие (I) выдает на вход системы значение управления, зависящее от суммы предыдущих ошибок. Суммирование ошибок будет продолжаться, пока выходное обрабатываемое системой значение не станет равным требуемому, и когда опорное значение стабильно, то статическая ошибка будет нулевой. Чаще всего составляющая регулирования I нормально используется вместе с составляющей регулирования P, в результате чего получается PI-контроллер. Использование только I-составляющей приведет к медленному регулированию и часто к самовозбуждению системы. На рис. 2-4 показаны отклики системы с применением I и PI управления. Как можно видеть, отклик PI-контроллера не имеет статической ошибки, и отклик I-контроллера очень медленный.
Рис. 2-4. Отклик I- и PI-регуляторов на скачкообразное изменение опорного параметра.
2.3 Дифференциальная составляющая PID-регулятора
Дифференциальное условие (D) добавляет к входному сигналу системы (u) информацию о скорости изменения опорного сигнала (насколько быстро изменяется ошибка e). Это улучшает отклик на быстрое случайное изменение в состоянии системы или в опорном отслеживаемом значении. Составляющая D обычно используется совместно с P или PI, в результате чего получаются PD- или PID-контроллер. Слишком большая составляющая D обычно приводит к нестабильности системы. Рис. 2-5 показывает результаты работы D-контроллера и PD-контроллера. Ответ от PD-контроллера дает ускоренное возрастание обрабатываемого системой значения по сравнению с P-контроллером. Имейте в виду, что D-составляющая по сути работает как фильтр высокой частоты (ФВЧ), стоящий на сигнале ошибки, и этот факт очень просто может привести к нестабильности системы и делает её более чувствительной к шуму и помехам.
Рис. 2-5. Отклик D- и PD-регуляторов на скачкообразное изменение опорного параметра.
Если объединить все три составляющие управления, то получится PID-контроллер, который обычно дает наилучшие результаты в управлении. Рис. 1-1 сравнивает между собой контроллеры P, PI и PID. PI улучшает P удалением статической ошибки, и PID улучшает PI ускорением ответа и отсутствием при этом перерегулирования.
2.4 Настройка параметров PID-регулятора
Самый лучший способ найти нужные параметры PID – получить их из математической модели системы, параметры могут быть вычислены по необходимому отклику системы. Часто полное математическое описание системы отсутствует, и приходится экспериментально подбирать параметры PID-регулятора. Нахождение составляющих PID-регулятора может быть сложной задачей. Важно хорошо знать систему и её поведение в различных условиях. Оптимальное поведение в ответ на изменение условий или изменение опорной заданной величины зависит от конкретного приложения. Некоторые процессы не должны допускать перерегулирования (выбросов) в ответ на изменение входной отслеживаемой величины. Другие процессы должны минимизировать расход энергии на пути достижения отслеживаемой величины. И почти всегда главным требованием является стабильность системы. Процесс управления не должен допускать самовозбуждения для любого варианта текущих условий регулирования или любые изменения входной отслеживаемой величины. Кроме того, эффект стабилизации должен укладываться в заранее заданные ограничения по времени.
Есть несколько методов для настройки петли регулирования PID. Выбор метода зависит от того, может ли процесс регулирования быть отключенным для настройки, или нет. Метод Ziegler-Nichols хорошо известен как стратегия настройки, не требующая отключения системы. На первом шаге этой методики устанавливают усиление I и D составляющих в 0, увеличивают усиление P, пока не выходе не будут получены установившиеся и стабильные колебания (при этом выходной сигнал должен как можно меньше отличаться от опорного). Затем записывают критическое усиление Kc и период генерации Pc, и значения P, I и D подстраиваются по таблице 2-1.
Таблица 2-1. Параметры методики Ziegler-Nichols для настройки PID.
контроллер | Kp | Ti | Td |
P | 0.5 * Kc | ||
PD | 0.65 * Kc | 0.12 * Pc | |
PI | 0.45 * Kc | 0.85 * Pc | |
PID | 0.65 * Kc | 0.5 * Pc | 0.12 * Pc |
Дальнейшая настройка параметров часто нужна для оптимизации быстродействия PID-регулятора.
Необходимо иметь в виду, что есть системы, для которых PID-регулятор не очень хорош, или системы, где он будет нормально работать только в малом диапазоне имеющихся состояний системы. Это нелинейные системы, но основная проблема с PID-регулятором проявляется с нестабильными системами, и когда эффект от входного воздействия зависит от состояния системы.
2.5 Дискретный PID-регулятор
Дискретный (цифровой) PID-регулятор будет читать ошибку, делать вычисления и выдавать выходное значение с заданными интервалами времени, с периодом выборки T. Время выборки T должно быть гарантированно меньше, чем самый маленький интервал времени, который может иметь в системе (по техзаданию) важное значение.
2.5.1 Основа алгоритма PID-регулятора
В отличие от простых алгоритмов управления, PID-регулятор может манипулировать управляющим сигналом, основываясь на истории и скорости изменения отслеживаемого сигнала. Это дает метод более точного и стабильного управления.
На рис. 2-2 показана схема PID-регулятора, где Tp, Ti и Tp обозначают константы времени для составляющих пропорционального, интегрального и дифференциального регулирования соответственно.
Передаточная функция системы на рис. 2-2:
Это дает зависимость u от e по оси времени:
Аппроксимация составляющих I и D:
Здесь n – дискретный шаг времени t. Это дает выражение для регулятора:
Чтобы избежать изменений в требуемой величине процесса и любых нежелательных быстрых изменений в управляющем сигнале, регулятор улучшен на базе составляющей D только на значении величины процесса:
[3 Реализация PID-регулятора]Этот апноут поставляется с готовой реализацией PID-регулятора на языке C [2]. Полную документацию по исходному коду можно найти, если открыть файл readme.html, который имеется в пакете архива.
Рис. 3-1. Блок-схема демонстрационного приложения PID-регулятора.
На рис. 3-1 показана упрощенная схема демо-приложения [2]. PID-регулятор использует структуру (struct) для сохранения своего состояния и параметров. Эта структура инициализируется в теле функции main, и функциям Init_PID() и PID() передается только указатель на структуру.
Функция PID() должна быть вызвана на каждом интервале времени T. Это реализовано с помощью таймера, который устанавливает флаг PID_timer, когда проходит интервал времени T. Когда флаг PID_timer установлен, подпрограмма в цикле main читает требуемое значение процесса (опорное отслеживаемое значение setPoint) и текущее значение процесса системы, вызывается PID(), и выводит результат на управляющий вход.
Чтобы увеличить точность, множители p_factor, i_factor и d_factor смасштабированы с коэффициентом 1:128. Результат алгоритма PID затем масштабируется обратно делением на 128. Число 128 выбрано для того, чтобы задействовать оптимизацию компилятора (умножение на 128 заменяется сдвигом на 1 бит младшего байта и копированием результата в старший байт).
В дальнейшем эффект от множителей IFactor и DFactor будут зависеть от интервала выборки T.
3.1 Свертка для интеграла
Входное значение регулирования u иногда достигает некоторого предела. Предел связан либо с ограниченным числовым диапазоном переменных PID-регулятора (в коде могут использоваться целочисленные переменные ограниченной разрядности), либо с выходным диапазоном регулятора, либо насыщением (ограничением сигнала) в усилителях, либо с вычислениями в алгоритме. Это произойдет, если имеется слишком большое различие между измеренной величиной и опорным сигналом. Причина может быть в больших возмущениях / перегрузке, которые система должна обработать.
Если регулятор использует целочисленные составляющие регулирования, ситуация может стать проблематичной. Интеграл по сути просто сумма предыдущих значений, которая может переполниться, и регулятор перестанет работать. Работа восстановится, когда большое возмущение / нагрузка исчезнет, и PID скомпенсирует управляющий сигнал, как только интегральная сумма вернется к нормальному значению.
Проблему целочисленного переполнения можно обойти несколькими способами. В этой реализации максимальная сумма в интеграле ограничена, но ей не позволено превысить значение MAX_I_TERM. Корректное значение MAX_I_TERM будет зависеть от самой системы и используемого времени выборки T.
Прим. переводчика: похожие проблемы есть и в алгоритмах ЦОС (цифровая обработка сигналов, DSP), когда применяется целочисленная арифметика для ускорения работы [3]. другие методы устранения проблемы переполнения – повышение разрядности переменных в вычислениях, и даже переход на арифметику с плавающей запятой. К сожалению, это часто связано с увеличением объема вычислений и усложнением оптимизации и разработки, так что имеет ограниченную область применения. В любом случае для вычислений старайтесь задействовать аппаратные ресурсы ядра AVR [4].
[4 Дополнительные замечания]Представленный PID-регулятор является упрощенным примером. Регулятор должен хорошо работать, однако может потребоваться улучшение, связанным с конкретным применением (к примеру, устранение переполнений и/или неточностей в регулировании). Можно добавить коррекцию (устранение) насыщения в I-составляющей за счет P-составляющей, если это позволяют условия обработки регулируемой величины.
В вычисление множителей IFactor и DFactor время выборки T является частью выражения. Если T выбрано слишком маленьким, или сделано больше 1 секунды, то будет нарушена точность вычисления либо множителя IFactor, либо множителя DFactor. Примите решение по доработке алгоритма PID при масштабировании, чтобы сохранить точность вычисления I-составляющией (интеграл) и D-составляющей (производная).
Дифференциальный пропорционально-интегральный регулятор – устройство, которое устанавливают в автоматизированных системах для поддержания заданного параметра, способного к изменениям.
На первый взгляд все запутанно, но можно объяснить ПИД регулирование и для чайников, т.е. людей, не совсем знакомых с электронными системами и приборами.
Что такое ПИД регулятор?
ПИД регулятор – прибор, встроенный в управляющий контур, с обязательной обратной связью. Он предназначен для поддержания установленных уровней задаваемых величин, например, температуры воздуха.
Устройство подает управляющий или выходной сигнал на устройство регулирования, на основании полученных данных от датчиков или сенсоров. Контроллеры обладают высокими показателями точности переходных процессов и качеством выполнения поставленной задачи.
Три коэффициента ПИД регулятора и принцип работы
Работа ПИД-регулятора заключается в подаче выходного сигнала о силе мощности, необходимой для поддержания регулируемого параметра на заданном уровне. Для вычисления показателя используют сложную математическую формулу, в составе которой есть 3 коэффициента – пропорциональный, интегральный, дифференциальный.
Возьмем в качестве объекта регулирования ёмкость с водой, в которой необходимо поддерживать температуру на заданном уровне с помощью регулирования степени открытия клапана с паром.
Пропорциональная составляющая появляется в момент рассогласования с вводными данными. Простыми словами это звучит так – берется разница между фактической температурой и желаемой, умножается на настраиваемый коэффициент и получается выходной сигнал, который должен подаваться на клапан. Т.е. как только градусы упали, запускается процесс нагрева, поднялись выше желаемой отметки – происходит выключение или даже охлаждение.
Дальше вступает интегральная составляющая, которая предназначена для того, чтобы компенсировать воздействие окружающей среды или других возмущающих воздействий на поддержание нашей температуры на заданном уровне. Поскольку всегда присутствуют дополнительные факторы, влияющие на управляемые приборы, в момент поступления данных для вычисления пропорциональной составляющей, цифра уже меняется. И чем больше внешнее воздействие, тем сильнее происходят колебания показателя. Происходят скачки подаваемой мощности.
Интегральная составляющая пытается на основе прошлых значений температуры, вернуть её значение, если оно поменялось. Подробнее процесс описан в видео ниже.
А дальше выходной сигнал регулятора, согласно коэффициенту, подается для повышения или понижения температуры. Со временем подбирается та величина, которая компенсирует внешние факторы, и скачки исчезают.
Интеграл используется для исключения ошибок путем расчета статической погрешности. Главное в этом процессе – подобрать правильный коэффициент, иначе ошибка (рассогласование) будет влиять и на интегральную составляющую.
Третий компонент ПИД – дифференцирующий. Он предназначен для компенсации влияния задержек, возникающих между воздействием на систему и обратной реакцией. Пропорциональный регулятор подает мощность до тех пор, пока температура не достигнет нужной отметки, но при прохождении информации к прибору, особенно при больших значениях, ошибки всегда возникают. Это может привести к перегреву. Дифференциал прогнозирует отклонения, вызванные задержками или воздействием внешней среды, и снижает подаваемую мощность заранее.
Настройка ПИД регулятора
Настройка ПИД-регулятора осуществляется 2 методами:
- Синтез подразумевает вычисление параметров на основании модели системы. Такая настройка получается точной, но требует глубоких познаний теории автоматического управления. Она подвластна только инженерам и ученым. Так как необходимо снимать расходные характеристики и производить кучу расчетов.
- Ручной способ основывается на методе проб и ошибок. Для этого за основу берутся данные уже готовой системы, вносятся некоторые коррективы в один или несколько коэффициентов регулятора. После включения и наблюдений за конечным результатом проводится изменение параметров в нужном направлении. И так до тех пор, пока не будет достигнут нужный уровень работоспособности.
Теоретический метод анализа и настройки на практике применяются крайне редко, что связано с незнанием характеристик объекта управления и кучей возможных возмущающих воздействий. Более распространены экспериментальные методы на основе наблюдения за системой.
Современные автоматизированные процессы реализуются как специализированные модули под управлением программ для настройки коэффициентов регулятора.
Назначение ПИД регулятора
ПИД регулятор предназначен для поддержания на требуемом уровне некой величины – температуры, давления, уровня в резервуаре, расхода в трубопроводе, концентрации чего-либо и т.д., изменением управляющего воздействия на исполнительные механизмы, такие как автоматические регулирующие клапана, используя для этого пропорциональную, интегрирующую, дифференцирующую величины для своей настройки.
Целью использования является получение точного управляющего сигнала, который способен контролировать большие производства и даже реакторы электростанций.
Пример схемы регулирования температуры
Часто ПИД регуляторы используются при регулировке температуры, давайте на простом примере подогрева воды в ёмкости рассмотрим данный автоматический процесс.
В емкости налита жидкость, которую нужно подогреть до нужной температуры и поддерживать её на заданном уровне. Внутри бака установлен датчик измерения температуры – термопара или термометр сопротивления и напрямую связан с ПИД-регулятором.
Для подогрева жидкости будем подавать пар, как показано ниже на рисунке, с клапаном автоматического регулирования. Сам клапан получает сигнал от регулятора. Оператор вводит значение температурной уставки в ПИД-регуляторе, которую необходимо поддерживать в ёмкости.
Если настройки коэффициентов регулятора неверны, будут происходить скачки температуры воды, при этом клапан будет то полностью открыт, то полностью закрыт. В этом случае необходимо рассчитать коэффициенты ПИД регулятора и ввести их заново. Если все сделано правильно, через небольшой промежуток времени система выровняет процесс и температура в ёмкости будет поддерживаться на заданной отметке, при этом степень открытия регулирующего клапана будет находиться в среднем положении.