№3 / 2018 / статья 5

TI говорит беспроводное «нет» протечкам и замерзанию

Александр Калачев (г. Барнаул)

Как предупредить хозяев дома об угрозе затопления или выхода из строя обогревательной системы? Опорная разработка Texas Instruments использует беспроводной канал для доставки уведомлений об авариях и способно работать от батареи типа CR2032 до 11 лет. Система представляет собой датчик протечек и замерзания на базе беспроводного контроллера CC1310 и интегрального датчика температуры и влажности HDC2010.

Распределенные сети датчиков позволяют получать данные, осуществлять мониторинг и управление различными процессами, отслеживать состояние объектов, изменение климатических условий и многое другое. Одно время в прессе постоянно муссировались термины «умная пыль», «умный дом», относящиеся к, если можно так выразиться, предельным желаемым параметрам системы. В случае с «умной пылью» – это малые размеры, сравнимые с размерами мелкой гальки или крупного песка, самонастройка сети, гибкие протоколы передачи данных, максимальная автономность. Концепция «умного дома» предполагала совокупность датчиков и исполнительных устройств, позволяющих максимально автоматизировать внутреннюю среду жилых и коммерческих помещений при минимальном участии человека.

На сегодняшний день популярен термин «Интернет вещей» (Internet of Things, IoT) в широкой трактовке – «концепция вычислительной сети физических предметов («вещей»), оснащенных встроенными технологиями для взаимодействия друг с другом или с внешней средой, рассматривающая организацию таких сетей как явление, способное перестроить экономические и общественные процессы, исключающая из части действий и операций необходимость участия человека».

Зачастую данный термин используется как яркая запоминающаяся маркетинговая формула, однако есть нечто общее среди всех устройств, относимых к «Интернету вещей», это – возможность обмена данными или иного взаимодействия с устройствами другой сети, построенной по иной технологии. Однако основные требования к устройствам IoT – максимальная автономность, наличие хотя бы одного беспроводного интерфейса, простота эксплуатации, так как конечный пользователь подобных устройств может совсем не иметь технических навыков.

Весьма условно все устройства IoT можно разделить на конечные (функциональные) устройства, шлюзы и пользовательские устройства. Как правило, функциональные устройства выполняют одну-две, реже больше операций – это всевозможные датчики, сигнализаторы, выключатели и подобные устройства. Чаще всего именно они работают от автономных источников питания, а также могут быть расположены в местах, куда потребитель заглядывает весьма нечасто.

«Страж потопа»

Одним из таких устройств является датчик протечек и замерзания, задача которого – предупредить хозяев об угрозе затопления подвала/комнаты/соседей или об угрозе критического выхолаживания помещения/здания. Наличие подобного датчика актуально, например, для квартиры в многоэтажном доме. В частном доме ситуация еще сложнее – за исправностью всей инфраструктуры приходится следить хозяевам, а затопленный подвал или «размороженный» дом – существенный удар по бюджету. По отзывам пользователей, популярные на рынке модели газовых котлов оказались очень требовательными к наличию постоянного электропитания: нет питания – котел гаснет, и хорошо, если хозяева не в отъезде. Небольшой экспресс-опрос знакомых домовладельцев подтвердил их заинтересованность в подобных устройствах.

В основе практически любого датчика протечек и замерзания – один или несколько контактных датчиков воды (по факту – контакты различной формы и транзисторный ключ для формирования сигнала), а также датчики температуры и влажности воздуха. Датчик воды располагается, в основном, на полу, недалеко от мест вероятных протечек (вблизи труб, раковин, ванн), датчик температуры/влажности – по усмотрению пользователя (рисунок 1). Иногда датчик протечек может не только сигнализировать о них, но и управлять исполнительными устройствами в виде вентилей с двигателями.

Рис. 1. Типовой состав и размещение датчика протечки

Рис. 1. Типовой состав и размещение датчика протечек

Датчик протечек/замерзания: Reference Design от TI

