AVR221: Дискретный ПИД-регулятор

01/05/2011 - 12:03
   

Особенности

• Простой дискретный алгоритм ПИД регулятора
• Поддерживается всеми микроконтроллерами AVR
• ПИД функция использует 534 байта flash памяти и 877 циклов процессора (IAR — low size оптимизация)

1 Введение

   Это руководство описывает простую реализацию дискретного пропорционально-интегрально-дифференциального (ПИД) контроллера.
 
   При работе с приложениями, где выходной сигнал системы должен изменяться в соответствии с опорным значением, требуется алгоритм управления. Примерами таких приложений являются блок управления двигателем, блок управления температурой, давлением, расходом жидкости, скорости, силы или других переменных. ПИД-регулятор может быть использован для управления любой измеряемой переменной.
   
   В течение долгого времени в области управления использовались многие решения, но ПИД-регуляторы могут стать "промышленным стандартом" из-за своей простоты и хорошей производительности.
 
   Для получения дополнительной информации о ПИД-регуляторах и их применении читатель должен обратиться к другим источникам, например, PID Controllers by K. J. Astrom & T. Hagglund (1995)
 
Рисунок 1-1. Типичные отклик ПИД-регулятора на ступенчатое изменение опорного сигнала

2. ПИД регулятор

   На рисунке 2-1 показана схема системы с ПИД-регулятором. ПИД-регулятор сравнивает измеренное значение процесса Y с заданным опорным значением Y0. Затем разница, или ошибка, E, обрабатывается для расчета нового входного процесса U. Этот новый входной процесс будет пытаться приблизить значение измеряемого процесса к заданному значению.
 
   Альтернативой системе управления с замкнутым контуром, является система управления с открытым контуром. Открытый контур управления (без обратной связи) во многих случаях не является удовлетворительным, и его применение часто невозможно из-за свойств системы. 
 
Рисунок 2-1. Управляющая система с замкнутым контуром на основе ПИД-регулятора

   В отличие от простых алгоритмов управления, ПИД-регулятор способен управлять процессом, основываясь на его истории и скорости изменения. Это дает более точный и стабильный метод управления.
 
   Основная идея в том, что контроллер получает информацию о состоянии системы с помощью датчика. Затем вычитает измеренное значение из опорного для вычисления ошибки. Ошибка будет обрабатываться тремя путями: обрабатываться в настоящем времени пропорциональной составляющей, возвращаться в прошлое, используя интегральную составляющую, и предвидеть будущее, через дифференциальную составляющую.
 
   Рисунок 2-2 показывает схемное решение ПИД-регулятора, где Тр, Ti, и Td обозначают постоянные времени пропорциональной, интегральной и дифференциальной составляющих соответственно. 
 
Рисунок 2-2. Схема ПИД-регулятора
 


2.1 Пропорциональная составляющая

   Пропорциональная составляющая (П) дает управляющий сигнал пропорционально вычисленной ошибке. Использование только одного пропорционального управления дает стационарную ошибку всегда, кроме случаев, когда управляющий сигнал равен нулю, а значение системного процесса равно требуемой величине. На рис. 2-3 стационарная ошибка в значении системного процесса появляется после изменения опорного сигнала (ref). Использование слишком большого П-члена даст неустойчивую систему.
 
Рисунок 2-3. Отклик П контроллера на ступенчатое изменение опорного сигнала


2.2  Интегральная составляющая

 
   Интегральная составляющая (И) представляет собой предыдущих ошибок. Суммирование ошибки будет продолжаться до тех пор, пока значение системного процесса не станет равно нужному значению. Обычно интегральную составляющую используют вместе с пропорциональной, в так называемых ПИ-регуляторах. Использование только интегральной составляющей дает медленный отклик и часто колебательную систему. Рисунок 2-4 показывает ступенчатый отклик И и ПИ-регуляторов. Как видите отклик ПИ-регулятора не имеет стационарной ошибки, а отклик И-регулятора очень медленной.
 
Рисунок 2-4. Отклик И- и ПИ-контроллера на ступенчатое изменение контролируемой величины

 

2.3  Дифференциальная составляющая

   Дифференциальная составляющая (Д) представляет собой скорость изменения ошибки. Добавление этой составляющей улучшает отклик системы на внезапное изменение ее состояния. Дифференциальная составляющая Д обычно используется с П или ПИ алгоритмами, как ПД или ПИД контроллеры. Большая дифференциальная составляющая Д обычно дает неустойчивую систему. Рисунок 2-5 показывает отклики Д и ПД- контроллера. Отклик ПД-контроллера дает быстрый рост значения процесса, чем П контроллер. Обратите внимание, что дифференциальная составляющая Д ведет себя по существу как фильтр верхних частот для сигнала ошибки и, таким образом легко делает систему нестабильной и более чувствительной к шуму.
 
