Терморегулятор с центральным управлением по сети RS485 протоколом ModBus RTU.
Терморегулятор это одно из самых популярных средств автоматизации. По этой теме можно найти множество статей на просторах интернета. Вот и я решил внести свою лепту, тем более что моя идея в той или иной мере, не находила реализации в устройствах других разработчиков.
Задача поставлена следующая: Средствами микроконтроллера малого семейства, создать устройство, измеряющее температуру и управляющее выходом (выходами) в соответствии с уставками, заданными от центрального устройства по сети RS485 протоколом ModBus RTU. И соответственно передающее в центральное устройство значение текущей температуры и состояния входов, выходов.
В начале проектирования в качестве измерителя температуры, было, решено воспользовался датчиком DS18B20. Но поскольку интерфейсы связи 1-wire и приемопередатчика USART в моем проекте организованы программно, не удалось аппаратными средствами простого микроконтроллера сделать независимыми процедуры измерения температуры и приема передачи по сети. Поэтому каждую секунду, устройство «уходило в себя» для измерения температуры на время около 1 мс, и если в это время приходил запрос по сети RS485, устройство ему не отвечало. Опыт показал, что при ежесекундном опросе от центрального устройства, ошибка встречалась в 0,2%-0,5% запросов. Следовательно, в алгоритме обмена данными с этим типом устройств, следует повторять команду при отсутствии ответа - тогда устройство однозначно ее примет.
Что бы совсем избежать проблем общения с центральным устройством, я решил попробовать измерять температуру с помощью термистора и встроенного в микроконтроллер модуля АЦП. Измерения АЦП происходят в фоновом режиме на аппаратном уровне, и процедуру пересчета измеренных значений в показания температуры можно прерывать в любом месте, что позволит избежать проблем со связью. Но необходимо было решить другую проблему. Как пересчитать измеренные значения, в показания температуры учитывая, что характеристики термисторов весьма далеки от линейных, особенно в широком диапазоне температур? Самым простым способом оказался пересчет измерений АЦП в значение температуры табличным методом. Таблица в 128 значений, позволила получить приблизительно одинаковую погрешность измерения в диапазоне температур -31°С…+95°С не более одного градуса. Таблица рассчитана на основе значений зависимости сопротивления от температуры, взятой из даташита термистора NTC-MF52-103/3950 10 кОм.
Итак, в результате приложенных усилий, центральное устройство теперь может в любое время получить актуальную информацию о состоянии датчиков и температуры и выдать требуемую команду, без риска «потерять» устройство. Далее были разработаны процедуры для управления выходами в соответствии с уставками температуры с отрицательными и положительными значениями, в режиме, как нагревателя, так и охладителя. На этом можно считать, что основы заложены и работают, температура измеряется, с центральным устройством общается. Осталось свободными два вывода (порта). Как ими распорядиться?
У меня родились следующие варианты:
Первый вариант - оба выхода использовать на управление реле, тогда можно получить устройство которое будет управлять двумя устройствами (рис.1). Например, в овощехранилище на лоджии. Делаем его на базе старого, но рабочего холодильника, добавив в него нагреватель (например, кусочек пленочного теплого пола наклеиваем на заднюю стенку) Летом будет работать холодильная установка, зимой - нагреватель. Старое механическое термореле удаляем, вместо него будет работать наш регулятор.
Рис.1
Второй вариант - один порт используем для управления реле, другой на датчик протечки воды или сухой контакт (рис.2). Это может быть регулятор температуры в комнате, который управляет или «теплым полом», или вентилем батареи центрального отопления, а вторым входом следит за протечкой под ней. Особенно такое устройство будет полезно для автоматического перехода режимов отопления «день ночь» и «никого нет дома», создавая реальную экономию.
Рис.2
Еще одна разновидность терморегулятора (рис.3) для автоматического управления вентилями, переключения водопровода горячего водоснабжения с централизованного водоснабжения на местное снабжение горячей водой с водогрейного бойлера. Датчик температуры устанавливается на трубе центрального горячего водоснабжения. Если в системе центрального водоснабжения вода будет недостаточно теплой, по команде с устройства система водоснабжения переключится на водогрейный бойлер. Тем самым будет поддерживаться всегда наличие горячей воды в кране. Для случая если, по каким, то причинам автоматически выбранный режим ГВС, не устраивает пользователя, в устройстве делается вход для подключения кнопки ручного управления, которой вручную пользователь устанавливает требуемый режим. А через определенное время режим снова установится в соответствии с уставками. Опыт эксплуатации подобного устройства у меня есть, о нем подробнее можно прочесть в вот тут. Новый алгоритм управления переключения задуман именно исходя из полученного опыта эксплуатации.
Рис.3
Вот для таких устройств я и разработал версии программ «терморегулятора с центральным управлением». У каждого есть свои частности, но основа у всех одна. Ее работу я и опишу далее.
Термистор я приобрел NTC-MF52-103/3950 с сопротивлением 10 кОм при температуре 25°С с точностью 1%. Соответственно, измерительный резистор (тот с которого снимается измеряемое АЦП напряжение) следует поставить с этой же точностью и того же номинала - тогда не потребуется установка подстроечного резистора. Если применить более дешевые термисторы с номиналом установленным с 5% точностью, то измерительный резистор стоит сделать составным, например, из резистора 9,1 кОм и подстроечного 1,2 кОм, включенных последовательно. Естественно придется провести калибровку, выставив измеренные показания терморегулятора по эталонному термометру.
Процедура измерения температуры инициируется каждые 20мс, достоверными считаются последовательные два измерения с одинаковым результатом, который через табличное преобразование пересчитывается в значение температуры. Вычисленное значение отправляется к процедуре сравнения результатов с записанными в ППЗУ (EEPROM) уставками Твкл, Твыкл. В зависимости от сравнения с уставками, а так же с настройками управления выходом, формируется команда управления реле.
Возможен режим управления нагревателем или охладителем.
Определяется это, установкой значений уставок Твкл, Твыкл. :
Твкл. < Твыкл. - устройство работает как нагреватель;
Твкл. > Твыкл. - устройство работает как охладитель;
Твкл. = Твыкл. - устройство работает как нагреватель с гистерезисом 1°C, т.е. Твыкл.= Твкл.+1 ;
Значения (температура) уставок могут быть как положительными так и отрицательными. Следует отметить, что отрицательные температуры уставок записываются в память устройства в прямом коде. По команде чтения температуры устройство выдает значения температуры в младшем байте в прямом коде, в старшем в дополнительном. Это сделано исходя из того что человеку проще воспринимать температуру в прямом коде, а машине в дополнительном.
Второй вход (кнопка или датчик протечки) в каждой версии имеют свой алгоритм:
В терморегуляторе для переключения ГВС, терморегулятор работает в автоматическом режиме до тех пор, пока пользователь не нажал на кнопку. По событию «нажата кнопка», меняется состояние выхода на противоположное. Ручной режим сохраняется 30 мин., считая от последнего нажатия кнопки. Кнопок можно установить несколько параллельно, например одну в ванной другую на кухне. Кнопки следует выбрать с встроенным индикатором, что бы пользователь видел режим работы переключателя.
В терморегуляторе температуры в комнате, где вход может быть использован как датчик протечки, подтягивающий резистор делается более высокого номинала, например 300-500 кОм. Тогда срабатывание протечки происходит от двух проводников опущенных кончиками в воду на расстоянии 1 см. В алгоритм заложено не только передавать состояние датчика протечки в центральное устройство, но и подавать звуковой сигнал, если это разрешено соответствующей командой управления выходами. Выход звукового сигнала «виртуальный», т.к. физически для него не осталось портов. Он формируется совмещением в одном порту двух сигналов - когда передается сигнал 1 кГц для динамика ТR1212A и в это время нужно включить реле, сигнал формируется скважностью 8/2, если реле должно быть выключено – со скважностью 2/8. Далее в цепи управления реле делается интегрирующая цепочка и…. один выход микроконтроллера сигналит о протечках и управляет реле. Также в алгоритме устройства заложено - формировать звуковой сигнал при обрыве или замыкании термистора
Нужно отметить, что приемопередатчик при интенсивном опросе по сети, сильно искажает звуковой сигнал (хотя сигнал есть и суть от этого не меняется). Для устранения этого явления, в одном из вариантов я вместо динамика поставил детектор с интегрирующей цепочкой, и подал сигнал на ключ, который подает питание на бузер типа 1212FXP. Это не просто динамик, а динамик с встроенным генератором. С центрального модуля можно отключить работу бузера и автоматику управления реле. Это нужно сделать обязательно, если вы захотите управлять реле с центрального устройства, иначе через 20 мс автоматика изменит ваши установки в соответствии с уставками.
Все проекты протестированы в Proteus, и физически на макетной плате. Печатная плата разработана только для терморегулятора переключения ГВС. Остальные будут разводиться по мере физической реализации устройств, исходя из предполагаемого места размещения.
Каждый проект собран в свой архив. В него входят:
-
Дизайн проект в программе Proteus.
-
Файл прошивки
-
Таблица команд протокола Modbus RTU
-
Файл краткого описания проекта и несколько вспомогательных файлов
Все необходимые материалы для изготовления терморегуляторов можно скачать отсюда.
Вот маленькое видео с демонстрацией работы макета терморегулятора с датчиком протечки