Одним из лучших кандидатов на роль «интеллектуальных» конечных устройств IoT являются устройства на базе беспроводных систем-на-кристалле семейства SimpleLink – CC13хх/CC26хх [1, 2].

Среди явных достоинств серий СС13хх/СС26хх:

  • малое потребление тока как в активном режиме, так и в режиме сна;
  • наличие двух программируемых ядер (основное – Cortex M3 и 16-битное RISC-ядро контроллера датчиков);
  • наличие программных библиотек, доступность популярных стеков протоколов, бесплатное предоставление многозадачной системы реального времени и среды разработки приложения (Code Composter Studio, CCS).

TIDA-01518 [3] является демонстрационным программно-аппаратным проектом, показывающим способ реализации датчика протечек с функциями измерения температуры и влажности, беспроводным интерфейсом и длительным временем автономной работы от небольшой батарейки типа CR2032.

Из аппаратуры в проект входят беспроводной контроллер семейства SimpleLink серии CC1310, интегральный датчик температуры и влажности HDC2010, два транзисторных ключа, звуковой излучатель. Один транзисторный ключ используется для управления работой звукового излучателя, ко второму подключаются контактные площадки датчика воды.

Транзисторные ключи, батарейка и датчик HDC2010 располагаются на плате TIDA-01518, которая подключается к отладочной плате CC1310 LaunchPad (рисунок 2).

Рис. 2. Структурная схема и внешний вид демонстрационного макета датчика протечек и замерзания TIDA-01518

Рис. 2. Структурная схема и внешний вид демонстрационного макета датчика протечек и замерзания TIDA-01518

Интегральный датчик температуры и влажности HDC2010 [4] выполнен в компактном WLCSP-корпусе. В отличие от многих аналогичных датчиков, чувствительный элемент его располагается в нижней части устройства, что делает HDC2010 более устойчивым к воздействию пыли и влаги.

Основные технические возможности HDC2010:

  • диапазон измерения относительной влажности: 0…100%;
  • рабочий диапазон температур: -40…85°С;
  • точность измерения температуры: ±0,2°С;
  • точность измерения влажности: ±2% (в диапазоне 10…80%);
  • диапазон рабочих напряжений питания: 1,62…3,6 В;
  • ток потребления в рабочем режиме: 550 нА – при измерении и влажности, и температуры; при измерениях только влажности – 300 нА;
  • ток в режиме ожидания: 50 нА;
  • интерфейс I²C.

Дополнительно HDC2010 имеет несколько программируемых режимов работы, включая настраиваемые интервалы измерений и срабатывания по пороговым значениям влажности/температуры.

Линия выбора адреса позволяет размещать на одной I²C-шине два датчика HDC2010. Линия прерывания может настраиваться на срабатывание или по завершению измерения, или по порогу. Типовая схема включения датчика представлена на рисунке 3.

Рис. 3. Типовая схема включения HDC2010

Рис. 3. Типовая схема включения HDC2010

Датчик HDC2010 опрашивается контроллером по прерыванию каждые 10 минут, помимо этого на нем настроено срабатывание по порогу температуры и влажности. Срабатывание датчика протечек также вызывает прерывание у контроллера CC1310, который активирует звуковой пьезоизлучатель (на него подается ШИМ-сигнал через транзисторный ключ, рисунок 4) и передает сообщение о событии по радиоканалу.

Рис. 4. Схемы включения контактного датчика протечки и звукового пьезоизлучателя

Рис. 4. Схемы включения контактного датчика протечек и звукового пьезоизлучателя

Программная часть TIDA-01518

Исходные коды программного проекта доступны на сайте Git.ti.com [5]. Они включают в себя CCS-проект для сенсорного узла и бинарные файлы прошивки для координатора. Для того чтобы была возможность перекомпилировать проект в CCS, должна быть установлена версия SDK 1.4.0.10. На сетевом уровне применяется стек TI 15.4-Stack, позволяющий создавать беспроводные сети топологии «звезда» в диапазоне 868 МГц. TI 15.4-Stack является реализацией стандарта 802.15.4-2006 с расширениями 802.15.4e для промышленного применения и 802.15.4g – для небольших сетей.

