STM32F103C8T6 MCU越來越廣泛的應用在生產生活的各個領域,外接豐富的傳感器、功能模塊、通信模塊、顯示存儲等可以形成各種各樣的產品項目應用。對于功耗要求比較高的產品,一般會選擇STM32L系列的MCU,但是從功耗的評測角度,邏輯上是基本相似的。
在很多應用場合中都對電子設備的功耗要求非??量?,如某些傳感器信息采集設備,僅靠小型的電池提供電源,要求工作長達數年之久,且期間不需要任何維護。由于智能穿戴設備的小型化要求,電池體積不能太大導致容量也比較小,所以也很有必要從控制功耗入手,提高設備的續航時間。其實,只要是涉及到便攜式的產品,都免不了要使用電池作為電源,否則,如果還是需要接一個插頭使用市電來供電的話,那就無法稱之為便攜式了,比如手機、運動手環、藍牙耳機、智能手表等都是類似的。所以控制功耗和提高產品的續航時間就顯得尤為重要。
目前針對STM32F103C8T6等系列單片機而言,比較常用的低功耗模式是停止模式和待機模式。
當使用待機模式時,在實際應用中,通常會有一個開關機的按鍵(PA0),如果用戶按下按鍵的話,就會開機或者關機,開機對應的就是喚醒,而關機對應的就是待機(類似于手機的開關機按鍵)。在此過程中,電池會一直給單片機的3.3V電源供電,也就是說,單片機一直都是有電的,但是它的所有外設以及時鐘都處于關閉狀態,之所以還要給單片機供電,只是為了在用戶按下按鍵時檢測PA0的上升沿而已,如果不給單片機供電的話,那么還怎么檢測呢?檢測不了。
當使用停止模式時,我們先看一個問題:理論上待機模式的功耗遠比停止模式要低,為什么還要選擇停止模式呢?通常是這樣的,一個便攜式的系統,除了考慮按鍵開關機外,還需要考慮給電池充電的時候往往需要顯示一些充電的信息(現在的手機充電就是這樣的),如果是在開機狀態下充電的話完全沒有問題。但是,如果是在關機狀態下充電呢?肯定就需要單片機能夠自己喚醒自己(不需要用戶按下PA0),然后才有可能顯示充電的信息(比如手機關機狀態下接通電源后,可以自動顯示充電的動畫)。
是否可以實現不按下PA0就實現喚醒功能嗎?當然可以,只需要在硬件上做一些改動即可。
比如,將充電口的電壓降壓后跟PA0相連,這樣只要充電口在充電,PA0必定會出現一個從低到高的脈沖,這樣就可以喚醒了。但這種情況下,軟件層面上又不好區分PA0的上升沿是由于充電造成的,還是由于用戶按下按鍵造成的。所以,這個時候就需要考慮選擇停止模式了,開關機按鍵接到一個引腳,充電口接到另外一個引腳,兩個引腳都配置為外部中斷,兩個引腳也都可以喚醒單片機,分開了不同的信號電平,這樣子,在軟件上就可以很容易地判斷。
實際上也有另一種改進方式,就是在硬件上實現一個脈沖電路,可以用一個簡單的RC延時電路,就是說充電口的電平再經過一個RC電路以后,出來的就不會一直是高電平,而只是一個脈沖了,再把這個脈沖信號接到PA0引腳,這個時候插入充電口和按下PA0就都會在PA0上出現一個脈沖了。軟件上,可以利用長按開機,再長按關機的機制來進行判別,如果PA0僅僅只是出現一個上升沿并且檢測到充電芯片正在充電,此時就是充電口插入了,喚醒單片機且顯示充電效果即可。
工作模式
我們先了解一下STM32F103C8T6單片機的幾種工作模式。按功耗從高到低排列,STM32F103C8T6具有運行(Run)、睡眠(Sleep)、停止(Stop)和待機(Standby)四種工作模式。在這四種模式下,后面三種是當STM32F103C8T6的內核不在需要運行時,可以選擇的幾種模式,當單片機在工作時,則是運行模式。
運行模式
這里我們不多說運行模式,因為當STM32F103C8T6在上電復位后,即處于了運行模式,這種情況下,單片機自動運行程序。只由當我們不需要內核也就是所謂的Cortex-M3繼續運行時,我們就可以選擇讓芯片進入睡眠、停止和待機這三種模式,來讓芯片降低功耗。功耗的降低會減少芯片的發熱以及能夠保證可靠性增加。
睡眠模式
當STM32F103C8T6在運行過程中,內核也就是所謂的Cortex-M3遇到WFE(等待中斷)或者WFI(等待事件)指令時會停止內部時鐘,停止程序執行。盡管Cortex-M3停止工作,但是其外設仍在繼續工作,直到某個外設產生事件或者中斷時,內核將會被喚醒,退出睡眠模式。在睡眠模式中,僅關閉了內核時鐘,內核停止運行,但其片上外設,Cortex-M3核心的外設全都還照常運行,在軟件上表現為不再執行新的代碼。這個狀態會保留睡眠前的內核寄存器、內存的數據。喚醒后 ,若由中斷喚醒,先進入中斷,退出中斷服務程序后,接著執行 WFI指令后的程序;若由事件喚醒,直接接著執行 WFE后的程序?;旧蠠o喚醒延遲。
這里補充說明一件事:Cortex-M3是一個32位的內核,在傳統的單片機領域中,有一些不同于通用32位CPU應用的要求。在工控領域,用戶要求具有更快的中斷速度,Cortex-M3采用了Tail-Chaining中斷技術,完全基于硬件進行中斷處理,最多可減少12個時鐘周期數,在實際應用中可減少70%中斷。
停機模式
若用戶將Cortex-M3處理器的電源控制寄存器(Cortex Power Control Register,Cortex_PCR)中的SLEEPDEEP位置位,然后將STM32F103C8T6電源控制寄存器(STM32 Power Control Register.STM32 PCR)中的PDDS(Power Down Deep Sleep)位清除,就完成了STM32F103C8T6停機模式的設置。
當停機模式設置完畢后,CPU一旦遇到WFI或WFE指令就會停止工作,HSI和HSE也進人關閉狀態。但Flash和SRAM將會繼續保持電源供應,所以此時STM32F103C8T6的所有工作狀態仍然是保留著的。和睡眠模式一樣,停機模式也可以通過外設中斷喚醒,然面在停機模式下,除了外部中斷控制單元,所有設備的時鐘都被禁止了,只能通過在GPIO引腳上產生電平邊沿觸發外部中斷的方式來將STM32從停機狀態下喚醒。
需要注意的是,外部中斷通道除了與GPIO連接,還和RTC時鐘的報警事件連接,加之RTC的計數時鐘并非來源于STM32F103C8T6的設備總線(而是直接來自于LSI或LSE),因此還可以使用RTC模塊實現定時將STM32F103C8T6從停機狀態中喚醒。
在停止模式中,相對于休眠模式進一步關閉了其它所有的時鐘,于是所有的外設都停止了工作,但由于其 1.2V區域的部分電源沒有關閉,還保留了內核的寄存器、內存的信息,所以從停止模式喚醒,并重新開啟時鐘后,還可以從上次停止處繼續執行代碼。喚醒后,若由中斷喚醒,先進入中斷,退出中斷服務程序后,接著執行 WFI指令后的程序;若由事件喚醒,直接接著執行 WFE后的程序。停止模式喚醒后,STM32F103C8T6會使用 HSI(HSI為8M)作為系統時鐘。所以,有必要在喚醒以后,在程序上重新配置系統時鐘,將時鐘切換回HSE。喚醒延遲基本上是 HSI振蕩器的啟動時間,若調壓器工作在低功耗模式,還需要加上調壓器從低功耗切換至正常模式下的時間,若FLASH工作在掉電模式,還需要加上 FLASH從掉電模式喚醒的時間。
順便提一下,HSI振蕩器與HSE的區別就在于一個是內部的時鐘源,一個是外部的時鐘源。HSI時鐘信號由內部16 MHz RC振蕩器生成,可直接用作系統時鐘,或者用作PLL輸入。HSI RC振蕩器的優點是成本較低(無需使用外部組件)。此外,其啟動速度也要比HSE晶振塊,但即使校準后,其精度也不及外部晶振或陶瓷諧振器。
待機模式
若將STM32F103C8T6電源控制寄存器中的SLEEP位進行置位,再將STM32_PCR中的PDDS位進行置位,這樣,單片機則進入待機模式。
若要喚醒待機模式,有多種方式進行喚醒,分別位:RTC的鬧鐘事件、NRST的外部引腳復位、獨立看門狗(IWDG)所產生的復位信號,以及PA0引腳上所產生的一個上升沿,但是若要是要該引腳所產生的上升沿來喚醒單片機,則必須事先設置為喚醒引腳功能。待機模式是STM32F103C8T6的最低功耗模式。當進入待機模式后,所有的SRAM數據、Cortex-M3處理器的寄存器和STM32F103C8T6的寄存器內容都將會被清零,效果等同于硬件復位。
功耗測評
首先,為了保持評測的準確性,我們先用一個電阻負載來驗證一下設備測試精度,電阻是0.1%精度的100K電阻,所以電阻的阻值誤差我們先可以忽略。
打開功耗分析儀電源mPower1203測試設備,設置3.3V輸出。可以看到,在配套的E-sight工具上顯示了流過電阻的電流值。理論上是33uA,我們實測的值和理論值相差幾十個nA,所以基本上設備的電流精度可以達到千分之一以內的精度。
現在開始評測STM32F103C8T6單片機的幾種模式下的休眠功耗。
睡眠模式
我們從STM32F103C8T6單片機的規格書中,可以看到使用外部時鐘,在主頻為72MHz和48MHz,所有外設都關閉的情況下,功耗典型值約為5.5mA和3.9mA,我們圍繞這兩個值進行測試評估。
經測試和波形分析:
上圖:主頻為72MHz@關閉所有外設,睡眠功耗為5.889mA;
下圖:主頻為48MHz@關閉所有外設,睡眠功耗為4.175mA;
上圖
下圖
測試數據基本符合規格書中的典型值數據。從這個數據中我們可以了解到,當一個產品需要進行優化功耗時,在某些場合下,可以通過降低主頻的方式來得到目標功耗。
停機模式
從STM32F103C8T6單片機的規格書中,可以看到,供電輸出3.3V,停機模式下有兩種情況。一種是調壓器處于運行模式,對應的功耗典型值為24uA;另一種是調壓器處于低功耗模式,對應的功耗典型值為14uA。我們圍繞這兩個值進行測試評估。
經測試和波形分析:
上圖:調壓器處于運行模式,停機功耗為23.042uA;
下圖:調壓器處于低功耗模式,停機功耗為12.857uA;
上圖
下圖
測試數據基本符合規格書中的典型值數據。在配置STM32F103C8T6單片機進入停機模式時,特別需要注意一點,就是外部接8M晶振的管腳需要配置成普通GPIO,且也需要配置成模擬輸入的方式。
待機模式
從STM32F103C8T6單片機的規格書中,可以看到,供電輸出3.3V,待機模式下有三種情況。這三種情況分別對應的功耗的典型值約為3.4uA、3.2uA以及2uA。我們圍繞這三個值進行測試評估。
經測試和波形分析:
圖1:內部RC和獨立看門狗均開啟狀態,待機功耗為2.912uA;
圖2:內部RC開啟,獨立看門狗關閉狀態,待機功耗為2.702uA;
圖3:內部RC和獨立看門狗均關閉狀態,且低速振蕩器和RTC均關閉,待機功耗為1.62uA;
圖1
圖2
圖3
測試數據基本符合規格書中的典型值數據。
最后,需要提一下,在我們進行功耗評測的時候,在和規格書進行對比時,需要了解典型值的含義。一般情況下,規格書上的值都是相對比較保守的,而且典型值是表示正態分布中一個1σ的值,也就是說68.27%的概率是落在典型值左右。換句話說,一共100個測試樣本,68.27個樣本的測試數據是滿足典型值的。
-
傳感器
+關注
關注
2548文章
50740瀏覽量
752142 -
單片機
+關注
關注
6032文章
44525瀏覽量
633258 -
mcu
+關注
關注
146文章
17019瀏覽量
350373 -
功耗
+關注
關注
1文章
810瀏覽量
31920 -
STM32F103C8T6
+關注
關注
107文章
160瀏覽量
83281
發布評論請先 登錄
相關推薦
評論