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