Не зарегистрированные на ресурсе Git.ti.com пользователи могут скачать проект, нажав на кнопку Source Tree и на открывшейся странице скачав/сохранив ссылку https://git.ti.com/sub1ghz-sensor-to-cloud/tida01518/archive-tarball/master. В результате будет получен файл без расширения с именем “master”. Меняем файлу расширение на .gz, распаковываем (winrar’ом или winzip’ом), получаем опять файл “master”, меняем ему расширение на .tar, распаковываем winrar’ом, получаем папку, в ней уже – zip-архивы с проектом, которые можно, в свою очередь, нормально распаковать. Затем проект можно импортировать в CCS.

Программное обеспечение tida01518 состоит из следующих основных программных блоков:

  • первоначальная инициализация (при включении питания или после сброса контроллера);
  • обнаружение протечки;
  • срабатывание порогов датчика температуры и влажности;
  • реакция на кнопки (правую, левую).

Первоначальная инициализация

При старте инициализируются драйвера линий ввода-вывода, шины I²C, радиоинтерфейс. Определяются функции, ответственные за обработку callback-вызовов, а также прерываний от линий, подключенных к датчику протечек, к линии прерывания HDC2010 и к кнопкам. HDC2010 настраивается на работу в режиме прерываний, устанавливаются пороговые значения по температуре и влажности, настраиваются параметры радиопротокола и CC1310 переводится в режим сна. Обобщенная диаграмма действий при инициализации представлена на рисунке 5.

Рис. 5. Обобщенная диаграмма действий при инициализации

Рис. 5. Обобщенная диаграмма действий при инициализации

Основные действия по настройке (вырезка из функции TaskFx файла “main.c”):


 ...

 // Инициализация HDC2010

 init_HDC2010();

 /* инициализация приложения */

 Sensor_init();

 /* входим в основной цикл обработки цикл обработки сообщений */

 while(1)

{

 Sensor_process();

}

 ...

Функция init_HDC2010 (файл “leak_detector.c”) задает конфигурацию выводов, инициализирует структуры данных для работы с HDC2010 и вызывает функцию настройки датчика температуры/влажности hdc2010_I2C_init() (описана в “hdc2010.c”):



void hdc2010_I2C_init(void)

