現代的mcu一般使用cmos技術,耗能包括2種,靜態消耗和動態消耗。
總電能消耗=靜態消耗+動態消耗,
即:idd=f×idynamicrun[ua/mhz]+istatic[ua].
靜態消耗:主要是電晶體消耗能量;
因此,電能消耗依賴於:
1.mcu晶元尺寸 或者說電晶體的數目;
2.mcu供電電壓 降低電壓可以成平方級別地降低電能消耗;
3.時鐘頻率 可以把時鐘頻率降低到剛好滿足應用需要;
4.外設數目,使能的外設越多,耗能越大;
5.執行模式 合理選擇工作模式可以大幅節能,如,全速工作極短時間後進入睡眠模式
1.關閉不需要使用的外設;
2.所有未使用的引腳必須連線到乙個確定的邏輯電平;
3.當有外設必須保持啟用時,使用wait模式來獲得低功耗;
4.使用合適的vdd值;
5.盡可能地使用低功耗執行模式;
6.如果不能使用低功耗模式,那就將主頻降低到滿足應用的最小值;
7.如果可能,使用動態控制i/o引腳的上拉功能。
支援低功耗的mcu一般都有好幾種執行模式,以st公司的stm8l為例,它支援5種低功耗模式:
等待、低功耗執行、低功耗等待、主動停止、停止模式。
表1:stm8l低功耗執行模式:每一種模式的進入方式,節能級別和外設工作要求
模式等待模式(wait)
低功耗執行
低功耗等待
主動停止
停機模式
入口wf(i由中斷喚醒)
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
wfeal=0:main
al=1主動停止
al=0:main
al=1:停止
事件處理後 返回狀態
main
低功耗執行
ram+暫存器
保留保留
保留保留
保留保留
@3v/25℃
5.9ua
5.4ua
3.3ua
1.0ua
0.4ua
特殊事項
禁止adc
清除外設懸掛中斷標誌位
進入低功耗模式的兩個指令,
wfi進入則可由任意中斷喚醒,wfe進入則由事件喚醒
wfi = wait for interrupt 等待中斷,即下一次中斷發生前都在此hold住不幹活
wfe = wait for event 等待事件,即下一次事件發生前都在此hold住不幹活
執行這兩條語句後cpu功耗會降低,通常用這兩條語句來省電。
表2選擇合理的stm8l節能模式
節能要求
應用場合
睡眠時長
喚醒方式
恢復時長
執行模式
苛刻cpu空閒,等待外部訊號喚醒
長外部中斷
≥2.8us
halt(停機模式)
苛刻cpu空閒,等待時鐘週期喚醒
長rtc週期
≥2.8us
active-halt活躍停機模式
嚴格cpu有持續、微負荷任務執行
≥2.8us
低功耗執行
嚴格cpu短暫等待中斷發生
短任意中斷
短等待中斷
嚴格cpu短暫等待事件發生
短註冊事件
短等待事件
需要cpu有持續、輕負荷任務執行
調整主頻
簡單地來說,就是:
1)wait(等待模式):時鐘關閉、外設可用。通過中斷、外部中斷、復位,能退出本模式。
2)active-halt(活躍停機模式):時鐘關閉、外設關閉、rtc開啟。通過rtc中斷、外部中斷、復位,能退出本模式。
3)halt(停機模式)(功耗最低):時鐘關閉、外設關閉。通過外部中斷、復位,能退出本模式。
另外,上圖同時說明了預設上電時是執行模式,在執行模式時可通過如下方法降低功耗:
1)降低時鐘頻率。
2)關閉沒用的外設時鐘。
3)(香瓜補充)無用的io口配置為輸出低。
答1、休眠模式的設定;2、i/o口狀態的配置;3、硬體電路的除錯;4、各個功能之間的工作間隙。 答:
1)進入低功耗模式的流程
①關閉外設時鐘。
②所有io設定為輸出低(注意低電平使能的得設定為輸出高)。
③初始化中斷口的io。
④時鐘頻率降至最低(2m)。
⑤開啟中斷總開關。
⑥呼叫停機模式的函式。
2)低功耗喚醒的流程
①初始化系統時鐘。
②初始化用到的外設。
所有中斷允許處理器從等待模式退出。只有重置或事件允許處理器從低功率等待模式退出。這種模式在低功率執行模式下執行wfe指令。乙個事件的喚醒使系統回到低功率執行模式(參見更多細節)。只有外部和其他特定的中斷允許處理器從停止和active暫停模式退出(請參閱中斷,並在中斷向量表中從主動暫停中喚醒。資料表)。當從停止模式中醒來時,當幾個未決中斷出現時,第乙個中斷中斷服務只能是一種中斷模式功能的中斷。這是選擇通過圖30所示的決策過程。如果最高優先順序的中斷不能從停止模式喚醒裝置,它將會被服務。如果有任何內部或外部中斷(例如,在計時器中)發生中斷指令正在執行,停止指令已經完成,但是中斷呼叫了在停止指令完成後立即啟動喚醒程序。在這種情況下mcu實際上是從暫停模式喚醒到執行模式,並有相應的延遲在資料表中指定的twuh。在執行停止指令之前,使用者程式必須清除任何未決的外圍裝置中斷(在相應的外圍配置中清除未決的中斷暫存器)。否則,停止指令就不會執行,程式執行也不會執行仍在繼續。
mcu啟用級別是通過在cfggcr暫存器中程式設計al位來配置的(參見全域性配置暫存器(cfggcr))。這個鑽頭用於控制mcu的低功率模式。在非常低的功率應用中,mcu大部分時間都在wfi/暫停模式下,並被喚醒(通過中斷)特定的時刻,以執行特定的任務。其中一些重複的任務是足夠短的時間可以直接在isr中進行處理(中斷服務程式),而不是繼續回到主程式。為了解決這個問題,你可以在進入低之前設定al位電源模式(通過執行wfi/停止指令)。因此,中斷例程使裝置恢復到低功率模式。然後中斷例程直接返回到低功耗模式。由於暫存器的事實,執行時/isr的執行減少了上下文只在第一次中斷時儲存。因此,所有的操作都可以在非常簡單的應用程式中在isr中執行。在更複雜的,中斷例程可以通過簡單的重置重新啟動主程式美聯。例如,乙個應用程式可能需要被自動喚醒單元(awu)喚醒。每隔50毫秒,就可以檢查一些針/感測器/按鈕的狀態。大部分的時間,因為這些大頭針不活躍,mcu可以在不執行的情況下返回到低功率模式主程式。如果其中乙個大頭針是活動的,isr就會決定啟動主程式通過重置al位。
前後臺系統的低功耗程式設計思想 STM8平台
工作之後接觸了 低功耗 開始搜尋各種各樣的低功耗mcu。網路是乙個非常自由的地方,你總可以看到各種關於哪個mcu功耗更低的論戰,在這些論戰中我查閱了幾乎所有低功耗mcu的特性,例如msp430 efm32還有stm32l等,網路論戰的核心便是哪款mcu的休眠電流更低。看多了資料我便發現,這些低功耗的...
STM32外部中斷 串列埠喚醒低功耗
stm32的低功耗模式共有三個 在專案中綜合選擇了停止模式,在該模式下使用兩種喚醒方式 為了盡可能的降低功耗,需要進行io口的配置,防止它們處於浮空狀態,增大電流。stm32在復位後的io口預設處於浮空輸入狀態,因此一定要對它們進行配置。實際過程中發現,同一配置成模擬輸入狀態和分別配置成上拉輸入或下...
STM8S低功耗處理
要低功耗設計,主要考慮幾個方面 1.外設的低功耗,不需要的外設模組,全部關閉。2.gpio的處理,不需要的io最好做懸浮輸入處理。3.主時鐘的處理,先降到最低內部lsi時鐘,關閉其他不需要的時鐘模組。4.進入低功耗模式。除了執行模式,可以採用以下三種低功耗模式 等待 主動停機 停機。1 等待 wai...