Измерительные устройства
Простой термометр на микроконтроллере PIC12F629 с батарейным питанием.
- Подробности
- Опубликовано 20.07.2013 09:50
Общее количество конструкций термометров на микроконтроллерах посчитать сложно. Каждый автор стремиться привнести что-то свое в этот простой прибор. В итоге увеличивается функциональность, точность и область практического применения электронных температурных измерителей. Ниже описан еще один вариант термометра, главными особенностями которого стали предельная простота конструкции и автономное питание.
В состав любого электронного измерителя температуры обычно входят четыре элемента: датчик температуры, микроконтроллер, индикатор и источник питания. Благодаря высокой степени интеграции современных радиоэлектронных компонентов, появилась возможность минимизировать количество соединительных линий между отдельными устройствами, создавать предельно простые и компактные конструкции. Низкий уровень потребляемой мощности каждым элементом позволил в качестве источников питания использовать литиевые батареи. Все вместе стало основой конструкции простого измерителя температуры, могущего стать отличной заменой бытовым термометрам.
Принципиальная схема и конструкция
В основе принципиальной схемы измерителя лежит микроконтроллер PIC12F629 от Microchip. Данный процессор выпускается в корпусах с 8 выводами и способен работать при напряжении питания от 2 до 5.5В. К его достоинством можно отнести встроенный генератор тактовой частоты и режим пониженного энергопотребления. Объем внутренней Flash-памяти программ - 1Кб позволяет легко реализовать опрос датчика и преобразование температуры.
Принципиальная схема термометра |
Датчиком температуры выбран термометр с цифровым выходом MCP9800, опять же от Microchip.Эта микросхема интересна, прежде всего тем, что выпускается в компактном корпусе SOT-23. Использование шины I2C делает ее подключение к микроконтроллеру элементарным. Опять же наличие спящего режима повышает привлекательность применения MCP9800 для систем с батарейным питанием.
Отображение показаний температуры производится на жидкокристаллическом индикаторе TIC3321. Он не требует подсветки, вследствие чего потребляет минимальный ток. Для передачи данных в индикатор необходимо подключить всего три линии. Широкий температурный диапазон работы от -40 до +80ºС позволяет строить не только комнатные, но и уличные модели приборов.
Печатная плата | Вид со стороны элементов |
Конструктивно термометр выполнен на односторонней печатной плате, которая по длине и ширине не превышает размеры индикатора. Все элементы, в том числе и микроконтроллер, применены в корпусах для поверхностного монтажа. Для установки батареи типа CR2032 использован специальный батарейный модуль, также в SMD варианте.
Алгоритм работы и программа
Часть характеристик термометра, связанная с энергопотреблением, находится в зависимости от алгоритма работы управляющей программы. Первоначально, в алгоритм не были включены мероприятия по энергосбережению. Итог не заставил себя ждать. Элемент питания CR2032 проработал ровно две недели, после чего термометр отключился. Для увеличения срока автономной работы потребовалось реализовать периодический режим опроса и индикации с переводом микроконтроллера и датчика в энергосберегающий режим между отдельными измерениями, а также оптимизацию всего алгоритма.
Энергопотребление микроконтроллера PIC12F629 в режиме сна составляет 1нА (наноАмпер) при напряжении питания 2В. Еще может 300нА потреблять сторожевой таймер. При напряжении питания 3.3В эти значения будут несколько выше. Потребляемый ток в рабочем режиме сильно зависит от частоты генератора, напряжения питания и окружающей температуры. Согласно документации он может превышать 100 микроАмпер. В итоге разница энергопотребления в спящем и рабочем режиме превышает 1000 раз. Соответственно для снижения потребляемого тока желательно чтобы микроконтроллер большую часть времени находился в режиме сна. Выход из этого режима возможен при подаче внешнего сигнала, либо по сторожевому таймеру. Последний вариант наилучшим образом подходит для реализации в данной конструкции.
Перевод микроконтроллера PIC12 в режим сна делается очень просто. Для этого достаточно подать команду Sleep. Несколько сложнее организовать выход. Главная проблема встроенного сторожевого таймера WDT – малое время работы. В отличие от STM32, где спящий режим может длиться годами, в PIC12F629 сторожевой таймер срабатывает через несколько секунд, даже с полностью включенным предделителем. Соответственно в программе приняты меры по увеличению времени нахождения в режиме пониженного потребления. Особенность срабатывания сторожевого таймера в режиме сна заключается в том, что он не сбрасывает микроконтроллер, а запускает исполнение программы со следующей, после sleep, команды. Так как сохраняются все состояния регистров, допустимо применить дополнительный программный счетчик пробуждений, который позволяет увеличить общее время нахождения системы в режиме энергосбережения.
Датчик температуры MCP9800 также имеет возможность работы с пониженным энергопотреблением. Для его перевода в этот режим необходимо установить бит однократного измерения в регистре управления датчиком. При этом шина I2C остается в работе. Запуск измерения выполняется сбросом бит режима сна. После этого некоторое время будет производиться преобразование температуры, длящееся до 250 мсек при высоком разрешении датчика. На это время, опять же, микроконтроллер можно перевести в спящий режим.
В итоге работа системы построена следующим образом: после инициализации микроконтроллера и датчика запускается программный счетчик циклов спящего режима и микроконтроллер переводится в режим сна. Периодически по таймеру WDT происходит возобновление работы, с уменьшением значения счетчика и повторным переводом в спящий режим. В момент, когда остается последняя итерация цикла, запускается измерение температуры. После обнуления счетчика циклов выполняется считывание температуры, ее обработка и вывод на индикатор. Затем цикл сна начинается заново.
Исходный текст управляющей программы
Еще по теме:
Термометр на микроконтроллере PIC12F629
Терморегулятор на микроконтроллере PIC16F676