一.MCU耗能因素
現代的MCU一般使用CMOS技術,耗能包括2方面:
靜態消耗 主要是晶體管消耗能量;
動態消耗 公式=C×V2×f,其中C是CMOS的負載電容,V是供電電壓,f是時鐘頻率;
總電能消耗是靜態消耗和動態消耗之和,即:IDD=f×IDynamicRun[uA/MHz]+IStatic[uA].
因此,電能消耗依賴于:
MCU芯片尺寸或者說晶體管的數目;
MCU供電電壓降低電壓可以成平方級別地降低電能消耗;
時鐘頻率可以把時鐘頻率降低到剛好滿足應用需要;
外設數目使能的外設越多,耗能越大;
運行模式合理選擇工作模式可以大幅節能,如,全速工作極短時間后進入睡眠模式。
二.節能方法
1. 關閉不需要使用的外設;
2. 所有未使用的引腳必須連接到一個確定的邏輯電平;
3. 當有外設必須保持激活時,使用Wait模式來獲得低功耗;
4. 使用合適的VDD值;
5. 盡可能地使用低功耗運行模式;
6. 如果不能使用低功耗模式,那就將主頻降低到滿足應用的最小值;
7. 如果可能,使用動態控制I/O引腳的上拉功能。
三.低功耗模式
支持低功耗的MCU一般都有好幾種運行模式,以ST公司的STM8L為例,它支持5種低功耗模式:等待、低功耗運行、低功耗等待、主動停止和停止。每一種模式的進入方式,節能級別和外設工作要求,總結表1:
表1 STM8L低功耗運行模式
上述低功耗運行模式對于開發者來說有點多,尤其剛接觸STM8L處理器。我們需要一般性的指導原則,表2是來源于實踐的經驗。
表2 選擇合理的STM8L節能模式
四.鮮為人知的技巧
1. 使用Wait替換查詢方式達到節能目的
常見的查詢方式如下,此時CPU無事可干,白白消耗電能。
ADC_CR1 = ADC_START; /* start conversion */
while (!(ADC_SR & ADC_SR_EOC)) ; /* wait for EOC bit set */
可以使用等待事件的方式來節省電能。
先配置ADC為事件源,并使能相應的中斷:
WFE_CR2 = ADC_COMP_EV; /* enable ADC as a source of event */
ADC_CR1 = ADC_EOCIE; /* enable interrupt for end of conversion */
當ADC轉換完成后,喚醒處于等待的CPU:
ADC_CR1 = ADC_START; /* start conversion */
_asm(“wfe”); /* enter wait mode until waked by ADC_EOCIE*/
2. 無須上下文切換的中斷模式
應用程序設計時,如果所有中斷事件由ISR完成,可以通過將CFG_GCR寄存器中AL位置1來節省電能:避免保存/恢復context、無須主程序運行(返回到WFI模式),如下圖1所示。
圖1 WFI模式下中斷無須上下文切換
將AL位置1節省電能的方法同樣可以用于HALT模式,原理如下圖2所示。
圖2 HALT模式下中斷無須上下文切換
3. 動態設置I/O口的上拉功能
很多應用需要按鍵作為人機接口,按鍵一般連接到I/O上。當按鍵沒有動作時I/O口設置內部上拉而獲得確定的邏輯電平;一旦按鍵按下,I/O口對地導通將產生額外的40~70uA電流,這對于電池供電的低功耗來說是十分重要的。
可以動態地控制I/O口的上拉達到節能的目的:一旦按鍵按下,中斷服務程序將禁止該I/O口的上拉功能;然后軟件定時執行—先使能上拉功能,再檢測I/O口狀態,如果按鍵仍按下再次禁止上拉功能,否則使能I/O口的上拉功能。整個邏輯如下圖3所示:
圖3 動態設置I/O口的上拉而節能
4. CPU空閑節能策略
CPU的空閑節能如下圖4所示,它的邏輯包括以下幾個步驟:
(1)發現CPU空閑:帶OS系統,表現為任務沒有事件需要響應,或者進入idle進程;無OS系統,表現為程序運行結束。
(2) 選擇一種合適的CPU節能模式:chip_EnterLowPower()完成進入節能前的準備工作,包括:關閉外設,切換I/O引腳到節能狀態。
(3) 退出節能模式需要調用chip_ExitLowPower(),可能發生在以下2種情形:
a. 需要使用被關閉外設的ISR:
b. 由process直接退出;
chip_ExitLowPower()的善后工作包括:使能外設,切換I/O引腳到工作狀態。同時為避免ISR和process兩次操作chip_ExitLowPower(),該
函數設置了狀態變量避免重復退出。
圖4 CPU空閑節能策略
-
低功耗
+關注
關注
10文章
2399瀏覽量
103683 -
電能
+關注
關注
1文章
682瀏覽量
36810
發布評論請先 登錄
相關推薦
評論