Термостат на Attiny2313 и DS18B20

В этой статье расскажу о сборке цифрового термостата, который бы измерял температуру и поддерживал ее на определенном, заранее установленном уровне. Как то мне на работе подкинули задачу собрать термостат для контроля и удержания в заданных пределах температуры горячей воды, которая подается в бытовые помещения. Тогда будем решать!
Сразу было решено собирать цифровой прибор. Теперь возник вопрос какой тип термодатчика применить? Так как температура будет контролироваться в баке, в котором находится ТЭН и особой точности тут не нужно, да и температуры не большие, то сразу отказался от термопар и термосопротивлений, во-первых достаточно дороги они и требуют сложной входной части прибора (для термопар – компенсация термо — Э.Д.С холодных концов, для термосопротивлений – компенсация сопротивления соединительной линии). Тут вспомнил про цифровые датчики температуры фирмы 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 &gt, 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 &gt, 1000)
{
T_LoadOn –,
RefreshDisplay(),
}
Теперь разберемся с верхним пределом
if (T_LoadOn &lt, (2250 — DeltaT))
{
T_LoadOn ++,
RefreshDisplay(),
}
Тут число 2250 означает верхний предел температуры в 125 градусов ( 1000+1250=2250), а мне нужно 60 градусов, тогда 1000+600=1600
Меняем код и получаем
if (T_LoadOn &lt, (1600 — DeltaT))
{
T_LoadOn ++,
RefreshDisplay(),
}
Далее нажимаем в CodeVisionAVR кнопочку make the projekt и забираем готовый файл для прошивки. Вот так все просто. Термостат собран на печатной плате. Индикаторов для динамической индикации на тот момент не нашлось, были в наличии только сдвоенные для статики. Пришлось под них разводить под них отдельную платку, на той же плате расположены токоограничивающие резисторы (SMD)
Вот собственно весь термостат в сборе. Все было размещено на основании из изоляционного материала. Блок питания использовался готовый импульсный от вай фай точки доступа. Все это будет монтироваться в электрическом щите. Симистор стоит отдельно на небольшом радиаторе.
Вот и вся конструкция. В работе показала себя надежно, сбоев замечено не было.
Файлы
Прошивка для индикаторов с общим анодом
Прошивка для индикаторов с общим катодом
Исходники
Даташит на DS18B20
4.5 9 голоса

Оцените статью!

guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии