低功耗是MCU的一項非常重要的指標,比如某些可穿戴的設備,,其攜帶的電量有限,,如果整個電路消耗的電量特別大的話,就會經常出現(xiàn)電量不足的情況,,影響用戶體驗,。
平時我們在做產品的時候,基本的功能實現(xiàn)很簡單,,但只要涉及低功耗的問題就比較棘手了,,比如某些可以低到微安級的MCU,而自己設計的低功耗怎么測都是毫安級的,,電流竟然能夠高出標準幾百到上千倍,,遇到這種情況千萬不要怕,只要認真你就贏了,。下邊咱們仔細分析一下這其中的原因。
第一條:掐斷外設命脈——關閉外設時鐘
先說最直觀的,,也是工程師都比較注意的方面,,就是關閉MCU的外設時鐘,對于現(xiàn)在市面上出現(xiàn)的大多數的MCU,,其外設模塊都對應著一個時鐘開關,。只需要打開這個外設的時鐘,就可以正常的使用這個外設了,,當然,,此外設也就會產生相應的功耗;反之,如果想要讓這個外設不產生功耗,,只需關閉它的時鐘即可,。
第二條:讓工作節(jié)奏慢下來——時鐘不要倍頻
除了外設模塊功率消耗之外,還有一個功耗大戶需要注意一下,,這就是PLL和FLL模塊,。PLL和FLL主要是用來對原始的時鐘信號進行倍頻操作,從而提高系統(tǒng)的整體時鐘,,相應的,,其功耗也會被提上去。所以在進入低功耗之前,,需要切換是種模式,,旁路掉PLL和FLL模塊,,從而盡可能的降低MCU的功耗,等到MCU喚醒之后再把時鐘切換回去,。
第三條:圍堵涓涓細流——注意I/O口的電平狀態(tài)
如果認為只要關閉外設時鐘就能夠保證外設不再耗電,,那么你就太天真了。如果IO口沒有做好處理的話,,它就會在暗地里偷走功耗,,而你卻渾然不知。具體原因是這樣的,,一般的IO的內部或者外部都會有上下拉電阻,,舉個例子,如下圖所示,,假如某個IO口有個10KΩ的上拉電阻,,把引腳拉到3.3V,然而當MCU進入低功耗模式的時候,,此IO口被設置成輸出低電平,,根據歐姆定律,此引腳就會消耗3.3V/10K=0.33mA的電流,,假如有四,、五個這樣的IO口,那么幾個mA就貼進去了,,太可惜了,。所以在進入低功耗之前,請逐個檢查IO口的狀態(tài):
如果此IO口帶上拉,,請設置為高電平輸出或者高阻態(tài)輸入;
如果此IO口帶下拉,,請設置為低電平輸出或者高阻態(tài)輸入;
總之一句話,不要把上好的電流浪費在產生熱量的功能上,,咱可不靠這點溫度去暖手,。
第四條:睦鄰友好合作——注意I/O與外設IC的統(tǒng)籌
IO口的上下拉電阻消耗電流這一因素相對比較明顯,下邊咱來說一個不明顯的因素:IO口與外部IC相連時的電流消耗,。假如某個IO口自帶上拉,,而此與IO相連的IC引腳偏偏是自帶下拉的,那么無論這個引腳處于什么樣的電平輸出,,都不可避免的產生一定的電流消耗,。所以凡是遇見這一類的情況,首先需要閱讀外設IC的手冊,,確定好此引腳的的狀態(tài),,做到心中有數;然后在控制MCU睡眠之前,設置好MCU的IO口的上下拉模式及輸入輸出狀態(tài),要保證一絲兒電流都不要被它消耗掉,。
第五條:斷開調試器連接,,不要被假象所迷惑
還有一類比較奇特,檢測出來的電流消耗很大,,可實際結果是自己杞人憂天,,什么原因呢?是因為在測試功耗的時候MCU還連接著調試器呢!這時候大部分電流就會被調試器給擄走,平白無故的讓工程師產生極度郁悶的心情,。所以在測低功耗的時候,,一定不要連接調試器,更不能邊調試邊測電流,。
總結
MCU的低功耗設計是一個細致活,,要養(yǎng)成良好的習慣,做到每添加一個功能都要重新驗證一下低功耗是否符合要求,,這樣就可以隨時隨地干掉消耗功率的因素,。如果把所有功能都設計好了才去考慮低功耗的問題,一個不小心,,就可能要更改程序的架構——即便如此也不一定能把功耗給徹底降下去,。