{

 // запуск шины I²С

 I2C_init();

 I2C_Params_init(&i2cParams);

 i2cParams.bitRate = I2C_100kHz;

 AppI2cHandle = I2C_open(Board_I2C0, &i2cParams);

 if (AppI2cHandle == NULL)
 {

 while (1);

 }

 // задание верхнего порога срабатывания по температуре

 // адрес HDC2010 на шине 0х40 (0b1000000_)

 // регистр = 0x0B,

 // значение рассчитывается как

 // порог_по_температуре = (TEMP_HIGH_THRESHOLD/256)*165-40

 // в примере TEMP_HIGH_THRESHOLD=0x65 и, следовательно, 
 // порог_по_температуре = +25°С

 hdc2010_i2c_write(0x40, 0x0B, TEMP_HIGH_THRESHOLD);

 CPUdelay(2990); //sleep for 0.5 ms

 // задание верхнего порога срабатывания по влажности

 // регистр = 0x0D,

 // расчет порогового значения: порог_по_влажности=(HUM_HIGH_THRESHOLD/256)*100

 // в примере HUM_HIGH_THRESHOLD = 0хЕ0 и порог_по_влажности = 85%

 hdc2010_i2c_write(0x40, 0x0D, HUM_HIGH_THRESHOLD);

 CPUdelay(2990); //sleep for 0.5 ms

 // разрешение прерываний

 // Регистр = 0x07, бит = 1 – разрешено/0 – запрещено

 // бит_7 – прерывание по готовности данных:

 // для бита прерываний: бит = 0 – разрешено/1 – запрещено

 // бит_6 – ..по превышению верхнего порога по температуре

 // бит_5 – ..по понижению с преодолением нижнего порога по температуре

 // бит_4 – ..по превышению верхнего порога по влажности

 // бит_3 – ..по понижению с преодолением нижнего порога по влажности

 // бит_2…бит_0 – зарезервированы

 hdc2010_i2c_write(0x40, 0x07, 0x50);

 // записали значение 0b01010000 – разрешены прерывания по превышению
 // температуры и влажности

 CPUdelay(2990); //sleep for 0.5 ms

 //задание режима работы датчика HDC2010

 // регистр = 0x0E, частота проведения измерений, настройка прерываний,
 // полярность сигнала на выводе прерываний

 hdc2010_i2c_write(0x40, 0x0E, 0x16);

 // регистр конфигурации

 // бит_7 – программный сброс: 1 – инициализация сброса;

 // бит_6..4 – частота проведения измерений:

 //             000 – по запросу

 //             001 – 1/120 с (1 раз в 2 минуты);

 //             010 – 1/60 с

 //             011 – 1/10 с

 //             100 – 1/5 с

 //             101 – 1 Гц

 //             110 – 2 Гц

 //             111 – 5 Гц

 // бит_3 – 0/1 – выкл/вкл нагревателя для просушки сенсора

 // бит_2 – DRDY/INT_EN режим работы вывода INT 0-Z – состояние/1 – разрешен

 // бит_1 – INT_POL уровень выходного сигнала при возникновении прерывания
 // 0 – низкий, 1 – высокий

 // бит_0 – INT_MODE – возникновение прерывания 0 – по уровню
 // (выходной сигнал активен до считывания регистра статуса),
 // 1 – режим компаратора

 /*point to temp Register to trigger temp/humidity measurement*/

 i2c_txBuf[0] = HDC2010_CONFIG_REG;

 i2c_txBuf[1] = 0x01;

 i2cTransaction.writeBuf = i2c_txBuf;

 i2cTransaction.writeCount = 2;

 i2cTransaction.readBuf = i2c_rxBuf;

 i2cTransaction.readCount = 0;

 i2cTransaction.slaveAddress = 0x40;

 bStatus = I2C_transfer(AppI2cHandle, &i2cTransaction);

}

Функция sensor_init (“sensor.c”) проводит дальнейшие настройки:

  • инициализирует структуры данных (будут использованы при формировании пакета координатору);
  • устанавливает интервал отправки дежурных сообщений координатору;
  • инициализирует МАС-уровень радиопротокола;
  • инициализируется подключение к беспроводной сети;
  • регистрируются функции обработки сообщений МАС-уровня;
  • инициализируются прикладные функции сетевого узла;
  • инициализируются функции безопасности МАС-уровня;
  • устанавливается выходная мощность;
  • инициализируются таймеры;
  • генерируется событие старта задачи.


void Sensor_init(void)

