PID: коэффициенты, или битва радиатора отопления с тёплым полом

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

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

Приводы работают на включение-выключение, и, кстати, у них всё оказалось хорошо с током питания - максимум 250 ма по 24 вольтам, то есть питать через витую пару - можно. Я очень переживал, что витой пары не хватит и придётся городить что-то с 48->24 вольта или типа того. Обошлось.

Я надеялся, что смогу загнать приводы ШИМ-ом в пропорциональный режим. Надежде сбыться не удалось - ведут себя крайне нелинейно. При 50% скважности они закрываются (клапаны нормально открытые) полностью. В итоге я решил, что ШИМ будет устроен иначе - точкой усреднения будет сама батарея. Клапан управляется ШИМ-ом с 500-секундным циклом, и, возможно, я перейду к 1000 сек. Дело в том, что он по спеке открываться-закрываться может минутами. Это означает, что время цикла должно быть таким, чтобы время открывания-закрывания не сильно влияло на линейность. В принципе, было бы правильно запрограммировать dead time - собственно, вычитать из времени цикла время открывания-закрывания, но реально трудно оценить, в каких пределах оно будет гулять. Вообще - есть такие клапаны с контактной группой, может быть, они позволят чётко определять время срабатывания, но у меня группы нет.

Ок, теперь к главному вопросу. В комнате - постоянно включенный радиатор, управляемый радиатор и тёплый пол. Датчики температуры - на потолке, сразу под радиатором, на уровне груди и в полу. Первые три тупо усредняются и дают температуру в помещении, последний используется исключительно для ограничения нагрева тёплого пола - предел в 33 градуса.

Задача стояла так: обеспечить алгоритм управления радиатором и тёплым полом по датчику температуры помещения так, чтобы основная энергия поставлялась радиатором, но пол в статичном режиме был комфортно тёплый.

За полмесяца экспериментов я пришёл к вот какой схеме PID-регулятора.

Линейная часть: 4 градуса расхождения уставки и факта дают 100% мощности пола и радиатора. Но - 100% диапазона мощности пола отображается на диапазон 20-100% мощности радиатора.

Дифференциальная часть: минус 0.5 градуса за 2 минуты = 400% мощности. При этом дифференциальная часть ограничена 60% мощности и влияет только на пол. Радиатор всё равно слишком медленно реагирует, нет смысла.

Интегральная часть считается с постоянной времени 0.65 часа и в секунду интеграл приращивается на 1/25 линейной части (-100...100). То есть при 4 или более градусах разницы уставки и факта интегральная часть прирастает на +4...-4 в секунду. Интеграл упирается в +-100 и дальше не растёт.

Пол получает в общую сумму мощности 1/2 интегральной части, также отображённой 20-100 на 0-100 мощности пола. То есть пока интеграл до 20 не дорастёт, пола он не включает.

Радиатор получает в общую сумму 100% интегральной части без ограничений.

Общая схема: считаются пропорциональная, интегральная и дифференциальная части, режутся до 0-100. Суммируются в нужной пропорции и с нужными преобразованиями в мощность пола и мощность радиатора, которые, затем, тоже ограничиваются 0-100 и идут на ШИМ модуляторы.

Как я уже говорил, ШИМ радиатора - 500 секунд. ШИМ пола - 10 секунд. Так что он реагирует довольно быстро.

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

Только такая система будет устойчивой и отзывчивой!

ХИНТ: одним из первых НИРов, в котором я принимал участие по молодости лет в качестве электрика-прибориста, был НИР по оптимизации температуры в кабине МиГ-31.
Лётчики-испытатели жаловались, что их бросает то в жар, то в холод - а задатчик температуры на приборной доске не работает.
Зписи КЗА подтвердили - система терморегулирования в кабине находится в автоколебаниях от максимума до минимума: а в трубах кондиционера температура экстремальная - в горячей трубе +70, а в холодной -40. И расход такой, что в пару минут кабину продувает чуть ли не до этих температур.
Выяснилось, что датчик температуры находится под приборной доской - и обдувается очень плохо: его постоянная времени при таком обдуве достигала пяти минут. А перехватчик за это время мог от земли с наружной температурой +20 добраться до стратосферы, где -60. А мог и разогнаться до трёх махов - с температурой торможения потока за 300 градусов.
В общем, бедные-бедные пилоты!

Как водится, переделки допустимы минимальные - каждая из служб насмерть стоит за свои права и не хочет переделывать ни за что.
Потому датчик перенести к входу системы вентилирования - решение правильное, но плохое.
В конце концов сделали аппендикс и по тоненькой трубочке часть потока дунули в датчик. И сразу всё заработало - постоянная времени составила несколько секунд и миксер подавал воздух заданной температуры, а не плясал от и до...

Твоя задача - аналогичная и потому начни с правильной процедуры измерения. Тогда всё остальное будет очень просто...
"Поставь датчики температуры непосредственно на нагреватели" - эта мысль меня посещала, в планах датчики на батареях есть. Про контур управления по температурам нагревателей я тоже думал и, наверное, это разумный подход.

Но это закрывает вопрос про ШИМ управления радиатором. Вопросы про параметры основного PID регулятора остаются.
ПИД может и не понадобиться - в силу небольшой глубины ОС.

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

