邵 清,趙振宇,李廣巖
(東北師范大學(xué)物理學(xué)院,吉林 長春 130024)
隨著人類對自然開發(fā)的日益深入,工作在野外或者水下的信號檢測設(shè)備越來越多.特別是在水下,由于電源難以通過外部供給,只能采用電池供電,因此,降低系統(tǒng)功耗,延長設(shè)備供電時(shí)間是系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)時(shí)必須要解決的關(guān)鍵問題.
目前,水下設(shè)備降低功耗的方法主要采用將微處理器間斷性地設(shè)置為待機(jī)或掉電方式.文獻(xiàn)[1]采用了MSP430F149為處理核心,利用芯片的待機(jī)與喚醒功能,實(shí)現(xiàn)系統(tǒng)低功耗運(yùn)行,但是這種間斷性的工作方式無法實(shí)現(xiàn)對信號進(jìn)行連續(xù)、實(shí)時(shí)檢測,不適用于值守系統(tǒng);文獻(xiàn)[2]通過低功耗芯片MSP430與TMS320C5509A處理器協(xié)同工作,實(shí)現(xiàn)了對水下目標(biāo)信號的識別,這種方式雖然具備了實(shí)時(shí)檢測信號的能力,但是MSP430和TMS320C5509A之間的工作協(xié)調(diào)較為復(fù)雜,系統(tǒng)正常工作時(shí)平均功耗也較高.
水下值守系統(tǒng)要求能夠?qū)崟r(shí)、不間斷地監(jiān)測是否存在某種頻率的水聲信號.為了保證信號檢測的實(shí)時(shí)性和不間斷性,不能將微處理器設(shè)置為待機(jī)或掉電模式,因此,如何綜合軟、硬件因素,在不采用待機(jī)或掉電方式下,最大限度地降低系統(tǒng)功耗是迫切需要解決的問題.為了實(shí)現(xiàn)水聲信號檢測功能并降低功耗,本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于STM32L476單片機(jī)的超低功耗水下值守系統(tǒng).
為了實(shí)現(xiàn)實(shí)時(shí)、不間斷地信號監(jiān)測,設(shè)計(jì)了如圖1所示的水下值守系統(tǒng).
圖1 硬件框圖
值守系統(tǒng)主要由水聲換能器、信號調(diào)理電路、微處理器構(gòu)成.水聲換能器先將水聲信號轉(zhuǎn)換成電信號,由于水聲傳感器的輸出信號十分微弱,為了保證信號在后續(xù)電路的處理范圍內(nèi),防止引入高頻干擾,需要采用信號調(diào)理電路對信號進(jìn)行預(yù)處理[3];信號調(diào)理電路的預(yù)處理過程包括低通濾波、放大、限幅;微處理器利用片內(nèi)ADC對信號采樣,然后通過對信號進(jìn)行傅里葉變換確定輸入信號中是否存在設(shè)定的某種頻率信號或若干種頻率信號的組合,如果檢測到,則輸出對其他設(shè)備的喚醒信號.
待檢測信號頻率范圍為16~100 kHz,根據(jù)奈奎斯特采樣定理,ADC的采樣頻率至少為32 kHz[4].考慮到處理速度和內(nèi)存因素,ADC的采樣頻率設(shè)置為32 kHz.
采樣時(shí)間窗設(shè)置的越長,那么采樣點(diǎn)數(shù)也越多,需要的內(nèi)存也越大,但頻譜分辨率就會越高.反之,采樣時(shí)間窗短,采樣點(diǎn)數(shù)少,占用的內(nèi)存就也越少,但頻譜分辨率會降低.因此,采樣時(shí)間窗的選取需要權(quán)衡系統(tǒng)對頻譜分辨率的要求以及內(nèi)存和處理速度的要求.本文時(shí)間窗設(shè)置為128 ms,采集4 096個(gè)點(diǎn),然后執(zhí)行快速傅里葉變換(FFT)算法,可以使頻譜分辨率及處理速度滿足要求.
FFT算法就是不斷地把長序列的DFT分解為幾個(gè)短序列的DFT,并利用旋轉(zhuǎn)因子的周期性和對稱性來減少DFT的運(yùn)算次數(shù)[5].本文采用的是時(shí)域抽取法FFT(DIT-FFT),并且在DIT-FFT的基礎(chǔ)上采用了多類蝶形單元運(yùn)算、預(yù)先計(jì)算旋轉(zhuǎn)因子表、用N/2點(diǎn)的FFT計(jì)算一個(gè)N點(diǎn)實(shí)序列的DFT等措施,進(jìn)一步減少了運(yùn)算量.
軟件流程如圖2所示,首先對系統(tǒng)進(jìn)行初始化,然后通過ADC對信號采樣,并通過DMA傳輸數(shù)據(jù),再執(zhí)行FFT算法,進(jìn)行門限判決.當(dāng)FFT的運(yùn)算結(jié)果中單個(gè)頻點(diǎn)或者多個(gè)頻點(diǎn)的數(shù)值超過門限,認(rèn)為有用信號已經(jīng)被檢測到,微處理器將檢測結(jié)果輸出,若沒有超過閾值,認(rèn)為不是有用信號,然后循環(huán)上述過程.DMA的作用是確保微處理器在執(zhí)行FFT算法的同時(shí),依然可以對信號采樣,并實(shí)時(shí)將數(shù)據(jù)轉(zhuǎn)移到內(nèi)存中,保證數(shù)據(jù)的完整性.
圖2 軟件流程
為了保證信號檢測的實(shí)時(shí)性,系統(tǒng)要求微處理器單次執(zhí)行4 096個(gè)點(diǎn)的FFT運(yùn)算時(shí)間不能超過50 ms,并且至少具備96 kB的內(nèi)存.因?yàn)槲⑻幚砥鞯闹黝l越高,功耗也越高,因此,微處理器的選擇要考慮速度和功耗因素.目前市面上常用的微處理芯片大致有MCU、DSP、FPGA這三類.DSP和FPGA雖然能滿足系統(tǒng)對速度和內(nèi)存的要求,但是其功耗通常很高,因此,優(yōu)先選擇MCU作為處理核心.
由于微處理器需要實(shí)現(xiàn)FFT算法,因此,需要運(yùn)算速度較快、內(nèi)存較大且功耗低的微處理器.內(nèi)核簡單的微處理器雖然功耗低,但是處理速度較慢,內(nèi)存較小,無法滿足系統(tǒng)的實(shí)時(shí)性要求.
TI公司推出的MSP430系列微控制器一直是低功耗設(shè)計(jì)領(lǐng)域中的佼佼者.但是由于MSP430在處理速度和內(nèi)存上的限制,無法滿足值守系統(tǒng)在信號處理上的要求.目前,ST公司推出的以ARM Cortex-M系列內(nèi)核的微控制器在處理速度和低功耗方面表現(xiàn)出色.最后,我們選擇了ST公司推出的STM32L476為處理核心.
STM32L476是一款基于ARM Cortex-M4內(nèi)核的32位超低功耗單片機(jī),采用90 nm工藝制造,最高主頻達(dá)到了80 MHz,并且有1 MB的Flash,128 kB的SRAM,內(nèi)置FPU(浮點(diǎn)運(yùn)算單元),支持DSP指令集,大大加快了數(shù)據(jù)處理速度[6].根據(jù)EEMBC(Embedded Microprocessor Benchmark Consortium 嵌入式微處理器基準(zhǔn)評測協(xié)會)最新發(fā)布的標(biāo)準(zhǔn)化ULPBench超低功耗微處理器能效對比評測結(jié)果,STM32L476獲得ULP-Mark 187.70分,為業(yè)內(nèi)目前最高成績[7].它是目前將性能和低功耗最完美結(jié)合到一起的微處理器.它可以滿足本文執(zhí)行FFT算法對內(nèi)存和處理速度上的要求,也可降低系統(tǒng)的功耗.
單片機(jī)的供電電壓一般由電池經(jīng)穩(wěn)壓芯片提供.常見的穩(wěn)壓芯片的轉(zhuǎn)化效率低,以AMS1117-1.8 V為例,在輸入5 V電壓的情況下,其轉(zhuǎn)化效率只有20%,大部分的能量都被消耗在穩(wěn)壓芯片上.STM32L476的供電電壓范圍是1.71~3.6 V.目前市面上的電池,常見的電壓值有1.2,1.5,3.0,3.6,7.2 V.為了盡量降低系統(tǒng)的供電電壓和避免穩(wěn)壓芯片效率過低帶來過多的能量浪費(fèi),我們直接用兩節(jié)1.2 V高性能電池串聯(lián)得到2.4 V電壓.
單片機(jī)的主頻越高,處理速度越快,但是功耗也越高.圖3顯示了溫度為25℃時(shí),在不同的運(yùn)行模式下,STM32L476的工作電流隨著系統(tǒng)頻率的變化關(guān)系[8].
圖3 電流隨主頻的變化關(guān)系
由圖3可以看出,不管在哪種運(yùn)行模式下,STM32L476的工作電流都隨著系統(tǒng)頻率的增加而增加.根據(jù)待檢測信號的頻率,考慮到ADC的轉(zhuǎn)換速度和采樣頻率以及執(zhí)行FFT時(shí)間上的要求,需要STM32L476的主頻至少為24 MHz.然后在STM32L476的LPRun、Range1、Range2模式中運(yùn)行,LPRun模式的最高主頻為2 MHz,無法滿足實(shí)時(shí)性要求,而Range1模式系統(tǒng)頻率為24 MHz時(shí)的工作電流比Range2模式大,因此我們選擇STM32L476工作在Range2模式下,主頻配置為24 MHz.
另一方面,開啟單片機(jī)內(nèi)部的鎖相環(huán)倍頻模塊會增加單片機(jī)的功耗,因此,采用24 MHz的外部晶振作為時(shí)鐘源,并關(guān)閉了內(nèi)部的鎖相環(huán)模塊,在保證時(shí)鐘精度的同時(shí)降低了系統(tǒng)功耗.
在程序中,當(dāng)CPU進(jìn)行函數(shù)調(diào)用時(shí),需要進(jìn)行現(xiàn)場保護(hù),將當(dāng)前CPU寄存器的數(shù)據(jù)壓入堆棧( RAM ),在函數(shù)結(jié)束時(shí)又將CPU寄存器的數(shù)據(jù)彈出堆棧.由于對RAM操作會增加系統(tǒng)的功耗,因此在程序設(shè)計(jì)上,要盡量減少對RAM的操作[9].為此,使用宏定義來替換函數(shù)調(diào)用.因?yàn)椋甓x會在編譯時(shí)展開,CPU只會順序執(zhí)行指令,避免了子程序調(diào)用,雖然代碼量會增加,但STM32L476具有1 MB的Flash可以滿足需求.在STMicroelectronics公司所推出的Low Layer API固件庫中,大部分函數(shù)采用宏定義的方式,因此,可以大大減少對RAM的操作,從而使其功耗降低.
未使用的片內(nèi)外設(shè)或間歇使用的片內(nèi)外設(shè)應(yīng)該及時(shí)關(guān)掉,以節(jié)省電能.不用且懸空的I/O引腳要初始化為模擬輸入[10],因?yàn)槿绻_沒有初始化,可能會增大單片機(jī)的漏電流.
系統(tǒng)測試框圖如圖4所示.為了盡可能模擬真實(shí)環(huán)境,系統(tǒng)測試時(shí)額外添加了加法器,用于疊加正弦信號和噪聲.將疊加后的模擬信號送入信號調(diào)理電路,信號調(diào)理電路對其進(jìn)行濾波、放大以及限幅,然后經(jīng)過預(yù)處理后的信號被送入微處理器的ADC接口,微處理器完成對信號的采樣和處理,并輸出檢測結(jié)果.
圖4 系統(tǒng)測試框圖
在實(shí)驗(yàn)室條件下,通過RIGOL DG3121A信號發(fā)生器產(chǎn)生正弦信號和噪聲信號,然后通過加法器疊加,再經(jīng)過信號調(diào)理電路濾除高頻噪聲并放大有用信號,再送至信號檢測電路的ADC接口,做相應(yīng)的處理,以測試系統(tǒng)能否正確檢測到設(shè)定頻率的正弦信號.使用Tektronix DMM4050六位半臺式高精度萬用表測量信號檢測電路工作時(shí)的電壓和電流,計(jì)算系統(tǒng)的功耗.圖5是測試電路板正面照片,STM32L476芯片被焊接在電路板背面.
圖5 測試電路板
(1) 不同微處理器選擇的功耗對比
選用了以下幾種微處理芯片去實(shí)現(xiàn)信號檢測功能,其供電系統(tǒng)、時(shí)鐘方案、軟件程序、I/O模式都選用常見的默認(rèn)模式,未做任何優(yōu)化.其功耗數(shù)據(jù)測試見表1.
表1 不同微處理器功耗數(shù)值
表 1表明,如果采用DSP或者FPGA來實(shí)現(xiàn)信號檢測功能時(shí),功耗都很高.采用單片機(jī)實(shí)現(xiàn)時(shí),功耗會明顯下降,而STM32L476的功耗又比STM32F407低.因此微處理器的選擇對系統(tǒng)功耗有至關(guān)重要的影響.
(2) 不同供電方式功耗對比
測試條件:以STM32L476為處理核心,單片機(jī)采用外部晶振,使用鎖相環(huán),主頻為80 MHz,子程序不使用宏定義,沒有使用的I/O未做初始化.測試數(shù)據(jù)見表2.
表2 不同供電方式功耗數(shù)值
表2表明,微處理器的工作電壓越低,功耗也越低.然而,穩(wěn)壓芯片轉(zhuǎn)化效率通常較低,會造成能量的浪費(fèi).因此,直接使用電壓合適的電池給微處理器供電會大大降低系統(tǒng)功耗.
(3) 不同的時(shí)鐘方案
測試條件:以STM32L476為處理核心,單片機(jī)采用外部晶振,供電系統(tǒng)直接采用2.4 V電池供電,子程序不使用宏定義,沒有使用的I/O未做初始化.測試數(shù)據(jù)表3.
表3表明,單片機(jī)的主頻越高,功耗也越高,并且開啟PLL(鎖相環(huán))倍頻模塊也會增加功耗.因此,在滿足系統(tǒng)處理速度的前提下,單片機(jī)的主頻越低越好,鎖相環(huán)倍頻模塊也需要關(guān)閉.
表3 不同時(shí)鐘方案功耗數(shù)值
(4) 用宏代替子程序
測試條件:以STM32L476為處理核心,供電系統(tǒng)直接采用2.4 V電池供電,直接使用外部24 MHz晶振為其提供時(shí)鐘,不使用鎖相環(huán),沒有使用的I/O未做初始化.測試數(shù)據(jù)見表4.
表4 不同子程序?qū)懛ü臄?shù)值
表4表明,對比函數(shù)調(diào)用的方法,采用宏定義的方式編寫子程序會使功耗降低.
(5) 不同模式的I/O
測試條件:以STM32L476為處理核心,供電系統(tǒng)直接采用2.4 V電池供電,直接使用外部24 MHz晶振為其提供時(shí)鐘,不使用鎖相環(huán),子程序使用宏定義.測試數(shù)據(jù)見表5.
表5 不同模式的I/O功耗數(shù)值
表5表明,對比I/O未做任何初始化,將未使用的I/O初始化為模擬輸入,可以使功耗降低.
本設(shè)計(jì)針對水下值守系統(tǒng)對低功耗的要求,從硬件和軟件兩方面系統(tǒng)地分析了降低功耗的方法,并通過實(shí)際測試,驗(yàn)證了各種方法的有效性.本文研究對其他低功耗系統(tǒng)的設(shè)計(jì)具有參考價(jià)值和借鑒意義.