Двойное ПИД регулирование

AndyGms

✩✩✩✩✩✩✩
1 Апр 2021
3
0
Есть задача сделать нагреватель, который должен греться до 30 градусов (с возможностью регулирования). Он в свою очередь нагревает воздух до 25 градусов (с возможностью регулирования).
Нагреватель работает через твердотельное реле использую PID и Шим.

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

При достижении температуры воздуха заданной температуры, допустимо снижение температуры нагревателя.

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

poty

★★★★★★✩
19 Фев 2020
2,956
886
Не очень понял в чём проблема. Смысла использовать ШИМ не вижу. Фактически есть два температурных датчика: 1. датчик нагревателя (дн) и 2. датчик воздуха (дв). В приоритете - датчик воздуха. Управляем только одним "прибором". Т.о.:
C++:
if (дв<25) {
    if (дн<30) включить_нагреватель();
    else выключить_нагреватель();
} else выключить_нагреватель();
Естественно, вызов функции включения/выключения нагревателя должен учитывать текущий статус обогревателя (т.е., если он уже выключен, то выключать его не нужно, и наоборот). Проверку тоже нет смысла делать часто, раз секунд в 10 будет точно достаточно.
 

AndyGms

✩✩✩✩✩✩✩
1 Апр 2021
3
0
Это понятно, при простом регулировании "bang-bang" так и будет, я хотел использовать ПИД для достижения более плавного и точного нагрева.

Вот как я вижу сию задумку:

--------------------------------------
ПИД1 регулятор нагревателя

Цель 30 градусов (максимальная температура)
Текущие показания например (26)

Диапазон ПИД1 0-255;

ПИД1 выдает 255.
----------------------------------------
ПИД2 нагрева воздуха

Цель 25 градусов (максимальная температура)
Текущие показания например (15)

Диапазон ПИД2 от 0 - (до выходного значения ПИД1 = 255);

ПИД2 выдает 255.


------------------------------------------------------------------------------------------------------------------------
Т.е. мы греем все на всю катушку

Теперь рассмотрим когда уже нагреватель достиг максимальной температуры и значение ПИД1 не максимально:

--------------------------------------
ПИД1 регулятор нагревателя

Цель 30 градусов (максимальная температура)
Текущие показания например (30)

Диапазон ПИД1 0-255;

ПИД1 выдает 50.
----------------------------------------
ПИД2 нагрева воздуха

Цель 25 градусов (максимальная температура)
Текущие показания например (20)

Диапазон ПИД2 от 0 - (50);

ПИД2 выдает 50. и меньше


------------------------------------------------------------------------------------------------------------------------
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
@AndyGms, А смысл? Усложнение, которое ни к чему не приведёт.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,097
630
@AndyGms, ПИД имеет смысл для квадрокоптеров, там реакция точная, и главное выверенная и быстрая нужна. А таким тормозным объектам как нагреватель, или воздух, вкл/выкл самое то.
 

AndyGms

✩✩✩✩✩✩✩
1 Апр 2021
3
0
изображение_2021-04-08_000724.png
Вот пример работы двойного ПИД регулирования описанный мной выше.
По второму графику видно, что перерегулирование температуры пола в пределах 0.25 градуса, что я считаю отлично.
И температура внутри помещения равна или на 0.2 градуса меньше установленной.
Схема рабочая.

По поводу усложнения, не согласен. Все равно система будет работать под управлением "Nodemcu" и добавление всего десяти строк, погоды не сделают, а точность, плавность вырастит. Частого включения на 100% и отключения происходить не будет.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
Во-первых, регулировка мощности скорее всего осуществляется ШИМ, так что Ваша цифра в 50 - всего лишь говорит о том, что питание будет включаться от 100 до 1000 раз в секунду (настройка порта) на 50/255 периода. Так что с частотой включения - это Вы загнули.
ПИМ2 ничем не управляет, поэтому в принципе бесполезен. Его функцию у Вас выполняет ПИМ1. Он, и только он влияет на результат.
В третьих, для точного регулирования нужно учитывать инерцию системы. Если её учитывать, не потребуется никаких ПИМ в принципе. Есть основы теории управления инерционными системами, в которых ПИМ нужен для ускорения сходимости управления, но действует это только в условиях возможности так называемой перерегулировки, когда можно подать сигнал заранее большей амплитуды, чем требуется, ограничив его по времени так, чтобы интегральное влияние соответствовало норме. В данном случае это невыполнимо: обогреватель всегда включается на полную мощность, вопрос только в частоте управления (ШИМ или через ОС с ограниченной частотой опроса). Фактически, используя расчет инерционности в текущей обстановке я всегда добьюсь лучшего результата, чем артифишиал ПИМ, построенный по понятиям.