Как реализовать самонастраивающийся PID-подобный контроллер

15

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

  • Выход может быть только вкл. или выкл. с фиксированными частотами цикла (~ 2-10 в час)
  • Растение реагирует медленно (измеримые изменения температуры занимают много времени> 10 минут).
  • Растение теряет температуру в зависимости от условий окружающей среды.
  • уставка может изменяться большими шагами в зависимости от потребностей пользователя.

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

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

Использование фактического PI или PID не является обязательным требованием. Я открыт для использования Fuzzy-Logic, если он помогает, также у меня есть алгоритм машинного обучения на чипе, который моделирует отклик системы и потери тепла (линейные прибл.), Который предлагает информацию об измеренном отклике шага . Просто не знаю, что делать с этой информацией.

Несколько постов предполагают, что я мог бы использовать данные моделирования для настройки PI on-line, а также руководство по лабораторному просмотру, в котором предлагается использовать Fuzzy-Logic для настройки PI.

Мой вопрос заключается в том, каков наилучший подход для такого сценария (например, PID, fuzzy-pid, свертка и т. Д.) И как бы я мог реализовать его в программном обеспечении / на практике.

Я не EE, поэтому любой вклад будет принята с благодарностью.

MandoMando
источник
1
Я написал ответ об использовании симплексного алгоритма для автоматической настройки ПИД-контроллеров на Robotics SE, который может представлять интерес.
embedded.kyle
@ embedded.kyle отлично, я понимаю симплекс / величайший акцент. Можете ли вы сказать, что он использовал для x1, x2? У меня проблемы с привязкой их к PID-константам.
MandoMando
1
Это было какое-то время, но я думаю, что мы использовали что-то вроде x1 = P, x2 = I, x3 = D. x0, центр тяжести, это то, что измерение стабильности наиболее важно для вас. В моем приложении управления двигателем у нас было две петли. X0 одного было скоростью, а x0 другого было током. Смотрите здесь для получения дополнительной информации.
embedded.kyle
@ embedded.kyle ты не против превратить свой комментарий в ответ? добавьте любую дополнительную информацию, если хотите. -thx
MandoMando
Щедрость? О, парень! Сделано и сделано.
embedded.kyle

Ответы:

7

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

Метод Нелдера-Мида

Из этой статьи :

Например, в нашем случае настройки параметров ПИД {K P , K I , K D } симплекс - это тетраэдр. Нелдер-Мид генерирует новую тестовую позицию симплекса, экстраполируя поведение целевой функции, измеренной в каждой контрольной точке, расположенной как симплекс. Затем алгоритм выбирает замену одной из этих контрольных точек новой контрольной точкой, и, таким образом, методика прогрессирует.

Мое конкретное приложение было для управления двигателем. У нас было две петли, петля управления током ПИД и петля управления скоростью ПИ. Мы установили наши вершины в P, I и D соответственно и запустили статистику на выходе цикла. Затем мы снова и снова запускали отражение, расширение, сжатие и уменьшение до тех пор, пока сгенерированные цели контроля тока или скорости не оказались в пределах нескольких стандартных отклонений.

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

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

Тем не менее, вы можете запустить две копии ПИД-регулятора. Тот, который был «живым» и фактически контролировал процесс. И секунду, которая постоянно настраивалась автоматически при подаче на те же входы, что и на «живой» контроллер. Когда выход автоматически настраиваемого контроллера становится «лучше» или более стабильным, вы можете поменять коэффициенты на «живой» контроллер. Затем контроллер будет вносить исправления в процесс, пока не будет достигнута желаемая производительность. Это предотвратит колебания, которые могут восприниматься пользователем во время автонастройки. Но если входы резко изменяются и ПИД-регулятор больше не является оптимальным, автонастройка может заменить новые коэффициенты, когда они станут доступными.

embedded.kyle
источник
Метод ЯМ требует, чтобы его дикие точки выполнялись для целевой функции (т.е. реального мира пользователя). Тем не менее, я считаю, что грубая модель (пространственное состояние?) Может быть построена на самом микроконтроллере на основе измерений датчиков. Затем он будет запускать ваш предложенный «теневой» ПИ-контроллер, поскольку он оптимизирует. Я не уверен в этом чрезмерном убийстве, так как может быть возможно настроить PI на известную настройку, а затем масштабировать Kp и Ki на основе показаний датчика и реакции системы. В любом случае, молодец, сэр.
MandoMando
@MandoMando Большое спасибо! И мне очень нравится термин «теневой» ПИ-контроллер.
embedded.kyle
3

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

Я бы предположил, что хорошим подходом может быть наличие контроллера, когда нагреватель включен, непрерывно оценивать, как сильно нагреется регулируемое устройство, если выходной сигнал будет немедленно отключен, и температуру, до которой оно в конечном итоге охладится, если нагреватель был включен как можно скорее после этого. Также оцените, какими будут эти значения, если нагреватель оставить включенным еще на одну секунду, две секунды, три секунды и т. Д. Выключите нагреватель, когда эти значения будут такими же хорошими, как они собираются получить. Затем, когда обогреватель выключен, начните выполнять аналогичные вычисления, но поменяйте местами функции включения / выключения, нагрева / охлаждения и т. Д., Чтобы решить, когда включить снова. В зависимости от теплового поведения системы может потребоваться использовать прогнозную стратегию «мин / макс», чтобы заглянуть на шаг или два вперед.

Supercat
источник
1

Возможность изменения состояния управления (вкл или выкл) 2-10 раз в час не поддается управлению рабочим циклом. Выходной сигнал контура PI будет управляющим сигналом, величина которого изменяется в зависимости от ошибки, и ваша установка может (реально) принимать только двоичный вход (выключен или включен), поскольку «частота» управления допустимый рабочий цикл составляет долю герц.

Вы можете упростить вещи и перейти к гистерезисному контролю:

  • система включается, когда температура пересекает нижний предел
  • система выключается, когда температура пересекает верхний предел
  • между верхним и нижним пределами имеется достаточное расстояние, чтобы предотвратить отскок управляющего выхода
Адам Лоуренс
источник
Идея состоит в том, чтобы взять вывод PI, скажем, 60% и преобразовать во время = 60% цикла -> 0,6 x 30 минут -> 18 минут в течение и 12 минут в течение 30-минутного цикла. контроллер bang-bang, который вы предлагаете, не гарантирует сохранение требуемой частоты цикла (скажем, включение, не более n раз в час) и в то же время сохранение низкой ошибки. для системы может потребоваться временное превышение на некоторое время, чтобы сбалансировать потери в нерабочее время.
MandoMando
1

Типичный (хотя по общему признанию упрощенный способ сделать это) называется планированием усиления. Это классический подход к нелинейному управлению, когда у вас есть наблюдаемая переменная (или переменные), с которой ваша система изменяет (параметр планирования). В вашей системе этой переменной, скорее всего, будет температура. Идея состоит в том, что вы создаете список коэффициентов усиления контроллера при различных значениях параметра планирования (температуры), и при изменении параметра планирования вы используете эти коэффициенты усиления в своем контроллере (будь то PI, PID, обратная связь по состоянию или что-то еще). Если это звучит очень просто, это потому, что это так. Однако это работает и используется в некоторых очень сложных системах.

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

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

Matt
источник
0

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

Скотт Сейдман
источник