加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1 低功耗的意義
    • 2 思路決定成敗
    • 3 驅(qū)動(dòng)軟件設(shè)計(jì)
    • 4 業(yè)務(wù)軟件設(shè)計(jì)
    • 5 工欲善其事,必先利其器
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

嵌入式軟件的低功耗設(shè)計(jì)

2023/07/16
3479
閱讀需 15 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1 低功耗的意義

電子產(chǎn)品尤其是電池供電的都要求低功耗,究竟怎樣才算低功耗?脫離應(yīng)用場(chǎng)合的數(shù)值沒有意義,低功耗是一種看情況而定、只可意會(huì)的標(biāo)準(zhǔn)。

2 思路決定成敗

芯片數(shù)據(jù)手冊(cè)寫著低功耗,上面那些小的出奇的電流標(biāo)準(zhǔn),只是用來擺設(shè)的一種無法工作的假死狀態(tài),工作功耗才是實(shí)實(shí)在在的。有時(shí)為了體現(xiàn)低功耗,還要在應(yīng)用中設(shè)計(jì)所謂的低功耗模式,當(dāng)系統(tǒng)確認(rèn)沒有任務(wù)時(shí)就休眠。于是乎,低功耗這種“既要馬兒跑,又要馬兒不吃草”的邏輯,就成為降低正常工作模式下系統(tǒng)功耗的常規(guī)選擇。

硬件角度來說,找到所有可能消耗電流的回路,確定哪些是可以通過軟件控制的方式來優(yōu)化,哪些是不可避免的,并給軟件開發(fā)人員提供所有IO口狀態(tài)對(duì)功耗影響的關(guān)系,用簡(jiǎn)單的表格說明一下高電平或低電平會(huì)怎樣,懸浮會(huì)怎樣。前期配置驅(qū)動(dòng)軟件,驗(yàn)證工作時(shí)最小電流滿足標(biāo)準(zhǔn),基本可確認(rèn)硬件正常。剩下的就是軟件開發(fā)人員的發(fā)揮空間,而基于軟件的降功耗策略,正是本文所要討論的重點(diǎn)。更多信息請(qǐng)關(guān)注微信公眾號(hào)【嵌入式系統(tǒng)

3 驅(qū)動(dòng)軟件設(shè)計(jì)

3.1 端口配置

首先確認(rèn)復(fù)位后引腳的默認(rèn)狀態(tài),該狀態(tài)下是否漏電,是否會(huì)開啟某些時(shí)鐘源,是否內(nèi)部上拉或下拉,軟件再結(jié)合硬件或外圍做相應(yīng)配置。例如AD通道禁止內(nèi)部上拉,普通GPIO設(shè)為輸出低或者高,懸空引腳避免為輸入模式,

固定連接控制的,可以推挽輸出控制外設(shè),或者外部帶上拉時(shí)選開漏;特殊引腳如UART一般配置模式即可,硬件自動(dòng)控制對(duì)應(yīng)電平;間歇性工作如ADC,作為輸入轉(zhuǎn)換完成后,可以再設(shè)為輸出或關(guān)閉AD。

有些外設(shè)是可以插拔的,如UART正??臻e時(shí)收發(fā)都是高,如外設(shè)關(guān)機(jī)或者移除,仍保持高電平則存在漏電,這種情況下需將引腳設(shè)為輸出低。重點(diǎn)關(guān)注工作中一種狀態(tài),工作結(jié)束或異常時(shí)要及時(shí)切換狀態(tài),避免漏電或者電平不匹配。

如果外設(shè)支持中斷盡量配置開啟,而不是定時(shí)輪詢通信。

3.2 電源管理

