Перегрев бойлера. Нужно решение без PID
- Войдите на сайт для отправки комментариев
Здравствуйте. Наверняка, люди уже сталкивались, прошу поделиться алгоритмом или натолкнуть на верный путь.
Суть: грею мощным ТЭНом бойлер из нержавейки, с комнатной (25С) до заданной (110С) греется за 4 минуты, но нержавейка обладает плохой теплопроводностью, отсюда имеем запаздывающие показания при первом разогреве (75С при кипении воды), погрешность в 5С при поддержании температуры меня вполне устраивает.
Я знаю о существовании алгоритма ПИД (только о существовании, но не саму формулу), но принципиально не хочу его использовать во-первых, пока не дошёл до него своим умом, а во-вторых потому что мне нужны длительные периоды включения/отключения ТЭНа. Вместо него есть желание заранее отключать ТЭН и сделать что-то вроде следующего (оцените ход мысли).
Примечание. tempnow и tempset - температура в данный момент времени и заданная температура соответственно.
1. Включаем счётчик (инкремент переменной t, которая изначально равна нулю).
2. Берём начальную температуру (tempstart)
3. Если температура с датчика больше разности заданной температуры и начальной температуры (if (tempnow > tempset - tempstart) ) , то запускаем обратный отсчёт (декремент t/3 до нуля)
повтор.
Иными словами, греем ТЭН 3 минуты, 1 минуту ждём, снова греем 60 секунд, 20 ждём, 20 греем, 7 ждём и выходим на поддержание температуры, где температура колеблется в пределах 5 градусов (для меня это норма) и ТЭН включается на 10 секунд раз в 2 минуты.
Ваши мысли? Где я прав, где нет?
это что-то вроде ПИДа и будет
Не вполне понял, почему дачтчик запаздывает аж на 25 градусов... и причем тут теплопроводность нержавейки. Вы датчиком температруру стенки бойлера меряете. что ли?
Если не хочешь пользоваться тем, до чего сам не дошел, то чего ты тут спрашиваешь? Давай, доходи сам.
Вы датчиком температруру стенки бойлера меряете. что ли?
Да, идёт замер стенки бойлера. Такая конструкция из экономических соображений.
это что-то вроде ПИДа и будет
Или просто ПИ, без этой формулы - просто П.
Так просверлите отверстие в баке и поставьте медную гильзу под датчик. Можно прикрутить, а для особо одарённых и припаять (да-да нержавейка неплохо паяется). И не маяться дурью, а проводить нормальные замеры.
Так просверлите отверстие в баке и поставьте медную гильзу под датчик. Можно прикрутить, а для особо одарённых и припаять (да-да нержавейка неплохо паяется). И не маяться дурью, а проводить нормальные замеры.
Всё это можно, более того, в другом своём проекте даже реализовал с готовой библиотекой PID, но в данной жизненной ситуации (давайте мы назовём это "слететь с гарантии") исходные данные в первом сообщении.
Вокруг датчика теплоизолируйте стенку.
прям 1 в 1 подойдет :) http://arduino.ru/forum/proekty/kontroller-mufelnoi-pechi
Опытным путём пришёл к тому, что, грея с 25С до 100С "перебег" составляет 10 градусов, грея с 70С до 120С - уже 6-7.
То есть, порядка 10-15%. Задача сводится к тому, чтобы за 10-20% от конечной точки прервать операцию на 30-60 секунд.
В первом сообщении вообще не так написал формулу. Подумал и сделал так:
(steinhart - это рассчитанная по формуле текущая температура бойлера, btimer - обычный счётчик, изначально равен нулю)
У Вас есть запаздывание реакции датчика на температуру. Ждать одну десятую нагрева это движение в правильном направлении, но лучше сразу делать расчёт температуры с учётом запаздывания. Поместите второй датчик в жидкость и нарисуйте несколько графиков - датчики от времени, время приращения температуры на 1 градус от температуры, разница датчиков от температуры для нагрева и охлаждения и другие. Посмотрев на графики можно ввести в программу формулы или табличные пересчёты температуры датчика в температуру воды и соответственно использовать ПИД со всеми вытекающими плюшками.
Посмотрев на графики можно ввести в программу формулы или табличные пересчёты температуры датчика в температуру воды и соответственно использовать ПИД со всеми вытекающими плюшками.
Соглашусь с коллегой. Только правильнее для управления построить 2 функции (они до кипения будут неразрывные) не менее третьего порядка.
У Вас есть запаздывание реакции датчика на температуру. Ждать одну десятую нагрева это движение в правильном направлении, но лучше сразу делать расчёт температуры с учётом запаздывания.
Именно, запаздывание реакции (причину даже можно опустить).
Уточню с ожиданием: ждать 1/10 нагрева только "в конце пути", тем самым идёт П - регулирование (без И и Д), но с "торможением" в конце. То есть, ТЭН не дёргаем, а включаем на полную мощность и притормаживаем лишь на финишной прямой.
Меня этот вариант вполне устроил, есть перебег в 3 градуса (1%), что вполне для моих задач приемлимо (задача - на максимальной мощности без дёрганья ТЭНа выйти близко к заданной температуре и дальше поддерживать в пределах 2-3 градусов).
А со временем датчик подползёт к температуре уставки, но запаздывание останется. Как в таких условиях отслеживать температуру в пределах нескольких градусов не понятно. Нужно дергаться по малейшим дельтам. Именно для этого нужны графики - понимать в каких условиях на сколько дёргать. Универсального не получится. Долейте немного холодной воды в объём при установившейся хотя бы 10 минут нормальной температуре и посмотрите на реакцию - через сколько сработает датчик на догрев?
А со временем датчик подползёт к температуре уставки, но запаздывание останется. Как в таких условиях отслеживать температуру в пределах нескольких градусов не понятно. Нужно дергаться по малейшим дельтам. Именно для этого нужны графики - понимать в каких условиях на сколько дёргать. Универсального не получится. Долейте немного холодной воды в объём при установившейся хотя бы 10 минут нормальной температуре и посмотрите на реакцию - через сколько сработает датчик на догрев?
Я вас понял, вы меня - нет потому что я изначально не обрисовал вам всю-всю картину (думаю, она вам и неинтересна).
Имеется устройство, генерирующее пар (вода и пар в бойлере при давлении 1.5 бар и температуре 125С), всё это контролируется прессостатом (вещь относительно дорогая - от 1000 до 3500 руб., капризная и довольно неточная), то есть, в момент падения давления до 1.4 бар, включается ТЭН, при достижении 1.6 бар - выключается.
Минусы: а. включение/выключение ТЭНа механически (то есть, с искрой), б. непостоянное давление. в. невозможность подстройки давления без отвёртки.
Плюсы: прогрев идёт до заданного давления (на 100% мощности) и лишь затем идёт поддержание давления
Мною была поставлена задача (самому себе) сделать всё то же самое, но не на механическом допотопном устройстве (клемы прессостата могут и выгореть и залипнуть), а на микроконтроллере (на Ардуино) без использования датчика давления (он у меня есть, стоит 700 руб., в то время как терморезистор - максимум 100 р.).
В результате я получил то, что получил: снизил колебания температуры (и, соответственно, давления), ТЭН коммутируется твердотельным реле, что в теории должно продлить его срок службы.
Да, код получился весьма простеньким, но оно же работает. Здесь использование PID - это как использование двигателя от камаза на оке (ага, написал, а потом подумал, ведь ока и выпускается камазом, ну да ладно, вы и так поняли)
Ну вот. Задача совсем другая. Не хорошо так делать.
Она не другая, она описана в первом сообщении, но в детали сильно углубляться не стал, т.к. во-первых, а кому эти нюансы нужны (пар на выходе, прессостат, соотношение воды и пара, расход, объём, материал...), могут и на слово поверить, что исходные данные именно такие, как написаны, во-вторых, а всё равно найдётся mykaida, который посоветует всё разобрать, нарезать резьбу, купить другой датчик, вкрутить гильзу и вообще сделать иначе.
P.S. Подкорректировал коэффициенты под свою задачу, теперь неважно с какой температуры стартуем, после паузы чётко выходит к рабочей температуре, дальше только поддержание. Но перебег всё равно есть (это некритично), разогрев очень быстрый, с PID такое вряд ли получится, т.к. он предполагает снижение мощности до выхода на заданную температуру.
Не знаю. ПИД работает так, как его программируют. Всё зависит от исполнительного механизма. А если он не умеет плавно а только вкл откл? ПИД уже не применить?
А почему нельзя контактами прессостата коммутировать низковольтную цепь и получать лог сигналы на входе контроллера?
Можно. Но зачем иметь погрешность 0.2-0.3 бар, если тензодатчик-манометр даст на два порядка меньшую погрешность при сопоставимой цене?
Один из режимов работы подогреваемого столика у 3Д принтеров именно вкл/откл через реле. Можно даже попробовать наковырять оттуда алгоритм автоподбора коэффициентов.