Урок 39. Разработка контроллера элемента Пельтье. Интегральный регулятор мощности.

Ардуино-контроллер элемента Пельтье

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

Предыдущий урок     Список уроков     Следующий урок

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

 

Будем разрабатывать регулятор мощности, но сначала узнаем минимальные сведения о регуляторах.

 

Общие сведения о регуляторах.

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

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

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

  • регулируемый параметр;
  • и регулирующий элемент.

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

Для нашего регулятора мощности:

  • регулируемый параметр – электрическая мощность на нагрузке;
  • регулирующий элемент – широтно-импульсный модулятор.

Структурная схема

Кто-то задастся вопросом, что является регулирующим элементом в нашей системе – коэффициент заполнения ШИМ или ключевой транзистор электронной схемы. Алгоритм регулятора мы реализуем программным способом. Для программы регулирующий элемент – коэффициент заполнения ШИМ.

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

В нашем случае на регулятор поступает измеренная мощность с выхода системы и заданное значение мощности. По определенному алгоритму регулятор вычисляет значение коэффициента заполнения ШИМ, за счет которого и меняется мощность на нагрузке.

Как у всего на свете у регулятора есть критерии оценки качества. Это:

  • Скорость регулирования (быстродействие) – время уменьшения ошибки регулирования до заданной величины.
  • Точность регулирования – ошибка параметра регулирования в установившемся состоянии.
  • Устойчивость регулятора – отсутствие колебаний параметра регулирования.

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

 

Интегральный регулятор.

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

Итак, мы должны поддерживать значение мощности на выходе, меняя ШИМ. Самый простой, интуитивный способ это:

  • сравнить заданную мощность с измеренной;
  • если заданное значение больше реального, то ШИМ увеличить на 1 ;
  • если заданное значение меньше реального, то ШИМ уменьшить на 1.

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

Для более качественного регулирования необходимо прибавлять к текущему значению ШИМ величину, зависящую от ошибки параметра регулирования.

Математически закон управления интегрального регулятора выглядит такФормула алгоритма

  • Kw – коэффициент заполнения ШИМ;
  • Ki – интегральный коэффициент;
  • e(t) – ошибка рассогласования, т.е. разница между заданным и реальным значениями регулируемого параметра.

Выходная функция интегрального регулятора пропорциональна интегралу по времени от отклонения регулируемого параметра.

Интегральный регулятор это регулятор последовательного приближения. Большая ошибка – он изменяет ШИМ большими шагами. Маленькая ошибка он медленно ее компенсирует. Ошибка накапливается в интеграторе и сколь малой она не была бы, все равно со временем она окажет воздействие на регулирующий элемент.

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

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

  • Вычисляется ошибка рассогласования e, как разность между заданной мощностью Pset и измеренной на выходе Preal :   e = Pset – Preal.
  • Ошибка рассогласования e умножается на интегральный коэффициент Ki и накапливается в регистре-интеграторе RgI.
  • Целые разряды регистра поступают на широтно-импульсный модулятор.

Как правило, интегратор имеет достаточно большую разрядность с дробной частью. А ШИМ может воспринимать только целые значения. Здесь нет противоречия. Значения меньше еденицы постепенно накапливаются в интеграторе и переходят в целую часть, а значит и в ШИМ. Это позволяет при малых ошибках рассогласования или малом значении Ki уменьшать быстродействие регулятора. Малые значения будут долго переходить в целую часть.

Интегральные регуляторы обладают:

  • высокой точностью;
  • низкой скоростью регулирования;
  • посредственной устойчивостью, зависящей от скорости регулирования.

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

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

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

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

 

Программа регулятора мощности.

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

Нам нужны следующие переменные и константы:

float measureP; // измеренная мощность на нагрузке, Вт – эта переменная в программе уже есть.

Добавим:

float setPower; // заданная мощность
float regPwrInt=0; // интегральное звено регулятора мощности
#define koeffRegPwrInt 0.05 // интегральный коэффициент регулятора мощности

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

regPwrInt = regPwrInt + (setPower - measureP) * koeffRegPwrInt;

И еще надо перегрузить целую часть из интегратора в ШИМ:

analogWrite(9, (unsigned int) regPwrInt); // ШИМ

В принципе эта программа уже работает. Можно временно задать мощность равной, например, 5 Вт:

setPower = 5; // временно заданная мощность 5 Вт

вставить регулятор в цикл 20 мс и проверить. Но не хватает еще кое-каких операций.

 

Ограничение интегратора.

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