芯片內(nèi)部往往劃分不同的電源域,硬件外設(shè)也分不同單元的供電,暫時(shí)不使用的部分,可以立刻關(guān)閉電源域、時(shí)鐘域。在硬件成本允許或者功耗要求嚴(yán)苛的情況下,外設(shè)盡量獨(dú)立供電,這樣在非使用狀態(tài)下軟件控制斷電。需要注意關(guān)閉電源域后,某些端口可能需要重新配置避免漏電,如上節(jié)所提到關(guān)閉外設(shè)的供電后,外設(shè)的UART端口變?yōu)榈停骺氐腢ART端口就不能繼續(xù)維持高電平了。

3.3 系統(tǒng)時(shí)鐘

在正常的工作模式下,頻率越高功耗越高,完成同樣工作的時(shí)間越短,也可更快進(jìn)入休眠。如果單片機(jī)主要做控制,沒有復(fù)雜運(yùn)算,降頻能實(shí)現(xiàn)需求就往更低的頻率切換。如果有大量數(shù)學(xué)計(jì)算,可以空間換時(shí)間,或者先高頻運(yùn)行,盡快完成算法,運(yùn)行結(jié)束后動(dòng)態(tài)切換到低頻。

同等時(shí)鐘下,供電電壓低功耗也低;定時(shí)采樣、屏幕刷新也可在滿足需求的情況下盡量低頻處理。

3.4 待機(jī)底電流

查閱數(shù)據(jù)手冊(cè)或者SDK官方文檔,確定符合需求的、可被喚醒的最低功耗休眠模式,編寫一個(gè)測(cè)試用例,關(guān)閉所有可能耗電的外設(shè),進(jìn)入休眠的狀態(tài),驗(yàn)證極限情況下的功耗。

可能還需要硬件排除電路板上無法優(yōu)化的固有功耗,比如電壓轉(zhuǎn)換等固定消耗電流的部分,單純看主芯片的工作電流,是否達(dá)到數(shù)據(jù)手冊(cè)上對(duì)應(yīng)模式下的理論值。如果不滿足就需要繼續(xù)關(guān)閉一些復(fù)位后自動(dòng)開啟的功能,比如時(shí)鐘使能等;或者硬件工程師配合拆除可疑器件加快排查。這第一步非常關(guān)鍵,直接決定后期整機(jī)功耗能達(dá)到的最佳效果,同時(shí)在配置過程中,非常細(xì)微的認(rèn)識(shí)到哪些外設(shè)和配置影響功耗,如何影響,有多大的影響。

3.5 休眠與喚醒

休眠后有的是降頻工作,有的是假死(軟件未運(yùn)行,內(nèi)存可恢復(fù);有的不能恢復(fù),喚醒類似重啟效果),或者直接關(guān)機(jī)(RTC關(guān)機(jī)鬧鐘喚醒),不同的硬件方案和軟件需求,休眠模式的表現(xiàn)不同。單片機(jī)開發(fā),確認(rèn)其所有的休眠模式,以及對(duì)應(yīng)休眠模式下哪些時(shí)鐘源工作或休眠,結(jié)合具體應(yīng)用的需求,明確系統(tǒng)對(duì)喚醒源以及喚醒模式的需求,由此便確定了系統(tǒng)的基礎(chǔ)休眠模式。

注意有些芯片在休眠模式下僅少數(shù)端口維持喚醒的狀態(tài),只有特殊引腳才能喚醒,這需要硬件設(shè)計(jì)前考慮。

3.6 功耗評(píng)估

降低功耗是軟件和硬件協(xié)同工作才能解決的問題。比如AD采樣時(shí)候的分壓電阻,如果直接接了地,那會(huì)一直消耗電流;增加分壓電阻足夠大,表面上靜態(tài)電流小,但因?yàn)锳D內(nèi)阻分流,最終結(jié)果就存在較大偏差。如果通過一個(gè)IO口來控制其接地的方式,只在需要采樣的時(shí)候接地,采樣完成后懸浮或者拉高,就可以將靜態(tài)損耗降到最低,雖然成本加了不少,但實(shí)實(shí)在在的省電了。具體是否采用,主要是看功耗的標(biāo)準(zhǔn),如果略微可以接受持續(xù)的靜態(tài)損耗,就沒必要增加硬件成本。

