一.MCU耗能因素
現代的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中斷,復位 |
外部中斷,復位 |
電壓調節器 |
MVR |
MVR |
ULP |
ULP |
CLK_ICKCR |
ULP |
程序執行區 |
FLASH |
FLASH |
RAM |
RAM |
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 |
/ |
清除外設懸掛中斷標誌位 |
單片機中的WFI/WFE指令
進入低功耗模式的兩個指令,
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位。