丁振杰,李玉秋,趙昌友,劉玉梅
(亳州職業(yè)技術(shù)學(xué)院,安徽 亳州 236800)
隨著物聯(lián)網(wǎng)的發(fā)展,物聯(lián)網(wǎng)終端的需求越來越旺盛,在資源有限或者偏遠(yuǎn)的應(yīng)用場景里,不可能給所有的物聯(lián)網(wǎng)終端設(shè)備拉線供電,導(dǎo)致很大部分終端需要電池供電。然而電池技術(shù)遲遲未有重大突破,電池容量有限,且頻繁更換電池勢必會(huì)增加大量的人力成本。因此,對于電池供電的應(yīng)用場景,能耗的高低直接影響產(chǎn)品的生存周期,低功耗工作方式就顯得尤為重要,尤其是針對環(huán)境相對惡劣的森林、沙漠地區(qū)等。物聯(lián)網(wǎng)設(shè)備功耗做得越低,產(chǎn)品的使用周期相應(yīng)延長,越能減少電池更換的頻次,從而節(jié)約了維護(hù)成本。
物聯(lián)網(wǎng)終端是物聯(lián)網(wǎng)的關(guān)鍵設(shè)備,一般由微控制單元(microcontroller unit, MCU)處理模塊、外圍感知接口、通信接口三部分組成[1-4]。MCU模塊對外圍感知器件采集的各種信號進(jìn)行數(shù)據(jù)分析、校驗(yàn)并將數(shù)據(jù)通過窄帶物聯(lián)網(wǎng)(narrow band internet of things,NB-IoT)通信模組傳輸?shù)轿锫?lián)網(wǎng)(云服務(wù)器),前端再從服務(wù)器取出相應(yīng)的傳感器數(shù)據(jù),以可視化頁面的形式呈現(xiàn)出來,系統(tǒng)框架圖見圖1。
圖1 系統(tǒng)框架圖
系統(tǒng)通過采用低功耗的MCU芯片,搭載多種低功耗傳感器,如溫濕度傳感器、紅外感應(yīng)器、RFID讀卡器等,以及低功耗NB-IoT通信模組,從而實(shí)現(xiàn)超低功耗。
處理器的功耗對于物聯(lián)網(wǎng)設(shè)備至關(guān)重要。系統(tǒng)采用的MCU是STM32L 071芯片,ARM Cortex-M0+內(nèi)核的32位微控制器,意法半導(dǎo)體的超低功耗系列,有非常優(yōu)秀的低功耗表現(xiàn)[5]。L0系列產(chǎn)品在待機(jī)模式下功耗僅為0.27 μA, 正常運(yùn)行模式下功耗也僅為88 μA,有低功耗運(yùn)行、睡眠、低功耗睡眠、停止、待機(jī)等多種低功耗模式;工作電壓1.65~3.6 V,時(shí)鐘頻率32 MHz。MCU模塊能完成對傳感器采集數(shù)據(jù)的處理、低功耗模式的設(shè)置等功能。
NB-IoT是物聯(lián)網(wǎng)絡(luò)的一個(gè)重要分支,具有部署成本低、待機(jī)時(shí)間長、功耗低等優(yōu)點(diǎn)[6]。NB-IoT只消耗大約180 kHz的帶寬,可部署于全球移動(dòng)通信系統(tǒng)、通用移動(dòng)通信系統(tǒng)或長期演進(jìn)技術(shù)。NB-IoT主要從待機(jī)、數(shù)據(jù)傳輸、業(yè)務(wù)模型等方面控制功耗[7],是低功耗、遠(yuǎn)距離無線通信的優(yōu)選技術(shù)。本模塊采用SIM7020,有標(biāo)準(zhǔn)的AT命令接口;電壓范圍2.1~3.6 V,典型值3.3 V;超低功耗,休眠模式下的耗流50 μA,PSM模式下僅有5 μA。
物聯(lián)網(wǎng)終端的感知部分由各種傳感器組成,傳感器與主控芯片STM32L相連,收集與周圍環(huán)境不同的信號(如溫度、濕度、光照等)發(fā)送與STM32L。本模塊測試選用SHTC3數(shù)字溫濕度傳感器,可以測量 0~100% 的相對濕度,-40℃~125℃ 的溫度,超高精確度(±2% 相對濕度,±0.2 ℃);電源電壓范圍寬1.62~3.6 V;每次測量均低于1 μJ的超低能耗預(yù)算,非常適用于由電池供電的移動(dòng)或無線應(yīng)用,使設(shè)備的電池續(xù)航時(shí)間大大延長。
在MCU的低功耗模式中,待機(jī)模式最省電,進(jìn)入待機(jī)模式后所有區(qū)域全部斷電,僅部分RTC區(qū)域未斷電,使喚醒源十分有限,而每次喚醒后相當(dāng)于系統(tǒng)復(fù)位。在停止(STOP)模式下,SRAM不斷電,從而保存了運(yùn)行狀態(tài),無需再次重新啟動(dòng),喚醒源較多,這樣可以增加軟件設(shè)計(jì)靈活性。停止模式比較適合本項(xiàng)目,它可以在保持SRAM和寄存器內(nèi)容的同時(shí)實(shí)現(xiàn)微安量級的電流功耗。
停止模式下,內(nèi)核被停止,配置關(guān)閉除LSE、LSI以外的所有時(shí)鐘。低速時(shí)鐘可以為喚醒中斷源提供時(shí)鐘,為了進(jìn)入停止模式,必須將SLEEP DEEP位置1,停止模式和待機(jī)模式都是由Cortex-M0+ 內(nèi)核提供的深度睡眠狀態(tài)實(shí)現(xiàn)的。不必要的GPIO管腳設(shè)置為模擬輸入,如果不進(jìn)行配置,在外部連接器件時(shí),器件的引腳可能會(huì)吸收電流,反而達(dá)不到低功耗的要求[8],此時(shí)STOP模式的電流很大。但I(xiàn)O引腳配置為模擬輸入時(shí),施密特觸發(fā)器輸入被禁用,每個(gè)引腳的功耗為零,必須將每個(gè)端口的GPIOx_MODER寄存器保存,然后將每個(gè)引腳切換到模擬輸入模式。喚醒源定位RTC鬧鐘中斷、復(fù)位按鍵中斷、低功耗串口LPUART接收中斷,設(shè)備喚醒后,每個(gè)引腳都可以恢復(fù)到先前的模式。為了避免意外,保存和恢復(fù)的過程必須是原子操作,既不會(huì)被線程調(diào)度機(jī)制打斷,在執(zhí)行完畢之前也不會(huì)被任何其他任務(wù)或事件中斷。進(jìn)入STOP模式的部分代碼如下:
/* Enable ultra low power mode */
LL_PWR_EnableUltraLowPower();
/** Set the regulator to low power before setting MODE_STOP.
* If the regulator remains in "main mode",
* it consumes more power without providing any additional feature. */
LL_PWR_SetRegulModeLP(LL_PWR_REGU_LPMODES_LOW_POWER);
/* Set STOP mode when CPU enters deepsleep */
LL_PWR_SetPowerMode(LL_PWR_MODE_STOP);
/* Set SLEEPDEEP bit of Cortex System Control Register */
LL_LPM_EnableDeepSleep();
/* Request Wait For Interrupt */
__WFI();
為達(dá)到最佳的低功耗狀態(tài),MCU采集完一次數(shù)據(jù)并立即通過MQTT發(fā)送至MQTT Broker,服務(wù)器再從Broker訂閱數(shù)據(jù),完成一次數(shù)據(jù)的上傳,過程結(jié)束,MCU進(jìn)入休眠狀態(tài)。一次發(fā)送時(shí)間約1~2 s,發(fā)送頻次越低,電池使用壽命便越長,從而完成綠色應(yīng)用的使命。
NB-IoT 網(wǎng)絡(luò)利用eDRX技術(shù)極大降低了終端功耗。DRX為傳統(tǒng)技術(shù)模式,終端時(shí)刻在線,例如我們的手機(jī),只要開機(jī),就可以時(shí)刻被呼叫。eDRX是DRX模式的擴(kuò)展,將網(wǎng)絡(luò)先開一會(huì),再停一會(huì)(休眠),開的時(shí)候可以收到數(shù)據(jù),停的時(shí)候收不到數(shù)據(jù)。低功耗模式(power saving mode, PSM)可以理解為把eDRX模式中的休眠時(shí)間拉得更長,從幾小時(shí)到幾天時(shí)間,功耗大幅下降。eDRX模式相對于PSM來說,休眠時(shí)仍保持設(shè)備TCP連接在線,喚醒以后不需要重新注冊。三種模式中,PSM的模式可進(jìn)行長時(shí)間的睡眠最為節(jié)電,但是尋呼時(shí)間較長,不適應(yīng)于頻繁發(fā)送數(shù)據(jù)的應(yīng)用場景,并且不能馬上收到核心網(wǎng)的下行數(shù)據(jù),主要用在遠(yuǎn)程抄表等對下行數(shù)據(jù)實(shí)時(shí)性要求不高的產(chǎn)品。由于NB模組進(jìn)入PSM模式后不保留TCP注冊,本次設(shè)計(jì)采用MQTT協(xié)議,它基于TCP/IP協(xié)議,PSM模式下,MQTT失去注冊,不適用于現(xiàn)在的工作場景。eDRX模式會(huì)兼顧上下行通信,出于性能和能耗的權(quán)衡,選用eDRX模式比較適合物聯(lián)網(wǎng)方式。
NB模塊工作方式(見圖2),實(shí)際是由基站分配網(wǎng)絡(luò)資源,基站有時(shí)候?yàn)榱藱?quán)衡,eDRX不一定能尋呼上;由于產(chǎn)品由電池供電,如果尋呼不上,系統(tǒng)則一直處于尋呼狀態(tài);而NB通信模組工作是極其耗電的,很容易消耗完電池的電量,所以要權(quán)衡尋呼網(wǎng)絡(luò)和節(jié)約能耗兩種情況,既節(jié)約能耗又不會(huì)造成網(wǎng)絡(luò)狀態(tài)良好的情況下設(shè)備處于離線狀態(tài)。因此,設(shè)計(jì)MCU在查詢網(wǎng)絡(luò)時(shí),若無法獲取網(wǎng)絡(luò),則會(huì)延長自己的喚醒時(shí)間并進(jìn)入休眠狀態(tài);到達(dá)自己設(shè)置的閾值喚醒時(shí)間,便不再增加喚醒時(shí)間。若在這個(gè)過程中,獲取到網(wǎng)絡(luò),便清零之前設(shè)置的喚醒時(shí)間,回歸正常喚醒時(shí)間。
圖2 系統(tǒng)流程圖
服務(wù)器采用GO語言編寫,GO語言由于其高效并發(fā)的特性特別適用于分布式服務(wù)器開發(fā),服務(wù)器程序運(yùn)行于阿里云服務(wù)器上,可支持公網(wǎng)訪問。由于工作場景要求數(shù)據(jù)發(fā)送頻率不高,一次發(fā)送約1~2 s,大部分時(shí)間都是待機(jī)狀態(tài)。三種工作模式待機(jī)測試數(shù)據(jù)為:MCU STANGDLBY+NB PSM模式耗流318 uA;MCU STOP+NB PSM模式耗流374 uA;MCU STOP+NB eDRX模式耗流1.7 mA。傳感器溫濕度測試部分?jǐn)?shù)據(jù)(見圖3)。
圖3 溫濕度測試結(jié)果
通過硬件選擇低功耗的控制芯片、通信模組及無線傳感器,采用軟件控制MCU、通信模組低功耗的工作方式,實(shí)現(xiàn)物聯(lián)網(wǎng)終端的低功耗運(yùn)行。未來,隨著低功耗的MCU技術(shù)、電源技術(shù)、傳感器技術(shù)等進(jìn)一步發(fā)展,物聯(lián)網(wǎng)終端的能耗將會(huì)持續(xù)不斷地降低,在能源節(jié)耗方面有著重要的意義。