降低功耗一直是微控器(MCU)市場的主要關注焦點。超低功耗MCU現在可大幅降低主動和深度睡眠的功耗。此種變化的效果是顯而易見的,因為它大幅提高了日常嵌入式應用的電池壽命,以及在未來使用能量採集的可能性。然而,為了適當地利用現有MCU的電流消耗規格,開發人員必須考慮許多因素。開發人員可利用現代MCU中周邊裝置的自主操作,透過更接近於‘0’MIPS的操作,實現規格表中所要求的低功耗。

對於在功耗敏感的物聯網(IoT)應用中所使用的現代MCU和無線MCU(WMCU),執行程式碼時的功耗已經明顯下降了,甚至達到40μA/MHz以下。藉由這些低功耗規格,您可能會想知道為什麼需要睡眠模式。為什麼不直接以500kHz運作時脈,以實現20μA的電流消耗,並且讓您的應用以電池運行長達10年?這可不是那麼簡單的。

過去幾年來,睡眠狀態下的功耗已經顯著地改善了。我們現在可以看到在深度睡眠模式時的功耗低於2μA,以及在某些睡眠模式時的功耗甚至低於50nA。您可能認為這些模式的可用性自動地使系統功耗降低,但情況並非如此。相反地,應用使用睡眠模式的能力才是關鍵。

為什麼主動模式有好…也有壞?

使用MCU或WMCU最直接方法,是讓CPU管理一切。例如,您可以啟動類比數位轉換(ADC),將一些資料放入通訊介面(如USART傳輸)中以讀取ADC資料,並對資料做出決策,其中的一切都由CPU直接控制。直接的CPU控制簡化了開發,但其代價是:每當必須關注週邊裝置或外部事件時,MCU將會發現自己處於主動模式,從而使功耗大增。

近來,一些規格表將指定40μA/MHz及以下功耗作為主動模式,尤其是在較高頻率下。因為較低頻率的μA/MHz數值較高,導致絕對功耗更高。這是因為在主動模式下的電流不會隨著頻率線性調整。其組成部份有二,其中的第二部份在較高的操作頻率下具有較小的影響:

  1. 處理程式本身隨時脈頻率而變化
  2. 用於基礎設施元件,如穩壓器、欠壓檢測器(BOD)等的基準電流

盡可能地將其卸載到MCU中的其他周邊裝置,並盡可能使CPU處於休眠狀態,以避免從主動模式帶來的高功耗,是相當有助益的。

功耗預算

對於具有有限電能的電池供電應用,重要的是要知道能量在哪裡被使用,以便能開始為其實現最佳化。表1顯示未經有效最佳化的(感測器監測)無線應用之功耗預算。

藉由平均每個元件的電流消耗來測量或估計功耗。如果CPU的工作週期為2%,並以60μA/MHz操作於20MHz的頻率,則CPU的貢獻為24μA。

請注意,表1所示的功耗預算是根據功能劃分。例如,基準睡眠電流包括一個低頻振盪器和一個即時時脈(RTC),為系統事件進行定時並允許深度睡眠。感測器測量的貢獻來自於採用中斷以及中斷之間的深度睡眠,以0.5kHz採樣感測器。這種以藍牙低功耗實現的裝置每秒均傳輸廣播數據封包,這對於低功耗藍牙裝置來說是非常普遍的。

最後,還有非MCU元件的貢獻。MCU可能無法直接控制這些元件中的一部份,包括電源管理周邊裝置,但由ADC採樣的感測器在這種情況下可由MCU直接進行工作週期。若非如此,感測器電流將完全進行控制。對於這個例子,連續的感測器電流約為390μA,但是在適當的工作週期下,每個ADC採樣只能使用10μs,從而大幅降低了電流。

20170823_Silabs_TA31P1 表1:目標應用的功耗預算

如果該無線應用由具有225mAh容量的CR2032電池供電,則在61.5μA功耗作業時的壽命約為0.4年。但我們其實可以做得更好。

改善現狀

現在看看降低MCU感測器測量電流的方法。雖然此示例涉及ADC測量外部感測器,但相關示例可能集中在一系列不同類型的測量以及與外部環境的互動。在這兩種情況下,在MCU和外部環境之間都會發生頻繁的互動。

20170823_Silabs_TA31P2 圖1:採用中斷進行ADC採樣,隨著每秒相互作用的次數增加,功耗隨之增加

實現低功耗感測的最簡單方法是盡可能地讓CPU睡眠,僅在採樣時喚醒,同時盡快地重新回到睡眠狀態。針對非常低的採樣速率,這會是個好方法,但從圖1可以看出,當採樣速率或每秒相互作用次數增加時,系統的電流消耗也會明顯增加。

許多類型的應用程式必須具有高度的活動狀態,同時仍保持電池壽命。超過1KHz的活動速率並非前所未聞,而且需要採取措施,才能使這些應用處於低功耗設置。

