RadioRadar - Радиоэлектроника, даташиты, схемы

https://www.radioradar.net/radiofan/measuring_technics/barometer_thermometer_cr2477_part_1.html

Барометр-термометр с питанием от литиевого элемента CR2477 (часть 1)

В статье приведена конструкция барометра-термометра на основе хорошо известного MEMS-датчика BMP280 компании Bosch Sensortec, нового 51-совместимого микропотребляющего микроконтроллера EFM8SB10F8 (Silicon Laboratories) иЖКИ RDN0007-PAN-#00 (Raystar Optronics) - обновлённого аналога популярных ЖКИ TI8148 и TIC55. Отличительная особенность прибора - низкое энергопотребление. Для питания устройства используется распространённый литиевый элемент CR2477 напряжением 3 В и ёмкостью 1 А'ч, которого хватает для непрерывной работы прибора как минимум на пять лет при обновлении показаний атмосферного давления и температуры один раз в пять минут.

Барометры-термометры на основе датчика BMP280 широко распространены. Однако все они либо требуют отдельного сетевого источника питания, либо достаточно ёмких аккумуляторов, нуждающихся в частой зарядке. Изредка можно найти в Интернете подобные устройства с питанием от гальванических элементов (так называемых таблеток), однако срок их работы недолог, и элементы часто приходится менять. Такое положение вещей объясняется тем, что все эти устройства для своей работы потребляют значительную энергию, понизить которую не позволяют три причины.

Во-первых, в большинстве случаев, в таких устройствах используют широко распространённые 32-разрядные микроконтроллеры (МК) в составе плат Arduino, Raspberry Pi, STM32 и им подобные, потребляющие значительный ток - десятки миллиампер.

Во-вторых, хотя BMP280 позволяет производить обмен данными с МК по двум интерфейсам SPI и I2C, в 99 % случаев связь МК с BMP280 производится по низкоскоростному двухпроводному интерфейсу I2C, требующему наличия достаточно низкоомных нагрузочных резисторов, подключённых к линии питания, которые потребляют значительный ток - до единиц миллиампер. Низкая скорость I2C определяется, во-первых, физическими свойствами этого интерфейса, во-вторых, достаточно сложным протоколом обмена данными BMP280 с МК, который тратит на такой обмен много времени и программной памяти. Интерфейс I2C целесообразно использовать, когда к МК подключены несколько устройств на одну и ту же двухпроводную шину, но если подключено всего одно устройство, например BMP280, то использование этого интерфейса становится бессмысленным. В отличие от I2C, интерфейс SPI не требует никаких резисторов для своего функционирования, связь МК и BMP280 осуществляется напрямую. Кроме того, SPI имеет на порядок большую скорость обмена-до 10 Мбоду МК EFM8SB10F8 и BMP280 благодаря своей физической реализации и примитивному протоколу обмена, из-за чего обмен информацией МК и BMP280 занимает очень короткое время. А чем меньше это время, тем меньше работают МК и BMP280 в активном режиме, потребляя ток до единиц миллиампер, в отличие от режима сна (sleep-режим), в котором МК и BMP280 потребляют десятые доли микроампер (EFM8SB10F8 - 0,5 мкА, BMP280 - 0,1 мкА). Поэтому, если такой обмен информацией идёт, например, один раз за пять минут (за такое время давление и температура вряд ли существенно изменятся), а всё остальное время находятся в состоянии сна, то общее потребление энергии подобного устройства существенно снижается.

Третий тип устройств, связанных с высоким потреблением тока, - это средства отображения измеряемой информации. В подавляющем большинстве устройств, использующих BMP280, в качестве таких средств применяются светодиодные индикаторы, потребляющие до десятков, а то и сотен миллиампер. Реже используются матричные OLED-дисплеи, у которых потребляемый ток может быть в пределах 20...50 мА. Иногда можно найти устройства, где используются матричные ЖК-дисплеи, потребляющие ток до нескольких миллиампер. В то же время имеются семисегментные ЖКИ, потребление тока которых - всего несколько микроампер (максимум до десяти микроампер), но устройств МК с BMP280, использующих такие ЖКИ, крайне мало, и они, как правило, используют МК с достаточно высоким потреблением тока.