if (regPwrInt < 0) regPwrInt=0;     // ограничение снизу  
if (regPwrInt > MAX_PWM) regPwrInt=MAX_PWM; // ограничение сверху

"Мертвое время" ШИМ.

Есть еще одна тонкость работы с ШИМ. Импульсы на выходе ШИМ переключают реальный ключ. При уменьшении коэффициента заполнения импульсы включения ключа могут стать очень короткими. Для нашего ШИМ значение 1 соответствует импульсу длительностью 62,5 нс. За такое короткое время ключ не будет успевать открываться полностью и нормально работать не будет. Скорее всего при нашем низковольтном питании (12 В) беды не будет. Но в высоковольтных цепях источников питания (300 В и более) такая коммутация приводит к катастрофическим последствиям. Поэтому хороший стиль управления ШИМ – это запрет слишком коротких импульсов управления.

Введем два временных отрезка, на которых запретим работу ШИМ. Один отрезок вблизи нуля, второй около максимального значения. Общепринято длительность этих отрезков называть “мертвым временем” ШИМ (dead time). Алгоритм простой:

  • Если значение ШИМ меньше “мертвого времени”, то ШИМ равен 0.
  • Если значение ШИМ больше разницы максимального ШИМ и “мертвого времени”, то ШИМ равен максимальному значению.

Реализация этого алгоритма в программе выглядит так:

unsigned int  pwm = (unsigned int)regPwrInt;  // перевод в ШИМ  
if (pwm < DEAD_TIME) pwm=0;  
if (pwm > (MAX_PWM - DEAD_TIME)) pwm=MAX_PWM;  
analogWrite(9, pwm); // ШИМ

Я задал “мертвого времени” равным 500 нс:

#define DEAD_TIME 8     // мертвое время ШИМ (* 62,5 нс)

Выключение регулятора.

Последнее, что надо добавить это быстрое выключение регулятора. Я говорил, что регулятор должен медленно изменять мощность на элементе Пельтье. Но это не касается аварийного выключения. При setPower=0 будем выключать регулятор мгновенно.

Полностью программный блок интегрального регулятора мощности выглядит так:

    //------------------ регулятор мощности
    if ( setPower != 0) {
      regPwrInt = regPwrInt + (setPower - measureP) * koeffRegPwrInt;
      if (regPwrInt < 0) regPwrInt=0;     // ограничение снизу
      if (regPwrInt > MAX_PWM) regPwrInt=MAX_PWM; // ограничение сверху
      // мертвое время ШИМ
      unsigned int  pwm = (unsigned int)regPwrInt;  // перевод в ШИМ
      if (pwm < DEAD_TIME) pwm=0;
      if (pwm > (MAX_PWM - DEAD_TIME)) pwm=MAX_PWM;   
      analogWrite(9, pwm); // ШИМ
    }
    else {            // выключение
      regPwrInt=0;
      analogWrite(9, 0); // ШИМ     
    }

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

Serial.print(" p="); Serial.print(regPwrInt, 2);  // интегральное звено регулятора мощности

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

 

Проверка и настройка регулятора.

Теперь проверим работу регулятора на реальной нагрузке и определим интегральный коэффициент.

Схема из урока 36, нагрузка 20 Ом, как в уроке 38.

Ардуино-контроллер элемента Пельтье

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

Сначала я задал интегральный коэффициент равным 0,1.

#define koeffRegPwrInt 0.1 // интегральный коэффициент регулятора мощности

Запустил монитор последовательного порта и увидел такую картину.

Настройка устройства

Регулятор работает. Заданную мощность (5 Вт) устанавливает за 14-15 сек.

Замкнул один резистор. Мощность резко изменилась, но регулятор за 5-6 сек привел ее в норму.

Настройка устройства

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

Установил интегральный коэффициент равным 1 и увидел следующее.

Настройка устройства

Мощность устанавливается на заданном уровне примерно за 1 сек и регулятор продолжает работать устойчиво.

Теперь коэффициент 10.

Настройка устройства

Работает еще быстрее, но ШИМ начал “скакать” на 2-5 единицы. Регулятор работает не устойчиво. Такой коэффициент использовать нельзя.

Чисто в демонстративных целях я задал коэффициент равным 20.

Настройка устройства

Колебания достигли 30 единиц ШИМ. Вот осциллограмма напряжения на выходе. Все пошло в разнос.

Осциллограмма на выходе

Выбирайте коэффициент сами. Я думаю, что он не должен превышать 0,5. Я пока установил медленный коэффициент 0,05.

Настройка устройства

