
«Беспроводная сеть сделана легко!» - Включите подсчет импульса на применение Lorawan с низкой мощностью

Программное обеспечение предоставляется «как есть» и дает путь для самоподдерживания и самообслуживания.
Этот репозиторий содержит неподдерживаемый пример кода, предназначенный для ускорения разработки продукта клиента. Он не подтвержден для производства и проверена на наилучшие практики безопасности.
Обратите внимание, что, хотя этот репозиторий не поддерживается, Microchip приветствует вклад сообщества, и все запросы будут рассматриваться для включения в репозиторий.
Взаимодействуйте со сверстниками в сообществе на форуме Lora.
На основе приложения Lorawan, сгенерированного из ASFV3, этот код пример демонстрирует, как включить эффективное подсчет импульсов, в то время как устройство помещается в режим резервного режима, полезный для приложений с батарейным мощным
Основное приложение состоит в том, чтобы передавать значение счетчика с поставщиком сети Lorawan Cloud через шлюз. Для целей этой демонстрации использовались TTN и TTI с предопределенным безопасным элементом.
Клоуна/Загрузите текущую репо, чтобы получить программное обеспечение.
Обязательно: купить комплект SAM R34 XPLAING PRO PRO

Купите комплект wlr089u0 xpliensed pro

Должен: купить шлюз Lora (r) (например, в промышленности) 
Необязательно: приобретите образцы защитного элемента ATECC608A-TNGLORA и CryptoAuthentication UDFN STOCKET
Загрузите и установите Microchip Studio 7.0 IDE.
Open Microchip Studio 7.0 IDE.
Из инструментов -> расширения и обновления , установите расширенную программную структуру (ASFV3) v3.49.1 Релиз или верхний выпуск.
Перезапустить Microchip Studio
Загрузите и установите программу серийного терминала, такую как Tera Term.
Чтобы извлечь потребление тока SAM R34, плата необходимо настроить, как объяснено ниже:

Если вы используете серверы TTI и защищенный элемент ATECC608A-TNGLORA, обратитесь к этому репо для установки.
WLR089 XPLAING PRO требует модификации аппаратного обеспечения для использования кода приложения. По умолчанию Inductor L301 (10UH) и конденсатор C316 (100NF) не установлены на WLR089 XPLAIN PRO. Оба должны быть установлены, чтобы использовать демонстрационное приложение и выбрать преобразователь BUCK в качестве регулятора основного напряжения в активном режиме.
Проверьте документацию WLR089 XPLADE PRO для получения более подробной информации.



Устройства SAMR34/R35 имеют точные внешние и внутренние генераторы с низкой мощностью. Различные часовые домены могут быть независимо настроены для работы на разных частотах, что позволяет экономить мощность, запустив каждую периферию на ее оптимальной тактовой частоте, тем самым сохраняя высокую частоту ЦП, одновременно снижая энергопотребление.
Устройства SAM R34/R35 имеют четыре программных режима сна: холостое время, резервное копирование, резервное копирование и выключение.
В режиме холостого хода процессор останавливается, в то время как все другие функции могут выполняться.
В режиме ожидания все часы и функции останавливаются, за исключением тех, которые выбраны для продолжения работы. В этом режиме все бараны и логическое содержимое сохраняются. Устройство поддерживает лунатинг, что позволяет некоторым периферийным устройствам просыпаться от сна на основе предопределенных условий, что позволяет некоторым внутренним операциям, таким как передача DMA и/или процессор пробудиться только при необходимости; Например, когда порог пересекается, или результат готов. Система событий поддерживает синхронные и асинхронные события, позволяя периферийным устройствам принимать, реагировать и отправлять события даже в режиме ожидания.
В режиме резервного копирования большинство логических и аналоговых ячеек отключены. Доступно лишь немногие функции (RTC, резервные регистры, пробуждение от внешних булавок).
Режим OFF не рекомендуется, так как высокий импеданс на внутренней шине SPI приводит к метастабильности.
Устройства SAM R34/R35 имеют два уровня программного обеспечения, выбираемых программным обеспечением (PL0 и PL2), позволяющие пользователю масштабировать самый низкий уровень напряжения ядра, который поддерживает рабочую частоту. Для дальнейшего минимизации потребления тока, в частности, рассеяния утечки, устройства используют метод стробирования доменов власти с удержанием для отключения некоторых логических областей при сохранении своего логического состояния. Эта техника полностью обрабатывается в оборудовании.
Стек Microchip Lorawan (MLS) предоставляет модуль управления питанием (PMM) в стеке. Приложение, работающее поверх MLS, может использовать PMM для сохранения питания во время простоя. Помимо сохранения мощности во время холостого хода, PMM пытается снизить энергопотребление даже во время транзакции. Экономия питания осуществляется путем переключения MCU на один из доступных режимов с низкой мощностью. В настоящее время PMM поддерживается только на MCU SAM R34, и его можно настроить либо в режиме ожидания, либо в режиме резервного копирования.
Режим ожидания:
Режим резервного копирования:
PMM включен через макрос CONF_PMM_ENABLE . Этот макрос управляет добавлением и удалением PMM в приложении и в стеке. После включения функций PMM в коде приложения все части кода, расположенные между следующим разделом, будут составлены и выполнены:
#ifdef CONF_PMM_ENABLE
..
#endif
Текущее приложение (файл lorawan_app.c ) уже реализует весь код, необходимый для использования функций PMM. И следующие данные приведены для информации.
Чтобы использовать PMM в приложении, необходимо включить следующие файлы заголовков:
#ifdef CONF_PMM_ENABLE
#include "pmm.h"
#include "conf_pmm.h"
#include "sleep_timer.h"
#include "sleep.h"
#endif
По умолчанию время сна приложения настроено на 30 секунд и может быть изменено на желаемые значения. Время запроса сна приложения настроено макросом:
#define DEMO_CONF_DEFAULT_APP_SLEEP_TIME_MS 30000 // Sleep duration in ms
Но продолжительность сна должна попасть в приемлемый диапазон, который представляет собой в следующей таблице.