系統(tǒng)實(shí)現(xiàn)最低功耗,有時(shí)需要在外設(shè)性能、硬件成本和功耗之間做妥協(xié),CPU是否可以降頻,硬件外設(shè)是否支持中斷喚醒等,這些都會(huì)影響最終的待機(jī)功耗,降低功耗是硬件和軟件配合的結(jié)果,軟件配置驅(qū)動(dòng),硬件逐個(gè)確認(rèn)電流是否在期望之內(nèi),這理論值定義就看原廠資料或者經(jīng)驗(yàn)了,以及與產(chǎn)品定義的待機(jī)時(shí)長(zhǎng)妥協(xié)解決。

4 業(yè)務(wù)軟件設(shè)計(jì)

低功耗從硬件上能夠解決一部分,但單純依靠硬件肯定是不行的,需要軟件的密切配合,才能達(dá)到最好的效果。以上是從硬件驅(qū)動(dòng)層面的,一般情況下都比較關(guān)注,但實(shí)際上軟件業(yè)務(wù)層的靈活性高,發(fā)掘低功耗的效果比硬件低功耗本身的效果更加顯著,通俗地講,底層硬件辛辛苦苦地優(yōu)化設(shè)計(jì)節(jié)省的效果,遠(yuǎn)遠(yuǎn)不如軟件設(shè)計(jì)得好的表現(xiàn)。

從軟件的業(yè)務(wù)邏輯、產(chǎn)品需求方面的設(shè)計(jì),在功耗方面更有意想不到的效果,軟件功耗優(yōu)化簡(jiǎn)單總結(jié)就是“能睡就睡”。

4.1 任務(wù)周期化

一個(gè)嵌入式產(chǎn)品包括很多子功能、子任務(wù),一個(gè)應(yīng)用是對(duì)若干服務(wù)的調(diào)用實(shí)現(xiàn)的。這里服務(wù)可以是硬件服務(wù),比如AD電壓采樣、UART串口通訊,也可以是軟件服務(wù),比如TCP/IP網(wǎng)絡(luò)通信等。簡(jiǎn)單的功能如CRC校驗(yàn),純軟件實(shí)現(xiàn),函數(shù)運(yùn)行立即獲得結(jié)果,對(duì)功耗無所謂影響;復(fù)雜的功能,盡量使用任務(wù)的方式來實(shí)現(xiàn),并不是特指操作系統(tǒng)的task或者thread,可以理解為一個(gè)流程,即一個(gè)子功能運(yùn)行的完整過程。一件事有始有終就可以根據(jù)需要循環(huán)反復(fù),周期運(yùn)行的任務(wù),明確運(yùn)行的起止時(shí)間點(diǎn),區(qū)分運(yùn)行與非運(yùn)行狀態(tài)就能更好的優(yōu)化,比如減少運(yùn)行持續(xù)時(shí)間或者其中大電流的時(shí)間段,在功耗方面效果比較明顯。

4.2 休眠自理與協(xié)調(diào)

將整個(gè)嵌入式軟件系統(tǒng)分成了很多周期性工作的小任務(wù),它們可能是交錯(cuò)的或者毫無關(guān)系并行的。從本質(zhì)上說,每個(gè)小任務(wù)只需關(guān)注自身的起止時(shí)間點(diǎn)。系統(tǒng)的功耗管理就是為每個(gè)任務(wù)的功耗進(jìn)行管理,整體在一個(gè)有效的協(xié)調(diào)方式下才能做到功耗最小?;谌蝿?wù)的功耗管理實(shí)際上分成兩個(gè)部分,微觀角度單任務(wù)自身的功耗管理,和宏觀角度多任務(wù)的休眠協(xié)調(diào)。

從微觀角度來看,一個(gè)任務(wù)能獨(dú)立完成自己的功能,任務(wù)中所有的步驟都是確定的,都是“自己說了算的”,對(duì)外界來說是“黑盒子”,對(duì)低功耗的要求,不外乎以下幾種情形:

