
“無線變得容易!” - 啟用脈搏計算低功率Lorawan應用程序

該軟件是“原樣”提供的,並為自支撐和自我維護提供了途徑。
該存儲庫包含旨在幫助加速客戶產品開發的示例代碼。它未通過生產驗證,也沒有對安全性最佳實踐進行審核。
請注意,儘管該存儲庫不支持,但Microchip歡迎社區的貢獻,以及所有的拉值都將被考慮將其納入存儲庫。
在洛拉論壇上與社區中的同伴互動。
基於從ASFV3生成的Lorawan應用程序,此示例代碼演示瞭如何在設備處於待機模式下啟用功率效率的脈衝計數,這對於智能計量中使用的電池供電應用程序有用
主應用程序包括將計數器值傳輸到洛萬網絡提供商云通過網關。出於此演示,已使用了具有預先置換的安全元件的TTN和TTI。
克隆/下載當前存儲庫以獲取軟件。
必須:購買SAM R34 XPLAINE PRO評估套件

購買WLR089U0 XPLAINE PRO評估套件

必須:購買洛拉(R)網關(例如,來自行業的事物) 
可選:購買atecc608a-tnglora安全元件和加密授權udfn插座套件的樣品
下載並安裝Microchip Studio 7.0 IDE。
開放Microchip Studio 7.0 IDE。
從工具 - >擴展和更新中,安裝高級軟件框架(ASFV3)v3.49.1發布或上限發布。
重新啟動Microchip Studio
下載並安裝諸如TERA術語之類的串行終端程序。
要提取SAM R34電流消耗,董事會需要配置如下所述:

如果您使用的是TTI服務器和ATECC608A-TNGLORA安全元素,請參閱此存儲庫的設置。
WLR089 Xplained Pro需要使用硬件修改才能使用應用程序代碼。默認情況下,電感器L301(10UH)和電容器C316(100NF)未安裝在WLR089 XPLAINE PRO上。兩者都需要安裝以使用演示應用程序,然後在活動模式下選擇“降壓轉換器”作為主電壓調節器。
查看WLR089 XPLAINE PRO文檔以獲取更多詳細信息。



SAMR34/R35設備具有準確的低功率外部和內部振盪器。可以獨立地配置不同的時鐘域以不同的頻率運行,從而通過以最佳時鐘頻率運行每個外圍,從而避免功率,從而保持較高的CPU頻率,同時降低功耗。
SAM R34/R35設備具有四種可選擇的軟件睡眠模式:空閒,待機,備份和OFF。
在空閒模式下,CPU停止,而所有其他功能都可以保持運行。
在待機模式下,除了選擇繼續運行的那些時,所有時鐘和功能都將停止。在此模式下,保留所有RAM和邏輯內容。該設備支持夢遊,這允許一些外圍設備根據預定義的條件從睡眠中醒來,從而使某些內部操作只有在需要時只有在需要時醒來;例如,當越過閾值或準備就緒時。事件系統支持同步和異步事件,允許外圍設備接收,反應和發送事件,甚至在待機模式下。
在備份模式下,大多數邏輯和模擬單元格被關閉。只有很少的功能可用(RTC,備份寄存器,外部引腳喚醒)。
不建議使用OFF模式,因為對內部SPI總線的高阻抗會導致亞穩定性。
SAM R34/R35設備具有兩個可選擇的軟件性能水平(PL0和PL2),使用戶可以擴展支持工作頻率的最低核心電壓水平。為了進一步最大程度地減少當前消耗,特別是洩漏耗散的漏氣,設備利用具有保留的功率域門控技術來關閉某些邏輯領域,同時保持其邏輯狀態。該技術在硬件中完全處理。
Microchip Lorawan堆棧(MLS)在堆棧中提供了電源管理模塊(PMM)。在MLS之上運行的應用程序可以選擇使用PMM在空閒時間中節省電源。除了在空閒期間節省電力外,PMM即使在交易期間也試圖減少功耗。通過將MCU切換到可用的低功率模式之一來完成動力。當前,PMM僅在SAM R34 MCU上支持,並且可以在備用或備份睡眠模式下配置。
待機模式:
備份模式:
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模塊將從外部32kHz時鐘進行計時。使用內部32KHz超低功率振盪器作為RTC時鐘源,但需要不同的時鐘設置。使用XOSC32將導致更好的性能,頻率漂移較小,從而更高的穩定性。
在待機模式下,所有時鐘源都停止了,除了設置了模塊的Runstdby(備用備用)位或將Ondemand位設置為零的時鐘源。默認情況下,使用待機睡眠模式時,調節器在低功率模式下運行。在進入待機模式之前,必須確保禁用大量的時鐘和外圍設備,以免電壓調節器過載。為了避免過載,應配置外圍設備,以便內部調節器在低功率模式下提供的總功耗應小於50μA。如果需要在待機模式下運行的外圍設備消耗超過50UA,則應將調節器配置為以正常模式運行,並且可以通過在SYSCTRL-> VREG中設置Runstdby位來從軟件中完成。
該應用程序實現了以下功率優化功能,從而使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設備在保持待機模式時計算脈衝數。得益於SAM R34設備中可用的事件系統(EVSYS)功能,可以啟用外科間通信,從而有助於降低系統的CPU負載和功耗。它允許在不使用CPU帶寬的情況下自主控制外圍設備,並且可以在待機模式下保持更長的時間。
某些外圍設備可以繼續以備用模式,源時鐘運行的位置運行,而計時器計數器(TC)或計時器計數器的情況是控制應用程序(TCC)的情況。
事件系統由以下兩個事件資源組成:
在當前應用程序中,事件系統已配置如下。

