0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何讓MCU進(jìn)入睡眠狀態(tài),看到底能節(jié)省多少能耗?

jf_pJlTbmA9 ? 來(lái)源:jf_pJlTbmA9 ? 作者:jf_pJlTbmA9 ? 2023-07-24 17:21 ? 次閱讀

低功耗模式實(shí)驗(yàn)

探索低功耗模式的最佳方法是選擇一個(gè)微控制器并以各種低功耗模式實(shí)際運(yùn)行該處理器。本文中,我決定翻出積塵已久的NXP Kinetis-L Freedom電路板,我曾經(jīng)不僅用它進(jìn)行過(guò)實(shí)驗(yàn),而且還應(yīng)用于許多產(chǎn)品、應(yīng)用和課程。無(wú)論對(duì)錯(cuò),我決定不僅要測(cè)量微控制器的能耗,還要測(cè)量整個(gè)開(kāi)發(fā)板的能耗。MCU通常是電路板上的耗能大戶(hù)之一,但測(cè)量整個(gè)系統(tǒng)的電流經(jīng)常提醒我它并不是電路板上唯一的耗電器件。微控制器的優(yōu)化長(zhǎng)路迢迢,但其實(shí)它并不是唯一需要優(yōu)化能耗的器件。

從基線測(cè)量開(kāi)始


每當(dāng)我努力優(yōu)化一個(gè)產(chǎn)品的能耗時(shí),我首先會(huì)從基線能量測(cè)量開(kāi)始。通常我會(huì)通過(guò)分析幾秒或幾分鐘內(nèi)設(shè)備的電流消耗來(lái)了解應(yīng)該從哪里開(kāi)始。在我的開(kāi)發(fā)板實(shí)驗(yàn)中,將Kinetis-L置于運(yùn)行模式,無(wú)睡眠模式,所有外設(shè)均運(yùn)行并設(shè)置電路板定期切換LED。通過(guò)采用IAR嵌入式工作臺(tái)的I-Jet調(diào)試器以及I-Scope,我可以為該電路板配置一個(gè)簡(jiǎn)單基線,即LED關(guān)閉時(shí)電流消耗大約為16.9mA,LED打開(kāi)時(shí)大約為18.0mA,如圖1所示。顯然,從哪里開(kāi)始進(jìn)行測(cè)量很重要,否則分析結(jié)果可能明顯偏離。

wKgZomS-QmCADFF0AAFAKz9joVg342.png
圖1:開(kāi)發(fā)板的電流測(cè)量,LED每秒切換一次。(來(lái)源:作者)

采用等待模式和深度睡眠模式優(yōu)化能耗

節(jié)省能耗最快的方法是執(zhí)行等待或深度睡眠模式。研究Kinetis-L處理器的數(shù)據(jù)表可以得出,等待模式的能耗在3伏電壓下的電流介于3.7和5.0mA之間。在此模式下,CPU和外設(shè)時(shí)鐘被禁用,而閃存處于休眠模式,此時(shí)允許處理器在中斷時(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”);
}

只需這兩行代碼,開(kāi)發(fā)板的電流消耗就從18.0mA降至15.9mA。電流消耗減少了11.6%!如果電路板由680mA電池供電,則該設(shè)備的電池壽命將從37.8小時(shí)變?yōu)?2.8小時(shí)!兩行代碼就可以將電池壽命延長(zhǎng)五小時(shí)!

這些高級(jí)電源模式的好處在于我們可以輕松地再向前邁一步。我們可以使用以下代碼將處理器置于深度睡眠等待模式,而不僅僅是等待模式:

void Sleep_Deep(void)
{
SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
asm(“WFI”);
}

我們所做的僅僅是調(diào)整了SCB_SCR寄存器中的一位,就已經(jīng)將最初的18mA電流消耗減少為14.8mA。電流消耗減少了17.8%!同樣,假設(shè)電路板由680mA電池供電,電池壽命現(xiàn)在已經(jīng)從37.8小時(shí)增長(zhǎng)為46小時(shí)!只需幾行代碼就可以節(jié)省大量能耗,而這只是冰山一角!

利用Stop模式和VLLS模式實(shí)現(xiàn)微安級(jí)電流消耗

采用停止模式可以禁用內(nèi)核和系統(tǒng)時(shí)鐘,這有可能將MCU電流消耗再進(jìn)一步降低兩毫安。你會(huì)發(fā)現(xiàn),功耗模式越低,實(shí)現(xiàn)它所需的代碼就越多,而喚醒系統(tǒng)恢復(fù)工作的代碼就越復(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();
}

請(qǐng)注意,停止模式通過(guò)電源管理控制寄存器控制,一旦狀態(tài)被設(shè)置,就會(huì)調(diào)用Sleep_Deep函數(shù)來(lái)完成電源模式的設(shè)置并執(zhí)行WFI。

到目前為止,我們一直在談?wù)?~2mA的MCU能耗。現(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();
}

講到這里,你會(huì)發(fā)現(xiàn)微控制器已經(jīng)幾乎不消耗任何能量了!

低功耗模式對(duì)喚醒延遲的影響

正如我們目前所看到的那樣,將處理器設(shè)置為越來(lái)越低的電源模式是節(jié)省能源的好方法,但這是需要付出代價(jià)的。處理器的能量狀態(tài)越低,喚醒處理器恢復(fù)工作所需的時(shí)間就越長(zhǎng)。例如,如果我使用標(biāo)準(zhǔn)停止模式,則處理器被喚醒并再次開(kāi)始執(zhí)行代碼需要2μs加上中斷延遲,這還可以接受。但是,如果在Kinetis-L上設(shè)置了其中一種VLLS模式,將需要啟動(dòng)處理器的喚醒延遲再加上額外的53到115微秒!有些應(yīng)用可能無(wú)法接受這種狀況。圖2顯示了Kinetis-L從低功耗模式到運(yùn)行狀態(tài)的各種轉(zhuǎn)換。

wKgZomS-QnCAMYslAAJFdiVdxsw521.png
圖2:Kinetis-L從低功耗模式到各種模式的轉(zhuǎn)換時(shí)間。(來(lái)源:Kinetis-L數(shù)據(jù)表)

結(jié)論

Arm微控制器都具有標(biāo)準(zhǔn)的低功耗模式,但每個(gè)芯片廠商都會(huì)定制開(kāi)發(fā)人員可用的更多低功耗模式。正如我們所看到的,芯片供應(yīng)商通常會(huì)提供幾種容易實(shí)現(xiàn)的模式,對(duì)喚醒延遲的影響最小。他們還會(huì)提供幾種超低功耗模式,幾乎可以關(guān)閉處理器并且僅消耗幾百微安或更少能量!開(kāi)發(fā)人員通常需要在能耗和系統(tǒng)被喚醒需要的時(shí)長(zhǎng)以及響應(yīng)事件的速度之間進(jìn)行權(quán)衡。而權(quán)衡一定是基于應(yīng)用的,所以不要指望能夠在每個(gè)產(chǎn)品和應(yīng)用上都執(zhí)行最低功耗模式。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7336

    瀏覽量

    150110
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347800
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8967

    瀏覽量

    365046
  • 低功耗
    +關(guān)注

    關(guān)注

    10

    文章

    2286

    瀏覽量

    103335
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    cc2650如何在使串口同時(shí),設(shè)備進(jìn)入睡眠模式?

    本帖最后由 冒汗的心情 于 2016-3-29 11:47 編輯 cc2650如何能在使串口的同時(shí),其設(shè)備完全進(jìn)入睡眠模式?使
    發(fā)表于 03-29 11:45

    STM8AF52AATCY如何控制器進(jìn)入睡眠模式

    尊敬的先生/女士,如何控制器進(jìn)入睡眠模式。您能否給我信息或發(fā)送給我任何源代碼鏈接。在這里,我使用halt()進(jìn)入睡眠狀態(tài);禁用外圍設(shè)備的模式,但我在想是否還有其他配置需要做。請(qǐng)建議我
    發(fā)表于 01-07 16:14

    如何MCU進(jìn)入睡眠狀態(tài)節(jié)省能耗?

    狀態(tài)并看看到底能夠節(jié)省多少能耗。低功耗模式實(shí)驗(yàn)探索低功耗模式的最佳方法是選擇一個(gè)微控制器并以各種低功耗模式實(shí)際運(yùn)行該處理器。本文中,我決定翻出積塵已久的NXP Kinetis-L Fr
    發(fā)表于 08-15 13:24

    請(qǐng)問(wèn)CC2530進(jìn)入睡眠狀態(tài)時(shí)看門(mén)狗起作用嗎?

    CC2530使用睡眠定時(shí)器,在進(jìn)入睡眠狀態(tài)看門(mén)狗起作用嗎?會(huì)不會(huì)沖突?比如說(shuō)系統(tǒng)睡眠5分鐘,看門(mén)狗要怎么設(shè)置?在哪里喂狗?(新人,對(duì)看門(mén)狗
    發(fā)表于 08-19 02:01

    如何NY8A054D進(jìn)入睡眠模式?

    如何NY8A054D進(jìn)入睡眠模式?
    發(fā)表于 09-27 06:02

    如何微控制器進(jìn)入睡眠狀態(tài)并看看到底能夠節(jié)省多少能耗

    ?這些模式是如何影響嵌入式系統(tǒng)的?在這篇文章中,我們將更詳細(xì)探討如何微控制器進(jìn)入睡眠狀態(tài)并看看到底能夠節(jié)省多少
    發(fā)表于 11-04 07:39

    RTX使用RTC1中斷導(dǎo)致頻繁喚醒,無(wú)法進(jìn)入睡眠狀態(tài)怎么解決?

    RTX使用RTC1中斷導(dǎo)致頻繁喚醒,無(wú)法進(jìn)入睡眠狀態(tài)怎么解決?
    發(fā)表于 02-23 07:21

    CH582M進(jìn)入睡眠模式?jīng)]有關(guān)閉主振是什么原因?

    IC使腳(電池供電)4、拔出電池。(無(wú)電源供電,復(fù)位MCU)測(cè)量MCU電源口?3.3V下降到1.9V再上升到3.3V 這個(gè)過(guò)程5ms左右5、進(jìn)入睡眠前置高A?,主振沒(méi)有關(guān)閉。充電IC
    發(fā)表于 06-21 07:43

    如和STM8S與STM8L安全地進(jìn)入睡眠狀態(tài)呢?

    評(píng)估期間設(shè)置標(biāo)志,并且存在風(fēng)險(xiǎn),即 MCU 會(huì)在升起一些標(biāo)志的情況下進(jìn)入睡眠狀態(tài)。是否有任何機(jī)制如何 STM8S(可能還有 STM8L)安全地睡眠
    發(fā)表于 12-08 06:12

    STM32L071CB如何MCU進(jìn)入睡眠狀態(tài)呢?又是如何喚醒它的呢?

    ,MCU 需要設(shè)置為睡眠模式以最小化功耗。到現(xiàn)在為止,除了將 MCU 設(shè)置為睡眠模式之外,其他一切都已正確完成。但是我不清楚如何
    發(fā)表于 12-09 08:10

    請(qǐng)問(wèn)s32k3 mcu進(jìn)入睡眠模式后flexcan可以工作嗎?

    s32k3 mcu進(jìn)入睡眠模式后flexcan可以工作嗎?客戶(hù)希望通過(guò) flexcan 喚醒 MCU
    發(fā)表于 03-23 07:58

    如何Arduino進(jìn)入睡眠狀態(tài)

    子,Uno在清醒時(shí)使用30-40 mA,在睡眠時(shí)使用約19 mA。 Pro Mini在喚醒時(shí)使用25mA,在睡眠時(shí)使用0.57 mA。由于每個(gè)mA在連接到電池時(shí)都很重要,你可以看到沒(méi)有比賽,Arduino Pro Mini是贏家
    的頭像 發(fā)表于 08-26 08:54 ?1w次閱讀

    32 系統(tǒng)進(jìn)入stop模式_如何MCU進(jìn)入睡眠狀態(tài)節(jié)省能耗?

    ?這些模式是如何影響嵌入式系統(tǒng)的?在這篇文章中,我們將更詳細(xì)探討如何微控制器進(jìn)入睡眠狀態(tài)并看看到底能夠節(jié)省多少
    發(fā)表于 11-01 16:08 ?5次下載
    32 系統(tǒng)<b class='flag-5'>進(jìn)入</b>stop模式_如何<b class='flag-5'>讓</b><b class='flag-5'>MCU</b><b class='flag-5'>進(jìn)入睡眠</b><b class='flag-5'>狀態(tài)</b><b class='flag-5'>節(jié)省</b><b class='flag-5'>能耗</b>?

    如何阻止電腦進(jìn)入睡眠或者休眠

    通常我們使用電腦過(guò)程中會(huì)設(shè)置多長(zhǎng)時(shí)間不操作,電腦就會(huì)滅屏、睡眠甚至是休眠。如果電腦進(jìn)入睡眠或者休眠模式,電腦運(yùn)行的程序?qū)⒉辉賵?zhí)行。如果我們?cè)O(shè)計(jì)的桌面程序一直在執(zhí)行某種操作,比如持續(xù)的USB通信,操作人可能會(huì)離開(kāi)很久,這個(gè)時(shí)候,我們不希望電腦
    的頭像 發(fā)表于 02-28 14:30 ?2431次閱讀

    如何MCU進(jìn)入睡眠狀態(tài)節(jié)省能耗?

    。實(shí)際上我們真正要了解的是,低功耗模式如何在真正的微控制器上實(shí)現(xiàn)?這些模式是如何影響嵌入式系統(tǒng)的?在這篇文章中,我們將更詳細(xì)探討如何微控制器進(jìn)入睡眠狀態(tài)并看看到底能夠
    的頭像 發(fā)表于 08-04 14:27 ?530次閱讀
    如何<b class='flag-5'>讓</b><b class='flag-5'>MCU</b><b class='flag-5'>進(jìn)入睡眠</b><b class='flag-5'>狀態(tài)</b><b class='flag-5'>節(jié)省</b><b class='flag-5'>能耗</b>?