Модуль таймера сна должен быть инициализирован для включения модуля RTC:
#ifdef CONF_PMM_ENABLE
SleepTimerInit() ;
#endif
Файл rtc_count.h содержит доступные источники часов для модуля RTC.
#ifdef FEATURE_RTC_CLOCK_SELECTION
/**
* brief Available clock source for RTC.
* RTC clock source.
*/
enum rtc_clock_sel {
/** 1.024KHz from 32KHz internal ULP oscillator */
RTC_CLOCK_SELECTION_ULP1K = OSC32KCTRL_RTCCTRL_RTCSEL_ULP1K_Val,
/** 32.768KHz from 32KHz internal ULP oscillator */
RTC_CLOCK_SELECTION_ULP32K = OSC32KCTRL_RTCCTRL_RTCSEL_ULP32K_Val,
#if !(SAML22)
/** 1.024KHz from 32KHz internal oscillator */
RTC_CLOCK_SELECTION_OSC1K = OSC32KCTRL_RTCCTRL_RTCSEL_OSC1K_Val,
/** 32.768KHz from 32KHz internal oscillator */
RTC_CLOCK_SELECTION_OSC32K = OSC32KCTRL_RTCCTRL_RTCSEL_OSC32K_Val,
#endif
/** 1.024KHz from 32KHz external oscillator */
RTC_CLOCK_SELECTION_XOSC1K = OSC32KCTRL_RTCCTRL_RTCSEL_XOSC1K_Val,
/** 32.768KHz from 32.768KHz external crystal oscillator */
RTC_CLOCK_SELECTION_XOSC32K = OSC32KCTRL_RTCCTRL_RTCSEL_XOSC32K_Val,
};
#endif
Для этого приложения модуль RTC будет работать с внешним 32 кГц. Используя внутренний генератор Ultra Low Power 32 кГц в качестве источника тактовой частоты RTC, но требует разных настройки тактовой частоты. Использование XOSC32 приведет к повышению производительности, менее частотному дрейфу и, следовательно, более высокой стабильности.
В режиме ожидания все источники часов останавливаются, за исключением того, что бит runstdby (в режиме ожидания) для модуля установлен или устанавливается бит ондеманд на ноль. По умолчанию регулятор работает в режиме низкой мощности при использовании режима Sleepby Sleep. Перед входом в режим ожидания необходимо убедиться, что значительное количество часов и периферийных устройств отключено, так что регулятор напряжения не перегружен. Чтобы избежать перегрузки, периферийные устройства должны быть настроены таким образом, чтобы общее энергопотребление, поставляемое внутренним регулятором в режиме низкой мощности, составляла менее 50 мкА. Если периферийные устройства, необходимые для запуска в режиме ожидания, потребляют более 50UA, регулятор должен быть настроен для работы в нормальном режиме, и это можно сделать из программного обеспечения, установив бит Runstdby в SYSCTRL -> vreg.
Приложение реализует следующую функцию оптимизации питания, обеспечивающую выгоду от ультра-низкую архитектуру мощности устройства SAM R34.
static void configure_sleep(void)
{
/* Disable BOD33 */
SUPC->BOD33.reg &= ~(SUPC_BOD33_ENABLE);
/* Select BUCK converter as the main voltage regulator in active mode */
SUPC->VREG.bit.SEL = SUPC_VREG_SEL_BUCK_Val;
/* Wait for the regulator switch to be completed */
while(!(SUPC->STATUS.reg & SUPC_STATUS_VREGRDY));
/* Set Voltage Regulator Low power Mode Efficiency */
SUPC->VREG.bit.LPEFF = 0x1;
/* Apply SAM L21 Erratum 15264 */
SUPC->VREG.bit.RUNSTDBY = 0x1;
SUPC->VREG.bit.STDBYPL0 = 0x1;
/* SRAM configuration in standby */
PM->STDBYCFG.reg = PM_STDBYCFG_BBIASHS(1) | PM_STDBYCFG_VREGSMOD_LP ;
}
Обратитесь к таблице данных семейного продукта SAM L21 для получения более подробной информации об архитектуре низкой мощности микроконтроллера. https://www.microchip.com/wwwproducts/en/atsaml21j18b
В целом, датчик потока преобразует кинетическую энергию из вращения в электрические цифровые сигналы в форме импульсов.
В этом приложении устройство SAM R34 подсчитывает количество импульсов, оставаясь в режиме ожидания. Благодаря функциям системы событий (EVSYS), доступными в устройстве SAM R34, чтобы обеспечить межпроферическую связь, таким образом, помогает снизить нагрузку ЦП и энергопотребление системы. Это позволяет автономный контроль над периферийными устройствами без использования полосы пропускания процессора, и он может оставаться в режиме ожидания в течение более длительных периодов.
Некоторые периферийные устройства могут продолжать работать в режиме ожидания, где работают исходные часы, и это случай счетчика таймера (TC) или счетчика таймера для управляющих приложений (TCC).
Система событий состоит из следующих двух ресурсов событий:
В текущем приложении система событий была настроена, как показано ниже.