Таким образом, резюмируя вышесказанное, можно отметить, что имеются три проблемы, не позволяющие использовать BMP280 в устройствах на основе МК с батарейным питанием и долгим сроком эксплуатации без замены элементов питания. В предлагаемой статье приведено устройство, где все эти три проблемы сняты.

Схема устройства

Рис. 1. Схема устройства

 

Схема устройства приведена на рис. 1. Как видно, она очень проста. Основа устройства - МК DD1 (EFM8SB10F8G-A-QFN20) в корпусе QFN20 размерами 3x3 мм. Потребление тока МК в sleep-режиме, как указано выше, всего 0,5 мкА (SB в названии МК - сокращение от Sleepy Bee). BMP280 сопрягается с МК по четырёхпроводному интерфейсу SPI сигналами MISO, MOSI, SCK и CSB. Последний сигнал используется в качестве выбора кристалла (Chip Select - CS). Для Мк это трёхпроводный SPI без использования сигнала NSS, выставляемого автоматически в четырёхпроводном режиме после передачи/приёма каждого байта. Сигнал CSB устанавливается в программе "вручную" тогда, когда это требуется, в начале и в конце обмена при передаче или приёме байта или массива байтов.

С ЖКИ МК сопрягается с помощью трёх сигналов: DIN (данные), DCLK (сигнал, стробирующий данные) и LOAD (сигнал, который кратковременно изменяет своё состояние с низкого уровня на высокий и обратно и предназначен для сохранения всех полученных ЖКИ данных). Эти три сигнала, линия питания (+3 В) и общий провод выведены на пятиштырьковый разъём XР2 (PLL-5R1). К этому разъёму одним концом, снабжённым пятиконтактной вилкой XS2 (PBS1.27-5), подключают кабель связи с ЖКИ, а второй его конец непосредственно припаян к контактам ЖКИ.

Питается устройство от литиевого элемента (таблетки) CR2477-PCN2 диаметром 24 мм и толщиной 7,7 мм с приваренными контактами. Вместо него можно использовать обычный элемент CR2477 и батарейный отсек для него. Ёмкость таких элементов - 1 А·ч. Для подключения на плате предназначен двухконтактный штыревой разъём ХР4 (PLS-2R1). К этому разъёму одним концом, снабжённым двухконтактной вилкой XS4 (PLSF-2), подключён двухпроводный кабель, который своим вторым концом припаян либо к контактам, подключаемым к контактам элемента, как в авторском устройстве, либо к контактам батарейного отсека.

Конденсаторы C2-C5 - блокировочные по цепи питания. Все резисторы и конденсаторы (керамические, рассчитанные на номинальное напряжение не менее 10 В) - для поверхностного монтажа типоразмера 0603.

Программировать МК можно двумя способами. Первый вариант - с помощью USB DEBUG адаптера, который сопрягают с компьютером по интерфейсу USB, а с МК - по двухпроводному интерфейсу C2. Для этого предназначен трёхконтактный штыревой разъ-ёмХР1 (PLL-3R1), на который выведены два сигнала RST/C2CK, C2D и общий провод. Для сопряжения используют кабель, который одним концом с ответной трёхконтактной вилкой подключают к разъёму ХР1, а второй его конец соединяют с разъёмом USB DEBUG адаптера с интерфейсом C2. Схему такого кабеля можно найти в [1]. Цепь R1R2C1 используется для штатной работы интерфейса C2 и штатной работы МК при включении питания.

Второй вариант - по интерфейсу RS232 с помощью COM-порта компьютера. Для сопряжения используется четырёхконтактный штыревой разъём ХР3 (PLL4-R1), на который выведены два сигнала TxD, RxD, линия питания (+3 В) и общий провод. К этому разъёму подключают преобразователь уровней интерфейса RS232-TTL, а к нему - кабель сопряжения с COM-портом компьютера. Все схемы и подробное описание этого режима программирования можно найти в [2]. Для перевода МК в этот режим программирования необходимо замкнуть перемычкой (джампером) контакты 1 и 2 разъёма ХР1.

