以0 MIPS運(yùn)行你的嵌入式系統(tǒng)
作者 ?ivind Loe Silicon Labs微控制器產(chǎn)品高級(jí)營(yíng)銷(xiāo)經(jīng)理
本文引用地址:http://m.ptau.cn/article/201707/362282.htm摘要:本文介紹了降低MCU功耗的重要性、方法及相關(guān)技術(shù)的發(fā)展。
即使是在諸如物聯(lián)網(wǎng)應(yīng)用的無(wú)線連接這種主導(dǎo)功耗的事件中,讓盡可能多的進(jìn)程自主運(yùn)行,也可大大提高電池壽命。
降低功耗一直是微控器(MCU)市場(chǎng)的一個(gè)主要關(guān)注點(diǎn)。超低功耗MCU現(xiàn)在可以大大降低工作模式和深度睡眠模式下的功耗。這種變化的效果是顯而易見(jiàn)的,它大大提高了我們?nèi)粘G度胧綉?yīng)用中的電池壽命,并且提供了在未來(lái)使用能量收集的可能性。然而,要基于新型MCU降低功耗,開(kāi)發(fā)人員必須考慮到許多因素。開(kāi)發(fā)人員可以利用新型MCU中外設(shè)的自主運(yùn)行,通過(guò)更接近以“0”MIPS運(yùn)行,來(lái)實(shí)現(xiàn)數(shù)據(jù)手冊(cè)中所承諾的低功耗。
對(duì)于在功耗敏感型物聯(lián)網(wǎng)(IoT)應(yīng)用中所使用的新型MCU和無(wú)線MCU(WMCU)來(lái)說(shuō),執(zhí)行代碼時(shí)的功耗已經(jīng)明顯下降,甚至達(dá)到40μA/ MHz以下。使用這些低功耗規(guī)格,為什么需要睡眠模式?為什么不以500 kHz運(yùn)行你的代碼來(lái)實(shí)現(xiàn)20μA的電流消耗,并且允許你的應(yīng)用使用電池運(yùn)行10年?其實(shí)事情并不是這么簡(jiǎn)單的。
睡眠模式下的功耗在過(guò)去幾年中也有顯著的改善。我們現(xiàn)在可以看到深度睡眠模式下的功耗低于2μA,而一些睡眠模式下的功耗甚至低于50 nA。你可能會(huì)覺(jué)得擁有這些模式設(shè)計(jì)出來(lái)的系統(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)化了開(kāi)發(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)用來(lái)說(shuō),要知道能源消耗在哪里才能進(jìn)行優(yōu)化。表1顯示了一個(gè)傳感器檢測(cè)無(wú)線應(yīng)用的功耗預(yù)算,它的功耗優(yōu)化不太好。
通過(guò)平均計(jì)算每個(gè)組件的功耗來(lái)測(cè)量或估計(jì)功耗。如果CPU占空比為兩個(gè)百分點(diǎn),并且在60μA/ MHz時(shí)工作在20 MHz,則CPU的消耗為24μA。
表1所示的功耗預(yù)算是根據(jù)功能劃分的。例如,基礎(chǔ)睡眠電流包括一個(gè)低頻振蕩器和一個(gè)實(shí)時(shí)時(shí)鐘(RTC)來(lái)對(duì)系統(tǒng)事件進(jìn)行定時(shí)從而允許深度睡眠。傳感器測(cè)量部分是由一個(gè)0.5kHz的中斷觸發(fā),中斷之間深度睡眠。低功耗藍(lán)牙每秒鐘都要把數(shù)據(jù)發(fā)出去,這是個(gè)很普遍的低功耗應(yīng)用。最后,還有一些非MCU部分的功耗。MCU可能無(wú)法直接控制這些模塊中的一部分,包括電源管理外設(shè),在這個(gè)例子中,MCU是直接控制ADC對(duì)傳感器進(jìn)行采樣,如果不是的話,傳感器電流將完全是圖片中的數(shù)據(jù)。對(duì)于這個(gè)例子,傳感器的持續(xù)電流大約是390μA,但是通過(guò)調(diào)整占空比,每個(gè)ADC采樣僅僅使用了10 μs的時(shí)間,從而可以大大降低功耗。
如果該無(wú)線應(yīng)用由具有225 mAh容量的CR2032電池供電,則在61.5μA功耗下操作時(shí)其壽命約為0.4年。事實(shí)上,我們可以做得更好。
改善現(xiàn)狀
我們來(lái)看看降低MCU傳感器測(cè)量電流的方法。雖然此示例涉及ADC測(cè)量外部傳感器,但相關(guān)示例可能集中在一系列不同類(lèi)型的測(cè)量以及與外部環(huán)境的交互上。在這兩種情況下,MCU和外部環(huán)境之間都會(huì)發(fā)生頻繁的交互。
實(shí)現(xiàn)低功耗傳感的最簡(jiǎn)單的方法是讓CPU盡可能多地處于睡眠模式,只在采樣時(shí)喚醒,并盡可能快地重回睡眠模式。對(duì)于非常低的采樣率來(lái)說(shuō),這種方法很好,但是從圖1可以看出,當(dāng)采樣率或每秒交互次數(shù)增加時(shí),系統(tǒng)的功耗也會(huì)顯著增加:
許多類(lèi)型的應(yīng)用必須具有頻繁的活動(dòng),同時(shí)還需要保持電池壽命。超過(guò)1kHz的活動(dòng)率并不是聞所未聞,這時(shí)候就需要采取措施來(lái)保持低功耗。
圖2顯示了傳感器管理的兩種附加方法。外設(shè)反射系統(tǒng)/直接存儲(chǔ)器訪問(wèn)(PRS / DMA)方法使CPU在完全不參與的情況下在深度睡眠模式進(jìn)行ADC采樣。而不是RTC喚醒CPU,然后CPU啟動(dòng)ADC進(jìn)行采樣。RTC通過(guò)事件系統(tǒng)(如Silicon Labs的PRS)將事件直接發(fā)送到ADC。ADC在接收到此事件時(shí)自動(dòng)啟動(dòng)ADC轉(zhuǎn)換。轉(zhuǎn)換完成后,DMA在這種情況下也能夠從深度睡眠模式下運(yùn)行,從ADC獲取數(shù)據(jù)并將其存儲(chǔ)在RAM中。 PRS / DMA方法的好處是顯著降低了電流消耗。在1 kHz時(shí),系統(tǒng)電流從58μA降低到25μA。
驅(qū)動(dòng)ADC的更有效的方法是PRS /比較器(CMP)方法,其中RTC仍然通過(guò)PRS系統(tǒng)觸發(fā)ADC,但在這種情況下,ADC立即使用比較功能對(duì)樣本進(jìn)行評(píng)估,除非發(fā)現(xiàn)有需要的數(shù)據(jù),否則不使用DMA或CPU。這種方法能夠?qū)崿F(xiàn)1 kHz采樣率時(shí)系統(tǒng)電流只有3.5μA。
動(dòng)態(tài)ADC比較器
使用PRS/CMP方法,大部分采樣數(shù)據(jù)都被丟棄,CPU只關(guān)注需要處理的數(shù)據(jù)。當(dāng)信號(hào)變化緩慢時(shí),或者需要特定的信號(hào)時(shí),這種方法很有效。
當(dāng)使用比較功能監(jiān)視信號(hào)時(shí),一種方法是測(cè)量信號(hào),然后根據(jù)這個(gè)信號(hào)設(shè)置閾值,只要信號(hào)在閾值范圍內(nèi),那么當(dāng)ADC測(cè)量信號(hào)時(shí),系統(tǒng)可以保持在深度睡眠模式,當(dāng)然CPU也保持在睡眠模式。
然而,如果信號(hào)發(fā)生變化,并且超過(guò)閾值,系統(tǒng)將知道該信號(hào),并采取適當(dāng)?shù)拇胧T诨氐剿吣J街?,ADC閾值將重新配置以適應(yīng)新的信號(hào)值,因此系統(tǒng)可以再次進(jìn)入睡眠模式,直到下一次信號(hào)發(fā)生變化。圖3顯示了這種技術(shù)的示例。圓點(diǎn)表示ADC樣本,箭頭表示每當(dāng)CPU被喚醒時(shí),它將記錄本次變化并重新配置閾值。
使用這種方法,系統(tǒng)實(shí)際上將丟失一些信號(hào)準(zhǔn)確性,因?yàn)樾盘?hào)可以在觸發(fā)器之間的閾值范圍內(nèi)任意移動(dòng)。然而,益處是功耗顯著降低。
如果系統(tǒng)的目標(biāo)是測(cè)量信號(hào)的動(dòng)態(tài)值,則PRS / DMA驅(qū)動(dòng)方法是理想的,因?yàn)樗顾袛?shù)據(jù)可用,同時(shí)仍然可以提供非常有益的節(jié)能特性。
自主工作子系統(tǒng)
ADC示例只是眾多通過(guò)睡眠模式降低應(yīng)用功耗的方法之一。專(zhuān)注于低功耗應(yīng)用的新型MCU(如Silicon Labs的EFM32 Gecko MCU)擁有大量功能,可在深度睡眠模式下運(yùn)行,從而實(shí)現(xiàn)高水平的自主行為。
例如,Gecko MCU的LESENSE(低功耗傳感)模塊可以自動(dòng)地、周期性地采樣多達(dá)16個(gè)通道,完全不需要CPU參與。它可以實(shí)現(xiàn)高頻率檢測(cè)且充電1次就能工作10年。
在許多情況下,單個(gè)外設(shè)可以自主地履行其職責(zé),但也有許多需要交互的情況。在這種情況下,我們可以利用諸如在當(dāng)前一些新型MCU中存在的PRS系統(tǒng)這樣的外設(shè)互連。這些外設(shè)互連允許多個(gè)外設(shè)連接以自主執(zhí)行更復(fù)雜的任務(wù)。
圖4顯示了這樣的自主系統(tǒng)示例,其使用事件鏈來(lái)執(zhí)行其功能:
1)RTC以給定的時(shí)間周期性地發(fā)送PRS信號(hào)至ADC以啟動(dòng)轉(zhuǎn)換;
2)RTC同時(shí)啟動(dòng)外部傳感器,這樣在測(cè)量時(shí)信號(hào)就已經(jīng)準(zhǔn)備好了;
3)ADC完成采樣并通知DMA,DMA把數(shù)據(jù)傳送到RAM;
4)來(lái)自ADC的完成PRS信號(hào)關(guān)閉外部傳感器;
5)當(dāng)緩沖器滿時(shí)中斷喚醒CPU,或者超過(guò)ADC閾值時(shí)中斷喚醒CPU;
6)可選項(xiàng):PRS看門(mén)狗監(jiān)視事件循環(huán),確保它保持運(yùn)行。
DMA可以從圖4所示系統(tǒng)中拿走,通過(guò)設(shè)置ADC的比較功能來(lái)做到更省電。
這些自主子系統(tǒng)具有顯著節(jié)能和即使CPU負(fù)載很重時(shí)傳感器依舊可以穩(wěn)定工作的優(yōu)點(diǎn)。
缺點(diǎn)是,并不是所有的MCU都支持這種類(lèi)型的操作,并且在設(shè)置交互時(shí),你會(huì)希望像硬件設(shè)計(jì)人員一樣思考??傊瑢?duì)于許多電池供電型應(yīng)用來(lái)說(shuō),其優(yōu)點(diǎn)明顯多于缺點(diǎn)。
結(jié)論
通過(guò)利用各種節(jié)能技術(shù),當(dāng)傳感器測(cè)量時(shí),CPU幾乎完全脫離工作。對(duì)于表1所示的無(wú)線應(yīng)用,這將使總平均功耗從61.5μA降低到37.5μA,降低了39%,從而使電池壽命從大約5個(gè)月延長(zhǎng)到8個(gè)月,增加了64%,或者可以允許電池尺寸減小以改善系統(tǒng)外形。
對(duì)于非無(wú)線應(yīng)用,節(jié)能將更加顯著。表1中的示例,能耗將從29.5μA降低到5.5μA,由CR2032電池供電,理論上壽命將從10個(gè)月延長(zhǎng)到4.6年。
本文來(lái)源于《電子產(chǎn)品世界》2017年第8期第75頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。
評(píng)論