Это приложение направлено на то, чтобы подсчитать импульсы, исходящие от источника импульса, и передавать через РЧ -протокол Лоравана.

Модуль extint8 (физически подключен к пользовательской кнопке, присутствующей на плате) настроен для создания события при нажатии кнопки SW0. SW0 подключен к PA28, который может генерировать прерывания на эксперте [8].
// configure external interrupt for SW0
void configure_extint(void)
{
// configure external interrupt controller
struct extint_chan_conf extint_chan_config ;
extint_chan_config.gpio_pin = CONF_EIC_PIN ;
extint_chan_config.gpio_pin_mux = CONF_EIC_MUX ;
extint_chan_config.gpio_pin_pull = EXTINT_PULL_UP ;
extint_chan_config.detection_criteria = EXTINT_DETECT_RISING ;
extint_chan_config.filter_input_signal = true ;
extint_chan_set_config(CONF_EIC_CHAN, &extint_chan_config) ;
// configure external interrupt module to be an event generator
struct extint_events extint_event_config ;
extint_event_config.generate_event_on_detect[CONF_EIC_CHAN] = true ;
extint_enable_events(&extint_event_config) ;
}
Это маршрутизируется на Timer/Counter TC0 по каналу системы событий 8.
// configure event system for generators and users
void configure_eventsystem(void)
{
// configure event system
struct events_resource event_res ;
// configure channel
struct events_config config ;
events_get_config_defaults(&config) ;
config.generator = CONF_EVENT_GENERATOR_ID ;
config.edge_detect = EVENTS_EDGE_DETECT_RISING ;
config.path = EVENTS_PATH_ASYNCHRONOUS ;
config.run_in_standby = true ;
events_allocate(&event_res, &config) ;
// configure user
events_attach_user(&event_res, CONF_EVENT_USER_ID) ;
}
TC0 настроен на увеличение 16-битного счетчика на событии, сгенерированном из модуля Extint.
// configure_tc
void configure_tc(void)
{
// configure TC module for counting
static struct tc_config tc_counter_config ;
tc_reset(&tc_counter_module) ;
tc_get_config_defaults(&tc_counter_config) ;
tc_counter_config.clock_prescaler = TC_CLOCK_PRESCALER_DIV1 ;
tc_counter_config.count_direction = TC_COUNT_DIRECTION_UP ;
tc_counter_config.counter_size = TC_COUNTER_SIZE_16BIT ;
tc_counter_config.on_demand = true ;
tc_counter_config.run_in_standby = true ;
tc_init(&tc_counter_module, CONF_TC, &tc_counter_config) ;
struct tc_events tc_event = {
.on_event_perform_action = true,
.event_action = TC_EVENT_ACTION_INCREMENT_COUNTER,
.generate_event_on_overflow = false
} ;
tc_enable_events(&tc_counter_module, &tc_event) ;
// enable TC module
tc_enable(&tc_counter_module) ;
}
Поскольку у TC есть бит в режиме, он немного улучшает энергопотребление в режиме ожидания против модуля TCC. В conf_pulse_counter.h можно выбрать использовать TC или TCC в качестве счетчика. Оба могут считать в режиме ожидания.
#ifndef CONF_PULSE_COUNTER_H
#define CONF_PULSE_COUNTER_H
// Counter selection
#define USE_TC 0
#define USE_TCC 1
#define COUNTER_SELECTED USE_TC
// EXTINT Config
#define CONF_EIC_CHAN BUTTON_0_EIC_LINE // EXTINT8
#define CONF_EIC_PIN BUTTON_0_EIC_PIN
#define CONF_EIC_MUX BUTTON_0_EIC_MUX
// EVSYS Config
#define CONF_EVENT_GENERATOR_ID EVSYS_ID_GEN_EIC_EXTINT_8
#if (COUNTER_SELECTED == USE_TCC)
#define CONF_EVENT_USER_ID EVSYS_ID_USER_TCC1_EV_0
#else
#define CONF_EVENT_USER_ID EVSYS_ID_USER_TC4_EVU // must match with CONF_TC
#endif
// TCC
#define CONF_TCC TCC1
#define CONF_CAPTURE_CHAN_0 0
#define CONF_CAPTURE_CHAN_1 1
// TC
#define CONF_TC TC4 // TC0 is already used in LoRaWAN stack (hw_timer.c, conf_hw_timer.h)
#endif
Откройте текущий проект с Microchip Studio 7 IDE
Из верхнего меню перейдите в Project -> Properties
В случае, если защищенный элемент подключен к плате SAM R34 XPLAING PRO, убедитесь, что макрос CRYPTO_DEV_ENABLED определен. Выберите инструментальный chanse> Компилятор ARM/GNU C> Символы