Готовая к загрузке программа в hex-формате - EFM8SB10F8G-A-QFN20_3.hex - приведена в дополнительных материалах к статье на сайте журнала. Её можно записать в МК любым из двух способов, о которых было упомянуто выше. В принципе, на этом можно было бы и закончить часть статьи о программных средствах, однако автор счёл своим долгом поделиться некоторыми ключевыми моментами программы и "багами", обнаруженными автором, с теми, кто имеет желание, возможность и навыки программирования и захочет самостоятельно написать свою программу. Дальнейшее изложение предполагает, что информация о МК EFM8SB10F8G-A-QFN20 (справочный листок - datasheet и руководство пользователя - Reference Manual) и о BMP280 (справочный листок - datasheet) уже известны, если нет, их можно легко найти в Интернете и ознакомиться с ними. Кроме того, предполагается, что информация о среде программирования Simplisity Studio v.4 (Silicon Laboratories) также известна.

Вначале о сути работы программы. В самом начале программы идёт обращение к подпрограмме инициализации всех устройств МК, затем программа считывает идентификационный номер BMP280 (ID), равный 58h, и выводит его на экран ЖКИ ("58") в течение приблизительно двух секунд. Если при включении питания на экране появляется этот номер, значит, к МК подключён именно BMP280, и его связь с МК по интерфейсу SPI работает верно. Далее идёт считывание калибровочных коэффициентов для давления P (их девять) и температуры Т (их три), которые настраиваются на заводе-изготовителе, записываются в постоянную память BMP280 и доступны только для чтения. После этого происходит инициализация BMP280 в нормальном режиме работы (mode_normal), выбирается число усреднений АЦП для температуры (T_sampling) и давления (P_sampling), фильтр выключается (FILTER_OFF), а время работы в этом режиме устанавливается максимальным - 1 с = 1000 мс (STANDBY_1000).

Здесь необходимо напомнить, что BMP280 имеет три режима работы: режим сна (mode_sleep), нормальный режим (mode_normal) и режим принудительного или форсированного измерения (mode_force). В режиме сна BMP280 ничего не измеряет, а просто "спит". В нормальном режиме работы измерения производятся через каждый, заранее установленный интервал времени (в нашем случае - через 1 с), после чего BMP280 автоматически переходит в режим сна и "просыпается" по истечении этого времени для следующего измерения. В форсированном режиме работы измерения производятся только тогда, когда это требуется, после чего BMP280 также автоматически переводится в режим сна. Для повышения точности измерения АЦП имеет возможность производить передискретизацию как по давлению (P_sampling), так и по температуре (T_sampling) и усреднение полученных результатов, а для снижения шума АЦП может использоваться специальный фильтр, который можно включать и выключать (FILTER_OFF). Инициализация BMP280 производится только в нормальном режиме работы.

После инициализации BMP280 переводится в режим форсированного измерения (mode_force). Далее начинается (стартует) измерение давления P и температуры Т. В этом месте программы установлена метка start, на которую программа возвращается после всех измерений, обработки полученных результатов, вывода их на экран ЖКИ и окончания режима сна, т. е. в нашем случае - через пять минут.

После измерения P (ADC_P) и T (ADC_T) по формулам, приведённым в справочном листке BMP280, производится расчёт реальной температуры (temp) и давления (press) с учётом калибровочных коэффициентов - именно в такой последовательности, так как в расчёт press входит temp. Далее результаты выводятся на экран ЖКИ, и МК "засыпает" на пять минут, по истечении которых программа возвращается на метку start, т. е. всё повторяется в бесконечном цикле. Вот и вся суть программы.

Один из ключевых моментов программы - вход МК в режим сна (sleep-режим) и выход из него. Ниже этот момент программы рассмотрен более подробно.

Прежде всего, необходимо напомнить, что после входа в sleep-режим все устройства МК, включая его процессор, отключены, кроме специального устройства управления потреблением энергии (Power Monitor Unit - PMU) и специального таймера (Real Time Clock - RTC) со встроенным в него микропотребляющим НЧ-генератором (LFOSC0), работающим на частоте 16,4 кГц. Одной из причин (или событий) выхода из sleep-режима является достижение счётчика в RTC своего максимального значения - в программе используется именно оно. Это значение, эквивалентное времени около пяти минут, записывается в RTC ещё на этапе инициализации устройств МК. RTC, досчитав до этого максимума, автоматически сбрасывается (авторесет) и начинает счёт с начала. При этом RTC генерирует тревожный сигнал (alarm). Это событие (alarm от RTC - источник выхода из sleep-режима) кодируется в регистре PMU0CF (PMU) специальным битом. Кроме того, при наступлении этого события в регистре PMU0CF автоматически устанавливается специальный флаг, для которого предусмотрен свой бит. При выходе из sleep-режима этот флаг необходимо сбросить программно. В активном режиме системная тактовая частота работы процессора МК (SYSCLK) устанавливается равной частоте специального малопотребляющего ВЧ-генератора LPOSC0 - 20 МГц. Это происходит ещё на этапе инициализации устройств.