Регулятор устанавливает заданную мощность 5 Вт за 30 сек. При большей мощности будет работать еще медленнее. Но тем лучше для элемента Пельтье. Да и коэффициент всегда можно изменить.

Резюме.

Я хочу подчеркнуть, что мы добавили к программе контроллера в этом уроке.

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

 

Теперь регулятор температуры, который мы создадим в следующем уроке, не будет работать с ШИМ и АЦП. Он будет работать с переменной setPower.

Предыдущий урок     Список уроков     Следующий урок

37 комментариев на «Урок 39. Разработка контроллера элемента Пельтье. Интегральный регулятор мощности.»

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

    • Связь отрицательная обратная. А интеграл это передаточная функция этой связи.

    • Ошибка измерения не накапливается. Накапливается компенсирующее воздействие на нее. Накапливается в интеграторе. На схеме регистр-накопитель RgI. Попробуйте представить, просчитать что будет происходить при ошибке.

    • Это число с выхода регистра. Ошибка прибавляется к содержимому регистра и сумма кладется в регистр.
      Вот математика накапливающего регистра:
      RgI = RgI + e

  2. еще больше запутали)) е — я так понимаю пропорциональная составляющая ошибки которую мы и интегрируем

    • Формула же простая. Представьте, что есть ошибка и просчитайте, что будет происходить с RgI, а значит и с ШИМ. Вы поняли, что математика выполняется через равномерные промежутки времени.

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

    • В RgI хранится значение ШИМ, только с дробной частью. Мы в него добавляем и накапливаем ошибку умноженную на коэффициент Ki. Ki определяет как быстро мы компенсируем ошибку. В результате ШИМ меняется, ошибка уменьшается, к RgI прибавляется все меньшее значение, ошибка становится равной 0 и RgI, а значит и ШИМ останавливаются.

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

    • Как правило он меньше 1. Но в общем случае на него влияют разрядность ошибки (АЦП) и разрядность ШИМ. Если бы ШИМ был например, 32 разряда, то Ki наверняка бы был больше 1. А пойдет система в разнос или нет зависит от многих факторов и в том числе от времени дискретизации.

  5. насколько я знаю в пид ноль может иметь пропорциональная ошибка — нет ошибки. дифференциальная ошибка — скорость ошибки не меняется. а вот интеграл всегда имеет значение при котором система в покое. ошибка отработана

    • Статическая ошибка до 0 может быть скомпенсирована только интегральным регулятором. ПИД регулятор буду в следующем уроке объяснять.

      • Сергей. Возьмите бумагу, ручку и калькулятор. Представьте, что Вы стабилизируете значение ШИМ. Т.е. ШИМ это и есть измеренное значение. Заданное значение пускай будет равно 100, начальное значение ШИМ = 0, Ki = 0.1. И посчитайте шаг за шагом. Вы увидите, как ШИМ будет увеличиваться, ошибка уменьшаться и в какой-то момент будет равна 0.

  6. совершенно верно Эдуард. наш регулятор начинает работать с 5в если я правильно понял. вот это и есть начальная точка нашего интегратора

  7. при включении устанавливаем шим равный пяти вольтам и начинаем регулировать

  8. Нет ШИМ равного 5 В. Никто не знает какой ШИМ надо устанавливать для 5 В. В этом и смысл регулятора — определить ШИМ для нужного напряжения или мощности на выходе.

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

  10. Я приводил пример такого алгоритма в статье и писал о недостатках. Просчитайте пример с теми данными, которые я привел и все поймете на практике!

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

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

  13. Связь там всегда отрицательная. Положительная связь будет если ошибка будет считаться наоборот e = Preal — Pset. А устойчивость системы считается обычно по критерию Найквиста, но я об этом даже говорить не хочу.

  14. критерию Найквиста это слишком сложно лучше выбрать начальные условия в заведомо устойчивой области. ограничить скорость регулирования например один разряд за период 20млс если есть ошибка. макс и мин значения шим. и если за определенный период при максимальном шиме не достигнута нужная температура то двери холодильника открыты или авария.
    спасибо Эдуард за диалог я понял ваш регулятор но интегральная составляющая всегда показывает насколько наш регулятор «черепаха» — медленно отрабатывает ошибку

  15. А зачем ему быстро отрабатывать? Чтобы угробить элемент Пельтье? В контроллере холодильник на PIC контроллере регулятор нижнего уровня отрабатывает даже пульсации сети. А регулятор мощности работает медленно.

  16. так при большой ошибке он может это делать а ему надо запретить из условий эксплуатации регулируемого элемента

  17. Загрузил по ссылке программу, комментарии на русском не могу прочитать — что там за кодировка?

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *