想要學(xué)會(huì)低功耗設(shè)計(jì)?來(lái)看看MCU低功耗設(shè)計(jì)實(shí)例吧
在性能相當(dāng)?shù)臈l件下,低功耗設(shè)計(jì)的產(chǎn)品往往更受青睞。但是,低功耗產(chǎn)品在價(jià)格上往往更貴。上篇文章中,小編對(duì)功耗的組成等知識(shí)有所闡述。為增進(jìn)大家對(duì)功耗的了解,本文將對(duì)MCU耗能的原因予以介紹,并分析如何實(shí)現(xiàn)MCU的低功耗設(shè)計(jì)。如果你對(duì)功耗相關(guān)內(nèi)容具有興趣,不妨繼續(xù)往下閱讀哦。
一、MCU耗能因素
現(xiàn)代的MCU一般使用CMOS技術(shù),耗能包括2方面:
靜態(tài)消耗 主要是晶體管消耗能量;
動(dòng)態(tài)消耗 公式=C&TImes;V2&TImes;f,其中C是CMOS的負(fù)載電容,V是供電電壓,f是時(shí)鐘頻率;
總電能消耗是靜態(tài)消耗和動(dòng)態(tài)消耗之和,即:IDD=f&TImes;IDynamicRun[uA/MHz]+IStaTIc[uA]。
因此,電能消耗依賴(lài)于:
MCU芯片尺寸 或者說(shuō)晶體管的數(shù)目;
MCU供電電壓 降低電壓可以成平方級(jí)別地降低電能消耗;
時(shí)鐘頻率 可以把時(shí)鐘頻率降低到剛好滿(mǎn)足應(yīng)用需要;
外設(shè)數(shù)目 使能的外設(shè)越多,耗能越大;
運(yùn)行模式 合理選擇工作模式可以大幅節(jié)能,如,全速工作極短時(shí)間后進(jìn)入睡眠模式。
二、節(jié)能方法
1. 關(guān)閉不需要使用的外設(shè);
2. 所有未使用的引腳必須連接到一個(gè)確定的邏輯電平;
3. 當(dāng)有外設(shè)必須保持激活時(shí),使用Wait模式來(lái)獲得低功耗;
4. 使用合適的VDD值;
5. 盡可能地使用低功耗運(yùn)行模式;
6. 如果不能使用低功耗模式,那就將主頻降低到滿(mǎn)足應(yīng)用的最小值;
7. 如果可能,使用動(dòng)態(tài)控制I/O引腳的上拉功能。
三、低功耗模式
支持低功耗的MCU一般都有好幾種運(yùn)行模式,以ST公司的STM8L為例,它支持5種低功耗模式:等待、低功耗運(yùn)行、低功耗等待、主動(dòng)停止和停止。每一種模式的進(jìn)入方式,節(jié)能級(jí)別和外設(shè)工作要求,總結(jié)表1:
表1 STM8L低功耗運(yùn)行模式
上述低功耗運(yùn)行模式對(duì)于開(kāi)發(fā)者來(lái)說(shuō)有點(diǎn)多,尤其剛接觸STM8L處理器。我們需要一般性的指導(dǎo)原則,表2是來(lái)源于實(shí)踐的經(jīng)驗(yàn)。
表2 選擇合理的STM8L節(jié)能模式
四、鮮為人知的技巧
1. 使用Wait替換查詢(xún)方式達(dá)到節(jié)能目的
常見(jiàn)的查詢(xún)方式如下,此時(shí)CPU無(wú)事可干,白白消耗電能。
ADC_CR1 = ADC_START; /* start conversion */
while (!(ADC_SR & ADC_SR_EOC)) ; /* wait for EOC bit set */
可以使用等待事件的方式來(lái)節(jié)省電能。
先配置ADC為事件源,并使能相應(yīng)的中斷:
WFE_CR2 = ADC_COMP_EV; /* enable ADC as a source of event */
ADC_CR1 = ADC_EOCIE; /* enable interrupt for end of conversion */
當(dāng)ADC轉(zhuǎn)換完成后,喚醒處于等待的CPU:
ADC_CR1 = ADC_START; /* start conversion */
_asm(“wfe”); /* enter wait mode until waked by ADC_EOCIE*/
2. 無(wú)須上下文切換的中斷模式
應(yīng)用程序設(shè)計(jì)時(shí),如果所有中斷事件由ISR完成,可以通過(guò)將CFG_GCR寄存器中AL位置1來(lái)節(jié)省電能:避免保存/恢復(fù)context、無(wú)須主程序運(yùn)行(返回到WFI模式),如下圖1所示。
圖1 WFI模式下中斷無(wú)須上下文切換
將AL位置1節(jié)省電能的方法同樣可以用于HALT模式,原理如下圖2所示。
圖2 HALT模式下中斷無(wú)須上下文切換
3. 動(dòng)態(tài)設(shè)置I/O口的上拉功能
很多應(yīng)用需要按鍵作為人機(jī)接口,按鍵一般連接到I/O上。當(dāng)按鍵沒(méi)有動(dòng)作時(shí)I/O口設(shè)置內(nèi)部上拉而獲得確定的邏輯電平;一旦按鍵按下,I/O口對(duì)地導(dǎo)通將產(chǎn)生額外的40~70uA電流,這對(duì)于電池供電的低功耗來(lái)說(shuō)是十分重要的。
可以動(dòng)態(tài)地控制I/O口的上拉達(dá)到節(jié)能的目的:一旦按鍵按下,中斷服務(wù)程序?qū)⒔乖揑/O口的上拉功能;然后軟件定時(shí)執(zhí)行—先使能上拉功能,再檢測(cè)I/O口狀態(tài),如果按鍵仍按下再次禁止上拉功能,否則使能I/O口的上拉功能。整個(gè)邏輯如下圖3所示:
圖3 動(dòng)態(tài)設(shè)置I/O口的上拉而節(jié)能
4. CPU空閑節(jié)能策略
CPU的空閑節(jié)能如下圖4所示,它的邏輯包括以下幾個(gè)步驟:
(1)發(fā)現(xiàn)CPU空閑:帶OS系統(tǒng),表現(xiàn)為任務(wù)沒(méi)有事件需要響應(yīng),或者進(jìn)入idle進(jìn)程;無(wú)OS系統(tǒng),表現(xiàn)為程序運(yùn)行結(jié)束。
(2) 選擇一種合適的CPU節(jié)能模式:chip_EnterLowPower()完成進(jìn)入節(jié)能前的準(zhǔn)備工作,包括:關(guān)閉外設(shè),切換I/O引腳到節(jié)能狀態(tài)。
(3) 退出節(jié)能模式需要調(diào)用chip_ExitLowPower(),可能發(fā)生在以下2種情形:
a. 需要使用被關(guān)閉外設(shè)的ISR:
b. 由process直接退出;
chip_ExitLowPower()的善后工作包括:使能外設(shè),切換I/O引腳到工作狀態(tài)。同時(shí)為避免ISR和process兩次操作chip_ExitLowPower(),該函數(shù)設(shè)置了狀態(tài)變量避免重復(fù)退出。
圖4 CPU空閑節(jié)能策略
以上便是此次小編帶來(lái)的“功耗”相關(guān)內(nèi)容,通過(guò)本文,希望大家對(duì)MCU低功耗設(shè)計(jì)具備一定的了解。如果你喜歡本文,不妨持續(xù)關(guān)注我們網(wǎng)站哦,小編將于后期帶來(lái)更多精彩內(nèi)容。最后,十分感謝大家的閱讀,have a nice day!