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