Например TDA7294

РадиоКот > Схемы > Цифровые устройства > Бытовая техника

Термо-влаго-барометр с микропотреблением

Автор: Сергей Безруков (aka Ser60)
Опубликовано 14.08.2012.
Создано при помощи КотоРед.

Прибор предназначен для измерения температуры (0 - 50°C) и относительной влажности воздуха (0 – 99%) в жилых помещениях, а также атмосферного давления в мм рт.ст. (mmHg). Одной из его особенностей является низкое среднее токопотребление (около 1,8 мкА на свету и 0,4 мкА в темноте). Это позволяет ему работать не менее 10 лет без смены батареи.

Показания давления, температуры и влажности чередуются на 3-местном ЖКИ фирмы Varitronix  с периодом около 3 сек. Температура и влажность измеряются каждый раз непосредственно перед индикацией, а давление – раз в 10 минут. В остальное время показывается последнее измеренное давление. При индикации влажности в правом разряде индикатора появляется буква h (humidity).

Как видно из схемы (кликанием мышки она увеличивается), в ней использованы 2 МК фирмы Silicon Labs. У каждого из них в отдельности не хватает выводов для управления 3-местным ЖКИ. Как правило, МК с большим числом выводов оснащены более развитой периферией и всякими дополнительными функциями, которые в данном устройстве все-равно не были-бы задействованы, так что 2 простых МК с малым числом выводов могут стоить меньше одного навороченного. Однако, у меня не было намерения добиться абсолютного минимума стоимости деталей, а просто заодно хотелось поэксперементировать с двумя МК в связке. Из этих МК IC1 является ведущим (master) а IC3 – ведомым (slave). Последний самый простой из силлабовской микромощной серии F9xx, у него даже нет АЦП. Основную часть работы по приему и обработке сигналов датчиков выполняет IC1. Ведомый МК IC3 большую часть времени находится в режиме глубокого сна с выключенным таймером, при котором его токопотребление фактически определяется токами утечeк и пренебрежимо мало по сравнению с IC1. Основная задача IC3 – это формирование управляющих сигналов для ЖКИ. В нужный момент времени он пробуждается сигналом от IC1, инвертирует состояние своих выводов, связанных с ЖКИ, и опять впадает в спячку на очередные 32 мсек. Таким образом, период регенерации ЖКИ равен 64 мсек, что соответствует частоте около 15 гц, и при выбранном типе ЖКИ мерцания его практически не наблюдается из-за инерционности. При необходимости частота управления ЖКИ может быть несколько увеличена без существенного роста токопотребления.

Передача информации из ведущего МК в ведомый о том, какие сегменты ЖКИ подсвечивать, производится по 4-проводному интерфейсу SPI. В период активности каждый МК тактируется на частоте 20 мгц от внутреннего генератора, а тактирование линии SCK интерфейса просходит на частоте 4 мгц. Важно подчеркнуть, что для минимизации токопотребления аппаратные модули SPI в обоих МК следует включать только на момент передачи. Для пробуждения ведомого МК и синхронизации их работы использованы те же 4 линии протокола SPI и специально разработанный протокол рукопожатия. Кратко, процесс измерения и засылки данных из IC1 в IC3 происходит за 3 этапа, привязанных к моментам регенерации ЖКИ. После чтения сигнала от датчика и его обработки, IC1 выставляет высокий уровень на выводе MOSI, что является сигналом для IC3 включить SPI модуль на прием после следующей регенерации ЖКИ. Но пока SPI модули обоих МК выключены их программы получают прямой доступ к линиям интерфейса. После пробуждения сигналом на линии SCK и оповещения IC1 сигналом по линии MISO о своей готовности IC3 принимает данные (1 байт) из IC1 и  использует их для обновления информации на дисплее в следующем периоде регенерации ЖКИ.

Таким образом, прием и обработка сигналов от каждого из датчиков должны быть произведены за время полупериода ЖКИ, т.е. около 32 мсек. Наибольшее время измерения требуется для датчика давления. После его включения ему нужно около 5 мсек для выхода на рабочий режим. Потом в него засылается команда запроса на измерение давления и температуры (для алгоритма термокомпенсации). Измерение занимает не более 5 мсек, после чего из него можно читать данные по SPI. МК на эти 5-мсек интервалы опять погружается в глубокий сон с пробуждением от микромощного таймера SmaRTClock.  Следующим по длительности обработки идет датчик влажности, для которого нужно измерить период релаксационного генератора таймером Timer2 в IC1. Ну а измерение температуры производится буквально за микросекунды. Группы выводов корпусов IC1 и IC3, задействованных под интерфейс SPI, выбраны разными благодаря коммутаторам ресурсов (Xbar), что является большим удобством при работе с силлабовскими МК в плане разработки печатной платы. 