{

 uint32_t frameCounter = 0;

 /* инициализируются структуры данных (будут использованы при формировании
 пакета координатору) */

 memset(&configSettings, 0, sizeof(Smsgs_configReqMsg_t));

 #if defined(TEMP_SENSOR)

 configSettings.frameControl |= Smsgs_dataFields_tempSensor;

 #endif

 #if defined(LIGHT_SENSOR)

 configSettings.frameControl |= Smsgs_dataFields_lightSensor;

 #endif

 #if defined(HUMIDITY_SENSOR)

 configSettings.frameControl |= Smsgs_dataFields_humiditySensor;

 #endif

 configSettings.frameControl |= Smsgs_dataFields_msgStats;

 configSettings.frameControl |= Smsgs_dataFields_configSettings;

 #if defined(WATERLEAK_SENSOR)

 configSettings.frameControl |= Smsgs_dataFields_waterleakSensor;

 #endif

 /* устанавливается интервал отправки дежурных сообщений координатору */

 #ifndef POWER_MEAS

 if(!CERTIFICATION_TEST_MODE)

 {
 configSettings.reportingInterval = CONFIG_REPORTING_INTERVAL;

 }

 else

 {

 configSettings.reportingInterval = 100;

 }

 configSettings.pollingInterval = CONFIG_POLLING_INTERVAL;

 #else

 #endif

 /* инициализирует МАС-уровень радиопротокола */

 sem = ApiMac_init(CONFIG_FH_ENABLE);

 /* инициализируется контроллер подключения к беспроводной сети */

 Jdllc_init(&Sensor_macCallbacks, &jdllcCallbacks);

 /* регистрируются функции обработки сообщений МАС-уровня */

 ApiMac_registerCallbacks(&Sensor_macCallbacks);

 /* инициализируются прикладные функции сетевого узла */

 Ssf_init(sem);

 Ssf_getFrameCounter(NULL, &frameCounter);

 #ifdef FEATURE_MAC_SECURITY

 /* инициализируются функции безопасности МАС-уровня */

 Jdllc_securityInit(frameCounter);

 #endif /* FEATURE_MAC_SECURITY */

 /* устанавливается выходная мощность передатчика */

 ApiMac_mlmeSetReqUint8(ApiMac_attribute_phyTransmitPowerSigned,(uint8_t)CONFIG_TRANSMIT_POWER);

 #ifdef FCS_TYPE16

 /* Set the fcs type */

 ApiMac_mlmeSetReqBool(ApiMac_attribute_fcsType,(bool)1);

 #endif

 /* инициализируются таймеры приложения – по факту будет в итоге вызвана
 функция Ssf_initializeReadingClock(); определенная в файле ssf.c */

 initializeClocks();

 if(CONFIG_AUTO_START)

 {

 /* генерируется событие старта задачи */

 Util_setEvent(&Sensor_events, SENSOR_START_EVT);

 /* SENSOR_START_EVT потом будет обработано функцией Sensor_process(); */

 }

}

Рутинная служба прибора

Вся дальнейшая работа приложения, по сути, представляет собой обработку системных событий, событий беспроводного протокола, обработку прерываний таймеров и внешних выводов.

Настройка обработки прерывания от таймера производится функцией initializeClocks(), в итоге по его срабатыванию будет сгенерировано событие SENSOR_READING_TIMEOUT_EVT, обрабатываемое в Sensor_process():



static void processReadingTimeoutCallback(UArg a0)

{

 (void)a0; /* Parameter is not used */

 Util_setEvent(&Sensor_events, SENSOR_READING_TIMEOUT_EVT);

 /* Wake up the application thread when it waits for clock event */

 Semaphore_post(sensorSem);

}

Прерывания от кнопок и внешних выводов настраиваются функцией Board_Key_initialize(), ею же регистрируется callback-функция обработчика изменений на выводах (включая кнопки), в данном случае – processKeyChangeCallback(), в качестве параметра получающая состояния отслеживаемых выводов. processKeyChangeCallback также сгенерирует событие, но уже «событие от выводов»:



static void processKeyChangeCallback(uint8_t keysPressed)

{

 keys = keysPressed;

 events |= KEY_EVENT;

 /* Wake up the application thread when it waits for keys event */

 Semaphore_post(sensorSem);

}

Данный тип событий будет обработан функцией Ssf_processEvents() (файл ssf.c), вызываемой в основном обработчике Sensor_process(). Фактически функция Ssf_processEvents() является высокоуровневым обработчиком прерываний от внешних выводов. Отслеживается нажатие правой или левой кнопок, срабатывание датчика протечек, срабатывание прерывания HDC2010.

Нажатие любой из кнопок (правой или левой) отключает генерацию звука независимо от того, была она инициирована или нет.

