MCU省電模式幫助降低整體功耗
現(xiàn)代單片機(jī)(MCU)擁有豐富的外設(shè)和功能,極大地方便了設(shè)計(jì)的功耗預(yù)算。全面了解器件的相關(guān)知識(shí)對于嵌入式設(shè)計(jì)人員非常重要,只有這樣,設(shè)計(jì)人員才能充分利用可用的模式和外設(shè)來降低設(shè)計(jì)功耗。
充分利用省電模式和功能
大多數(shù)單片機(jī)都設(shè)有多種模式,可提供各種省電選項(xiàng)。盡管模式的名稱可能各不相同,但是幾乎所有MCU都會(huì)提供“運(yùn)行”、“空閑”和“休眠”三種典型模式。圖1給出了許多單片機(jī)上可用模式的匯總。在一些情況下,何時(shí)使用哪種模式是顯而易見的;例如,對于主要的處理工作,只能使用運(yùn)行模式。在處理工作完成后,如果需要長時(shí)間等候外部事件,顯然應(yīng)該選擇休眠模式。何時(shí)適合選擇空閑模式并不容易判定,但是在發(fā)送或接收大批量的數(shù)據(jù)時(shí)最常選擇該模式。在保留其他功能的同時(shí)等候較短時(shí)間延遲來關(guān)閉CPU,也會(huì)使用空閑模式。
對于特定架構(gòu)的多種其它模式和功能的熟悉程度非常重要。雖然僅使用上述一些熟悉的模式也可以使設(shè)計(jì)功耗達(dá)到可接受的水平,但是要使應(yīng)用的電流消耗達(dá)到絕對的最低水平,最好是利用器件的獨(dú)特功能。例如,某些MCU采用了一種新型斷電模式,該模式取消對MCU的內(nèi)核供電以最大程度地降低功耗,從而使功耗低于常規(guī)斷電模式下的功耗。這種模式通常被稱為“深度休眠”。圖2中顯示的PIC24F16KA 16位MCU便是深度休眠器件的一個(gè)實(shí)例。
MCU內(nèi)核斷電時(shí)RAM也將斷電,這樣會(huì)導(dǎo)致其它低功耗模式(如休眠)下仍然可以保留的某些信息丟失。既然代價(jià)如此高昂,那么什么情況下才適合使用深度休眠模式呢?使用深度休眠模式的好處是取消器件的大部分供電時(shí)產(chǎn)生的漏電流很小,這可以顯著降低掉電電流——某些情況下可以降到50 nA以下,如圖1所示。小漏電流還使得深度休眠模式在高溫或高壓應(yīng)用中的表現(xiàn)更好,高溫和高壓常常導(dǎo)致休眠模式電流增加。深度休眠模式的另一個(gè)主要優(yōu)點(diǎn)是可以實(shí)現(xiàn)設(shè)計(jì)尺寸更小且性能更佳的芯片,同時(shí)不用放棄低功耗目標(biāo)。這種模式最適用于掉電時(shí)間較長的應(yīng)用,這些應(yīng)用中減小掉電電流的重要性遠(yuǎn)遠(yuǎn)超過使應(yīng)用重新初始化的成本。
設(shè)計(jì)人員對器件的熟悉度變得重要的另一個(gè)原因是,不僅只有低功耗模式才能降低功耗,很多用于提升性能的功能也有利于降低功耗。例如,如果某個(gè)器件有內(nèi)部振蕩器,則用戶可以在主晶振開始運(yùn)行初始化代碼的同時(shí)使用該內(nèi)部振蕩器,這樣便可以縮短器件喚醒所需的總時(shí)間。
數(shù)字外設(shè)的功耗
集成外設(shè)有助于顯著提升MCU的性能并允許移除外部元件,這兩點(diǎn)都有利于降低功耗。但是,如果使用不當(dāng),運(yùn)行外設(shè)的成本會(huì)高過所節(jié)省的功耗。可以通過幾種簡單的技巧使外設(shè)自身的供電成本最小化,以維持低功耗應(yīng)用。
一般來說,單片機(jī)中使用的最耗電的外設(shè)是串行通信總線。I2C和SPI通信均使用多條高速線路。驅(qū)動(dòng)這些線路的供電成本非常高。SPI在高速運(yùn)行時(shí)消耗的電流會(huì)達(dá)到毫安級,因?yàn)樗枰?qū)動(dòng)三條高速I/O總線。驅(qū)動(dòng)這些總線時(shí)的開關(guān)損耗會(huì)導(dǎo)致極大的電流消耗。相比而言,I2C運(yùn)行速度較慢,但是因?yàn)樗褂昧松侠娮瑁?dāng)?shù)碗娮枭侠糜趯?shí)現(xiàn)高速時(shí)會(huì)造成相當(dāng)大的電流,因此電流消耗會(huì)更大。
降低這些串行通信外設(shè)功耗的最簡單的方法是降低速度;但是,并不是所有情況下都可以這樣做。既然運(yùn)行串行通信的大部分成本來自于驅(qū)動(dòng)總線,那么我們就應(yīng)該將焦點(diǎn)放在驅(qū)動(dòng)總線上。對于SPI而言,采用走線較短的簡潔電路板布局來最小化線路阻抗很重要。而I2C則相反——在總線上采用值較高的上拉電阻可以降低電流消耗,并且在某些情況下并不會(huì)減慢最大速度。要最小化這兩種情況下的功耗,可以減少總線上的器件數(shù)量或關(guān)閉未使用的器件的電源,而不是在選擇芯片上費(fèi)腦筋。在軟件中,如果某個(gè)應(yīng)用正在等候串行數(shù)據(jù),可以通過禁止CPU來降低這些外設(shè)的功耗。另外,也可以將串行傳輸數(shù)據(jù)組合成集群,而不是持續(xù)傳輸,這樣應(yīng)用就可以更長時(shí)間保持在省電模式,而在更少時(shí)間處于喚醒狀態(tài)以發(fā)送和接收數(shù)據(jù)。
模擬外設(shè)的功耗
MCU上的模擬外設(shè)會(huì)對電流消耗產(chǎn)生很大的影響。BOR、比較器和ADC等模擬功能需要消耗足夠的功率才能產(chǎn)生準(zhǔn)確的結(jié)果。因此,當(dāng)這些功能部件在低功耗模式下運(yùn)行時(shí),無法總是像對數(shù)字功能那樣對其進(jìn)行功耗優(yōu)化。正因?yàn)槿绱?,確保應(yīng)用僅在需要時(shí)使能模擬功能(而不是始終使能)就變得非常重要。若要降低ADC的采樣速率,往往使用盡可能快的時(shí)鐘和盡可能短的采樣時(shí)間而不是延長采樣時(shí)間或放慢ADC時(shí)鐘。而且,在采樣完成后,應(yīng)該禁止ADC。對于很多MCU而言,這樣做可以用更低的功耗產(chǎn)生相同的結(jié)果。類似地,在器件運(yùn)行過程中使用BOR功能來檢測會(huì)導(dǎo)致錯(cuò)誤執(zhí)行的小幅壓降,比在器件處于省電模式時(shí)使用該功能更重要,因?yàn)樵谑‰娔J较?,僅要求檢測大到足以造成RAM崩潰的壓降。因此,將BOR配置成采用功耗更低的休眠模式比配置成運(yùn)行模式更加有用,這樣的話,可以利用在休眠時(shí)較低的功耗強(qiáng)度要求并達(dá)到低至50nA或更低的電流消耗,同時(shí)還能在運(yùn)行時(shí)維持高性能。
本文小結(jié)
所有MCU都有一系列可用于降低設(shè)計(jì)功耗的功能。但是,這些功能中只有一小部分應(yīng)用到了所有器件中。因此,熟悉所使用的單片機(jī)的所有外設(shè)和獨(dú)特功能非常重要,只有這樣才能真正實(shí)現(xiàn)功耗得到優(yōu)化的設(shè)計(jì)。