我們的設(shè)備功耗能到多低?
我們探索了可以在每個(gè)Arm Cortex-M處理器上找到的低功率模式的基本原理,以及我們?nèi)绾卫肳FI和WFE說明來使處理器放置。真正存在的問題是,這些低功率模式如何在真實(shí)的微控制器上實(shí)現(xiàn),這些模式如何影響我們的嵌入式系統(tǒng)?在這篇文章中,我們將更詳細(xì)地探討如何使微控制器入睡,并查看購買我們多少能量。
低功率模式實(shí)驗(yàn)
探索低功率模式的最佳方法是選擇一個(gè)微控制器,并實(shí)際以各種低功率模式運(yùn)行處理器。在這篇文章中,我決定除去我久經(jīng)考驗(yàn)的NXP Kinetis-L自由委員會(huì),我不僅嘗試過,而且在許多產(chǎn)品,應(yīng)用程序和課程中都使用過。我還決定,對與錯(cuò),不僅要衡量微控制器所繪制的能量,而且要衡量整個(gè)開發(fā)委員會(huì)的能量。 MCU通常是董事會(huì)上最渴望的設(shè)備之一,但是我經(jīng)常發(fā)現(xiàn)測量整個(gè)系統(tǒng)電流提醒我,這并不是板上唯一的能源消費(fèi)者。優(yōu)化微控制器可以帶您很長的路要走,但這并不總是可能需要優(yōu)化能量的唯一設(shè)備。
從基線測量開始
每當(dāng)我努力優(yōu)化產(chǎn)品的能源消耗時(shí),我首先要進(jìn)行基線能量測量。通常,這是通過在幾秒鐘或幾分鐘內(nèi)分析設(shè)備的當(dāng)前抽簽來理解我們在哪里開始的方法來完成的。在我的開發(fā)板實(shí)驗(yàn)中,我將Kinetis-L保持在運(yùn)行模式下,沒有實(shí)現(xiàn)睡眠,所有外圍設(shè)備都會(huì)放在板上,并設(shè)置板定期切換LED。使用I-JET調(diào)試器和I-Scope的IAR嵌入式工作臺(tái),當(dāng)LED關(guān)閉時(shí),我能夠?yàn)槎聲?huì)介紹一個(gè)簡單的基線?16.9 mA,而當(dāng)LED在下面可以看到的LED時(shí)約為18.0 mA。如您所見,您可以從或者從其他地方進(jìn)行測量值,您可以在分析中進(jìn)行分析。
通過等待和深度睡眠模式優(yōu)化能量
看到節(jié)省能源的最快方法是實(shí)施等待或深度睡眠模式。對Kinetis-L處理器的數(shù)據(jù)表的檢查表明,等待模式在3伏特的3.7和5.0 mA之間繪制。在此模式下,CPU和外圍時(shí)鐘被禁用,但閃存處于打ze式模式,該模式使處理器仍然可以在中斷的時(shí)間范圍內(nèi)醒來(12 - 15個(gè)時(shí)鐘周期)。等待模式易于實(shí)現(xiàn),可以在下面看到要輸入等待模式的代碼:
void sleep_wait(void)
{
scb_scr&= ?scb_scr_sleepdeep_mask;
ASM(“ WFI”);
}
只有這兩條代碼,開發(fā)委員會(huì)的當(dāng)前消耗量從18.0 MA下降到15.9 MA。當(dāng)前消費(fèi)量下降了11.6%!如果板由680 mA電池供電,則該設(shè)備的電池壽命將從37.8小時(shí)到42.8小時(shí)!僅與兩行代碼相比增加了五個(gè)小時(shí)!
這些高級功率模式的偉大是,我們可以輕松地進(jìn)一步邁出一步。我們可以使用以下代碼將處理器納入等待模式,而是將其移至深度睡眠等待模式:
void sleep_deep(void)
{
scb_scr | = scb_scr_sleepdeep_mask;
ASM(“ WFI”);
}
我們所做的只是在SCB_SCR寄存器中調(diào)整一個(gè)位,現(xiàn)在我們已經(jīng)從原始的18 mA電流平局變?yōu)?4.8 mA。當(dāng)前消費(fèi)量下降了17.8%!同樣,假設(shè)板由680 mA電池供電,現(xiàn)在電池壽命將從37.8小時(shí)到46小時(shí)!這些僅用于幾行代碼,只是冰山一角!
利用stop and vlls模式用于UA當(dāng)前抽獎(jiǎng)
使用停止模式有可能通過禁用核心和系統(tǒng)時(shí)鐘進(jìn)一步將MCU電流繪制到另外兩毫安中。您會(huì)發(fā)現(xiàn)的是,功率模式越低,實(shí)現(xiàn)它所需的代碼越多,并且代碼喚醒系統(tǒng)備份的代碼就越復(fù)雜。在Kinetis-L上輸入停止模式的代碼可以在下面看到:
void sleep_stop(void)
{
揮發(fā)性unsigned int dummyRead = 0;
smc_pmctrl&= ?smc_pmctrl_stopm_mask;
smc_pmctrl | = smc_pmctrl_stopm(0);
dummyRead = smc_pmctrl;
sleep_deep();
}
請注意,通過電源管理控制寄存器控制停止模式,一旦設(shè)置了狀態(tài),就會(huì)調(diào)用Sleep_Deep功能以完成設(shè)置電源模式并執(zhí)行WFI。
到目前為止,我們一直在談?wù)揗CU圖1-2 mA?,F(xiàn)代的微控制器將具有可以吸引微型甚至納米壓縮的功率模式! Kinetis-L處理器在2013年左右首次亮相,其非常低的泄漏停止(VLLS)模式僅吸引135至496個(gè)微型??梢栽谙旅婵吹匠跏蓟斯β誓J降拇a:
void sleep_vlls1(void)
{
揮發(fā)性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();
}
在這一點(diǎn)上,微控制器幾乎根本沒有能量!
低功率模式對喚醒潛伏期的影響
正如我們到目前為止所看到的那樣,將處理器轉(zhuǎn)移到較低和較低的功率模式中是節(jié)省能源的好方法,但是節(jié)省的確是有代價(jià)的。處理器的能量狀態(tài)越低,處理器醒來并進(jìn)行有用的工作所需的時(shí)間就越多。例如,如果我要使用標(biāo)準(zhǔn)停止模式,則需要2 US加上中斷延遲才能使處理器醒來并再次開始執(zhí)行代碼。還不錯(cuò)。但是,如果我要在kinetis-l上使用一種VLLS模式,那么我將有一個(gè)喚醒延遲,可以啟動(dòng)處理器以及另外53至115微秒!根據(jù)申請,這可能是不可接受的。
結(jié)論
ARM MicroController都將具有標(biāo)準(zhǔn)的低功率模式,但是每個(gè)硅供應(yīng)商都會(huì)自定義開發(fā)人員可用的低功率模式。如我們所見,硅供應(yīng)商經(jīng)常提供多種模式,這些模式是低懸掛的水果,對喚醒潛伏期的影響最小。他們還提供了幾種非常低的功率模式,幾乎將處理器關(guān)閉,并僅繪制幾百個(gè)或更少的微型!開發(fā)人員通常需要平衡他們想要汲取的能量的數(shù)量與他們需要的速度醒來并響應(yīng)事件的速度。權(quán)衡絕對是專門應(yīng)用程序的,因此不要期望能夠在每個(gè)產(chǎn)品和應(yīng)用程序上運(yùn)行最低的功率模式。