現代的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低功耗執行模式模式
等待 低功耗執行
低功耗等待
主動停止 停止
入口wfi
wfe軟體**
軟體**+wfe
halt
halt 晶振
開 開lsi或lse
lsi或lse
lsi或lse 關
cpu 關
關 開關 關
關 外設
開 開開 開
關,僅rtc開 關
喚醒所有內部和外部中斷,復位
所有內部和外部中斷,復位,喚醒事件
軟體**,復位
內部和外部事件,復位
外部中斷,rtc中斷,復位
外部中斷,復位
電壓調節器
mvrmvr
ulpulp
clk_ickcr
ulp程式執行區
flash
flash
ramram
flash
flash
flash+e2 開
開 關關 關
關 中斷
允許 允許
禁止 禁止
允許 允許
中斷服務後 返回狀態
al=0:main
al=1:wfi
wfe /
/al=0:main
al=1主動停止
al=0:main
al=1:停止
事件處理後 返回狀態 /
main /
低功耗執行 /
/ram+暫存器 保留
保留 保留
保留 保留
保留@3v/25℃
5.9ua
5.4ua
3.3ua
1.0ua
0.4ua
特殊事項 /
/禁止adc /
清除外設懸掛中斷標誌位
上述低功耗執行模式對於開發者來說有點多,尤其剛接觸stm8l處理器。我們需要一般性的指導原則,表2是**於實踐的經驗。
表2 選擇合理的stm8l節能模式
節能要求
應用場合
睡眠時長
喚醒方式
恢復時長
執行模式 苛刻
cpu空閒,等待外部訊號喚醒 長
外部中斷
≥2.8us
halt 苛刻
cpu空閒,等待時鐘週期喚醒 長
rtc週期
≥2.8us
active-halt 嚴格
cpu有持續、微負荷任務執行 /
/≥2.8us
低功耗執行 嚴格
cpu短暫等待中斷發生 短
任意中斷 短
等待中斷 嚴格
cpu短暫等待事件發生 短
註冊事件 短
等待事件 需要
cpu有持續、輕負荷任務執行 /
/ /調整主頻
常見的查詢方式如下,此時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*/
應用程式設計時,如果所有中斷事件由isr完成,可以通過將cfg_gcr暫存器中al位置1來節省電能:避免儲存/恢復context、無須主程式執行(返回到wfi模式),如下圖1所示。
圖1 wfi模式下中斷無須上下文切換
將al位置1節省電能的方法同樣可以用於halt模式,原理如下圖2所示。
圖2 halt模式下中斷無須上下文切換
很多應用需要按鍵作為人機介面,按鍵一般連線到i/o上。當按鍵沒有動作時i/o口設定內部上拉而獲得確定的邏輯電平;一旦按鍵按下,i/o口對地導通將產生額外的40~70ua電流,這對於電池供電的低功耗來說是十分重要的。
可以動態地控制i/o口的上拉達到節能的目的:一旦按鍵按下,中斷服務程式將禁止該i/o口的上拉功能;然後軟體定時執行—先使能上拉功能,再檢測i/o口狀態,如果按鍵仍按下再次禁止上拉功能,否則使能i/o口的上拉功能。整個邏輯如下圖3所示:
圖3 動態設定i/o口的上拉而節能
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空閒節能策略
超低功耗MCU如何降低功耗
低功耗是mcu的一項非常重要的指標,比如某些可穿戴的裝置,其攜帶的電量有限,如果整個電路消耗的電量特別大就會經常出現電量不足的情況。平時我們在做產品的時候,基本的功能實現很簡單,但只要涉及到關於低功耗的問題就比較棘手了,比如某些可以低到微安級的mcu微控制器,而自己設計的低功耗怎麼測都是毫安級的,電...
低功耗MCU系統軟硬體設計考慮
電子產品的低功耗問題經常讓產品設計者頭痛而又不得不面對。以微控制器 mcu 為核心的系統,其功耗主要由微控制器功耗和微控制器外圍電路功耗組成。要降低微控制器系統的功耗,需要從硬體和軟體兩方面入手。硬體設計考慮因素 要滿足微控制器系統的低功耗要求,選用具有低功耗特性的微控制器可以很容易實現。因為具有低...
低功耗設計
在數字系統中功耗主要包括動態功耗和靜態功耗。cmos的動態功耗 是訊號在0和1變化之間,電容充放電所消耗的功耗。我們知道,不僅僅cmos器件有寄生電容,導線間也有電容。將電容c充電到電壓vdd所需要的能量cvdd 2。降低動態功耗技術 1 動態電壓調節 2 動態處理溫度補償 3 門控時鐘和可變頻率時...