Рисунок 2-5. Отклик Д- и ПД-контроллера на ступенчатое изменение опорного сигнала

 
   ПИД-регулятор дает лучшую производительность, поскольку использует все составляющие вместе. Рисунок 2-6 сравнивает П, ПИ, и ПИД-регуляторы. ПИ улучшает П, удалив стационарную ошибку, и ПИД улучшает ПИ более быстрым откликом.
 
Рисунок 2-6. Отклик П-, ПИ- и ПИД-регулятора на ступенчатое изменение опорного сигнала

 

2.4. Настройка параметров

   Наилучший путь найти необходимые параметры ПИД алгоритма - это использование математической модели системы. Однако часто подробного математического описания системы нет и настройки параметров ПИД-регулятора могут быть выполнены только экспериментально. Поиск параметров для ПИД-регулятора может быть сложной задачей. Здесь большое значение имеют данные о свойствах системы и различных условиях ее работы. Некоторые процессы не должны позволить перерегулирования процесса переменной от заданного значения. Другие процессы должны минимизировать потребление энергии. Также важнейшим требованием является стабильность. Процесс не должен колебаться ни при каких условиях. Кроме того, стабилизация должна наступать в течение определенного времени.
 
   Существуют некоторые методы для настройки ПИД-регулятора. Выбор метода будет зависеть в значительной степени от того, может ли быть процесс автономным для настройки или нет. Метод Циглера-Николса это известный не автономная метод настройки. Первым шагом в этом методе является установка И и Д коэффициентов усиления в нуль, увеличивая усиление П до устойчивого и стабильного колебаний (как можно ближе). Тогда критический коэффициент усиления Кс и период колебаний Pc записывается и П, И и Д значения корректируются с использованием Таблицы 2-1.
 
Таблица 2-1. Расчет параметров по методу Циглера-Николса 

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

2.5. Дискретный ПИД-регулятор

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

2.5.1. Описание алгоритма

   В отличие от простых алгоритмов управления, ПИД-регулятор способен манипулировать управляющим сигналом на основе истории и скорости изменения измеряемого сигнала. Это дает более точный и стабильный метод управления.
 
   На рисунке 2-2 показано схемное решение ПИД-регулятора, где Тр, Ti, и Td обозначают постоянные времени пропорциональной, интегральной, и дифференциальной составляющих соответственно.
 
Передаточная функция системы, изображенной на рисунке 2-2 имеет вид:
 
 
Это дает U по отношению к e в интервале времени

 
Аппроксимируем интегральную и диффиренциальную составляющие, чтобы получить дискретный вид

 
Где n является дискретным шагом времени t.

Это дает контроллер:
 
Где 



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



3. Реализация ПИД-регулятора на Си

  К этому документу прилагается рабочее приложение, реализованное на C. Полную описание исходного кода и информации о компиляции можно найти в файле "readme.html".

Рисунок 3-1. Блок-схема демонстрационного приложения


  На рисунке 3-1 показана упрощенная схема демо приложения.

   ПИД-регулятор использует структуру для хранения своего статуса и параметров. Эта структура инициализируется функцией main, и только указатель на него передается функциям Init_PID() и PID(). 
 
   Функция PID () должна быть вызвана для каждого интервала времени T, это задается таймером, который устанавливает флаг PID_timer, когда время выборки прошло. Когда PID_timer флаг установлен, основная программа читает эталонное значение процесса и системное значение процесса, вызывается функция PID () и выводится результат на управляющий вход.
   Для повышения точности p_factor, i_factor и  d_factor увеличиваются в 128 раз. Результат ПИД алгоритма позже уменьшается путем деления на 128. Значение 128 используется для обеспечения оптимизации при компиляции.



Кроме того, влияние Ifactor и Dfactor будет зависеть от времени T.



3.1. Integral windup

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

4. Дальнейшее развитие

   ПИД-регулятор, представленый здесь, является упрощенным примером. Контроллер должен работать хорошо, но в некоторых приложениях может быть необходимо, чтобы контроллер был еще более надежным. Может быть необходимо добавление насыщения коррекции в интегральной составляющей, на основе пропорциональной составляющей только на значении процесса.
 
   В расчете Ifactor и Dfactor время выборки T это часть уравнения. Если время выборки Т использоваться намного меньше или больше чем на 1 секунду, точность либо Ifactor или Dfactor будет недостаточной. Можно переписать алгоритм ПИД и масштабирования, чтобы точность интегральной и диффиренциальной составляющих сохранилась.

5. Справочная литература

K. J. Astrom & T. Hagglund, 1995: PID Controllers: Theory, Design, and Tuning.  
International Society for Measurement and Con.

6. Файлы

AVR221.rar

Перевел Кирилл Владимиров по просьбе ChipEnable.Ru 

Комментарии   

