以0 MIPS運(yùn)行你的嵌入式系統(tǒng)
即使是在諸如物聯(lián)網(wǎng)應(yīng)用的無線連接這種主導(dǎo)功耗的事件中,讓盡可能多的進(jìn)程自主運(yùn)行,也可大大提高電池壽命。降低功耗一直是微控器(MCU)市場(chǎng)的一個(gè)主要關(guān)注點(diǎn)。超低功耗MCU現(xiàn)在可以大大降低工作模式和深度睡眠模式下的功耗。這種變化的效果是顯而易見的,它大大提高了我們?nèi)粘G度胧綉?yīng)用中的電池壽命,并且提供了在未來使用能量收集的可能性。
然而,要基于新型MCU降低功耗,開發(fā)人員必須考慮到許多因素,對(duì)此Silicon Labs特別撰寫一篇技術(shù)文章:“以0 MIPS運(yùn)行你的嵌入式系統(tǒng)”,幫助開發(fā)人員了解如何利用新型MCU中外設(shè)的自主運(yùn)行,通過更接近以“0”MIPS運(yùn)行,來實(shí)現(xiàn)數(shù)據(jù)手冊(cè)中所承諾的低功耗。
低功耗為嵌入式系統(tǒng)研發(fā)關(guān)鍵
對(duì)于在功耗敏感型物聯(lián)網(wǎng)(IoT)應(yīng)用中所使用的新型MCU和無線MCU(WMCU)來說,執(zhí)行代碼時(shí)的功耗已經(jīng)明顯下降,甚至達(dá)到40μA/ MHz以下。使用這些低功耗規(guī)格,您可能會(huì)想知道為什么我們需要睡眠模式,為什么不以500 kHz運(yùn)行您的代碼來實(shí)現(xiàn)20μA的電流消耗,并且允許您的應(yīng)用使用電池運(yùn)行10年?其實(shí)事情并不是這么簡(jiǎn)單的。
睡眠模式下的功耗在過去幾年中也有顯著的改善。我們現(xiàn)在可以看到深度睡眠模式下的功耗低于2μA,而一些睡眠模式下的功耗甚至低于50 nA。您可能會(huì)覺得擁有這些模式設(shè)計(jì)出來的系統(tǒng)功耗自然很低,然而事實(shí)并非如此,應(yīng)用能否利用睡眠模式才是關(guān)鍵。
為什么工作模式是好的...也是壞的
使用MCU或WMCU的最直接的方法是讓CPU管理一切。例如,您可以啟動(dòng)模數(shù)轉(zhuǎn)換(ADC),將一些數(shù)據(jù)放入通信接口(如USART傳輸)中,讀取ADC數(shù)據(jù),并對(duì)數(shù)據(jù)做出一些處理,所有一切都由CPU直接控制。直接的CPU控制簡(jiǎn)化了開發(fā),但其成本是:每當(dāng)外設(shè)或外部事件需要處理時(shí),MCU都將處于工作模式,從而使功耗大增。
近期,一些數(shù)據(jù)手冊(cè)顯示工作模式的電流是40μA/MHz甚至更低,它們通常是高時(shí)鐘頻率下的參數(shù),低頻下會(huì)變大,進(jìn)而導(dǎo)致絕對(duì)功耗變大。這是因?yàn)楣ぷ髂J较骂l率和功耗不是線性關(guān)系。功耗由如下兩部分組成,其中第二部分和頻率聯(lián)系不緊密:
1. 處理器本身,它是和頻率按比例變化的。
2. 有基礎(chǔ)工作電流的模塊,比如低壓差線性穩(wěn)壓器(LDO),欠壓檢測(cè)器(BOD)等。
要想降低功耗,應(yīng)盡可能地減少M(fèi)CU在高功耗的工作模式下運(yùn)行,盡可能地關(guān)閉外設(shè),讓CPU盡可能多地睡眠。
功耗預(yù)算
對(duì)于受限于能源的電池供電型應(yīng)用來說,要知道能源消耗在哪里才能進(jìn)行優(yōu)化。表1顯示了一個(gè)傳感器檢測(cè)無線應(yīng)用的功耗預(yù)算,它的功耗優(yōu)化不太好。
通過平均計(jì)算每個(gè)組件的功耗來測(cè)量或估計(jì)功耗。如果CPU占空比為兩個(gè)百分點(diǎn),并且在60μA/ MHz時(shí)工作在20 MHz,則CPU的消耗為24μA。
請(qǐng)注意,表1所示的功耗預(yù)算是根據(jù)功能劃分的。例如,基礎(chǔ)睡眠電流包括一個(gè)低頻振蕩器和一個(gè)實(shí)時(shí)時(shí)鐘(RTC)來對(duì)系統(tǒng)事件進(jìn)行定時(shí)從而允許深度睡眠。
傳感器測(cè)量部分是由一個(gè)0.5kHz的中斷觸發(fā),中斷之間深度睡眠。低功耗藍(lán)牙每秒鐘都要把數(shù)據(jù)發(fā)出去,這是個(gè)很普遍的低功耗應(yīng)用。最后,還有一些非MCU部分的功耗。MCU可能無法直接控制這些模塊中的一部分,包括電源管理外設(shè),在這個(gè)例子中,MCU是直接控制ADC對(duì)傳感器進(jìn)行采樣,如果不是的話,傳感器電流將完全是圖片中的數(shù)據(jù)。
對(duì)于這個(gè)例子,傳感器的持續(xù)電流大約是390μA,但是通過調(diào)整占空比,每個(gè)ADC采樣僅僅使用了10 μs的時(shí)間,從而可以大大降低功耗。
表1 目標(biāo)應(yīng)用的功耗預(yù)算
如果該無線應(yīng)用由具有225 mAh容量的CR2032電池供電,則在61.6μA功耗下操作時(shí)其壽命約為0.4年。事實(shí)上,我們可以做得更好。
改善現(xiàn)狀
我們來看看降低MCU傳感器測(cè)量電流的方法。雖然此示例涉及ADC測(cè)量外部傳感器,但相關(guān)示例可能集中在一系列不同類型的測(cè)量以及與外部環(huán)境的交互上。在這兩種情況下,MCU和外部環(huán)境之間都會(huì)發(fā)生頻繁的交互。
實(shí)現(xiàn)低功耗傳感的最簡(jiǎn)單的方法是讓CPU盡可能多地處于睡眠模式,只在采樣時(shí)喚醒,并盡可能快地重回睡眠模式。對(duì)于非常低的采樣率來說,這種方法很好,但是從圖1可以看出,當(dāng)每秒采樣次數(shù)增加時(shí),系統(tǒng)的功耗也會(huì)顯著增加:
圖1 采用中斷進(jìn)行ADC采樣,顯示出隨著每秒采樣次數(shù)的增加,功耗也在增加
許多類型的應(yīng)用必須具有頻繁的活動(dòng),同時(shí)還需要保持電池壽命。超過1kHz的活動(dòng)率并不是聞所未聞,這時(shí)候就需要采取措施來保持低功耗。