Измерение давления производится сенсором MPL115A1 фирмы Freescale с цифровым интерфейсом SPI. У фирмы также имеется вариант такого сенсора (MPL115A2) с интерфейсом I2C. Сенсор сидит на той-же линии связи SPI, что и МК IC1 и IC3. Для его управления задействован отдeльный вывод CS, а также вывод 4 для его отключения между измерениями с целью минимизации токопотребления. Это самый дешевый и одновременно самый малогабаритный из известных мне сенсоров атмосферного давления. Точность и разрешение его вполне приемлимы для настольного измерителя. После калибровки оффсета отличие показаний с образцовым измерителем на сенсоре BMP085 фирмы Bosch не превосходило ±2 mmHg, причем в подавляющем большинстве случаев оно было не более чем ±1 mmHg. Повторяемость показаний при неизменных условиях среды находится в пределах ±1 mmHg, что позволило отказаться от усредняющих фильтров в программе. Сенсор, как и все другие такого типа, оснащен эффективной системой термо-компенсации. Однако, информация встроенного в сенсор датчика температуры не может быть непосредственно использована для ее индикации, и в отличие от того-же BMP085 этот датчик температуры требует калибровки. Вместо этого решено было измерять температуру воздуха датчиком температуры кристалла внутри МК IC1. Он, конечно, тоже требует калибровки, и при проведении таковой в двух точках достигается точность ±1°C. Наконец, для измерения влажности использован емкостный датчик C2 фирмы Honeywell. Он включен в схему релаксационного генератора на основе компаратора в МК IC1. Все резисторы для реализации генератора имеются внутри МК и подключаются к компаратору программно. Такой режим компаратора по замыслу фирмы предназначен прежде всего для обслуживания датчиков прикосновения, но с успехом может быть использован и для работы с емкостными сенсорами. При калибровке генератора в одной точке достигается точность в ±2% влажности по сравнению с эталонным датчиком на сенсоре SHT15. Запрограммированный алгоритм обработки показаний используемого датчика влажности включает его термокомпенсацию.

В темноте прибор автоматически отключает регенерацию ЖКИ и производство измерений для продления жизни батареи. Измерение освещенности производится фото-диодом D1, который весьма чувствителен к видимому свету и при полной засветке генерирует напряжение около 0,4 В. Слежение за освещенностью производится АЦП микроконтроллера IC1 с периодом 10 минут на свету и с периодом 2 сек в темноте. Таким образом, измеритель практически сразу влючается как минимум на 10 минут даже при освещении помещения тусклой лампочкой, или вскоре после рассвета. В результате среднее токопотребление в темноте снижается в 4,5 раза до уровня 0,4 мкА, определяемым потреблением таймера SmaRTClock в IC1.

Прибор питается от литиевой батареи CR2032. Емкость конденсатора C7 выбрана достаточно большой для эффективного уменьшения пиковых нагрузок на батарею. Это особенно существенно при измерении давления, т.к. МК требуется произвести гораздо больше 32-битных вычислений, чем при измерении и обработке других величин. Этот конденсатор следует выбирать керамическим и с возможно меньшим значением ESR. Измеритель собран на односторонней печатной плате размером 48×33 мм, спроектированной в системе Eagle.  Большинство деталей установлены под ЖКИ. Фольга на другой стороне платы используется в качестве общего провода, а также для монтажа держателя батареи, конденсатора C7, и одного из выводов датчика влажности. Плата помещена между передней и задней плексиглазовыми панелями на стойках высотой 5 мм. Таким образом, толщина всего «бутерброда» получается около 1,4  см и он устойчиво стоит на поверхности в вертикальном положении. Программы обоих МК написаны на языке ассемблера и предназначены для компиляции в среде Silicon Labs IDE. Для программирования МК применялся программатор, описанный на сайте http://radiokot.ru/articles/38/ .

Калибровка датчика влажности весьма простая. Для этого следует сверить показания давления на приборе с образцовым барометром, или с данными на вебсайтах службы погоды в Вашей местности. Разницу в показаниях записывают как константу BARO_CORR в строке 11 файла исходника hb988.asm. Следует учесть, что данные на вебсайтах обычно привязаны к уровню моря, и если Вы хотите, чтобы измеритель показывал давление в месте установки прибора, следует еще произвести коррекцию на высоту Вашего места над уровнем моря (и высоту здания). Высоту места можно определить, например, с помощью программы Google Earth.

Для калибровки датчика температуры в двух точках следует временно раскомментировать строку 872 программы, содержащей инструкцию “ajmp calibrate_TEMP”. При этом вместо значений температуры прибор будет показывать 2-значное 16-ричное число (значение АЦП). После этого прибору дают поработать минут 10, чтобы температура платы сравнялась с температурой среды, и записывают показания АЦП на ЖКИ и значение температуры воздуха, измеренное эталонным термометром (это будет первая точка). Затем прибор вместе с эталонным термометром следует поместить в холодильник (но не в морозильную камеру) минимум на полчаса и по их истечении записывают показания АЦП и эталонного термометра (это будет вторая точка). Записанные данные вносят в соответствующие графы прилагаемой формы calibr.html и вычисленные ей величины TEMP_CORR и TEMP_MAX записывают в строки 3 и 4 программы, а вычисленную таблицу значений температуры tempTable помещают в самый конец программы вместо имеющейся там.

Наконец, для калибровки датчика влажности нужно временно раскомментировать строку 1072 программы с инструкцией “ajmp calibrate_HUMI”. При этом на ЖКИ вместо значений влажности будет показан период релаксационного генератора как 16-ричное число (сначала 2 старших байта, затем 2 младших). Это число записывают в строку 7 программы как N_NOM, а в строках 8 и 6 следует поместить соответственно значение температуры, показываемое данным прибором после вышеописанной калибровки температуры (TEMP_NOM), и показания эталонного влагометра (HUMI_NOM). После калибровки каждого из датчиков программу следует заново компилировать и загружать в МК.


Файлы:
Плата для Eagle и программы


Все вопросы в Форум.


ID: 1248