(1)、任務(wù)執(zhí)行的過程中不允許休眠,因此任務(wù)的開頭和結(jié)尾處要設(shè)置標(biāo)志,告知協(xié)調(diào)系統(tǒng),“只要我不同意,就不允許系統(tǒng)休眠”。?(2)、任務(wù)執(zhí)行的過程中,某些階段允許休眠,某些階段不允許休眠;任務(wù)的執(zhí)行過程中,不同階段允許不同的休眠等級(jí)。?(3)、任務(wù)執(zhí)行的過程中,不在乎是否休眠。

三類任務(wù)同時(shí)存在于系統(tǒng)中,第一類任務(wù)是相當(dāng)霸道的,只要它在執(zhí)行,根本不允許休眠;第二類任務(wù)既完成了任務(wù),又兼顧了休眠;第三類任務(wù)基本上可當(dāng)做空氣無視。系統(tǒng)任務(wù)設(shè)計(jì)時(shí)應(yīng)盡可能編寫后兩類任務(wù),避免或者嘗試拆分第一類任務(wù)。

從宏觀角度來看,任意時(shí)刻可能有多個(gè)任務(wù)同時(shí)在執(zhí)行,每個(gè)任務(wù)對(duì)休眠的需求都是不同的。如果要設(shè)立一個(gè)協(xié)調(diào)機(jī)制,該怎么辦呢?每個(gè)任務(wù)按最低需求,隨時(shí)來休眠協(xié)調(diào)機(jī)構(gòu)簽到投票,表明自身當(dāng)前能夠容忍的最低功耗對(duì)應(yīng)的休眠等級(jí),休眠協(xié)調(diào)機(jī)構(gòu)的仲裁者定時(shí)或輪詢檢查所有任務(wù)的投票結(jié)果,找到最小的休眠等級(jí),類似水桶的最矮一環(huán)作為“共識(shí)”,然后進(jìn)入相應(yīng)的休眠等級(jí)。

如果有人投了“不休眠”的票,仲裁就只能放棄休眠。所以,每一個(gè)任務(wù)都應(yīng)該是一個(gè)負(fù)責(zé)的任務(wù),都應(yīng)該根據(jù)自己的不同步驟及時(shí)的更新自己對(duì)休眠的容忍度,從而保證投票能夠達(dá)成有意義的結(jié)果。

這種機(jī)制實(shí)現(xiàn)也很容易,比如

//微信公眾號(hào):嵌入式系統(tǒng)        uint16_t sleep_enable = 0xFFFF; //0xFFFF表示可以進(jìn)入休眠

uint16_t sleep_enable=0xFFFF,表示系統(tǒng)可以進(jìn)入休眠,每個(gè)任務(wù)獨(dú)立的操作相應(yīng)的一位,禁止休眠時(shí)清0,允許休眠則置1。休眠協(xié)調(diào)機(jī)制即定時(shí)查詢sleep_enable是否為0xFFFF,可以在main輪詢或RTOS的待機(jī)任務(wù)查詢,進(jìn)行休眠的進(jìn)出。

任務(wù)的劃分合理,盡量允許休眠,通過這種協(xié)商機(jī)制可以解決“能睡就睡”的問題。

4.3 任務(wù)等待合并

設(shè)備運(yùn)行中必然存在定時(shí)喚醒的任務(wù),多個(gè)定時(shí)任務(wù)隨機(jī)的在任意時(shí)刻喚醒工作,導(dǎo)致頻繁退出休眠。這種情況下,在最大允許延遲的情況下,多個(gè)任務(wù)可以在一次喚醒全部執(zhí)行。比如去超市買菜,肯定是一次把當(dāng)天需要的菜都買了,而不是每餐前都去買,一天到晚跑超市。在4G物聯(lián)網(wǎng)產(chǎn)品應(yīng)用,比如設(shè)備每3分鐘需要向服務(wù)器發(fā)送一個(gè)TCP/IP心跳包,同時(shí)傳感器每10秒采集一個(gè)數(shù)據(jù)也需要上報(bào)服務(wù)器,可以實(shí)現(xiàn)為數(shù)據(jù)緩存,等到3分鐘的定時(shí)器溢出上報(bào)時(shí),將采集的多組傳感器數(shù)據(jù)組合一并上報(bào),減少無線網(wǎng)絡(luò)模塊喚醒的次數(shù)。

