在我的上一篇文章中,“你能走多低(功率)?”,我們研究了微控制器中可用的幾種不同低功耗模式,以及這些低功耗模式如何影響能耗和喚醒時(shí)間。低功耗模式是降低微控制器能耗的主要技術(shù)之一,但它并不是開(kāi)發(fā)人員可用的唯一技術(shù)。在這篇文章中,我們將研究我最喜歡的五種降低微控制器能耗的技術(shù)。
在微控制器中,CPU 通常是使用最多電流的耗電設(shè)備。外圍設(shè)備肯定會(huì)導(dǎo)致能耗,尤其是在有 USB 或以太網(wǎng)控制器的情況下,但優(yōu)化設(shè)備能耗的第一步是盡可能長(zhǎng)時(shí)間地將 CPU 保持在最低狀態(tài)。應(yīng)用程序?qū)⑿枰ㄆ趩拘岩砸苿?dòng)數(shù)據(jù),例如從 UART 接收字節(jié)并將它們存儲(chǔ)在緩沖區(qū)中。避免不斷喚醒 CPU 以處理移動(dòng)數(shù)據(jù)的一種方法是使用直接內(nèi)存訪(fǎng)問(wèn) (DMA) 控制器。
DMA 允許開(kāi)發(fā)人員讓他們的 CPU 保持睡眠狀態(tài),而是使用低功耗外設(shè)來(lái)完成 CPU 本來(lái)可以做的事情,在微控制器周?chē)苿?dòng)數(shù)據(jù)。DMA 控制器可用于多種用途,例如:
將數(shù)據(jù)從外設(shè)移動(dòng)到內(nèi)存
將數(shù)據(jù)從內(nèi)存移動(dòng)到另一個(gè)內(nèi)存位置
將內(nèi)存中的數(shù)據(jù)移動(dòng)到外設(shè)
關(guān)于如何設(shè)置 DMA 的細(xì)節(jié)因微控制器而異,但好處是 CPU 可以保持在低功耗狀態(tài),直到它需要實(shí)際喚醒并處理已由 DMA 傳輸?shù)臄?shù)據(jù).
技巧 #2 – 使用時(shí)鐘節(jié)流
您可能從微控制器課程或在線(xiàn)閱讀中回憶起微控制器的能耗取決于時(shí)鐘頻率。頻率越高,能量消耗越高。應(yīng)用程序不一定總是需要全速運(yùn)行。事實(shí)上,根據(jù)需要做的事情來(lái)限制時(shí)鐘可能是一種有效的技術(shù),可以最大限度地減少消耗的能量。
以下面的圖 1 為例,它顯示了 NXP Kinetis-L 微控制器中運(yùn)行模式電流與內(nèi)核頻率的關(guān)系。從這個(gè)圖中,讀者可以看到,降低時(shí)鐘頻率會(huì)降低能耗。還可以看出,禁用未使用的外圍設(shè)備如何影響微控制器消耗的能量。
?
?
圖 1 – 微控制器電流消耗作為內(nèi)核時(shí)鐘頻率的函數(shù)。(來(lái)源:NXP Kinetis-L 數(shù)據(jù)表)
確切何時(shí)以及如何限制時(shí)鐘頻率完全取決于應(yīng)用程序。某些應(yīng)用程序可能仍希望始終全速運(yùn)行。在其他情況下,可以將頻率從最大值減半并以這種方式運(yùn)行該部分。在其他情況下,根據(jù)應(yīng)用程序正在執(zhí)行的操作動(dòng)態(tài)更改時(shí)鐘可能是有意義的。請(qǐng)注意,如果您決定動(dòng)態(tài)使用時(shí)鐘節(jié)流,您可能還需要?jiǎng)討B(tài)更改外設(shè)寄存器設(shè)置以補(bǔ)償更改。
技巧#3——利用編譯器優(yōu)化
現(xiàn)代編譯器提供嵌入式優(yōu)化設(shè)置,可以改善給定代碼的執(zhí)行時(shí)間。例如,大多數(shù)編譯器為開(kāi)發(fā)人員提供優(yōu)化設(shè)置以執(zhí)行循環(huán)展開(kāi)和內(nèi)聯(lián)函數(shù)。雖然這只是兩個(gè)示例,但開(kāi)發(fā)人員可以使用這些技術(shù)來(lái)生成執(zhí)行速度更快的代碼。執(zhí)行速度更快的代碼,即使它確實(shí)使用更多代碼空間,也將有機(jī)會(huì)在低功耗模式下花費(fèi)更多時(shí)間,這反過(guò)來(lái)將減少應(yīng)用程序消耗的能量。
我建議您盡快安排一些時(shí)間來(lái)查看您的編譯器手冊(cè),看看它內(nèi)置了哪些功能來(lái)幫助您更快地執(zhí)行代碼。雖然看起來(lái)節(jié)省幾十個(gè)時(shí)鐘周期似乎沒(méi)什么大不了的。在數(shù)周甚至數(shù)月的過(guò)程中,這些時(shí)鐘周期可以很快加起來(lái)。
技巧 #4 – 利用低功耗 (LP) 外設(shè)
如果您仔細(xì)閱讀微控制器數(shù)據(jù)表,您會(huì)注意到專(zhuān)為低功耗操作而設(shè)計(jì)的微控制器通常包含與“標(biāo)準(zhǔn)”外設(shè)分開(kāi)的低功耗外設(shè)。例如,STM32 微控制器包括一個(gè) LP 定時(shí)器。這是一個(gè)定時(shí)器外設(shè),不包括所有額外的花里胡哨,但設(shè)計(jì)用于在低功耗環(huán)境中運(yùn)行。在優(yōu)化甚至開(kāi)始低功耗設(shè)計(jì)時(shí),注意這些低功耗外圍設(shè)備并加以利用是無(wú)需大量額外工作即可降低產(chǎn)品能耗的好方法。
技巧#5——跳出框框思考
有時(shí)您可能會(huì)發(fā)現(xiàn)您需要真正跳出框框思考以?xún)?yōu)化能源。幾年前,我正在研究一種由電池供電的醫(yī)療產(chǎn)品,每次充電之間必須使用電池供電 12 到 14 小時(shí)。我們選擇了我們需要的電池,然后繼續(xù)設(shè)計(jì)。好吧,工業(yè)設(shè)計(jì)師認(rèn)為電池太大了,在沒(méi)有告訴電子或軟件團(tuán)隊(duì)的情況下,他們決定大幅縮小電池尺寸,以便制造出更小、更性感的設(shè)備。該設(shè)備的第一次測(cè)試顯示電池僅持續(xù)約 4 - 5 小時(shí)!
工業(yè)團(tuán)隊(duì)當(dāng)然已經(jīng)轉(zhuǎn)向生產(chǎn)工具,并且沒(méi)有回到更大的電池。唯一的選擇就是瘋狂地優(yōu)化。盡管使用了書(shū)中所有可能的優(yōu)化技術(shù),但我只能讓設(shè)備持續(xù)使用大約 8 小時(shí)。那么,可以做些什么呢?事實(shí)證明,該產(chǎn)品有一個(gè)板載 USB 主機(jī),它有一個(gè)作為 MSD/CDC 設(shè)備連接的自定義存儲(chǔ)設(shè)備。USB消耗大量能源,如果USB可以在不需要時(shí)關(guān)閉,可以節(jié)省相當(dāng)多的能源。
我們必須跳出框框思考,在啟動(dòng)設(shè)備后,我們將禁用 USB 設(shè)備,關(guān)閉 USB 主機(jī),當(dāng)需要 USB 設(shè)備時(shí),我們通過(guò) USB D+ 和 D- 端口發(fā)送一條消息,發(fā)出信號(hào)USB 主機(jī)將重新啟動(dòng)。這是一種瘋狂、丑陋的變通方法,但它成功地將電池壽命延長(zhǎng)到 14 小時(shí)以上。有時(shí)您只需跳出框框思考即可獲得所需的能源效率。
結(jié)論
在這篇文章中,我們研究了一些額外的技術(shù),開(kāi)發(fā)人員可以利用這些技術(shù)來(lái)最大限度地降低微控制器的能耗。將這些技術(shù)與低功耗模式一起使用可以顯著降低設(shè)備能耗。當(dāng)您致力于優(yōu)化您的微控制器應(yīng)用的能源時(shí),不要忘記選擇能夠?yàn)槟臅r(shí)間帶來(lái)最大收益的技術(shù)。能量?jī)?yōu)化通常會(huì)成為一個(gè)黑洞,每次迭代的時(shí)間投資回報(bào)都會(huì)遞減。
?
審核編輯:湯梓紅
評(píng)論
查看更多