如何把LoRa終端功耗降到最低?降低能耗成為電池供電的產(chǎn)品來重要難題,銳米LoRa終端)RNDU470T可以將休眠能耗降低到極致,但是他又是如何實(shí)現(xiàn)的,我們將進(jìn)行詳細(xì)的解說。
能耗對于電池供電的產(chǎn)品來說是一個(gè)重大的問題,一旦電能耗盡設(shè)備將“罷工”,在某些場合電能意味著電子產(chǎn)品的生命。物聯(lián)網(wǎng)時(shí)代將會有越來越多電池供電的設(shè)備通過無線通信連接,降低能耗再次擺在工程師的桌面上—解決它。
銳米LoRa終端(簡稱終端)RNDU470T不但具備空曠環(huán)境傳輸5km的超長距離優(yōu)勢,還將休眠能耗降低到極致(0.4uA,帶RTC為1.4uA)。我們是怎么做到的呢?接下來,一步一步解密。
硬件設(shè)計(jì)
1. 選用低功耗器件
終端MCU選用STM8L151C8T6,它屬于超低功耗,不帶RTC休眠為400nA,帶RTC下休眠為1.4uA。該MCU擁有較大的RAM(4KB)和自帶EEPROM(2KB),不用擴(kuò)展外部存儲設(shè)備,進(jìn)行一步降低功耗和成本。
終端射頻芯片選用SX1278,在休眠模式下,該芯片功耗低至忽略不計(jì)。
2. 盡可能快地讓射頻模塊休眠
SX1278屬于LoRa TM擴(kuò)頻調(diào)制技術(shù),它的遠(yuǎn)距離優(yōu)勢得益于調(diào)制增益,不是靠增大發(fā)射功率(那將消耗更多電能)。該射頻芯片的電流消耗如下:休眠《0.2uA,空閑=1.6mA,接收=12mA,發(fā)射(最大功率)=120mA.
終端MCU通過“中斷+定時(shí)器超時(shí)”方式控制SX1278,一旦射頻完成發(fā)送或接收,立即進(jìn)入休眠模式。
3. 了解MCU的工作模式與功耗
降低MCU的功耗首先盡可能少地開啟外設(shè),其次盡可能地讓其休眠。我們一起看看STM8L151C8T6不同工作模式下功耗。
上述低功耗運(yùn)行模式對于開發(fā)者來說有點(diǎn)多,尤其剛接觸STM8L處理器。我們需要一般性的指導(dǎo)原則,下表2是來源于實(shí)踐的經(jīng)驗(yàn)。
4. 靜態(tài)配置MCU引腳
即使MCU和RF都進(jìn)入休眠模式,如果沒有設(shè)置好MCU引腳,它們照樣會“偷偷”地消耗電能。以STM8L151C8T6為例,它一共有48個(gè)引腳,首先需要用Excel對其進(jìn)行分類,如下例所示:
一般說來可以將引腳分成5類,可以借鑒“地鐵顏色區(qū)別”方法,設(shè)計(jì)如下圖例:
軟件設(shè)計(jì)
1. 動態(tài)切換MCU引腳
有2類MCU引腳:MCU輸出和MCU輸入,它們需要?jiǎng)討B(tài)進(jìn)行配置。具體地說,在進(jìn)入低功耗模式時(shí),將其分別配置成:輸入上拉和輸入懸?。辉谕顺龅凸哪J綍r(shí),將其配置成定義的功能狀態(tài)。在動態(tài)切換時(shí)需要考慮2點(diǎn):
首先,動態(tài)切換引腳是需要時(shí)間的,以STM8L151C8T6為例,動態(tài)切換5個(gè)引腳需要477us,可見它一般用于休眠這種較長周期的節(jié)能模式,不適合空閑停止這種短暫節(jié)能模式。
其次,在實(shí)際開發(fā)中引腳的連接是變化的,換句話說,今天這個(gè)引腳是空閑,下次產(chǎn)品升級該引腳可能設(shè)計(jì)成特定功能。為減少軟件維護(hù)成本,需要設(shè)計(jì)一種優(yōu)秀的數(shù)據(jù)結(jié)構(gòu),它能描述MCU所有引腳,如果引腳功能改變,只需要修改數(shù)據(jù)定義,而不需要修改程序。
2. 一旦無事可干,MCU立即停止或休眠
在LoRa終端系統(tǒng)中MCU是能源的持續(xù)消耗者,軟件設(shè)計(jì)需要考慮盡可能快地讓MCU節(jié)能,STM8L151C8T6有如下2種節(jié)能模式。
短暫等待:如等待RF發(fā)送數(shù)據(jù)幀完畢,MCU執(zhí)行WFI指令,一旦RF完成發(fā)送,中斷將MCU喚醒繼續(xù)運(yùn)行;
長期等待:如等待下一次主動上報(bào)數(shù)據(jù)幀,MCU執(zhí)行HALT指令,當(dāng)指定時(shí)間到達(dá)時(shí),RTC中斷將MCU喚醒繼續(xù)運(yùn)行。
3. 采用高效率算法
軟件算法效率越高,MCU計(jì)算時(shí)間更少,可以更快進(jìn)入低功耗,也就更節(jié)能。在終端設(shè)計(jì)中有2個(gè)算法比較消耗時(shí)間:
CRC16:無線傳輸易受干擾,一般通信幀需要添加CRC16檢測正確性,我們采用查表的方法減少CRC16的計(jì)算時(shí)間。計(jì)算空中傳輸時(shí)間:該時(shí)間對于組網(wǎng)算法十分重要,它包含較多的浮點(diǎn)運(yùn)算。所幸的是,大部分?jǐn)?shù)據(jù)幀長度是固定的,可以提前計(jì)算好;對于變化長度的數(shù)據(jù)幀,可以采用“命中算法”來提高效率,即保存本次長度與時(shí)間的值,如果下次長度相同直接返回該時(shí)間值。4. Contiki操作系統(tǒng)下進(jìn)程低功耗設(shè)計(jì)
終端支持TDMA算法,內(nèi)嵌多種無線通信健壯性技術(shù),智能解決:通信碰撞、微弱信號、外界干擾、斷網(wǎng)繼連等挑戰(zhàn)。這樣一來,必然帶來軟件復(fù)雜度。
使用成熟穩(wěn)定的已有軟件庫是人們解決軟件復(fù)雜度的有效方法,因此,我們引入高效強(qiáng)大的Contiki物聯(lián)網(wǎng)操作系統(tǒng)。
這樣一來,終端系統(tǒng)低功耗設(shè)計(jì)需要兼顧:MCU運(yùn)行模式、外設(shè)中斷、ContikiOS和進(jìn)程。
上圖展示了系統(tǒng)低功耗設(shè)計(jì)的時(shí)序邏輯。我們看到一個(gè)基本的思想:當(dāng)所有的進(jìn)程“同意休眠”,空閑時(shí)ContikiOS執(zhí)行HALT命令使MCU進(jìn)入休眠狀態(tài);當(dāng)RTC或EXT中斷喚醒MCU時(shí),對應(yīng)的進(jìn)程處理該邏輯,完成后“同意休眠”。
這種設(shè)計(jì)保證了系統(tǒng)只有一個(gè)HALT入口,同時(shí)復(fù)雜的邏輯交給不同的進(jìn)程處理,降低了設(shè)計(jì)的復(fù)雜度。
為檢測是否“所有進(jìn)程同意休眠”,我們設(shè)計(jì)了如下圖的數(shù)據(jù)結(jié)構(gòu):
數(shù)據(jù)AgrHalt的位寬與進(jìn)程數(shù)目綁定,因此使用typedef定義該數(shù)據(jù)類型。
當(dāng)AgrHalt==0時(shí),說明“所有進(jìn)程同意休眠”,一旦ContikiOS進(jìn)入空閑狀態(tài),它將調(diào)用HALT()命令,使MCU進(jìn)入Active-HALT狀態(tài);
當(dāng)AgrHalt != 0時(shí),說明“某進(jìn)程還有活要干”,此時(shí)ContikiOS進(jìn)入空閑狀態(tài)后,它調(diào)用WFI()命令,使MCU進(jìn)入WFI狀態(tài)。
5. TDMA通信算法
縱然把單個(gè)終端的功耗降到極致,在實(shí)際組網(wǎng)運(yùn)行中該終端的功耗未必是低的,這個(gè)叫組網(wǎng)動態(tài)運(yùn)行功耗。組網(wǎng)動態(tài)運(yùn)行功耗依賴于無線通信協(xié)議,試想,如果終端需要爭搶信道和重傳數(shù)據(jù)幀,那就意味著需要N倍的電能才能完成一次通信,節(jié)能將成為空中樓閣。
銳米LoRa終端一開始就把低功耗性能作為重要設(shè)計(jì)目標(biāo),因此我們拋棄了簡單但是耗能的CSMA算法,而選用TDMA算法。根據(jù)大量的實(shí)測,我們堅(jiān)信這是符合LoRa特性的。實(shí)際上,當(dāng)網(wǎng)絡(luò)負(fù)荷達(dá)到中載(帶寬利用率超過50%)時(shí),CSMA的效率大減且耗能增大,因?yàn)榇罅康慕K端通信沖突,不得不延時(shí)重傳。
TDMA的原理如下圖所示:N個(gè)終端將一段時(shí)間分成N個(gè)時(shí)隙(Slot),每個(gè)終端在自己分配的時(shí)隙與網(wǎng)關(guān)通信。沒有爭搶,沒有碰撞,節(jié)能效果自然非凡。
評論
查看更多