1. 程式人生 > >如何設計低功耗嵌入式系統

如何設計低功耗嵌入式系統

功耗的問題本身是一個系統的問題,要想有效地降低整體功耗,不但需要在硬體上要充分考慮,而且在軟體的設計上更需要認真對待。一個真正高效的低功耗系統,軟硬體的相互配合和優化才是極為關鍵的。

1.選擇高整合度的晶片

2.考慮工作電流和休眠時的靜態電流.

3.在滿足產品需求的前提下,選擇配置較低的微控制器,較小的RAM/ROM、較低的ADC解析度、較低的ADC速率、較少的IO管腳都可以降低微控制器的整體功耗.

4.對於一個數字系統而言,其功耗大致滿足公式:P=CV2f。其中C為系統的負載電容,V為電源電壓,f為系統工作頻率[2]。功耗與電源電壓的平方成正比,因此電源電壓對系統的功耗影響最大,其次是工作頻率,再次就是負載電容。負載電容對設計人員而言,一般是不可控的,因此設計一個低功耗系統,在不影響系統性能的前提下,儘可能地降低電源的電壓和工作頻率。

5.對於大多數低功耗微控制器來說,工作頻率越低,意味著微控制器自身消耗的電流也越小,但不能認為頻率越低,系統整體功耗越小,因為工作頻率降低,意味著需要更長的處理時間,其他外圍電路消耗的電能就越多。目前有很多微控制器都允許有兩個或者兩個以上的時鐘源,低頻時鐘作為如UART、定時器等外同功能器件的時鐘源,高頻時鐘作為系統的主時鐘。在不需要高速執行的場合下,低頻時鐘也可以作為系統主時鐘使用。

6.對於需要在工作狀態和空閒狀態之間頻繁切換的應用,在考慮微控制器自身低功耗的同時,應該考慮切換時間和切換電流。

7.降低功耗從MCU選型開始,一開始選型的時候就應該考慮選擇低功耗的MCU。比如MSP430一類的為低功耗設計的CPU。強烈不建議使用51,一方面是因為51速度慢,另外一方面是因為51的IO口是有上拉電阻的,雖然當IO口為高電平時上拉電阻不費電,但是下拉電流的時候卻也有不小的功耗產生。

8.片外IC的電源最好都能由MCU的IO控制比如說我們常用的24C02,由於它是掉電記憶的,所以我們完全可以在它不工作的時候對它關電源以節約電流。還有比如常用的6116的SRAM我們完全可以用微控制器來控制它的片選埠來控制它的工作與休眠從而節約電流。

9.這招也是最毒辣的一招通常我們驅動一些LED器件,完全可以通過PWM來控制從而省略限流電阻。要知道當器件選定後它的內阻也就已經確定,而當電源電壓也確定的時候,就可以通過佔空比來確定器件上的電壓,從而在節約了限流電阻同時也節約了限流電阻上而的功耗,如果使用者使用的是電池,我們完全還可以不定期的對電池電壓進行檢測然後改變佔空比,從而恆定負載上面的電壓,達到電源的最大利用

一般來講,低功耗嵌入式系統的設計包括如下的幾個關鍵的步驟:

1.方案的確定:方案是設計的關鍵,是專案成功的基本條件。方案選擇錯了就等於一個人走錯了路,要麼達不到要求,要麼事倍功半,有時雖然滿足了設計的要求,但卻在時間、預算和成本等方面增加了更多的投入。例如在玩具行業,一般均選擇4位系列的MCU來進行產品的設計,若採用8位甚至16位MCU,則無論是在成本,功耗等方面都將是得不償失的選擇;

2.器件的選型:不同的晶片,不同的廠家其所提供的產品的特性均存在差異,特別是在功耗方面,有時差別很大,比如在4位M CU領域,EPSON、OKI等的公司的Microcontroller的功耗就比Samsung以及臺灣廠家的相同系列MCU要低幾倍甚至是一個數量級。因此確定了方案之後,如何選擇合理的器件和MCU,也是保證產品功耗能夠達到要求的關鍵;

3.硬體設計:我們知道外圍電路有時是整個系統的功耗“大戶”,比如ADC、背光、蜂鳴器、外部Memory、各種感測器等。因此如何合理設計外圍電路模組,合理使用和控制相關的外圍電路模組將是系統設計的重點。當然硬體的設計必須與軟體的設計相結合。