При запущенной основной задаче (событие SENSOR_START_EVT уже было) нажатие левой кнопки приводит к переключению режима работы датчика протечек и замерзания с обычного на тестовый и обратно. В тестовом режиме HDC2010 настраивается на измерения 5 раз в секунду с генерацией прерывания по завершении измерения (прерывания по порогам также сохраняются). В UART (или LCD с UART-интерфейсом, если он подключен) также будет выдано сообщение об изменении режима.

Нажатие правой кнопки приводит к чтению состояния датчиков, показания HDC2010 и состояния датчика протечек, и передачи пяти пакетов координатору с интервалом 30 мс. Если не был инициирован запуск основной задачи – она запускается. На UART выдается соответствующий комментарий.

Срабатывание датчика протечек приведет к выдаче предупреждения на UART, считаются актуальные данные с HDC2010 и координатору будет передано сообщение по беспроводному интерфейсу. Также будет включена генерация звука (рисунки 6, 7).

Рис. 6. Действия при срабатывании датчика протечки

Рис. 6. Действия при срабатывании датчика протечки

Сигнал от вывода прерывания HDC2010 в тестовом режиме приводит к чтению показаний датчика и выдаче сообщения о готовности данных. В основном режиме после чтения показаний датчика следует их передача по радиоканалу.

Рис. 7. Алгоритм работы с датчиком температуры и влажности и пользовательскими кнопками

Рис. 7. Алгоритм работы с датчиком температуры и влажности и пользовательскими кнопками

Рассмотрим детально:


void Ssf_processEvents(void)

