前言
隨著物聯網的興起,各式各樣的物聯網設備涌向市場,這些設備有一個共同的特點就是電池供電,電池的容量是有限的,如何在電池容量有限的情況下延長設備的使用時間呢?萬惡始于源頭,最好的辦法就是在設計中降低設備的功耗,設計又進一步分為軟體設計、硬體設計,
硬體設計
根據低功耗的產品需求,一般會有兩種方式,一種是平時處于斷電狀態,需要使用的時候上電即可,作業一會繼續斷電,另一種是一直處于待機狀態,使用的時候,“喚醒”產品,作業一會繼續“睡覺”,
低功耗產品一般是通過鋰電池或者干電池供電的,前者主要用于易于攜帶或者移動的產品,比如,智能手表,共享單車等等,干電池應用的比較多的場合是智能門鎖等,一般有3-4節干電池,用完電之后用戶可以更換,
選取低功耗器件
這點自不必說,誰不選誰傻x,不選坑自己~
開關機電路設計
對于平時斷電的設備,既然平時主要是斷電狀態,需要時開啟,開關機設計必然少不了,接下來介紹一種實用的開關機電路,(關于此電路的詳細決議,可參看:一種簡單可靠的開關機電路設計)

AD采集電路設計
電池供電,電量的提示就很重要,如果說智能鎖電池沒電了,用戶竟然一無所知,那不得罵娘,好好的一扇門,非要砸個窟窿才能進~
如果想要比較精確的采集電池電量,那一定是首選電量計,可是啊~設計者一切不得為了資本服務,為了節約成本,大家都懂得,有的廠家還是會采用簡單的AD采集,根據電池放電曲線大概估算電量,
說到這里,來看一看,電池的放電曲線是怎樣的呢?
電池供應商一般會提供給客戶某款電池放電曲線,下面是某廠家提供的2016紐扣電池的放電曲線,其他電池其實也類似,可以明顯的看到,新電池的“富裕電壓”其實降得是非常快的,然后會進入一段非常長的“平緩期”,電池電量放的差不多的時候,又開始進入“快速衰老”期,可以看到,電量跟電壓并沒有什么嚴格的比例關系,

既然沒有嚴格的比例關系,那如何根據電壓來“計算(估算)”電量呢,負責的廠家會真槍實彈的做放電測驗(誰知道廠家提供的是不是真實的呢),大量測驗后,大概得出一個演算法來模擬電壓與電量的“近似關系”,根據電壓大概估算電量,或者根據使用時間及次數,每次使用的功耗等,計算得出剩余電量,
所有這種都是“不太準確的”,但是只要能在徹底MCU“死掉”之前提醒用戶換電池或者充電即可,我提醒了,你沒換,那關我什么事~
言歸正傳,AD采集也需要做一些處理,如下圖,這個電路分情況,在斷電的設備情況下,這個電路是沒問題的,但可能不是最好的,要注意,不能直接接在電池端,要接在受控的電源端,如果直接接在電池端,這兩個電阻會一直耗電,

再來看一個AD采集的電路設計,如下圖,相比于上面的設計,這個設計有什么好處呢?這個設計電壓是可控制的,那只需要在采集的時候開啟就可以了,采集完MCU控制關閉,相比于上面的電路,雖然多了幾個器件,但在不需要的時候可以隨時關閉,能夠有效降低功耗,這種設計在不斷電的設備中是要明顯優于第一種設計的,因為電池是有一段“平穩期”的,1秒采集一次和1天采集一次可能都沒有區別,所以降低采集頻率,不需要的時候,把電源斷開即可,很實用,

模塊電源加控制
這點類似于上面的AD采集帶電源控制,稍微改一下即可,物聯網設計中可能會用到各種各樣的模組,資訊上報不頻繁的情況下,可能1天幾次或者幾天1次,這時候可以考慮,是不是可以不用的時候把電源斷掉,當然要考慮上電重新連接所花費的功耗與休眠狀態下所花費的功耗,二者取其優,功耗差別不大的情況下,我覺得休眠是好的選擇,畢竟頻繁開關機會對模組有影響,

避免IO漏電
“漏電”是什么意思呢?漏水大家一定熟悉吧,容器開了個口,水往低處流嘛,一樣的道理,MCU與模組或者與其他芯片之間免不了要進行通訊,拿最基本的串口來說,下面表格的連接方式通訊肯定沒問題....
但是考慮一下,如果一個MCU不需要作業,下電以降低功耗之后會發生什么事情?
主MCU的RX一般會保持高電平以等待串口下降沿的到來,直連之后,這個高電平便會“漏電”到你下電的MCU,引起功耗的增大,設計中要避免這種IO直連的設計,
| MCU1 | MCU2 |
|---|---|
| TX | RX |
| RX | TX |
| GND | GND |
以上這種情況,可以采用信號隔離的方式處理,方法也很多種,簡單介紹一種:

