Появление на нашем рынке относительно дешевых цифровых датчиков температуры и совсем дешевых микроконтроллеров сделало возможным создание цифрового термометра, который не требует калибровки и имеет много всяких возможностей. Среди цифровых датчиков температуры наиболее интересными являются микросхемы DS1820 и DS1821 фирмы DALLAS. Хороши они тем, что используют для обмена однопроводной интерфейс (1-WireTM) фирмы DALLAS. Это значит, что датчики могут быть подключены к термометру всего с помощью 3-х проводов (датчик DS1820 можно подключить даже с помощью двух проводов). Датчик DS1820 более точный (и дорогой), имеет меньшее время преобразования. Зато DS1821 может быть запрограммирован в режим термостата для полностью автономной работы. Параметры термометра в смысле погрешности измерений всецело определяются датчиками, поэтому нет смысла их здесь приводить. Более подробную информацию по цифровым датчикам температуры можно получить на сайте www.dalsemi.com. Цифровой термометр был задуман изначально как бытовой, домашний, который всю свою жизнь должен провисеть где-нибудь на кухне у окошка. Владельца термометра, прежде всего, волнует, какая температура за бортом, на улице. Будет ли сегодня тепло в майке или надо одеть еще пиджак и галстук? Поэтому термометр имеет внешний датчик температуры, расположенный, например, на внешней стороне рамы окна. Многие хотят знать температуру и по эту сторону окна, т.е. в комнате. Наверное, для того, чтобы решить, бежать ли в ЖЭС с криками типа «А за тепло-то мы платим!!!». По этой причине термометр имеет второй датчик температуры, расположенный внутри корпуса. Этот датчик имеет температуру, примерно равную температуре воздуха в комнате.
Несколько замечаний по поводу расположения
термометров. Внешний термометр нужно укрыть от
прямых солнечных лучей и от потоков воздуха
комнатной температуры, дующих сквозь щели в
рамах. Внутренний термометр необходимо так
расположить в корпусе, чтобы он был максимально
удален от нагревающихся элементов. В первую
очередь это светодиодные индикаторы и
стабилизатор напряжения. Если термометр будет
включаться только на несколько секунд, а все
остальное время будет выключен, то нагрев
элементов схемы не сможет исказить показания
температуры воздуха внутри помещения. Желание
посмотреть на термометр появляется обычно тогда,
когда условия освещения наихудшие. Например,
посреди ночи. Поэтому ЖК-индикаторы, даже с
подсветкой, не подходят. Лучшую читаемость в
условиях недостаточного освещения имеют
светодиодные индикаторы. Правда, они много
кушают. Я являюсь абсолютным противником
устройств, которые постоянно торчат в сети. Может
там, в странах развитой НТР, это и хорошо (в
импортной аппаратуре все чаще отсутствует
полный сетевой выключатель), но в наших
своеобразных условиях это просто недопустимо. Я
знаю, по меньшей мере, два случая, когда у моих
друзей в ночное время по какой-то неведомой
причине сетевое напряжение подскакивало почти
вдвое. Все аппараты, которые находились в режиме
STANDBY, были выведены из строя. А на утро на местной
мастерской появилась шильдочка «Закрыто». По
этой причине термометр имеет батарейное питание.
Для того чтобы продлить срок службы батарей,
термометр включается кнопкой, а через пять
секунд автоматически отключается. Питание от
сети тоже возможно, для этого есть специальный
разъем. При питании от сети термометр включен
постоянно. Имея в системе микроконтроллер,
хотелось реализовать побольше всяких
прибабахов. Одним из них является выход
управления термостатом. На этот выход поступает
напряжение 0 или
Принципиальная схема термометра не сложна. Основой является микроконтроллер U1 типа AT89C2051 фирмы ATMEL. Индикация динамическая, реализована программно. Катодами индикаторы HG1 и HG2 подключены к порту P1, аноды включаются транзисторами VT1-VT3. Транзисторы управляются линиями сканирования S0...S2. Импульсный ток сегментов ограничен резисторами на уровне примерно 15 мА, что вписывается в нагрузочную способность порта (20 мА) и достаточно для получения необходимой яркости. Циклы сканирования формируются с помощью внутреннего таймера микроконтроллера. За каждым циклом индикации следует «пустой» цикл, когда все индикаторы выключены. Для регулировки яркости свечения индикаторов достаточно регулировать отношение длительности цикла индикации к длительности «пустого» цикла (PWM). Яркость регулируют кнопками «UP» и «DOWN» в режиме индикации температуры. Новое значение яркости сохраняется в энергонезависимой памяти. Для субъективно постоянной скорости изменения яркости в процессе регулировки применен закон регулировки, близкий к гиперболическому. Для экономии портов микроконтроллера на линиях сканирования «висит» еще и I2C микросхема flash-памяти U2. Циклы сканирования игнорируются микросхемой, так как представляют собой чередующиеся условия «старт» и «стоп». Когда микроконтроллер обменивается с микросхемой, циклы сканирования приостанавливаются. Все бы хорошо, только при таком включении микросхемы flash-памяти был отловлен глюк. Если в качестве флэшки применялась КР1568РР1 производства ПО «ИНТЕГРАЛ», то в момент выключения питания, если идет сканирование дисплея, содержимое некоторых ячеек портилось. Интересно, что замена флэшки на PHILIPS PCF8582, с которой и содрана интеграловская, полностью устранила глюк. Вообще, ни с одной фирменной микросхемой глюка не наблюдалось. Местная клавиатура использует в качестве линий сканирования линии данных дисплея, а в качестве линии возврата RL-порт микроконтроллера. Сканирование клавиатуры происходит в циклах сканирования дисплея. Внешний и внутренний датчики температуры подключены к портам микроконтроллера через защитные цепочки. В цепи питания датчиков включены небольшие резисторы для защиты от короткого замыкания на линиях термометров. Внешний термометр подключен через 3-контактный 3,5-мм разъем, который обычно используется для стереонаушников. У этого разъема есть особенность: во время сочленения на некоторое время оказываются замкнутыми все три контакта. Поэтому без защитного резистора в цепи питания не обойтись. На внутреннем датчике цепочки защиты установлены на всякий случай. Ведь никто не запрещает превратить этот датчик во второй внешний, правда? Выход управления термостатом имеет двухтактный каскад на транзисторах VT4 и VT5. Такой каскад обеспечивает одинаковый втекающий и вытекающий ток. Этот ток ограничен резистором R17 из энергетических соображений и в целях защиты транзисторов. Оба транзистора включены по схеме с общим эмиттером, что по сравнению со схемой эмиттерного повторителя обеспечивает больший размах выходного напряжения. Разъем для программирования микросхемы DS1821 использует одну и ту же линию данных, что и внешний термометр, а в качестве напряжения питания использует напряжение выхода термостата (питание нужно выключать при переводе микросхемы DS1821 из режима термостата в режим термометра). Поэтому при программировании внешний термометр и исполнительное устройство термостата должны быть отключены. Разъем для программирования микросхемы DS1821 использует одну и ту же линию данных, что и внешний термометр, а в качестве напряжения питания использует напряжение выхода термостата (питание нужно выключать при переводе микросхемы DS1821 из режима термостата в режим термометра). Поэтому при программировании внешний термометр и исполнительное устройство термостата должны быть отключены.
Вот мы и подошли к самой страшной части схемы — к стабилизатору. При разработке стабилизатора нужно было выполнить ряд условий. Полностью заряженные батареи имеют напряжение 6 В. Для нормальной работы датчиков требуется минимум 4,3 В. Поэтому стабилизатор должен обеспечивать как можно меньшее минимальное падение (лучше не более 200 мВ при 100 мА). Стабилизатор должен триггерно включаться с помощью кнопки, а выключаться сигналом с микроконтроллера. Стабилизатор должен «чувствовать» сетевое питание и при его наличии оставаться все время включенным. Включение и выключение штекера сетевого питания может производиться «на ходу». Батареи не должны разряжаться при работе от сети. Кроме того, у имевшегося сетевого адаптера на центральном контакте вилки был плюс, поэтому при сочленении разъема питания рвался минус. При всем этом батареи должны коммутироваться правильно. Все вышеперечисленные требования были выполнены в стабилизаторе, собранном на дискретных компонентах. Может быть, какая-нибудь микросхема LDO-стабилизатора, например LP2951 с входом SLEEP позволила бы решить эту задачу более просто, но что сделано, то сделано. Я привожу описание конструкции «как есть», со всеми преимуществами и недостатками. В качестве регулирующего элемента в стабилизаторе применен n-канальный logic-level МОП-транзистор VT6 типа IRLZ44, который выпускается ПО «ИНТЕГРАЛ» под кодовым названием КП723Г. Корпус этого транзистора ТО-220 способен рассеять необходимую мощность без радиатора. В качестве низковольтного опорного источника применен красный светодиод. Усилитель ошибки выполнен на транзисторе VT9. Благодаря высокому сопротивлению нагрузки этот каскад имеет большое усиление. Кнопка SB1 осуществляет начальное включение стабилизатора при работе от батарей. При работе от сети включение стабилизатора осуществляет каскад на транзисторе VT10. Транзисторы VT7 и VT8 образуют схему автоматического отключения. Для выключения стабилизатора микроконтроллер должен сформировать соответствующий сигнал на порту вывода. Но у микроконтроллера нет свободных линий (как всегда, не хватило одной линии). Поэтому для отключения стабилизатора используется линия возврата клавиатуры RL. При нормальной работе на этой линии наблюдается некая последовательность импульсов, зависящая от того, какая нажата кнопка и что в данное время на дисплее. Во всяком случае, период следования импульсов не может быть больше длительности полного цикла сканирования дисплея. Когда ни одна из кнопок не нажата, на линии «висит» единица. Для отключения стабилизатора было решено использовать уровень логического нуля, длительностью не менее 50 мс. Чтобы отличить это состояние линии от нормального, сигнал линии нужно заинтегрировать, причем постоянная времени заряда должна быть намного меньше, чем разряда. Транзистор VT7 включен по схеме эмиттерного повторителя, он способен быстро зарядить интегрирующую емкость C8. Постоянная времени разряда определяется в основном резистором R20. Транзистор VT8 используется как пороговый элемент, при разрядке C8 ниже некоторого уровня транзистор закрывается, разрывая цепь питания опорного источника VD12, и стабилизатор выключается. При работе от сети узел отключения блокирован с помощью цепочки VD13, R21, которая всегда поддерживает VT8 в открытом состоянии. Несмотря на обилие дискретных компонентов, если применять SMD элементы, схема стабилизатора легко «размазывается» на плате, заполняя собой свободные места. Отмечу один недостаток конструкции: отсутствует сигнал разряда батарей. Микроконтроллер нормально работает при напряжении питания 2,7 В, в то время как датчики температуры могут начинать «врать» при напряжении питания ниже 4,3 В. Батареи могут быть разряженными, показания термометра — неверными, а пользователь даже не будет догадываться об этом. Выдаст разве что пониженная яркость свечения индикаторов. Сразу скажу, что дело не в трудности формирования сигнала BAT. LOW, а в отсутствии свободных портов ввода у микроконтроллера. Кстати, подобный сигнал (там он называется ERROR) есть у того же LDO стабилизатора LP2951. Один из выходов из положения — применить watchdog timer DS1232L (он же ADM1232) или подобный. Для перезапуска можно использовать линию сканирования дисплея, а встроенный монитор питания просто не позволит системе работать, если напряжение питания ниже 4,5 В. И, наконец, если предполагается использовать термометр только с сетевым питанием, то всю эту схему стабилизатора с успехом можно заменить привычной IC 7805.
Печатная плата (и механическая конструкция) термометра сильно зависит от желаемого дизайна изделия, поэтому здесь не приводится. Содержимое ПЗУ микроконтроллера можно найти в файле therm.bin, а исходный текст — в файле digit_termo.asm. Я пользуюсь транслятором TASM (версия 2.76) с таблицей tasm51.tab. Поскольку этот транслятор не специализирован для 8051, имена SFR с их адресами нужно указывать в тексте. Это сделано в файле digit_termo.asm, имеется строка #include "libreg.asm". Сразу предупреждаю, что исходный текст стал не очень читаемым после нескольких операций «ужатия» кода. С трудом удалось получить digit_termo.bin объемом 2048 байт, а AT89C4051 я еще в руках не держал. Вечные проблемы с русским (кто это придумывает все эти кодировки, и где берет на это финансирование?) давно вынудили пользоваться для комментариев ломаным английским. Впрочем, комментарии не для того, чтобы их читать…
Инструкция по эксплуатации термометра в сжатом виде находится в файле digit_termo.doc (Word 97).
Автор проекта: Ридико Леонид Иванович (E-mail: wubblick@yahoo.com)