{

 /* проверка, было ли событие от внешних выводов */

 if(events & KEY_EVENT)

 {

 /* была ли нажата одна из кнопок (любая) */

 if((keys & KEY_LEFT) && (keys & KEY_RIGHT))

 {

 #if defined(WATERLEAK_SENSOR)

 #ifndef WATERLEAK_LP

 LCD_WRITE_STRING("BUZZER OFF", 4);

 #endif

 /* отключаем звуковой сигнал */

 buzzer_status = 0;

 #endif

 }

 /* левая кнопка переключает датчик HDC2010 на режим 5 измерений/1 с, 
 повторное нажатие меняет его на 1 измерение/2 мин, изменяются также условия
 генерации прерываний */

 else if((keys & KEY_LEFT) && (started == true))

 {

 #if defined(WATERLEAK_SENSOR)

 if(!power_test_mode_flag)
 
 {

 // если был режим «основной», то переключаемся на «тестовый»

 #ifndef WATERLEAK_LP

 LCD_WRITE_STRING("Configure HDC2010 to Fast Sample Mode", 4);

 #endif

 // Configure DRDY, TEMP HIGH, HUM HIGH interrupt enables

 // добавляется генерация прерывания по готовности данных

 hdc2010_i2c_write(0x40, 0x07, 0xD0);

 CPUdelay(2990); //sleep for 0.5 ms

 // Configure 5Hz sample rate, INT_EN, INT_POL (high), INT_MODE (level sensitive)

 hdc2010_i2c_write(0x40, 0x0E, 0x76);

 // выставляется флаг тестового режима

 power_test_mode_flag = true;

 }

 else

 {

 // возвращаемся обратно в «основной» режим, возвращаем начальные
 // настройки прерываний

 #ifndef WATERLEAK_LP

 LCD_WRITE_STRING("Configure HDC2010 to Slow Sample Mode", 4);

 #endif

 // Configure TEMP HIGH, HUM HIGH interrupt enables

 hdc2010_i2c_write(0x40, 0x07, 0x50);

 CPUdelay(2990); //sleep for 0.5 ms

 // Configure 1/120Hz sample rate, INT_EN, INT_POL (high), INT_MODE (level sensitive)

 hdc2010_i2c_write(0x40, 0x0E, 0x16);

 // обнуляем флаг тестового режима

 power_test_mode_flag = false;

 }

 #else

 /* Send disassociation request */

 Jdllc_sendDisassociationRequest();

 #endif

 }

 /* по нажатию правой кнопки считывается HDC2010 и посылается 5 пакетов
 по радиоканалу */

 else if(keys & KEY_RIGHT)

 {

 #if defined(WATERLEAK_SENSOR)

 #ifndef WATERLEAK_LP

 //печатаем сообщение на дисплее/UART-терминале

 LCD_WRITE_STRING("SENDING 5 DATA PACKETS", 4);

 #endif

 // считываем показания датчиков – и влажности, и протечек

 readSensors();

 // передаем 5 пакетов с интервалом 30 секунд

 for (int packet_num = 0; packet_num <= 4; packet_num++)

 {

 processSensorMsgEvt();

 CPUdelay(30*5980); //sleep for 30 ms

 }

 #endif

 if(started == false)

  {

  // если вдруг основной цикл работы не запущен - запускаем его

  #ifndef WATERLEAK_LP

  /* о чем пишем */

  LCD_WRITE_STRING("Starting...", 2);

  #endif

  /* и посылаем сообщение основному обработчику */

  Util_setEvent(&Sensor_events, SENSOR_START_EVT);

  }

 }

 #if defined(WATERLEAK_SENSOR)

 // если сработал датчик протечек

 else if(keys & KEY_WATERLEAK)

 {

 // пишем текстовое сообщение

 #ifndef WATERLEAK_LP

 LCD_WRITE_STRING("WATER LEAK DETECTED", 4);

 #endif

 // считываем показания всех датчиков, передаем пакет координатору

 readSensors();

 processSensorMsgEvt();

 }

 // пришло прерывание от датчика HDC2010

 else if(keys & KEY_SENSORTHRESH)

 {

 // печатаем сообщение, считываем данные

 if(power_test_mode_flag)

 {

 // если режим «тестовый»

 #ifndef WATERLEAK_LP

 LCD_WRITE_STRING("SENSOR DATA READY", 4);

 #endif

 readSensors();

 }

 // печатаем сообщение, считываем и передаем данные

 else

  {

  // если режим «основной»

  #ifndef WATERLEAK_LP

  LCD_WRITE_STRING("SENSOR THRESHOLD DETECTED", 4);

  #endif

  readSensors();

  processSensorMsgEvt();

  }

 }

 #endif

 /* сбрасываем переменную-индикатор срабатывания внешнего вывода */

 keys = 0;

 /* сбрасываем индикатор события */

 Util_clearEvent(&events, KEY_EVENT);

 }

}

Результаты тестирования

Для проверки правильности работы радиопередачи в качестве сниффера для пакетов TI 15.4-Stack могут применяться платы CC1350/CC1310 LaunchPad. Это позволяет упростить разработку и отладку приложений, использующих TI 15.4-Stack для передачи данных.

В качестве диагностического программного обеспечения TI 15.4-Stack устанавливает приложение TiWsPc2, которое использует доступные платы TI для захвата пакетов, позволяет сохранять принятые пакеты в файлы формата Wireshark® или PCAP На рисунке 8 приведены примеры пакетов TI 15.4, принятых снифером.

Рис. 8. Примеры пакетов TI 15.4, принятых при помощи TiWsPc2

Рис. 8. Примеры пакетов TI 15.4, принятых при помощи TiWsPc2

Подробное руководство по настройке, запуску и работе с TI 15.4-Stack-снифером находится в папке с документацией SDK( к примеру, C:\ti\simplelink_cc13x0_sdk_1_40_00_10\docs\ti154stack\ – при установке «по умолчанию»).

При тестировании работы радиоканала в качестве координатора-приемника использовался CC1111 packet sniffer dongle. В типичных условиях офисного здания и рабочего окружения достигнутая дальность приема равнялась примерно 220 метрам при зафиксированном уровне сигнала на стороне приемника -100 дБм. Дистанция приема и уровень сигнала могут быть увеличены за счет применения внешних антенн, отличных от печатных антенн, которые реализованы и в CC1111 packet sniffer dongle и CC1310 Launch Pad.