В настройках инструмента выберите свою плату в качестве отладчика EDBG с интерфейсом SWD


В верхнем меню открытые инструменты> Визуализатор данных

Под панелью управления DGI выберите SAMR34 XPLAING PRO и нажмите Connect

Когда он будет готов, выберите интерфейс «Power» и нажмите «Пуск», чтобы запустить анализ питания на плате.

Визуализатор данных должен отображать энергопотребление устройства SAM R34 и сделать абстракцию ввода -вывода и внешнего потребления встроенных чипов.
Открыть термин Tera UART Консоль, настроенная на 115200 б.п.
Нажмите кнопку «Сбросить» на плате SAM R34 XPLAINE PRO, чтобы увидеть вывод, напечатанный на консоли
Если макрос CRYPTO_DEV_ENABLED определен и защищенный элемент подключен к SAM R34 XPLAINE PRO через разъем EXT3:

Если макрос CRYPTO_DEV_ENABLED не определен, используются учетные данные OTAA в lorawan_app.c :

Когда устройство успешно присоединилось к сети Lorawan, приложение периодически просыпается каждые 60 секунд и передает сообщение восходящей линии связи по сети Lorawan. Сообщение инкапсулирует значение счетчика и температуру в ° C и в ° F.

В активном режиме, в каждом пробуждении, устройство выпускает передачу, за которой следует два окна приема.

Между двумя передачами энергопотребление в режиме ожидания составляет около 8UA

В режиме ожидания подсчет импульса возможна без пробуждения процессора.

По сравнению с DataShing Datahate DataShing SAM R34 дополнительный ток UA связан с тем, что RF -коммутатор всегда включается в текущей конструкции платы XPLAD PRO.
С помощью платы WLR089U0 XPLAINE PRO переключатель радиочастотного переключателя контролируется применением, и с этим улучшением измеренное потребление тока намного ниже.
Результат также можно наблюдать и на консоли сетевого сервера Lorawan.

Для устройства класса А; который спит большую часть времени; Важно принять во внимание количество мощности, когда устройство не выполняет радиопередацию. Использование PMM с более длительным параметром сна является хорошей практикой для уменьшения количества событий, а также снизить общее энергопотребление. Другие факторы, которые следует учитывать, когда вы хотите оптимизировать общее энергопотребление вашего устройства, являются
Если включен рабочее цикл (например, если используется полоса EU868), таймер цикла пошлина прерывает сон и дает неожиданные пробуждения.
