低功耗形式試驗
探究低功耗形式的最佳辦法是選擇一個微操控器并以各種低功耗形式實際運轉(zhuǎn)該處理器。本文中,我決議翻出積塵已久的NXP Kinetis-L Freedom電路板,我從前不只用它進行過試驗,而且還運用于許多產(chǎn)品、運用和課程。不管對錯,我決議不只要丈量微操控器的能耗,還要丈量整個開發(fā)板的能耗。MCU一般是電路板上的耗能大戶之一,但丈量整個體系的電流常常提醒我它并不是電路板上僅有的耗電器材。微操控器的優(yōu)化長路迢迢,但其實它并不是僅有需求優(yōu)化能耗的器材。
?
從基線丈量開端
每逢我盡力優(yōu)化一個產(chǎn)品的能耗時,我首先會從基線能量丈量開端。一般我會經(jīng)過剖析幾秒或幾分鐘內(nèi)設(shè)備的電流耗費來了解應(yīng)該從哪里開端。在我的開發(fā)板試驗中,將Kinetis-L置于運轉(zhuǎn)形式,無睡覺形式,所有外設(shè)均運轉(zhuǎn)并設(shè)置電路板定期切換LED。經(jīng)過選用IAR嵌入式工作臺的I-Jet調(diào)試器以及I-Scope,我可認為該電路板裝備一個簡單基線,即LED封閉時電流耗費大約為16.9mA,LED打開時大約為18.0mA,如圖1所示。顯然,從哪里開端進行丈量很重要,不然剖析成果或許顯著偏離。
圖1:開發(fā)板的電流丈量,LED每秒切換一次。(來源:作者)
選用等候形式和深度睡覺形式優(yōu)化能耗
節(jié)約能耗最快的辦法是履行等候或深度睡覺形式。研究Kinetis-L處理器的數(shù)據(jù)表能夠得出,等候形式的能耗在3伏電壓下的電流介于3.7和5.0mA之間。在此形式下,CPU和外設(shè)時鐘被禁用,而閃存處于休眠形式,此時答應(yīng)處理器在中止時刻范圍內(nèi)(12-15個時鐘周期)仍然能夠被喚醒。等候形式易于實現(xiàn),設(shè)置進入等候形式的代碼如下所示:
?
void Sleep_Wait(void) { SCB_SCR &=~ SCB_SCR_SLEEPDEEP_MASK; asm(“WFI”); } |
只需這兩行代碼,開發(fā)板的電流耗費就從18.0mA降至15.9mA。電流耗費減少了11.6%!假如電路板由680mA電池供電,則該設(shè)備的電池壽數(shù)將從37.8小時變?yōu)?2.8小時!兩行代碼就能夠?qū)㈦姵貕蹟?shù)延長五小時!
?
這些高級電源形式的優(yōu)點在于咱們能夠輕松地再向前邁一步。咱們能夠運用以下代碼將處理器置于深度睡覺等候形式,而不只僅是等候形式:
?
void Sleep_Deep(void) { SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK; asm(“WFI”); } |
咱們所做的僅僅是調(diào)整了SCB_SCR寄存器中的一位,就現(xiàn)已將最初的18mA電流耗費減少為14.8mA。電流耗費減少了17.8%!同樣,假定電路板由680mA電池供電,電池壽數(shù)現(xiàn)在現(xiàn)已從37.8小時增長為46小時!只需幾行代碼就能夠節(jié)約大量能耗,而這僅僅冰山一角!
?
利用Stop形式和VLLS形式實現(xiàn)微安級電流耗費
選用中止形式能夠禁用內(nèi)核和體系時鐘,這有或許將MCU電流耗費再進一步下降兩毫安。你會發(fā)現(xiàn),功耗形式越低,實現(xiàn)它所需的代碼就越多,而喚醒體系恢復(fù)工作的代碼就越雜亂。令Kinetis-L進入中止形式的代碼如下所示:
?
void Sleep_Stop(void) { volatile unsigned int dummyread = 0; SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK; SMC_PMCTRL |= SMC_PMCTRL_STOPM(0); dummyread = SMC_PMCTRL; Sleep_Deep(); } |
請注意,中止形式經(jīng)過電源辦理操控寄存器操控,一旦狀況被設(shè)置,就會調(diào)用Sleep_Deep函數(shù)來完成電源形式的設(shè)置并履行WFI。
?
到目前為止,咱們一直在談?wù)?~2mA的MCU能耗?,F(xiàn)代微操控器將供給僅耗費微安甚至毫微安的電源形式!Kinetis-L處理器于2013年左右首次露臉,其超低漏電中止(VLLS)形式僅耗能135至496微安!初始化此電源形式的代碼如下所示:
?
void Sleep_VLLS1(void) { volatile unsigned int dummyread = 0; SMC_PMCTRL &=~ SMC_PMCTRL_STOPM_MASK; SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x4); SMC_VLLSTRL = SMC_VLLSCTRL_LLSM(1); dummyread = VLLS_CTRL; Sleep_Deep(); } |
講到這兒,你會發(fā)現(xiàn)微操控器現(xiàn)已幾乎不耗費任何能量了!
?
低功耗形式對喚醒推遲的影響
正如咱們目前所看到的那樣,將處理器設(shè)置為越來越低的電源形式是節(jié)約能源的好辦法,但這是需求付出代價的。處理器的能量狀況越低,喚醒處理器恢復(fù)工作所需的時刻就越長。例如,假如我運用規(guī)范中止形式,則處理器被喚醒并再次開端履行代碼需求2μs加上中止推遲,這還能夠接受。可是,假如在Kinetis-L上設(shè)置了其中一種VLLS形式,將需求發(fā)動處理器的喚醒推遲再加上額外的53到115微秒!有些運用或許無法接受這種狀況。圖2顯現(xiàn)了Kinetis-L從低功耗形式到運轉(zhuǎn)狀況的各種轉(zhuǎn)化。
圖2:Kinetis-L從低功耗形式到各種形式的轉(zhuǎn)化時刻。(來源:Kinetis-L數(shù)據(jù)表)
結(jié)論
Arm微操控器都具有規(guī)范的低功耗形式,但每個芯片廠商都會定制開發(fā)人員可用的更多低功耗形式。正如咱們所看到的,芯片供貨商一般會供給幾種簡單實現(xiàn)的形式,對喚醒推遲的影響最小。他們還會供給幾種超低功耗形式,幾乎能夠封閉處理器而且僅耗費幾百微安或更少能量!開發(fā)人員一般需求在能耗和體系被喚醒需求的時長以及響應(yīng)事情的速度之間進行權(quán)衡。而權(quán)衡一定是根據(jù)運用的,所以不要盼望能夠在每個產(chǎn)品和運用上都履行最低功耗形式。