Рисунок 9 демонстрирует осциллограммы момента срабатывания датчика протечек (при тестировании его заменяли просто два провода, которые опускались в воду) и сигнал, подаваемый на пьезоизлучатель. Рисунки 10 и 11 демонстрируют токи потребления датчика при его работе от батарейки – представлены диаграммы падения напряжения на шунте 3,2 Ом. На рисунке 11 чтение данных HDC2010 – первая ступенька подъема тока, передача данных по радиоканалу – высокий пик, после которого ток падает до первоначального значения. Рисунок 11 показывает токи в ситуации срабатывания датчика протечек и запуска пьезоизлучателя – ему соответствует первый, самый большой, пик, увеличение тока после него связано с работой звукоизлучателя. Примерно посредине заметен небольшой подъем при чтении с HDC2010. Второй пик связан с передачей пакета по радио. Средние токи потребления в различных условиях работы представлены в таблице 1 [3].

Таблица 1. Средние токи потребления в различных условиях работы

Условия Средний ток
Начальный запуск, мкА 35,97
Режим сна, мкА 1,37
Передача показаний HDC2101, мА 2,369
Срабатывание датчика протечек и передача сообщения по радиоканалу, мА 5,85
Прием конфигурационного пакета, мА/мс 9,08/21,52

Согласно оценкам, проведенным компанией Texas Instruments [3], средний ток потребления датчика будет равен примерно 4,12 мкА, что в итоге дает оценку длительности автономной работы порядка 11 лет.

Рис. 9. Осциллограммы срабатывания датчика протечки и работа звукового излучателя [3]

Рис. 9. Осциллограммы срабатывания датчика протечек и работа звукового излучателя [3]

Рис. 10. Диаграмма потребления тока при чтении датчика температуры и влажности и передаче пакета по радиоканалу [3]

Рис. 10. Диаграмма потребления тока при чтении датчика температуры и влажности и передаче пакета по радиоканалу [3]

Рис. 11. Диаграмма потребления тока при чтении датчика температуры и влажности и передаче пакета по радиоканалу [3]

Рис. 11. Диаграмма потребления тока при чтении датчика температуры и влажности и передаче пакета по радиоканалу [3]

Заключение

Система-на-кристалле CC1310 – представитель семейства экономичных, энергоэффективных беспроводных контроллеров SimpleLink, работающих в диапазонах 2,4 ГГц и суб-1 ГГц. Ключевыми параметрами является малое потребление при работе радиотракта и микроконтроллерного ядра в гибких режимах малой мощности. В сумме это обеспечивает длительный срок службы источников питания, даже небольших батареек типа «таблетка» или «сборщиков энергии», что делает CC1310 прекрасными кандидатами для различного рода датчиков и сигнализаторов с беспроводным интерфейсом.

Литература

  1. https://itechinfo.ru/content/определение-понятий;
  2. SimpleLink™ Solutions;
  3. Новое поколение радиочастотных решений CC13xx и CC26xx от TI;
  4. TI Designs: TIDA-01518 Low-Power Flood and Freeze Detector Reference Design With Sub-1 GHz and 10-Year Coin Cell Battery Life;
  5. HDC2010 Low Power Humidity and Temperature Digital Sensors;
  6. GIT repository of TIDA-01518.

Наши информационные каналы

О компании Texas Instruments

В середине 2001 г. компании Texas Instruments и КОМПЭЛ заключили официальное дистрибьюторское соглашение, которое явилось результатом длительной и успешной работы КОМПЭЛ в качестве официального дистрибьютора фирмы Burr-Brown. (Как известно, Burr-Brown вошла в состав TI так же, как и компании Unitrode, Power Trend и Klixon). С этого времени компания КОМПЭЛ получила доступ к поставке всей номенклатуры производимых компанией TI компонентов, ...читать далее