該應用程序旨在計算來自脈衝源的脈衝並通過Lorawan RF協議傳輸。

當按下按鈕SW0時,將Extint8模塊(物理連接到板上存在的用戶按鈕)配置為生成事件。 SW0連接到PA28,該PA28可以在Extint上產生中斷[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) ;
}
這是通過事件系統通道8將其路由到計時器/計數器TC0。
// 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配置為從Extint模塊生成的事件上增加16位計數器。
// 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打開當前項目
在頂部菜單中,轉到項目 - >屬性
如果安全元素連接到SAM R34 XPLAINE PRO板,請確保定義了Macro CRYPTO_DEV_ENABLED 。選擇工具鏈> ARM/GNU C編譯器>符號

從工具設置中,選擇您的板作為具有SWD接口的EDBG調試器


在頂部菜單中,打開工具>數據可視化器

在DGI控制面板下,選擇SAMR34 XPLAINE PRO,然後單擊Connect

準備就緒後,選擇“電源”接口,然後單擊“啟動”以在板上啟動電源分析。

數據可視化器應顯示SAM R34設備的功耗,並使I/O和外部芯片芯片消耗進行抽象。
開放式TERA術語UART控制台配置為115200 bps,8-data bit/no parity/1-stop bit
按SAM R34 XPLAINE PRO板上的“重置”按鈕,以查看打印到控制台的輸出
如果定義了Macro CRYPTO_DEV_ENABLED ,並且將安全元素連接到SAM R34 Xplained Pro通過Ext3 Connector:

如果未定義宏CRYPTO_DEV_ENABLED ,則使用lorawan_app.c中的otaa憑據:

當設備成功加入Lorawan網絡時,該應用程序將每60秒定期醒來,並通過Lorawan網絡傳輸上行鏈路消息。該消息將計數器值和溫度封裝在°C和°F中。

在主動模式下,在每個喚醒中,設備將發出變速箱,然後發出兩個接收窗口。

在兩個傳輸之間,備用模式下的功耗約為8UA

在待機模式下,可以在不喚醒CPU的情況下進行脈衝計數。

與SAM R34數據表相比,額外的UA電流是由於RF開關始終在當前的Xplained Pro Board設計中啟動的事實。
使用WLR089U0 XPLAINE PRO板,RF開關由應用程序控制,並且隨著這種改進,測量的當前消耗要低得多。
結果也可以在Lorawan網絡服務器控制台上觀察到。

對於A級設備;大部分時間都在睡覺;當設備未執行無線電交易時,考慮到功率的量很重要。使用具有較長睡眠時間參數的PMM是減少喚醒事件數量並減少整體功耗的好習慣。當您想優化設備的整體功耗時,需要考慮的其他因素是
如果啟用了佔空比(例如使用EU868頻段),則佔空比計時器正在中斷睡眠並發出意外的喚醒。