不需要作業時候,隔離芯片是沒有電的,需要使用的時候,供電即可,
硬體設計小結
關于硬體的設計是方方面面的,大家伙一定要注意硬體設計上的低功耗考慮,成熟的電路也越累越多,小飛哥列舉的不過皮毛,歡迎大家一起交流更多好的方案與考慮,
軟體設計
低功耗從硬體上能夠解決一部分,但單純依靠硬體肯定是不行的,需要軟體的密切配合,才能達到最好的效果,
軟體設計通常需要考慮一下幾種情況
GPIO引腳的模式配置
對于GPIO的模式,就拿STM32來說,模式多達8種,4種輸入,4種輸出,那應該配置為什么模式,系統功耗才會比較低呢?
僅討論產品休眠模式下,GPIO的配置,正常作業按照需要該怎么配置就怎么配置就可以了~
對于沒有用到的GPIO,需要配置為模擬輸入狀態

從cubemx中,可以看到有個選項,意思是,為了省電,不用的GPIO可以配置為模擬輸入模式,

前面說了模式那么多,為什么選擇模擬輸入模式呢?
模擬輸入模式:信號從左邊編號1的埠進入,從右邊編號2的一端直接進入ADC模塊,這里我們看到所有的上拉、下拉電阻和施密特觸發器,均處于斷開狀態,因此“輸入資料暫存器”將不能反映埠上的電平狀態,也就是說,模擬輸入配置下,CPU不能在“輸入資料暫存器”上讀到有效的資料,

用到的IO同樣需要關注,先來看一個由于IO配置不正確導致的功耗問題,
休眠模式一般能通過專門設計的喚醒引腳或者中斷觸發喚醒,例如,通過串口中斷喚醒MCU,進而通訊獲取資料等,由于串口協議起始位是低電平,所有MCU的RX要保持高電平才能更好地檢測到資料,但如果僅僅是設定了輸入模式,恐怕還不夠,對比一下下面的配置結果:
僅僅配置了輸入模式,硬體設計無上拉,軟體未配置上拉,結果電流測出來有29uA,而正確的電流應該在0.7uA以下

再來看配置為上拉輸入之后,電流降為0.63uA,恢復正常,

對于比較簡單的MCU來說,GPIO模式可能比較少,并沒有模擬輸入的配置,設定下拉配置也沒有,只有上拉,那也不用慌,對于此類MCU,可以配置為輸入上拉或者輸出低模式,輸入上拉肯定沒問題的,但是配置為輸出低的時候要注意了,看下圖:

此時若配置為了輸出低,會產生什么結果?WC,竟然多了VCC/R6的消耗,很明顯,此時配置輸出低是不合適的,若外部無連接,配置輸出低是沒問題的,
關于GPIO的配置還有很多,要參考具體的外設進行適當的配置,
關掉不需要的外設
在休眠狀態下,除了保留必要的功能外,應該關掉所有不需要的外設的時鐘源,避免造成額外的功耗消耗,




降低時鐘頻率
時鐘頻率越高,必然會帶來更高的能量消耗,能量守恒嘛,干活快,消耗的能量肯定大,可以降到夠MCU“活著”就行了,拿出大學考試,“60分及格,多1分浪費”的精神,

在作業中還要學會頻率的切換,比如有大資料需要運算,運算的時間要盡可能短以便及時回應,此時,就必須把頻率切換到越高越好,但是計算完,比如是要顯示出來計算結果,那刷屏速率,能滿足即可,過高的頻率反而會增加功耗,
下面是STM32F103的一個功耗表,可以看到,不同頻率下的功耗差異還是很大的,

模式切換

此圖與下面描述無關
MCU是設定了好幾個作業模式的,在合適的模式下做合適的事情,是低功耗設計的一大特點,
來看看STM32的幾個模式及功耗:



可以看出,頻率相同下,模式不同,功耗差異巨大,同一模式下,頻率不同,功耗也有很大不同,
以上介紹的僅僅是比較容易注意到的點,低功耗設計涉及的方面還是很多的,小飛哥僅僅列舉了一些,歡迎一起討論更多關于低功耗產品的設計方案,
進群交流
歡迎添加小飛哥好友,即可進群交流,所有資訊,第一時間獲取,還有很多優秀的設計者等待著你的加入哦!


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293435.html
標籤:其他
上一篇:計算機網路概述(上)