4.4 及時(shí)止損

因?yàn)榄h(huán)境或外設(shè)組合不同,可能在某些時(shí)間段無法實(shí)現(xiàn)需求,或者結(jié)合當(dāng)前信息大概率無法實(shí)現(xiàn),或者硬件部分故障,軟件監(jiān)測(cè)到這種異常后,需要及時(shí)止損,減少不必要的消耗。例如GNSS衛(wèi)星定位,其屬性就是必須在開闊區(qū)域才能定位,如果設(shè)備開啟GNSS但發(fā)現(xiàn)信號(hào)很差,可初步判斷當(dāng)前位置可能在室內(nèi),即使繼續(xù)工作也不能定位,可以立刻關(guān)閉GNSS節(jié)省電量;當(dāng)然產(chǎn)品在需求層面需要考慮不定位的其他操作?;蛘咄ㄐ胖写_認(rèn)外設(shè)不存在或者損壞,就沒必要繼續(xù)供電定時(shí)交互,進(jìn)行異常報(bào)警即可。

4.5 需求層面

在需求定義時(shí),充分考慮某個(gè)任務(wù)或外設(shè)工作的起止要求,避免長(zhǎng)時(shí)間進(jìn)行無效工作。例如可以根據(jù)加速度傳感器判斷設(shè)備是否處于運(yùn)動(dòng)狀態(tài)在開啟監(jiān)控,或者通過紅外或聲控判斷有人接近才開啟工作。這種都是通過產(chǎn)品定義,在需求層面組合,滿足要求才喚醒工作,不滿足則及時(shí)停止進(jìn)入休眠,當(dāng)然也可能增加硬件成本。部分設(shè)備也可以考慮使用場(chǎng)地增加太陽(yáng)能充電板,開源節(jié)流。

關(guān)于軟件設(shè)計(jì)模式可以參考?嵌入式軟件的設(shè)計(jì)模式(上)、嵌入式軟件的設(shè)計(jì)模式(下)。

5 工欲善其事,必先利其器

在實(shí)踐低功耗系統(tǒng)設(shè)計(jì)前,必須要有一個(gè)有效的手段來檢測(cè)或觀察系統(tǒng)當(dāng)前的工作模式,可直觀知道系統(tǒng)什么時(shí)候工作,什么時(shí)候休眠,工作時(shí)長(zhǎng)和休眠時(shí)長(zhǎng),高精度的電流表必不可少,如果可以記錄電流-時(shí)間曲線更佳,針對(duì)電流曲線有針對(duì)性的優(yōu)化軟件流程或時(shí)間參數(shù),或者尋求外援,比如關(guān)注微信公眾號(hào)【嵌入式系統(tǒng)】。

 

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
PLR135/T2 1 Everlight Electronics Co Ltd Receiver, 16Mbps, Surface Mount,
暫無數(shù)據(jù) 查看
510BBA125M000BAGR 1 Silicon Laboratories Inc Oscillator, 0.1MHz Min, 250MHz Max, 125MHz Nom,
暫無數(shù)據(jù) 查看
ECS-2520S18-384-EN-TR 1 ECS International Inc HCMOS Output Clock Oscillator,

ECAD模型

下載ECAD模型
$1.86 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

嵌入式系統(tǒng)開發(fā)技術(shù)交流,軟件開發(fā)的思路與方案共享,行業(yè)資訊的分享。