4.軟體的設計:軟體的設計是整個系統設計的重中之重,系統整體功耗的控制、外圍電路模組的使用、排程和切換等,均需要通過軟體的程式設計來實現。一般來講,低功耗軟體設計包括如下的幾個方面:

a)初始化:初始化是嵌入式系統設計的基本步驟,也是控制整個系統功耗的重要的步驟,何以如此呢?我們知道,一般來講在初始化部分,我們需要對整個系統進行配置,比如IO口的設定、外圍功能的配置等,而其中最容易被設計者所忽略的一步就是對在專案設計中未被使用MCU的功能的配置,有時正是這些資源的配置不合理,從而導致系統整體功耗出現意想不到的結果。

b)系統時鐘的控制:合理使用系統時鐘,會在功耗方面帶來意想不到的效果。我們知道,CPU的系統時鐘與CPU的功耗成正比,時鐘越快,其功耗也越大。因此,對於一些具有多個系統時鐘的Microcontroller,軟體的設計時必須根據系統需求來選擇合理的CPU時鐘,例如某些帶有外部Memory的運動手錶,在正帶的運動下。可以採用32768Hz作為其CPU時鐘,以獲得最低的整體功耗;而在訪問外部Memory時,由於外部Memory的訪問電流在幾個毫安甚至更高,而長時間的訪問勢必導致功耗的增加,因此為了有效地降低由於Memory訪問而導致的電流

的損耗,則可以切換到lMhz或更高的CPU時鐘下,以求在最短的時間裡完成對Memory的訪問。當然,在進行時鐘切換的時候必須進行全面的考慮,因為選擇較高的CPU時鐘,其MCU本身的功耗也會增加,因此我們必須要在各種因素下找到其平滑點。對於一個給定的系統,由於電壓是固定的,而且電池的容量也是固定的(設位WBatt),因此係統的功耗可以用下式來進行表示:

WBatt=  ∑lk*Tk  (k = 0. . . . . . n)

其中,Ik為系統在不同的狀態或條件下的電流,而Tk則為系統在此狀態或條件下所維持的時間。從上式可以看出,若要獲得最低的功耗,要求Ik*Tk必須最小,對於一些模式來講,時間有時是不可控制的,比如待機模式,此時只有更小的電流才能獲得最低的功耗,而反應在晶片上就是一款晶片的Power Down Current;相反,對於電流是固定的情況,則必須讓系統儘可能短地停留在該狀態下。

c) IO口的控制:IO口的控制主要集中在上拉、下拉電阻的選擇,待機狀態下的電平輸入輸出設定等。對於IO口的控制,必須記住一個原則:任何情況下,都必須儘可能保證在IO口上不存在電流的流動。電流即意味著能量的損耗,因此在軟體設計是必須根據實際的情況來合理配置IO口的狀態和其輸入輸出電平。

d) MCU工作模式的使用:對於大多數低功耗MCU,均存在多種工作模式,一般包括如下幾個執行模式:

i.正常執行模式:CPU和Clock均在工作,此時MCU處於最大功耗狀態;

ii.停機模式:CPU停止作,但系統時鐘仍在工作,此時MCU處於較低的功耗狀態;

iii.掉電模式:CPU和系統時鐘均停止工作,此時MCU處於最低功耗狀態;

e)外圍功能模組或電路模組的管理:大多數系統的外圍功能模組都是處於一種低頻度使用狀態,而且有時其功能的開啟是有條件的,因而合理的使用和排程外圍模組也是降低功耗的重要方法。例如在含有感測器的系統中,可以根據感測器資料增量的變化來提高或降低其開啟的頻率,就以環境溫度的檢測為例,由於環境的溫度變化是非常緩慢的一個過程,應此對其的檢測可以以一種相對較長的時間間隔來進行,如一分鐘或若干分鐘,若在某一次檢測出現有別於常規的溫度變化時,為了保證資料的可靠性,則可以在短時間內對其進行若干次的重複測量,以確認其溫度的變化時是否正常的還是由於其他的干擾所導致。

總之,低功耗的設計並非是一蹴而就的事情,需要綜合考慮各種可能的因素、條件和狀態,需要對各種細節進行認真的斟鑿和分析,對各種可能的方案和方法進行計算和分析,才可能取得較為滿意的效果。

降低功耗不光能夠大大的節約電能還能簡化電源部分的設計,甚至可以用於手持裝置上面使用,這些都已經越來越成為未來產品的設計方向了。