Другое дело, что отдельный вопрос - что такое температура батареи. Теплоноситель идёт по ней медленно и верх у входа при включении сильно горячее всего остального, а низ в дальнем углу от подключения прогревается долго.
"Это" — в смысле, замыкать feedback loop по температуре батареи. Формально разница будет, но придется ловить.. ну не доли, но разницу между 52 и 54 допустим. В комнате при этом будет от +15 до +30.

"низ в дальнем углу от подключения прогревается долго." — по идее это ни на что не влияет, потому как зависит только от гидродинамики самой батареи. Ну, какие-то эффекты второго порядка там будут за счет того, что хорошо прикрытый кран не сможет прокачать всю батарею, но это-то как раз минимизируется выбором точки замера.
У нас совершенно аналогичная ситуация в банальном автоведре в котором сломались сосалки воздуха в датчики климат-контроля. В итоге этот климат-контроль то пытается тебя изжарить, задувая в салон половину тепла от мотора, то - заморозить, с таким же рвением задувая уличный мороз. Действует весьма ободряюще, впрочем.
вчера что то вспомнил вдруг - как там прогресс:)
Математика для меня слишком сложна, а вот на счёт шим есть некое беспокойство... Не нравится когда Т рывками гуляет, все вот эти расширения/сжатия материала. У нас под утро на ТП видимо вводят новые параметры, трубы начинают трещать, сверху всё сыпется бр...

ps охлаждение для полки с жесткими дисками которые частью в спящем режиме хочу предусмотреть режим вентиляции, что бы сделать как можно плавнее перепады, т.е. не охлаждать их до конца если не крутятся и тд.
теплые полы - вещь настолько инерционная, что обычно хватает обычного вкл/выкл с небольшим гистерезисом, а PID, а тем более D в них, как мне кажется, ни к чему
если пол уходит по температуре "вразнос", то скорее всего, его мощность выбрана слишком большой - можно смело ограничивать вкачиваемую энергию

Edited at 2016-11-22 12:57 pm (UTC)
Это залитые в бетон. У меня плёночные прямо под паркетной доской, они быстро реагируют.
IMHO
Интересная задача :)
Такое впечатления, что не хватает обратной связи для стабилизации.
Определение срабатывание клапана я бы сделал с помощью самого простого термистора.
Дифференцированием его показаний - пошла тепленькая - открылся и т.д. :)
Ну и наверное надо экспериментально определить динамические и
тепловые характеристики систем.
Составить уравнения и интегрировать :)
Re: IMHO
Угу, то есть термодатчик ставим прямо за клапаном и используем его только для подавления dead time? Это можно, но с закрытием фокус уже не пройдёт - инерция велика, остывать радиатор будет долго. Можно пытаться оценивать по градиенту, конечно...

Но, может быть, проще поступить так, как предложил предыдущий комментатор? Сделать петлю по температуре середины радиатора и управлять именно температурой?
Тут, мне кажется надо делать два последовательных пид-регулятора. Алгоритм такой: теплый пол- на минимуме, батареи регулируются своим ПИДом. Если, при максимальной варежке управляющего сигнала, на батареях недокомпенсация, то через определенное время вводится в работу пид пола, а батареи остаются на максиме и не регулируются.

Термодатчики на батареи я бы поставил на обратку. Или на обратку, и на подачу- тогда по вилке температур можно ругулировать скорость насоса...
Это город, насоса нет, стояк. Увы. :(

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

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

Два пида одновременно будут постоянно выводить систему из равновесия.

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

на радиаторах динамики не будет - они оч. медленно греются и остывают.

с полом я подумаю над тем, чтобы в нижней части шкалы сделать ступенчатый режим - условно, если мы вообще хоть сколько-нибудь греем, то пол работает на уровне комфорта, а вверх идёт только если радиаторы не справляются, то есть по I вверх от 100% для радиатора, это выглядит логично. Ну и D канал только на пол имеет смысл.
В классической ТАУ Д-звено отвечает за скорость реагирования на внешнее воздействие, а И-звено - на время сведения рассогласования в ноль. Если внешнего воздействия мало (окна-двери настеж в мороз не открываете), то Д-звено можно выкинуть.

Кстати, если режете И-параметр, то смотрите как он в памяти сохраняется, порезаный или нет. А то я как-то сохранял исходный, а потом удивлялся что переменная вниз долго интегрируется.
Оно и без D живёт, и без I - пожили, терпимо. Пока только пол управлялся. Парное управление без I несподручно - будет жрать электричество.
Не ахти какой специалист по ТАУ, но выскажу пару соображений.
1. Канал пола стоит делать независимым, чтобы он обеспечивал только заданную температуру пола.
2. Основной контроллер пусть рулит радиатором и задает температуру пола.
3. Обеспечить релевантность регулируемого параметра (который "делается" из показаний датчиков), "комфортности" температурных условий в помещении - важнейшая, и, думаю, достаточно сложная задача.
5. Динамические характеристики помещения, как объекта регулирования, требуют экспериментального исследования, осложняющегося тем, что постоянные времени большие, а экспериментировать придется на обитателях).
Спасибо.

Насчёт 3 - сейчас он берётся как среднее арифм. для трёх датчиков - у пола, в середине и у потолка. В принципе, это снижает динамику реагирования, так как самый реактивный датчик - явно тот, что у пола. Обдумываю вариант, при котором на D часть влияет только он - там ведь не нужно абсолютное значение, а только разница.