天水師范學(xué)院電子信息與電氣工程學(xué)院 王睿庭
設(shè)計(jì)了一種以STM32單片機(jī)為核心的信號分析研究裝置,能夠分析測量信號的頻率及幅度,可測量信號各諧波分量的幅值,進(jìn)而測量計(jì)算信號的失真度,還可實(shí)現(xiàn)常見波形信號如正弦波、方波、三角波和鋸齒波的頻譜顯示,具有成本較低,顯示直觀,測量精度較高等優(yōu)點(diǎn),達(dá)到設(shè)計(jì)要求。
信號分析在各個領(lǐng)域有著廣泛的應(yīng)用,比如頻譜分析、失真度測量,專用儀器往往價(jià)格昂貴而且功能單一,傳統(tǒng)的模擬頻譜分析儀由于體積龐大、成本高、反應(yīng)速度慢已不適應(yīng)時(shí)代需求,而快速傅里葉變換(FFT)可以將時(shí)域信號變換到頻域來分析、處理,運(yùn)算速度大大提高。本文設(shè)計(jì)了一種信號分析研究裝置,不僅能測量信號的頻率和幅值,還能進(jìn)行頻譜分析,測量信號的失真度。該裝置實(shí)用性較強(qiáng),具有一定的應(yīng)用價(jià)值。
離散傅里葉變換(DFT)是數(shù)字信號分析與處理中的一種重要且非常有用的變換,它將信號在時(shí)域和頻域都離散化了,非常適于對離散信號的分析與處理。但是直接計(jì)算DFT的運(yùn)算量與變換區(qū)間長度N的平方成正比,當(dāng)N較大時(shí),運(yùn)算量會急速增大,從而影響運(yùn)算速度。而DFT的快速算法即快速傅里葉變換(FFT)的出現(xiàn),大大提高了離散傅里葉變換的運(yùn)算速度,如基2FFT算法的運(yùn)算量減少為(N/2)*log2(N)。更重要的是,通過快速傅里葉變換可以將信號從時(shí)域變換到頻域,進(jìn)而進(jìn)行頻譜分析,這就是很多測量儀器采用FFT的原因。利用FFT可得到一個信號的頻率、幅值及相位信息,亦可得到各次諧波分量的幅值、相位信息。
假設(shè)采樣頻率為Fs,信號頻率為F,采樣點(diǎn)數(shù)為N。則FFT運(yùn)算之后結(jié)果是N點(diǎn)的復(fù)數(shù),每個點(diǎn)對應(yīng)原來信號的一個頻率點(diǎn)。若某點(diǎn)n用復(fù)數(shù)a+bi表示,那么這個復(fù)數(shù)的模為,相位為Pn=atan2(b,a),頻率就是:

其中,N表示FFT要做的點(diǎn)數(shù),n表示排序的點(diǎn),F(xiàn)s為采樣頻率。
對于n=1點(diǎn)的信號,對應(yīng)信號的直流分量,幅度為A1/N。
由信號失真度的定義可知,全部諧波能量之和與基波能量之比的平方根值即為信號的失真度,即:

式中,P為信號總能量,P1為信號的基波能量。
當(dāng)負(fù)載為純電阻負(fù)載時(shí),信號的失真度也可用下式來表示:

式中:u1為基波電壓的有效值,u2,u3,…,un為各次諧波分量的有效值。本設(shè)計(jì)中為了方便設(shè)計(jì),諧波只取到5次。
系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。

圖1 系統(tǒng)總體設(shè)計(jì)框圖
待測信號由信號發(fā)生器提供或經(jīng)過放大電路放大后輸入,信號調(diào)理電路主要包括信號抬升電路及濾波電路等,作用是將待測信號加入直流偏移以適合作為STM32的ADC輸入電壓范圍(在0-3.3V之間),同時(shí)濾除干擾雜波信號,保證測量的準(zhǔn)確性,之后信號經(jīng)過AD轉(zhuǎn)換后在STM32內(nèi)部實(shí)現(xiàn)FFT運(yùn)算變換,進(jìn)行頻譜分析、數(shù)據(jù)處理后顯示在4.3寸液晶屏上,可顯示信號頻率、幅度、各諧波分量的幅值及失真度等。
STM32單片機(jī)采用意法半導(dǎo)體(ST)公司的增強(qiáng)型STM32F103系列,嵌入Cortex-M3內(nèi)核,主頻可達(dá)72MHz,具有512KB的片上Flash存儲器和64KB的SRAM存儲器,內(nèi)部包含2個12位的逐次逼近型A/D轉(zhuǎn)換器,多達(dá)18個通道,轉(zhuǎn)換時(shí)間接近1us。
主程序流程圖如圖2所示。主程序總體設(shè)計(jì)思路是:系統(tǒng)上電后單片機(jī)內(nèi)部進(jìn)行復(fù)位,對TIM1、ADC、DMA、液晶屏等外設(shè)進(jìn)行初始化,對待測信號進(jìn)行AD轉(zhuǎn)換后通過DMA將數(shù)據(jù)搬運(yùn)至內(nèi)存,等待DMA產(chǎn)生中斷后再進(jìn)行FFT運(yùn)算,完成頻譜分析后將結(jié)果顯示在4.3寸液晶屏上。