Теперь, после этих предварительных замечаний, несложно уже понять рекомендуемую производителем МК EFM8SB10 последовательность входа/ выхода в/из sleep-режима. Как следует из справочного руководства, она состоит в следующем.

Вначале необходимо отключить все аналоговые периферийные устройства (АЦП, компараторы и т. п.). Но поскольку в нашем случае они не используются, их можно отключить ещё на этапе инициализации устройств, поэтому этот пункт выполнять не требуется. А вот интерфейс SPI, скорость работы которого определяется системной тактовой частотой (SYSCLK), а она, в свою очередь, определяется частотой работы маломощного генератора LPOSC0 (20 МГц), следует отключить, поскольку следующим пунктом будет отключение генератора LPOSC0 и переключение SYSCLK на частоту работы RTC, а она, в свою очередь, определяется частотой работы микромощного низкочастотного генератора LFOSC0 (16,4 кГц). Поэтому, во избежание неадекватной работы SPI при смене частот SYSCLK, и требуется отключение SPI.

Далее следует переключить SYSCLK на работу от RTC (16,4 кГц).

После этого необходимо войти в sleep-режим, установив в регистре PMU0CF SLEEP-бит и бит выхода из sleep-режима по alarm от RTC. Здесь следует добавить, что никакие логические операции (логического умножения & или логического сложения |) с регистром PMU0CF не допускаются, или, другими словами, в PMU0CF должно быть записано строго определённое число.

Далее следует выйти из sleep-режима, предварительно выполнив четыре команды nOp (No Operation - нет операции, т. е. пустая команда), чтобы обеспечить повторную синхронизацию НЧ-генератора LFOSC0 с процессором. После этого необходимо переключить SYSCLK на работу от маломощного ВЧ-генератора LPOSC0 (20 МГц) и дождаться установки бита адекватной работы SYSCLK.

Здесь следует добавить, что после того как произойдёт событие, по которому осуществляется вход в sleep-режим, в данном случае - по alarm от RTC, в PMU автоматически установится бит (флаг) этого события. Поэтому для повторного входа в sleep-режим через время, определяемое RTC, в нашем случае пять минут, этот флаг необходимо сбросить программно. Для этого в регистр PMU (PMU0CF) необходимо также записать определённое число, обнуляющее этот флаг и сохраняющее бит входа в sleep-режим по alarm от RTC.

В конце выхода из sleep-режима необходимо включить SPI.

Несмотря на такое пространное объяснение, по фрагменту основной программы (на C51), связанному с входом и выходом в/из sleep-режима, приведённому ниже, можно убедиться, что это достаточно простая процедура.

Здесь необходимо разъяснить, что после входа в sleep-режим (т. е. после выполнения команды PMU0CF=0x84;) сразу следуют четыре пустых команды (_nop_ ();), и, на первый взгляд, кажется, что выполнение этих команд начинается сразу же после выполнения предыдущей команды, по крайней мере, так написано в программе. Однако, поскольку в sleep-режиме процессор МК остановлен, а эти команды (инструкции) выполняются именно им, то они не будут выполняться до тех пор, пока не произойдёт событие выхода из sleep-режима, а этот выход, в свою очередь, наступит только тогда, когда поступит тревожный сигнал (alarm) от RTC, счётчик которого досчитает до максимального значения и обнулится по авто-ресету, т. е. через пять минут. Сами же эти четыре команды NOP требуются для синхронизации "проснувшегося" процессора с тактовой частотой НЧ-гене-ратора LFOSC0 (16,4 кГц), встроенного в RTC.

Фрагмент основной программы, связанный со входом/выходом в/из sleep-режима, приведён в табл. 1.

Таблица 1

Продолжение следует

Литература

1.Кузьминов А. Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. - М.: Издательство "Перо", 2018.

2.Кузьминов А. Программирование микроконтроллеров EFM8 с помощью встроенного загрузчика программ. - Радио, 2018, № 12, с. 11-14.

Автор: А. Кузьминов, г. Москва