圖2顯示兩種其他的感測器管理途徑。周邊反射系統/直接記憶體存取(PRS/DMA)途徑完全無需使用CPU,並讓ADC採樣可完全在深度睡眠模式下進行。因此,RTC透過事件系統(如Silicon Labs的PRS)將事件直接發送到ADC,而不是由RTC喚醒CPU來啟動ADC轉換。ADC在接收到此事件時自動啟動ADC轉換;待完成轉換後,DMA在這種情況下也能夠從深度睡眠模式下啟動操作,以及從ADC擷取資料並將其儲存在RAM中。PRS/DMA途徑的好處是顯著降低了電流消耗。在1kHz時,系統電流從58μA降至25μA。

20170823_Silabs_TA31P3 圖2:ADC採樣圖顯示最小化電流消耗的各種方法

更有效驅動ADC的方法是以PRS/比較器(CMP)驅動的途徑,其中RTC仍然透過PRS系統觸發轉換,但在這種情況下,ADC使用比較器函數立即對樣本進行評估,除非發現特別的事項,否則不啟用DMA或CPU。這種途徑能以1kHz的採樣速率和3.5μA的系統電流進行最終的節能。

動態ADC比較器

使用PRS/CMP途徑,CPU將只在必要時花時間查看樣本,而使許多樣本被棄置。 當監視緩慢改變訊號或是尋找訊號中的特定事件時,這種途徑多半都極其有利。

當使用比較器監測訊號時,一種方法是測量訊號值,並在訊號中最後一個已知值的任一側設置比較器。只要訊號保持在比較器閾值範圍內,系統將維持深度睡眠,而ADC同時監測訊號, CPU則將保持睡眠狀態。

20170823_Silabs_TA31P4 圖3:當訊號超過閾值時,動態ADC比較器的值可透過CPU中斷進行更改

然而,如果訊號發生變化且超過閾值,系統將會察覺並採取適當的措施。在回到睡眠狀態之前,ADC閾值應該重新配置,以適應新的訊號值,並使系統再度進入休眠狀態,直到下一次訊號發生變化。圖3顯示此種技術的一個例子。圓點表示ADC樣本,箭頭表示當CPU喚醒時,將會記錄變化並重新配置閾值。

透過這種方法,系統將會失去一些訊號的準確性,因為訊號可以在觸發器之間的閾值間移動。然而,其優點是功耗顯著降低。

如果系統的目標是測量訊號的動態值,那麼以PRS/DMA驅動方法十分理想,因為它讓所有的資料可用,同時仍然提供非常有效的節能。

自主子系統

ADC示例只是睡眠模式可利用以顯著降低應用功耗的許多方式之一。專注於低功耗應用的現代MCU(如Silicon Labs的EFM32 Gecko MCU)擁有大量功能,可在深度睡眠模式下運作,從而實現高度的自主行為。

例如,Gecko MCU的LESENSE(低功耗感測)周邊能完全自主地對多達16個感測器進行自動化的採樣和評估,完全不需要CPU的干預,並與感測器進行高頻互動,同時讓電池充電一次即可運作10年。

20170823_Silabs_TA31P5 圖4:自主ADC系統包括自動感測器工作週期和看門狗監測器

在許多情況下,單個周邊裝置就能自主地履行其職責,但也有許多需要互動的情況。在這種情況下,我們可以利用一些像現代MCU中的PRS系統等周邊互連。這些互連可讓多個周邊裝置互連,以便自主執行更複雜的任務。

圖4顯示此自主系統的示例,使用事件鏈來執行其功能:

  1. RTC週期性地向ADC發送PRS訊號,以特定時間偏置開始轉換
  2. RTC訊號也開始外部感測器的激勵,且將在採樣時間之前準備就緒;
  3. ADC採樣並提醒DMA,該DMA擷取採樣並將其傳輸到RAM;
  4. 來自ADC的完成PRS訊號,確保外部感測器斷電;
  5. 當緩衝器已滿時,CPU只會產生中斷,或者在超過ADC閾值時才會中斷;
  6. PRS看門狗監測事件迴圈功能確保持續運行,但這項功能是可選的。

請注意,在此不必再使用DMA,而且該設定可以與動態比較器設定一起使用,以實現最低的功耗。

這些自主子系統具有以下幾個主要優點:

  1. 顯著地節能;
  2. 確定性的感測器操作,即使是在具有大量CPU負載期間。

其缺點在於並非所有的MCU都支援這種類型的操作,而且在設定互動時,您可能會希望硬體設計者一樣地思考。對於許多電池供電的應用,其優點明顯多於缺點。

結論

透過利用各種節能技術,在進行感測器測量時,幾乎完全無需使用CPU。對於表1所示的無線應用,這將使總平均功耗從61.5μA降低到37.5μA,能效提高了39%,而使電池使用壽命大幅增加了64%,從大約5個月延長到8個月,或是允許縮減電池尺寸,進而改良系統外型。

對於非無線的應用,節能效果將更加顯著。在表1中的示例中,利用CR2032電池大小的能量,可使功耗從29.5μA降低至5.5μA,使用壽命甚至可從10個月延長到4.6年。