圖2 主程序流程圖
使用TIM定時(shí)器觸發(fā)AD采集,此處通過TIM1的通道1產(chǎn)生PWM信號來觸發(fā)AD采集,PWM的頻率也就是ADC的采樣頻率。根據(jù)奈奎斯特采樣定理可知,被測信號頻率最大值要小于或等于采樣頻率的二分之一。由于STM32芯片內(nèi)部ADC的采樣率最高為1Mhz/s,采樣位數(shù)為12位,所以待測輸入信號頻率最高可以到500Khz,能夠用在一些頻率不高的場合。
AD采集一定數(shù)量的點(diǎn)數(shù)之后產(chǎn)生DMA中斷,然后通過DMA將數(shù)據(jù)搬運(yùn)至內(nèi)存。因?yàn)椴捎弥袛喾绞剑褼MA傳輸過程不需要CPU干預(yù),可以有效地降低CPU負(fù)荷,提高系統(tǒng)運(yùn)行速度。本設(shè)計(jì)使用DMA1的通道1,傳輸數(shù)據(jù)量為1024。
通過單片機(jī)內(nèi)部的DSP進(jìn)行運(yùn)算處理,由于Cortex M3內(nèi)核的CPU沒有FPU及DSP指令,這里使用ST官方的匯編FFT庫,因?yàn)檫@個庫是匯編的,而且是基4算法,所以執(zhí)行效率非常高效,運(yùn)算速度較快。
進(jìn)行1024點(diǎn)的FFT,只需要調(diào)用DSP庫函數(shù)中的cr4_fft_1024_stm32()函數(shù)即可。該函數(shù)調(diào)用的格式為:

其中,OutBufArray表示FFT運(yùn)算的輸出數(shù)組,InBufArray表示要進(jìn)行FFT運(yùn)算的輸入數(shù)組,也就是ADC采集的數(shù)據(jù),NPT表示采樣點(diǎn)數(shù)。
按照ST官方庫的說明,OutBufArray和InBufArray都必須是32位的數(shù)據(jù)類型,其中高16位存儲實(shí)部,低16位存儲虛部。
FFT的分辨率為Fs/N,要減小誤差可增大N,本設(shè)計(jì)用到的采樣點(diǎn)數(shù)N為1024,采樣頻率Fs越大分辨率就越低,誤差就越大,因此在測量低頻信號時(shí)應(yīng)該降低采樣頻率,最低需大于信號頻率的兩倍。
從信號發(fā)生器輸入不同頻率、幅值的正弦波,測試結(jié)果如表1所示。

表1 不同頻率、幅值的正弦波測試結(jié)果
分別從信號發(fā)生器輸入2Vpp、1KHz的正弦波、方波和三角波,測試結(jié)果如表2所示。

表2 不同類型信號失真度測試結(jié)果
通過測試,該裝置測量信號頻率的精度很高,測量信號失真度的精度較高,對信號幅值的測量存在一定的誤差,但對微弱信號也可以測量,精度較高,能夠滿足設(shè)計(jì)精度要求。
結(jié)語:本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于STM32的信號分析研究裝置,能夠分析測量信號的頻率及幅度,可測量各諧波分量的幅值,進(jìn)而測量計(jì)算信號的失真度,還可實(shí)現(xiàn)常見波形信號如正弦波、方波、三角波和鋸齒波的頻譜顯示,測試結(jié)果表明,本裝置所測數(shù)據(jù)精度較高,各項(xiàng)指標(biāo)均達(dá)到了設(shè)計(jì)要求。