季海濤,孫孟玉,張?jiān)贫耍瑥埛济?,黃炳潔
(1.上海電力大學(xué),上海 200090;2.江蘇林洋能源股份有限公司,江蘇 南通 226200)
在綠色發(fā)展和可持續(xù)發(fā)展的背景下,隨著嵌入式設(shè)備的不斷發(fā)展,嵌入式設(shè)備的功能不斷增加,所用資源越來越豐富,隨之而來的功耗也在不斷增加。智能電表在電力系統(tǒng)中發(fā)揮著重要的作用,且使用廣泛、數(shù)量巨大、功能豐富,不得不考慮智能電表在使用過程中的功耗問題。
文獻(xiàn)[1]簡單介紹了集成電路工藝、硬件和軟件對嵌入式系統(tǒng)功耗的影響并給出了相應(yīng)的建議。文獻(xiàn)[2]利用超時(shí)和斷續(xù)中斷配合硬件定時(shí)器充分利用CPU資源,此外將睡眠函數(shù)放在循環(huán)中,更多的進(jìn)入睡眠降低功耗。文獻(xiàn)[3]中溫度采集系統(tǒng),任務(wù)較為單一,采集一次之后就立馬切換到低功耗模式,最大程度上降低系統(tǒng)功耗,但是可復(fù)制性不高。文獻(xiàn)[4]提出一種新的自適應(yīng)DPM(Dynamic Power Management)預(yù)測策略, 在面對長空閑和短空閑時(shí), 系統(tǒng)都能自適應(yīng)調(diào)整, 提高了預(yù)測準(zhǔn)確度, 從而降低了功耗。文獻(xiàn)[5]提出了低速模式、運(yùn)行模式等切換來降低功耗同時(shí)基于動(dòng)態(tài)電壓頻率調(diào)節(jié)(Dynamic voltage frequency scaling,DVFS)策略使用累計(jì)迭代來預(yù)測負(fù)載信息,進(jìn)而動(dòng)態(tài)改變電壓頻率來降低功耗。文獻(xiàn)[6]提出了BP-DVFS策略,基于神經(jīng)網(wǎng)絡(luò)在預(yù)測下一階段的CPU利用率,但此方法應(yīng)用在嵌入式系統(tǒng)中消耗CPU資源太大,不太合適。智能電表中采用低功耗技術(shù)不僅可以電表中的能量損耗,節(jié)能環(huán)保,還可以延長智能電表壽命使得免于頻繁更換[7],進(jìn)而降低智能電表的使用成本。
在CMOS電路中,主要的功耗來源于兩部分:動(dòng)態(tài)功耗和靜態(tài)功耗,其中動(dòng)態(tài)功耗又分為開關(guān)功耗和短路功耗,短路功耗通常是開關(guān)功耗的1/20[8-10]。
系統(tǒng)整體功耗P計(jì)算公式為式(1):
P=Pdynamic+Pstatic
(1)
其中動(dòng)態(tài)功耗的計(jì)算公式(2)為:
Pdynamic=αCV2f
(2)
其中靜態(tài)功耗的計(jì)算公式(3)為:
Pstatic=IstaticV
(3)
其中:Pdynamic為動(dòng)態(tài)功耗;Pstatic為靜態(tài)功耗;C表示電容;α為電路翻轉(zhuǎn)因子;V表示電壓;f為時(shí)鐘頻率;Istatic表示靜態(tài)電流之和。
動(dòng)態(tài)功耗在CMOS電路中起決定性作用,它占了全部功耗的一半以上。由上述的分析可知除了一些工藝和封裝上的設(shè)計(jì)和改進(jìn),改變電壓和頻率對降低功耗來說尤為明顯。該文一方面改進(jìn)了工作模式的切換方法,讓系統(tǒng)更長時(shí)間的運(yùn)行在低功耗模式,另一方面降低了芯片的電壓并采用頻率調(diào)節(jié)的方法來進(jìn)一步降低系統(tǒng)功耗。
根據(jù)任務(wù)的優(yōu)先級不同,將任務(wù)分成四種任務(wù)屬性,優(yōu)先級從高到低分別是:偶發(fā)任務(wù),周期任務(wù),延期任務(wù)和空閑任務(wù)。根據(jù)功耗的大小不同,將處理器設(shè)置了三種工作模式,功耗由高到低分別是:正常(Active)模式,空閑(Idle)模式,睡眠(Sleep)模式。根據(jù)預(yù)測的空閑任務(wù)的時(shí)間長短,系統(tǒng)會(huì)選擇符合條件的工作模式來降低功耗。在正常模式下,系統(tǒng)運(yùn)行在高速時(shí)鐘下,所有數(shù)字和模擬外設(shè)都高速運(yùn)行;在空閑模式下,降低降低工作頻率,通過條件判定是否進(jìn)入下一模式;在睡眠模式下,芯片自動(dòng)關(guān)閉CPU時(shí)鐘,F(xiàn)lash進(jìn)入STOP模式,硬件自動(dòng)關(guān)閉RCHF、PLL、XTHF、TRNG,SVD、比較器、ADC仍可以在 SLEEP 模式下工作。數(shù)字外設(shè)模塊可以使用RCMF、XTLF、RCLP等低速時(shí)鐘繼續(xù)工作,需要恢復(fù)信號使其重新運(yùn)行。工作模式切換見下圖1。
圖1 工作模式切換圖
根據(jù)空閑任務(wù)的時(shí)間長短從而進(jìn)入不同的工作模式,實(shí)現(xiàn)工作模式的動(dòng)態(tài)切換,方案的具體實(shí)現(xiàn)步驟如下:
(1)配置各個(gè)任務(wù)模塊的運(yùn)行模式和優(yōu)先級;
(2)當(dāng)用戶任務(wù)模塊在某一時(shí)刻因等待事件或延時(shí)而被掛起或阻塞時(shí),空閑任務(wù)立刻獲取CPU資源;
(3)空閑任務(wù)開始執(zhí)行后,立即降低CPU運(yùn)行頻率;
(4)然后空閑任務(wù)判斷是否具有進(jìn)一步降低功耗的條件使CPU睡眠。計(jì)算每個(gè)用戶任務(wù)當(dāng)前預(yù)計(jì)阻塞的時(shí)長,周期任務(wù)和延期任務(wù)取剩余延時(shí)時(shí)間,偶發(fā)任務(wù)取32位最大值,然后取其中最小值作為睡眠時(shí)間;
(5)睡眠時(shí)間小于限定的最小值,則CPU不進(jìn)入睡眠;計(jì)算的睡眠時(shí)間值介于最小值和最大值之間,則CPU取計(jì)算時(shí)間進(jìn)入睡眠模式;睡眠時(shí)間大于限定的最大值則取最大值,則CPU進(jìn)入睡眠模式;
(6) 將睡眠時(shí)間值配置到定時(shí)器。該定時(shí)器計(jì)時(shí)到后將觸發(fā)中斷喚醒CPU。關(guān)閉任務(wù)調(diào)度器,維持部分外設(shè)正常工作,并使CPU進(jìn)入睡眠模式,等待中斷喚醒;
(7)定時(shí)器計(jì)時(shí)到時(shí)喚醒后,CPU退出低功耗狀態(tài),打開任務(wù)調(diào)度器,恢復(fù)任務(wù)調(diào)度。退出空閑任務(wù)前恢復(fù)CPU全速運(yùn)行頻率;
(8)停電、按鍵、外部通信等突發(fā)事件使用的外設(shè)配置到CPU的喚醒源中,在CPU睡眠期間當(dāng)事件發(fā)生時(shí),可立即喚醒CPU,確保系統(tǒng)的實(shí)時(shí)性不受睡眠的影響。
實(shí)施步驟流程圖見下圖2。
圖2 實(shí)施步驟流程圖
動(dòng)態(tài)電壓頻率調(diào)節(jié)DVFS是目前嵌入式設(shè)備降低功耗中使用最廣泛,行之有效的著名方法。對于嵌入式設(shè)備來說,處理速度不像高性能處理器那么重要,只要在規(guī)定的時(shí)間完成處理即可, 動(dòng)態(tài)電壓頻率調(diào)節(jié)可以有效的降低功耗且保證嵌入式設(shè)備的性能[11-12]。
典型DVFS系統(tǒng)工作流程如下[13-14]:
(1)獲取與系統(tǒng)負(fù)載有關(guān)的信號,計(jì)算當(dāng)前系統(tǒng)負(fù)載;
(2)根據(jù)當(dāng)前系統(tǒng)負(fù)載,預(yù)測系統(tǒng)之后所需的計(jì)算性能;
(3)將預(yù)測的性能轉(zhuǎn)換成需要的頻率,之后進(jìn)行頻率和電壓的調(diào)整。
文獻(xiàn)[15]提出了使用DVFS技術(shù)后所節(jié)約的功耗為式(4):
EDVFS=Psysf1t1+Pidlef1tdelay-Psysf2(t1+tdelay)
(4)
EDVFS=(Psysf1-Psysf2)t1-(Psysf2-Pidlef1)tdelay
(5)
其中:Psysf1是頻率在f1下的系統(tǒng)功耗;Psysf2是頻率在f2下的系統(tǒng)功耗;Pidlef1是空閑任務(wù)產(chǎn)生的功耗;t1是芯片處于高速運(yùn)行的時(shí)間;tdelay是芯片處于空閑狀態(tài)運(yùn)行的時(shí)間。
將Psysf1分成CPU在f1下的功耗Pcf1和其他外設(shè)的功耗Pd,
將Psysf2分成CPU在f2下的功耗Pcf2和其他外設(shè)的功耗Pd,得:
EDVFS=(Pcf1-Pcf2)t1-(Pcf2+Pd-Pcidle-Pdidle)tdelay
(6)
EDVFS=(Pcf1-Pcf2)t1-((Pcf2-Pcidle)+(Pd-Pdidle))tdelay
(7)
EDVFS=ΔPCt1-ΔPEtdelay
(8)
EDVFS=ER-EE
(9)
其中:ER=ΔPCt1,EE=ΔPEtdelay,ΔPC=(Pcf1-Pcf2)代表頻率從f1降到f2時(shí),節(jié)約的功耗;ΔPE=((Pcf2-Pcidle)+(Pd-Pdidle))是應(yīng)用DVFS后增加的功耗??芍孌VFS發(fā)揮降低功耗的作用,必須滿足EDVFS=ER-EE>0。
該文主要利用操作系統(tǒng)的各個(gè)任務(wù)模塊實(shí)時(shí)的CPU利用率,再記錄下頻繁使用的任務(wù)中部時(shí)的CPU利用率,據(jù)前一時(shí)間片和任務(wù)中部的利用率按照一定的比例來預(yù)測下一時(shí)刻的CPU利用率,進(jìn)而轉(zhuǎn)換成相應(yīng)的頻率電壓。簡易示意圖見下圖3。
圖3 動(dòng)態(tài)電壓頻率調(diào)節(jié)示意圖
根據(jù)綜合而來的CPU利用率,再事先設(shè)定好CPU利用率對應(yīng)的頻率和電壓,通過簡單的PLL單元進(jìn)行倍頻處理,簡單的PLL單元倍頻示意圖(見圖4),得知,輸出的時(shí)鐘頻率是基準(zhǔn)時(shí)鐘頻率的N倍。再利用DC-DC變換器來進(jìn)行升壓和降壓處理。將計(jì)算得出的新電壓和頻率,再反饋到芯片中,以新的頻率電壓來完成之后的工作。
圖4 PLL單元倍頻示意圖
該智能電表采用雙芯管理方案,其中管理芯是復(fù)旦微的低功耗芯片F(xiàn)M33A06XEV,計(jì)量芯是鉅泉HT5017芯片,操作系統(tǒng)選擇裁剪后的FreeRTOS。實(shí)現(xiàn)如下功能:精確計(jì)量電能;測量電壓、電流、功率、頻率等多種實(shí)時(shí)電參數(shù);采用短碼式液晶顯示;具有開表蓋開尾蓋、強(qiáng)磁等多種事件檢測、記錄功能。搭載可插拔電池,實(shí)現(xiàn)下電按鍵后顯示。該智能電表為采用先進(jìn)的超低功耗大規(guī)模集成電路技術(shù)及SMT工藝制造的高新技術(shù)產(chǎn)品,關(guān)鍵元器件選用國際知名品牌的長壽命器件,提高了產(chǎn)品的可靠性和壽命。復(fù)旦微芯片F(xiàn)M33A06XEV應(yīng)用在該智能電表中,工作電壓在工作時(shí)保持恒定,由傳統(tǒng)的5 V降低到3.3 V。智能電表框圖見圖5。
圖5 智能電表框圖
根據(jù)上文中的任務(wù)屬性和智能電表中的任務(wù)模塊,將不同的任務(wù)模塊,設(shè)置成相應(yīng)的任務(wù)屬性,進(jìn)而完成工作模式的切換。
(1)系統(tǒng)管理任務(wù)模塊:主要是處理實(shí)時(shí)性要求高的突發(fā)事務(wù),使系統(tǒng)有能力對外部請求或變化的實(shí)時(shí)響應(yīng)。將其配置為偶發(fā)任務(wù);
(2)計(jì)量任務(wù)模塊:主要是負(fù)責(zé)與計(jì)量芯之間的通信信道維護(hù),請求數(shù)據(jù)的接收與解析處理,應(yīng)答數(shù)據(jù)的組幀與發(fā)送。將其配置為周期任務(wù);
(3)顯示任務(wù)模塊:顯示電表狀態(tài)、電量、時(shí)間等信息,執(zhí)行完一輪顯示后,延遲固定一段時(shí)間,將其配置為延期任務(wù);
(4)通信任務(wù)模塊:主要是負(fù)責(zé)與電表外部通信信道維護(hù),請求數(shù)據(jù)的接收與解析處理,應(yīng)答數(shù)據(jù)的組幀與發(fā)送。接收來自外部突發(fā)的通信請求,上位機(jī)通過RS485通道,采用DLMS協(xié)議抄讀和配置電表中的各項(xiàng)數(shù)據(jù)。通信完成后,通信任務(wù)立刻進(jìn)入到等待狀態(tài),直到通道上接收到新的數(shù)據(jù)。將其配置為偶發(fā)任務(wù);
(5)電表業(yè)務(wù)任務(wù)模塊:主要是處理實(shí)時(shí)性要求不高的事務(wù)和數(shù)據(jù)維護(hù)。負(fù)責(zé)電表相關(guān)的業(yè)務(wù)處理。將其配置為周期任務(wù);
(6)空閑任務(wù)模塊,主要負(fù)責(zé)系統(tǒng)閑時(shí)的功耗管理,CPU運(yùn)行頻率的調(diào)節(jié)和運(yùn)行模式的切換。空閑任務(wù)模塊時(shí)鐘處于等待或執(zhí)行狀態(tài),當(dāng)上述任務(wù)模塊都不在運(yùn)行時(shí),空閑任務(wù)模塊獲得CPU資源運(yùn)行,此時(shí)若有一個(gè)模塊進(jìn)入就緒狀態(tài)時(shí),空閑任務(wù)立刻釋CPU,進(jìn)入等待狀態(tài)。
將智能電表中的系統(tǒng)任務(wù)、顯示任務(wù)、計(jì)量任務(wù)、通信任務(wù)、電表業(yè)務(wù)任務(wù)和空閑任務(wù)的六個(gè)任務(wù)設(shè)置由高到低的任務(wù)優(yōu)先級。利用智能電表中的高精度定時(shí)器來統(tǒng)計(jì)系統(tǒng)運(yùn)行總時(shí)間CPU_RunTime,再打開FreeRTOS中的宏定義編寫相應(yīng)的代碼來獲取任務(wù)運(yùn)行的時(shí)間appStatus[id].runtime,再利用增量來計(jì)算單位時(shí)間內(nèi)的各個(gè)任務(wù)的CPU利用率。再聯(lián)合頻繁任務(wù)中所記錄的CPU利用率,根據(jù)相應(yīng)的計(jì)算比例得出該任務(wù)中的CPU利用率。由于該芯片的電壓在工作時(shí)間維持不變,故獲取CPU利用率后,利用PLL單元對工作頻率進(jìn)行改變。在智能電表內(nèi)部設(shè)定好各階段CPU利用率所對應(yīng)的頻率,通過智能電表中的PLL單元對頻率進(jìn)行更改。
3.2.1 工作模式切換
按上述智能電表任務(wù)模塊所設(shè)置的任務(wù)屬性,再根據(jù)圖2完成工作模式切換在智能電表上的應(yīng)用。嵌入式處理器在不同工作模式下的智能電表整機(jī)功耗對比見下表1。
表1 智能電表不同工作模式下的功耗
3.2.2 動(dòng)態(tài)電壓頻率調(diào)節(jié)
使用多功能標(biāo)準(zhǔn)表,采用220 V,60 Hz電壓來測量智能電表的功耗。智能電表中芯片電壓恒定3.3 V。同時(shí),選取了校時(shí)、負(fù)荷記錄和廠內(nèi)總清這三個(gè)具有代表性的任務(wù)中應(yīng)用該文中的動(dòng)態(tài)頻率調(diào)節(jié),利用上位機(jī)發(fā)送操作指令,多次測量,監(jiān)控記錄處于不同狀態(tài)下的功耗情況見表2。由表可知采用動(dòng)態(tài)管理方案后校時(shí)事件功耗降低了41.30%,負(fù)荷記錄事件功耗降低了26.74%,而CPU利用率幾乎百分百的廠內(nèi)總清事件,功耗幾乎沒有降低。在智能電表正式使用后,很少有CPU利用率百分百的情況,該方案可以有效的降低智能電表功耗,延長智能電表使用壽命。
表2 智能電表不同事件下的功耗
該文根據(jù)操作系統(tǒng)模塊化的設(shè)計(jì)理念,設(shè)計(jì)了一種基于操作系統(tǒng)模塊的動(dòng)態(tài)功耗管理方案。根據(jù)預(yù)估空閑任務(wù)的時(shí)間長短,若空閑任務(wù)時(shí)間長度足夠,在保證完成空閑任務(wù)的任務(wù)的情況下,進(jìn)行工作模式切換,盡最大可能降低系統(tǒng)的功耗。若空閑任務(wù)時(shí)間沒有達(dá)到切換工作模式的標(biāo)準(zhǔn),根據(jù)各個(gè)任務(wù)模塊所占CPU的利用率,來預(yù)測之后的負(fù)載運(yùn)行情況,進(jìn)而匹配相應(yīng)的頻率電壓并配置到系統(tǒng)中使用。在智能電表上應(yīng)用該方案,實(shí)驗(yàn)結(jié)果表明,該方案在較小的硬件代價(jià)成功實(shí)現(xiàn),沒有占據(jù)過多的算力,一定程度上降低了功耗。未來將進(jìn)一步建立更合適的模型,提升預(yù)測的準(zhǔn)確率,從而使電壓頻率調(diào)節(jié)的更加合理,使系統(tǒng)延遲開銷更低,更好地降低功耗。