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