В этой статье расскажу о сборке цифрового термостата, который бы измерял температуру и поддерживал ее на определенном, заранее установленном уровне. Как то мне на работе подкинули задачу собрать термостат для контроля и удержания в заданных пределах температуры горячей воды, которая подается в бытовые помещения. Тогда будем решать! Сразу было решено собирать цифровой прибор. Теперь возник вопрос какой тип термодатчика применить? Так как температура будет контролироваться в баке, в котором находится ТЭН и особой точности тут не нужно, да и температуры не большие, то сразу отказался от термопар и термосопротивлений, во-первых достаточно дороги они и требуют сложной входной части прибора (для термопар – компенсация термо — Э.Д.С холодных концов, для термосопротивлений – компенсация сопротивления соединительной линии). Тут вспомнил про цифровые датчики температуры фирмы Dallas (ныне MAXIM). Одно время я долго работал с датчиком DS1821. Микросхема DS1821 может работать в режиме термометра или в режиме термостата. В первом из этих режимов DS1821 обеспечивает измерение температуры в диапазоне -55..+125°C с дискретностью 1°C. Самым привлекательным является то, что такой термометр уже откалиброван на заводе, гарантированная точность составляет +1°C в диапазоне 0..+85°C и +2°C во всем диапазоне рабочих температур. На ней я делал простые термостаты с верхним и нижним пределом срабатывания. Но, в данной ситуации мне нужен легко перестраиваемый прибор на другое значение интервалов температуры. А этот датчик нужно перепрограммировать на другой диапазон. Как – ни будь напишу статью про этот датчик, он довольно интересный! Этот датчик так же можно заставить работать как термометр, но выбор мой пал на более новый из этого семейства DS18B20.
DS18B20 – цифровой термометр с программируемым разрешением, от 9 до 12–bit, которое может сохраняться в EEPROM памяти прибора.DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии, так и работать в группе. Все процессы на шине управляются центральным микропроцессором. Диапазон измерений от –55°C до +125°C и точностью 0.5°C в диапазоне от –10°C до +85°C. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения. Каждый DS18B20 имеет уникальный 64-битный последовательный код, который позволяет, общаться с множеством датчиков DS18B20установленных на одной шине. Такой принцип позволяет использовать один микропроцессор, чтобы контролировать множество датчиков DS18B20, распределенных по большому участку. Диапазон работы датчика и точность меня очень даже устраивала и на будующее можно еще куда датчик поставить придется, тут все просто. Для обмена данными термометр DS18B20 использует 1-Wire протокол (однопроводный протокол). Это низкоскоростной двунаправленный полудуплексный последовательный протокол обмена данными использующий всего один сигнальный провод. Естественно требуется еще и возвратный (земляной) провод. Имеется несколько типов сигналов, определенных 1-Wire протоколом — импульс сброса, импульс присутствия, запись 0, запись 1, чтение 0 и чтение 1. Все эти сигналы, за исключением импульса присутствия, формируются на шине главным устройством — MASTERом. В нашем случае это микроконтроллер. Принцип формирования сигналов во всех случаях одинаковый. В начальном состоянии 1-Wire шина с помощью резистора подтянута к плюсу питания. Главное устройство «проваливает» на определенное время 1-Wire шину в ноль, затем «отпускает» ее и, если нужно, «слушает» ответ подчиненного (SLAVE) устройства. В нашем случае подчиненное устройство — термометр DS18B20. Блок — схема DS18B20 (DS18S20, DS1820)
Схема подключения с внешним питанием датчиков
Можно подключать несколько датчиков параллельно. Схема подключения датчика DS18B20 в режиме паразитного питания
Вывод Vdd соединяется с GND, а 1-Wire шина дополнительно подключается к источнику питания через полевой транзистор. Когда датчик DS18B20 выполняет преобразование температуры или копирует данные из ОЗУ в EEPROM память, он потребляет ток до 1,5 мА. Этот ток может вызывать недопустимое снижение напряжения на 1-Wire шине. Чтобы этого не происходило, 1-Wire шину на время выполнения этих операций подключают к источнику питания. Для этого и нужен полевой транзистор. Можно обойтись и без транзистора, но например когда соединительный кабель длинный, могут происходить сбои и работа будет не устойчива. Датчик выбрали, теперь можно подумать и о схеме устройства сбора данных с датчика, индикации и управления нагрузкой. Схем термостатов в интернете много, поэтому изобретать велосипед не стал, а взял схему вот отсюда
Схема довольно простая, ничего лишнего, удобная индикация и управление. Схему немного доработал. Вместо реле, которое коммутирует нагрузку, поставил опторазвязку на сборке MOC3041 и симистор Т122-25, который будет включать ТЭН. Кнопками "+" и "-" выставляется нижний порог температуры. В режиме изменения перед температурой отображается знак «t».
При одновременном нажатии обеих кнопок термостат входит в режим установки dt (дельта температуры). По умолчанию он равен 1, т.е. если мы кнопками "+" и "-" выставили температуру 30 градусов, то температура будет поддерживаться в пределах от 30 до 31 градуса. Если dt установить 2, то температура будет поддерживаться в пределах от 30 до 32 градусов.
Если нет нажатий кнопок в течении 5 секунд индикация возвращается к отображению измеренной температуры. В режиме измерения температуры индикатор отображает текущую измеренную температуру, и в первом сегменте символ «L» обозначает включенную нагрузку. Например: — установленная температура 30 градусов, дельта 1 градус, измеренная температура 27,0 градуса. На индикаторе будет
— установленная температура 30 градусов, дельта 1 градус, измеренная температура 32,0 градуса. На индикаторе будет
Так же данный термостат можно использовать для холодильника, только выход на исполнительное устройство нужно брать с вывода 6 микроконтроллера. Так как термостат позволяет выставлять температуру до +125 градусов, а мне этого не нужно, да и кто может кнопочки поклацать захочет ради интиреса и наклацает температуру воды в 90 градусов, то было решено ограничить диапазон от 0 до 60 градусов. Для этого на том же сайте есть проект в CodeVisionAVR, открываем его, в файле kbd.c находим следующий код if (T_LoadOn > 450) { T_LoadOn --; RefreshDisplay(); } Это нижний предел выставляемой температуры. В файле termostat_led.c есть пояснения по форме представления температуры //температура для удобства представлена так: // — до 1000 = отрицательная // — 1000 = 0 // — больше 1000 = положительная // — 0,1°С = 1 //--------------------------------- //-55°C = 450 //-25°C = 750 //-10.1°C = 899 //0°C = 1000 //10.1°C = 1101 //25°C = 1250 //85°C = 1850 //125°C = 2250 Т.е 450 это -55 градусов (1000-550=450), а мне нужен 0 градусов. Тогда 0 градусов будет 1000. Изменяю код if (T_LoadOn > 1000) { T_LoadOn --; RefreshDisplay(); } Теперь разберемся с верхним пределом if (T_LoadOn < (2250 — DeltaT)) { T_LoadOn ++; RefreshDisplay(); } Тут число 2250 означает верхний предел температуры в 125 градусов ( 1000+1250=2250), а мне нужно 60 градусов, тогда 1000+600=1600 Меняем код и получаем if (T_LoadOn < (1600 — DeltaT)) { T_LoadOn ++; RefreshDisplay(); } Далее нажимаем в CodeVisionAVR кнопочку make the projekt и забираем готовый файл для прошивки. Вот так все просто. Термостат собран на печатной плате. Индикаторов для динамической индикации на тот момент не нашлось, были в наличии только сдвоенные для статики. Пришлось под них разводить под них отдельную платку, на той же плате расположены токоограничивающие резисторы (SMD)
Вот собственно весь термостат в сборе. Все было размещено на основании из изоляционного материала. Блок питания использовался готовый импульсный от вай фай точки доступа. Все это будет монтироваться в электрическом щите. Симистор стоит отдельно на небольшом радиаторе.
Вот и вся конструкция. В работе показала себя надежно, сбоев замечено не было.
Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов!
Подробно тут! Жалоба