# Pashgan 01.05.2011 16:28
Последние дни у меня не было возможности писать материал, поэтому пришлось выложить кривоватый перевод. Не успеваю его исправить, так как уезжаю на несколько дней.
Ответить | Ответить с цитатой | Цитировать
# Артём 19.05.2011 08:55
Добавьте, пожалуйста, ссылку на оригинал статьи (а то перевод действительно кривоватый).
Ответить | Ответить с цитатой | Цитировать
# noonv 01.05.2011 17:15
диффЕренциально го
Ответить | Ответить с цитатой | Цитировать
# greenvovk 04.05.2011 14:48
Дядьку! Де ж ты был, когда я ТАУ в универе штудил:) Огром6ное спасибо за материал. Буду ждать с нетерпением нового материала.
Ответить | Ответить с цитатой | Цитировать
# Валентин 19.05.2011 15:24
Зачет! Столько формул, голова кругом идет))
Ответить | Ответить с цитатой | Цитировать
# sasha_m1982 24.05.2011 20:07
Добавьте, пожалуйста, ссылку на оригинал статьи (а то перевод действительно кривоватый).
http://www.atmel.com/dyn/resources/prod_documents/doc2558.pdf
Ответить | Ответить с цитатой | Цитировать
# bigelephant 25.05.2011 13:52
Pashgan огромное вам спасибо за ваш сайт.Вот накопал и инете материал для ПИД .Есть замечательный блок CONT_C (FB41) контролера Simatic.Его можно легко адаптировать для домашних нужд:).

http://plc4good.org.ua/view_post.php?id=51
Ответить | Ответить с цитатой | Цитировать
# Pashgan 17.09.2011 21:31
Пожалуйста.Если материал принес пользу хотя бы одному человеку - то я уже себя оправдал.
Ответить | Ответить с цитатой | Цитировать
# aurysto 18.11.2011 00:40
Паща! ты охиренный чувак...и охиренное тебе спасибо за твои труды
Ответить | Ответить с цитатой | Цитировать
# delphi 18.03.2012 20:42
На графиках есть ошибки и допустили их сотрудники Atmel - авторы апноуты. Подумайте, где именно.
Ответить | Ответить с цитатой | Цитировать
# kyb 20.05.2015 17:44
Цитирую delphi:
На графиках есть ошибки и допустили их сотрудники Atmel - авторы апноуты. Подумайте, где именно.

Прям-таки препод. :)
Ответить | Ответить с цитатой | Цитировать
# sirQWERTY 28.03.2016 19:42
Если не ошибаюсь, при п-регулировании управляемый сигнал все-такт догонит управляющий и будет ему соответствовать . Эти два сигнала не будут соответствовать друг другу только если управляющий сигнал постоянно изменяется во времени. Чтобы этого избежать, добавлена интегральная составляющая.
Ответить | Ответить с цитатой | Цитировать
# John 16.08.2016 07:22
Что притянет управляемый к управляющему при П? Он просто устанавливается на каком-то "своем" уровне. Только интегрирующая часть подтягивает одно к другому
Ответить | Ответить с цитатой | Цитировать
# Ганс 03.06.2015 06:40
Привет!

Вот читаю Цитата:
На рисунке 2-2 показано схемное решение ПИД-регулятора, где Тр, Ti, и Td
Кто видит на рисунке постоянную времени Tp ?
Ответить | Ответить с цитатой | Цитировать
# Васьок 10.07.2015 13:37
Хорошая тема, этот ПИД, в своё время реализовывал, но в виде ПИ-регулятора, без Д. Делал плату управления инкубатором. Дифф.-составляю щая в нём нафиг не нужна, время выхода на рабочую температуру пол часа. И очень важна высокая точность, а Д-составляющая как говорилось выше увеличивает шумы. Единственное "но" в моём случае, это подгонка констант. Как уже говорил - время выхода в рабочий режим пол часа, итого подстроил, включил, ждёшь пол часа и наблюдаешь за характером выхода на р. точку. Всплеск. Подстраиваешь константу. Выключаешь. Открываешь крышку, выгоняешь тёплый воздух, закрываешь, снова включаешь. И так ушло 2 дня в перерывами между другими делами. Но особый облом был, когда выяснилось что, загруженный и не загруженный инкубатор имеет разные характеры выхода на р. точку. Снова пришлось перенастраивать . И в третий раз пришлось настраивать, когда клиент возжелал засунуть термодатчик в пластиковую трубку-стойку. Наигралсо, "дай боже".
Ответить | Ответить с цитатой | Цитировать
# trengtor 09.01.2016 13:52
Я верно понимаю, что на входе этого PID нужно масштабировать не только к-ты, но и контролируемый параметр с уставкой?
Ответить | Ответить с цитатой | Цитировать
# John 15.08.2016 04:27
А смысл? Я пробовал - только больше вычислений. С масштабирование м просто К будут другие, а в итоге регулятор будет работать так же.
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий

Защитный код
Обновить