及早規(guī)劃可以在優(yōu)化系統(tǒng)實(shí)現(xiàn)低功耗的同時(shí),減少對返工和/或代碼重新編寫的需求。這些考量包括:
1. 應(yīng)用層面的低功耗設(shè)計(jì);
2. 了解功耗與性能之間的利弊權(quán)衡;
3. 使用可優(yōu)化功耗的軟硬件技巧。
嵌入式應(yīng)用中的功耗因素
任何給定系統(tǒng)中的功耗都可分為兩大類:
i. 靜態(tài)功耗:靜態(tài)功耗指器件在未運(yùn)行代碼、等待特定事件觸發(fā)系統(tǒng)喚醒至工作模式時(shí)所消耗的電源。靜態(tài)功耗的主要來源包括系統(tǒng)中流過的漏電流、模擬偏差、不能關(guān)閉的模塊以及運(yùn)行RTC、看門狗定時(shí)器和中斷控制器等獨(dú)立代碼的模塊。該電流與器件的工作電壓成正比。工作電壓越高,漏電流就越大;
ii. 動態(tài)功耗:系統(tǒng)處于工作狀態(tài),CPU執(zhí)行程序代碼時(shí)所消耗的電源稱為動態(tài)功耗。系統(tǒng)的動態(tài)電流取決于工作頻率、電壓以及有關(guān)總線與電路設(shè)計(jì)的寄生電容。計(jì)算方法為:
P = V2 * f * C
V為電壓、f為工作頻率、C為輸出端的寄生電容
靜態(tài)與動態(tài)功耗的圖形表達(dá):
晶體管中的動態(tài)功耗發(fā)生在電壓轉(zhuǎn)換過程中。在這些轉(zhuǎn)換過程中,CMOS對會進(jìn)入某個(gè)狀態(tài),在該狀態(tài)下CMOS對的器件均部分開啟,充當(dāng)電阻器,從而可形成一種分壓器電路。這種虛擬分壓器電路消耗的電源要比所定義邏輯電平下的漏電流高很多。這就是為什么動態(tài)功耗與電路中的開關(guān)頻率成正比的原因所在。因此在定義低功耗嵌入式系統(tǒng)時(shí),它是最根本的注意事項(xiàng)之一,即要盡量減少系統(tǒng)的開關(guān)事件。
低功耗電池供電嵌入式應(yīng)用的設(shè)計(jì)考量
1. 硬件考量:
a. 電池類型:
在嵌入式應(yīng)用中主要有以下類型的電池:
i. )標(biāo)準(zhǔn)堿性電池
iii. )可充電電池: 可充電堿性電池,鋰離子電池
iii. )鈕扣電池
對于各種廣泛低功耗嵌入式應(yīng)用而言,為系統(tǒng)充電不是合理的使用案例模型。這里無需為這些應(yīng)用使用可充電電池。我們來比較一下另外兩種在低功耗應(yīng)用中有用的電池以及在為設(shè)計(jì)選擇電池時(shí)需考慮的因素。
標(biāo)準(zhǔn)堿性電池:標(biāo)準(zhǔn)AA電池的典型容量大約為1500mAh,不僅可輕松提供數(shù)百mA的峰值電流,而且還能夠以50mA的恒定速率放盡電流。
堿性電池能為應(yīng)用提供高峰值電流,因此系統(tǒng)能夠在并列使用其全部專用外設(shè)(定時(shí)器與通信模塊等)的同時(shí),在其最高時(shí)鐘頻率下運(yùn)行,從而可在盡快完成各項(xiàng)任務(wù)后,快速進(jìn)入低功耗工作模式。
鈕扣電池:鈕扣電池具有極高的內(nèi)部電阻,因此不能承受高峰值電流。在應(yīng)用超過20mA的峰值電流時(shí),即便持續(xù)時(shí)間很短,其有效電壓也會大幅下降。因此對于使用鈕扣電池供電的設(shè)計(jì)而言,強(qiáng)烈建議設(shè)計(jì)使用能在2V或以下電壓下工作的組件。微控制器的掉電電壓應(yīng)低至能避免在鈕扣電池提供高峰值電流時(shí)系統(tǒng)出現(xiàn)意外復(fù)位的水平。
此外,我們還需要采取預(yù)防措施來降低系統(tǒng)所需的峰值電流。降低峰值電流的途徑包括:
● 降低CPU時(shí)鐘頻率
● 通過隨時(shí)分配負(fù)載,避免一次性啟用所有內(nèi)部模塊
● 在外部組件及內(nèi)部模塊未使用時(shí),減少對它們的供電
b. 設(shè)置正確的微控制器:
要讓低功耗應(yīng)用中的靜態(tài)功耗和動態(tài)功耗保持最低,最重要的是選擇具有所需外設(shè)集的微控制器,其可在所需電源模式下工作。根據(jù)需要,系統(tǒng)設(shè)計(jì)人員可選擇合適的微控制器,該微控制器支持低功耗模式下其應(yīng)用所需的外設(shè)集。
以需要LCD較長時(shí)間工作的應(yīng)用為例。通過選擇可在低功耗模式下運(yùn)行該LCD的微控制器,開發(fā)人員可最大限度降低功耗。這類微控制器的典型實(shí)例就是賽普拉斯的PSoC 4,其可讓LCD顯示器以僅3uA的流耗進(jìn)入深度睡眠模式。復(fù)雜應(yīng)用的情況類似,我們需要進(jìn)行利弊權(quán)衡,確定能以最低平均功耗完成每項(xiàng)任務(wù)的適當(dāng)微控制器。
[page]
c. 選擇合適的無源組件:
上拉電阻器和下拉電阻器是支持接口開關(guān)及I2C器件等的常用組件。有時(shí)在低功耗設(shè)計(jì)中,這些上拉及下拉電阻器消耗的電源比系統(tǒng)其它部分還大。要降低其功耗,需要使用更大的電阻值。這樣可降低流經(jīng)它們的電流量。但它同時(shí)會增大RC時(shí)間常數(shù),因此會降低系統(tǒng)對高頻率信號的響應(yīng)能力。
例如,為I2C線路使用高阻值上拉電阻器會降低I2C通信的速度,因?yàn)樵龃罅薎2C線路的壓擺率。因此這些電阻器值可決定影響最終設(shè)計(jì)的各種因素之間的權(quán)衡取舍。
同樣,在為設(shè)計(jì)選擇電容器時(shí),應(yīng)避免電解電容器,因?yàn)樗鼈兙哂袠O高的漏電流。薄膜電容器和陶瓷電容器能以合理的成本提供超低的漏電流,可考慮用于低功耗系統(tǒng)設(shè)計(jì)。
d. 審慎使用I/O:
避免在系統(tǒng)中隨機(jī)分配控制器I/O引腳。如果引腳隨機(jī)分布在不同端口,則需要對每個(gè)端口單獨(dú)處理,這樣會增加控制它們所需的寄存器寫入數(shù)。為解決這一問題,可以按最小端口數(shù)對輸入引腳和輸出引腳進(jìn)行分組,從而實(shí)現(xiàn)以最小的寄存器寫入數(shù)完成讀取與寫入。
在引腳用于驅(qū)動LED和其它類似負(fù)載的地方,應(yīng)使用引腳的開漏驅(qū)動模式,這些負(fù)載的一端固定在VDD或接地上。這種驅(qū)動模式可降低通過I/O引腳的漏電流,因此可降低功耗。
e. 選擇正確的外設(shè):
在系統(tǒng)設(shè)計(jì)中應(yīng)使用支持低功耗模式、在工作模式下支持低功耗的外設(shè)組件,以降低設(shè)計(jì)的總體功耗。
f. 審慎使用系統(tǒng)時(shí)鐘:
定義系統(tǒng)時(shí)鐘的行為有助于降低系統(tǒng)功耗。遵循通用系統(tǒng)時(shí)鐘相關(guān)設(shè)計(jì)實(shí)踐可幫助在幾乎每個(gè)系統(tǒng)中實(shí)現(xiàn)低功耗。
● 在系統(tǒng)中使用低頻率時(shí)鐘降低動態(tài)功耗。
● 在執(zhí)行計(jì)算密集型任務(wù)時(shí)提升系統(tǒng)時(shí)鐘,可通過縮短完成任務(wù)的時(shí)間,降低平均功耗。
● 優(yōu)先使用系統(tǒng)時(shí)鐘,而非外部時(shí)鐘。
● 在CPU等待通信傳輸完成時(shí),應(yīng)關(guān)閉CPU,只開啟通信模塊的時(shí)鐘。在完成該任務(wù)后,它可獲得一個(gè)中斷信號,恢復(fù)代碼執(zhí)行。
g. 電流門控:
一般情況下,熱敏電阻等無源傳感器工作在分壓器模式下,因此一直都在消耗系統(tǒng)電流。為降低這種情況下的功耗,我們可以在通過采樣傳感器網(wǎng)絡(luò)獲得相關(guān)數(shù)據(jù)之前為其提供電源,并在數(shù)據(jù)采樣完成后切斷電源。這在傳感器需要定期讀取的情況下才有用。
但當(dāng)傳感器必須保持工作狀態(tài)才能檢測環(huán)境中的異常現(xiàn)象時(shí),CPU可在整個(gè)傳感過程中保持低功耗模式。CPU一旦收到傳感器的中斷/數(shù)據(jù)信息,就會恢復(fù)工作模式。類似邏輯可用于讀取開關(guān)狀態(tài),以判斷它是處于開啟還是關(guān)閉狀態(tài)。
2. 固件考量:
a. 減少函數(shù)調(diào)用:
每次函數(shù)調(diào)用都將涉及多重冗余運(yùn)算,比如堆棧上的添加與取出運(yùn)算(用于重新加載程序的計(jì)數(shù)器和寄存器)。這些運(yùn)算的每一次工作都會耗用多個(gè)時(shí)鐘周期,應(yīng)盡量避免。對于簡短函數(shù)而言,函數(shù)調(diào)用可采用能夠布置內(nèi)聯(lián)代碼的宏命令替換。這有助于減少CPU加載,進(jìn)而降低相同運(yùn)算所需的功耗。然而,每種方法都有其自身的優(yōu)缺點(diǎn)。宏命令需要更大的存儲器,這對寫入高密度固件來說是一個(gè)問題,因?yàn)樗赡軙龃笙到y(tǒng)成本。
b. 為頻繁重復(fù)的輸入值使用查找表:
通常會有一部分輸入值的使用頻率大于其它輸入值。通過創(chuàng)建與這些輸入值對應(yīng)的查找表,在遇到這些輸入其中之一時(shí),可縮短計(jì)算時(shí)間,進(jìn)而可降低功耗。
這種方法在當(dāng)完成計(jì)算后需要查找值的應(yīng)用中比較容易看到,比如電機(jī)應(yīng)用中角度正弦與余弦的計(jì)算。在這類應(yīng)用中,會有一系列頻繁遇到的值(相比之下,其它值遇到的頻率較低)。正弦值或余弦值的計(jì)算需要較長的時(shí)間,因此對于該頻繁重復(fù)的角度而言,其正弦及余弦的預(yù)計(jì)算值可存儲在查找表中。每次遇到這些角度中的一種時(shí),處理器便可查找該表,用在此找到的值進(jìn)行替代,不必計(jì)算。
c. 使用中斷,無需輪詢:
在復(fù)雜的嵌入式系統(tǒng)中,CPU會花大部分時(shí)間來等待某項(xiàng)工作的完成,然后再進(jìn)入下一個(gè)步驟。當(dāng)前提供的大多數(shù)SoC都提供能在無需CPU干預(yù)的情況下完成大多數(shù)任務(wù)的硬件模塊。在需要CPU干預(yù)時(shí),它們會以中斷的方式發(fā)出信號,喚醒CPU。例如一般在采樣數(shù)據(jù)完成后,ADC會發(fā)出中斷信號。這樣就無需輪詢來自ADC的數(shù)據(jù)。因此CPU可以進(jìn)入低功耗模式,只在數(shù)據(jù)準(zhǔn)備處理時(shí)喚醒。
d. 自適應(yīng)時(shí)鐘門控和電源門控
一個(gè)典型的系統(tǒng)會使用微控制器的多個(gè)模塊,但在任何給定時(shí)間點(diǎn)上,不會同時(shí)使用所有的模塊。因此可以對這些模塊的時(shí)鐘進(jìn)行門控,降低這些模塊的動態(tài)功耗,從而節(jié)省電源。此外,這也有助于降低峰值電流需求,這是鈕扣電池供電設(shè)計(jì)的重要考慮因素。PSoC系列器件允許單獨(dú)禁用未使用的模塊。
這個(gè)部分我們討論了創(chuàng)建低功耗嵌入式系統(tǒng)的常見設(shè)計(jì)考量。在第2部分中,我們不僅將討論低功耗應(yīng)用的實(shí)例、低功耗與系統(tǒng)性能的權(quán)衡取舍,而且還將提供使用上述技巧的低功耗系統(tǒng)設(shè)計(jì)實(shí)例。
相關(guān)閱讀:
黑客比你更懂嵌入式保護(hù)!怎么防范?
技術(shù)詳解:利用嵌入式降低電池功耗
技術(shù)經(jīng)驗(yàn):做嵌入式硬件設(shè)計(jì)需具備的基本功