天水師范學(xué)院電子信息與電氣工程學(xué)院 王睿庭
設(shè)計(jì)了一種以STM32單片機(jī)為核心的信號(hào)分析研究裝置,能夠分析測(cè)量信號(hào)的頻率及幅度,可測(cè)量信號(hào)各諧波分量的幅值,進(jìn)而測(cè)量計(jì)算信號(hào)的失真度,還可實(shí)現(xiàn)常見(jiàn)波形信號(hào)如正弦波、方波、三角波和鋸齒波的頻譜顯示,具有成本較低,顯示直觀(guān),測(cè)量精度較高等優(yōu)點(diǎn),達(dá)到設(shè)計(jì)要求。
信號(hào)分析在各個(gè)領(lǐng)域有著廣泛的應(yīng)用,比如頻譜分析、失真度測(cè)量,專(zhuān)用儀器往往價(jià)格昂貴而且功能單一,傳統(tǒng)的模擬頻譜分析儀由于體積龐大、成本高、反應(yīng)速度慢已不適應(yīng)時(shí)代需求,而快速傅里葉變換(FFT)可以將時(shí)域信號(hào)變換到頻域來(lái)分析、處理,運(yùn)算速度大大提高。本文設(shè)計(jì)了一種信號(hào)分析研究裝置,不僅能測(cè)量信號(hào)的頻率和幅值,還能進(jìn)行頻譜分析,測(cè)量信號(hào)的失真度。該裝置實(shí)用性較強(qiáng),具有一定的應(yīng)用價(jià)值。
離散傅里葉變換(DFT)是數(shù)字信號(hào)分析與處理中的一種重要且非常有用的變換,它將信號(hào)在時(shí)域和頻域都離散化了,非常適于對(duì)離散信號(hào)的分析與處理。但是直接計(jì)算DFT的運(yùn)算量與變換區(qū)間長(zhǎng)度N的平方成正比,當(dāng)N較大時(shí),運(yùn)算量會(huì)急速增大,從而影響運(yùn)算速度。而DFT的快速算法即快速傅里葉變換(FFT)的出現(xiàn),大大提高了離散傅里葉變換的運(yùn)算速度,如基2FFT算法的運(yùn)算量減少為(N/2)*log2(N)。更重要的是,通過(guò)快速傅里葉變換可以將信號(hào)從時(shí)域變換到頻域,進(jìn)而進(jìn)行頻譜分析,這就是很多測(cè)量?jī)x器采用FFT的原因。利用FFT可得到一個(gè)信號(hào)的頻率、幅值及相位信息,亦可得到各次諧波分量的幅值、相位信息。
假設(shè)采樣頻率為Fs,信號(hào)頻率為F,采樣點(diǎn)數(shù)為N。則FFT運(yùn)算之后結(jié)果是N點(diǎn)的復(fù)數(shù),每個(gè)點(diǎn)對(duì)應(yīng)原來(lái)信號(hào)的一個(gè)頻率點(diǎn)。若某點(diǎn)n用復(fù)數(shù)a+bi表示,那么這個(gè)復(fù)數(shù)的模為,相位為Pn=atan2(b,a),頻率就是:
其中,N表示FFT要做的點(diǎn)數(shù),n表示排序的點(diǎn),F(xiàn)s為采樣頻率。
對(duì)于n=1點(diǎn)的信號(hào),對(duì)應(yīng)信號(hào)的直流分量,幅度為A1/N。
由信號(hào)失真度的定義可知,全部諧波能量之和與基波能量之比的平方根值即為信號(hào)的失真度,即:
式中,P為信號(hào)總能量,P1為信號(hào)的基波能量。
當(dāng)負(fù)載為純電阻負(fù)載時(shí),信號(hào)的失真度也可用下式來(lái)表示:
式中:u1為基波電壓的有效值,u2,u3,…,un為各次諧波分量的有效值。本設(shè)計(jì)中為了方便設(shè)計(jì),諧波只取到5次。
系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
待測(cè)信號(hào)由信號(hào)發(fā)生器提供或經(jīng)過(guò)放大電路放大后輸入,信號(hào)調(diào)理電路主要包括信號(hào)抬升電路及濾波電路等,作用是將待測(cè)信號(hào)加入直流偏移以適合作為STM32的ADC輸入電壓范圍(在0-3.3V之間),同時(shí)濾除干擾雜波信號(hào),保證測(cè)量的準(zhǔn)確性,之后信號(hào)經(jīng)過(guò)AD轉(zhuǎn)換后在STM32內(nèi)部實(shí)現(xiàn)FFT運(yùn)算變換,進(jìn)行頻譜分析、數(shù)據(jù)處理后顯示在4.3寸液晶屏上,可顯示信號(hào)頻率、幅度、各諧波分量的幅值及失真度等。
STM32單片機(jī)采用意法半導(dǎo)體(ST)公司的增強(qiáng)型STM32F103系列,嵌入Cortex-M3內(nèi)核,主頻可達(dá)72MHz,具有512KB的片上Flash存儲(chǔ)器和64KB的SRAM存儲(chǔ)器,內(nèi)部包含2個(gè)12位的逐次逼近型A/D轉(zhuǎn)換器,多達(dá)18個(gè)通道,轉(zhuǎn)換時(shí)間接近1us。
主程序流程圖如圖2所示。主程序總體設(shè)計(jì)思路是:系統(tǒng)上電后單片機(jī)內(nèi)部進(jìn)行復(fù)位,對(duì)TIM1、ADC、DMA、液晶屏等外設(shè)進(jìn)行初始化,對(duì)待測(cè)信號(hào)進(jìn)行AD轉(zhuǎn)換后通過(guò)DMA將數(shù)據(jù)搬運(yùn)至內(nèi)存,等待DMA產(chǎn)生中斷后再進(jìn)行FFT運(yùn)算,完成頻譜分析后將結(jié)果顯示在4.3寸液晶屏上。
圖2 主程序流程圖
使用TIM定時(shí)器觸發(fā)AD采集,此處通過(guò)TIM1的通道1產(chǎn)生PWM信號(hào)來(lái)觸發(fā)AD采集,PWM的頻率也就是ADC的采樣頻率。根據(jù)奈奎斯特采樣定理可知,被測(cè)信號(hào)頻率最大值要小于或等于采樣頻率的二分之一。由于STM32芯片內(nèi)部ADC的采樣率最高為1Mhz/s,采樣位數(shù)為12位,所以待測(cè)輸入信號(hào)頻率最高可以到500Khz,能夠用在一些頻率不高的場(chǎng)合。
AD采集一定數(shù)量的點(diǎn)數(shù)之后產(chǎn)生DMA中斷,然后通過(guò)DMA將數(shù)據(jù)搬運(yùn)至內(nèi)存。因?yàn)椴捎弥袛喾绞剑褼MA傳輸過(guò)程不需要CPU干預(yù),可以有效地降低CPU負(fù)荷,提高系統(tǒng)運(yùn)行速度。本設(shè)計(jì)使用DMA1的通道1,傳輸數(shù)據(jù)量為1024。
通過(guò)單片機(jī)內(nèi)部的DSP進(jìn)行運(yùn)算處理,由于Cortex M3內(nèi)核的CPU沒(méi)有FPU及DSP指令,這里使用ST官方的匯編FFT庫(kù),因?yàn)檫@個(gè)庫(kù)是匯編的,而且是基4算法,所以執(zhí)行效率非常高效,運(yùn)算速度較快。
進(jìn)行1024點(diǎn)的FFT,只需要調(diào)用DSP庫(kù)函數(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官方庫(kù)的說(shuō)明,OutBufArray和InBufArray都必須是32位的數(shù)據(jù)類(lèi)型,其中高16位存儲(chǔ)實(shí)部,低16位存儲(chǔ)虛部。
FFT的分辨率為Fs/N,要減小誤差可增大N,本設(shè)計(jì)用到的采樣點(diǎn)數(shù)N為1024,采樣頻率Fs越大分辨率就越低,誤差就越大,因此在測(cè)量低頻信號(hào)時(shí)應(yīng)該降低采樣頻率,最低需大于信號(hào)頻率的兩倍。
從信號(hào)發(fā)生器輸入不同頻率、幅值的正弦波,測(cè)試結(jié)果如表1所示。
表1 不同頻率、幅值的正弦波測(cè)試結(jié)果
分別從信號(hào)發(fā)生器輸入2Vpp、1KHz的正弦波、方波和三角波,測(cè)試結(jié)果如表2所示。
表2 不同類(lèi)型信號(hào)失真度測(cè)試結(jié)果
通過(guò)測(cè)試,該裝置測(cè)量信號(hào)頻率的精度很高,測(cè)量信號(hào)失真度的精度較高,對(duì)信號(hào)幅值的測(cè)量存在一定的誤差,但對(duì)微弱信號(hào)也可以測(cè)量,精度較高,能夠滿(mǎn)足設(shè)計(jì)精度要求。
結(jié)語(yǔ):本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于STM32的信號(hào)分析研究裝置,能夠分析測(cè)量信號(hào)的頻率及幅度,可測(cè)量各諧波分量的幅值,進(jìn)而測(cè)量計(jì)算信號(hào)的失真度,還可實(shí)現(xiàn)常見(jiàn)波形信號(hào)如正弦波、方波、三角波和鋸齒波的頻譜顯示,測(cè)試結(jié)果表明,本裝置所測(cè)數(shù)據(jù)精度較高,各項(xiàng)指標(biāo)均達(dá)到了設(shè)計(jì)要求。