新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于stm32f4的高速信號(hào)頻譜分析儀

基于stm32f4的高速信號(hào)頻譜分析儀

作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
本系統(tǒng)是以STM32F407為核心,主要采用FIFO來做高速緩存。高速信號(hào)先通過AD采樣,然后先將采樣后的數(shù)據(jù)給FIFO先緩存處理,然后再通過STM32F407進(jìn)行加Blackman預(yù)處理,再做1024個(gè)點(diǎn)FFT進(jìn)行頻譜分析,最后將數(shù)據(jù)顯示在LCD12864上,以便進(jìn)行人機(jī)交互!該系統(tǒng)可實(shí)現(xiàn)任意波形信號(hào)的頻譜顯示,以及可以自動(dòng)尋找各諧波分量的幅值,頻率以及相位并進(jìn)行8位有效數(shù)據(jù)顯示。

系統(tǒng)設(shè)計(jì)任務(wù)

本文引用地址:http://butianyuan.cn/article/201611/316133.htm

一、任務(wù)

設(shè)計(jì)并制作一個(gè)高速頻譜分析儀。

1系統(tǒng)方案

本系統(tǒng)由前置匹配放大電路,AD采樣電路,高速FIFO緩存電路,以及液晶顯示電路組成。其中高速數(shù)據(jù)緩存電路,以及高精度的顯示數(shù)據(jù)是本次設(shè)計(jì)的難點(diǎn)!下面分別論證這幾個(gè)模塊的選擇。

系統(tǒng)框圖

1.1測(cè)量方法的論證與選擇

1.1.1 MCU處理器的比較與選擇

DSP處理主要是要考慮到運(yùn)算速度。

在處理器的選擇上通??梢圆捎?位,16位或者32位的MCU,但由于在處理信號(hào)的過程中,通常會(huì)遇到快速傅里葉FFT算法,所以會(huì)遇到大量的浮點(diǎn)運(yùn)算,而且一個(gè)浮點(diǎn)數(shù)要占用四個(gè)字節(jié),故在處理過程中要占用大量的內(nèi)存,同時(shí)浮點(diǎn)運(yùn)算速度比較慢,所以采用普通的MCU在一定時(shí)間內(nèi)難以完成,所以綜合考慮運(yùn)算速度和內(nèi)存大小等因素。

本系統(tǒng)采用32位的STM32F407做為核心DSP處理器件,該芯片具有1MB的Flash閃存空間,196KB的SRAM空間,并且時(shí)鐘頻率達(dá)到了168MHz。程序運(yùn)行于168MHz主頻時(shí),通過Flash取指令(不是內(nèi)部SRAM),通過Dhrysone測(cè)試得到210DMIPS,主要采用ART加速器,可以最大限度的消除Flash存儲(chǔ)器較慢從而限制MCU性能的發(fā)揮,這可以使CPU可以在所有工作頻率下近乎零等待的方式,從Flash中運(yùn)行程序。還有就是STM32F407帶有硬件FPU處理單元,這樣可以不用軟件算法實(shí)現(xiàn)浮點(diǎn)運(yùn)算,而直接采用硬件來實(shí)現(xiàn)浮點(diǎn)運(yùn)算,這樣就減小了編譯器生成的代碼量,并且使用更方便,浮點(diǎn)數(shù)只占用四個(gè)字節(jié)就可以表示的數(shù)據(jù)范圍很大,因此不用擔(dān)心計(jì)算后的數(shù)據(jù)溢出問題!進(jìn)一步提高運(yùn)算速度。

1.1.2 采樣方法比較與選擇

方案一 通過DDS集成芯片產(chǎn)生一個(gè)頻率穩(wěn)定度和精度相當(dāng)高的方波信號(hào)作為時(shí)鐘信號(hào)。

可選用直接數(shù)字頻率合成(DDS)芯片AD9851,AD9851為ADI公司生產(chǎn)的高性能器件,可與單片機(jī)通過簡單的接口完成串行或者并行通信。可完成外部輸入頻率控制字與芯片內(nèi)部頻率相位控制字之間的轉(zhuǎn)換,可以非常容易的通過頻率控制字調(diào)整輸出頻率,以及精確的調(diào)整輸出信號(hào)的相位,輸出信號(hào)幅值穩(wěn)定,但是由于DDS控制也需要占用一部分MCU的IO口資源,并且DDS在價(jià)格上成本有點(diǎn)高。

方案二 直接由MCU產(chǎn)生PWM波做為采樣時(shí)鐘信號(hào)。

可直接由STM32F407產(chǎn)生的PWM波,可實(shí)現(xiàn)頻率,占空比可調(diào)的方波。最快IO口翻轉(zhuǎn)速度可以達(dá)到84MHz,可以輕松實(shí)現(xiàn)想要的采樣頻率。由于輸出的是3.3V的幅值的電壓,與外圍芯片相連,需要經(jīng)過電平轉(zhuǎn)換芯片轉(zhuǎn)成5V,才能作為外圍芯片的時(shí)鐘信號(hào)。

方案三 采樣時(shí)鐘信號(hào)選用Linear公司生產(chǎn)的LTC1799提供。

LTC1799是一款精準(zhǔn)型振蕩器,使用方便。它采用2.7V到5.5V單電源工作,并提供了軌至軌、占空比為50%的方波輸出。CMOS輸出驅(qū)動(dòng)器確保了快速上升/下降時(shí)間和軌至軌開關(guān)操作。頻率設(shè)定通過電阻器調(diào)節(jié),電阻阻值在 的范圍內(nèi)變化,以選擇處于100KHz到33MHz之間的任何一個(gè)頻率。三態(tài)DIV輸入負(fù)責(zé)決定驅(qū)動(dòng)輸出之前對(duì)主時(shí)鐘進(jìn)行1、10或100分頻。

綜合上述方案,選擇方案三,采用一片LTC1799來產(chǎn)生15MHz的采樣時(shí)鐘信號(hào)。

1.1.3 AD采樣芯片的論證與選擇

方案一 采用MCU內(nèi)部ADC對(duì)采樣信號(hào)進(jìn)行采樣。

STM32F407內(nèi)部最大轉(zhuǎn)換速率為7.2MSPS,而且被采樣信號(hào)的幅值只能在0V到3.3V之間,能測(cè)得動(dòng)態(tài)范圍小,難以滿足要求。

方案二 采用TI公司的8位TLC5510A作為AD采樣芯片。

TLC5510A是采用高速CMOS技術(shù),8位的,最大轉(zhuǎn)換速率為20MSPS的AD轉(zhuǎn)換芯片。支持+5V電源供電,內(nèi)部包含采樣保持電路,輸出帶有高阻態(tài)模式,以及帶有內(nèi)部參考電阻。輸出數(shù)據(jù)在時(shí)鐘的下降沿有效,數(shù)據(jù)流水線結(jié)構(gòu)導(dǎo)致了2.5個(gè)時(shí)鐘的延時(shí)。而且高速AD普遍價(jià)格比較昂貴,在滿足輸入信號(hào)在2V以上動(dòng)態(tài)范圍,TI公司可供申請(qǐng)的高速AD芯片只有TLC5510A這一種。

綜合上述方案,選擇方案二,在精度要求不高場(chǎng)合,采用TLC5510A作為高速采樣芯片。

1.1.4 高速數(shù)據(jù)緩存芯片的論證與選擇

由于15MHz的高速數(shù)據(jù)流,如果中斷來標(biāo)記數(shù)據(jù)流的地址,由于MCU的中斷響應(yīng)時(shí)間有限,有12個(gè)時(shí)鐘周期的中斷延時(shí),因此就需要外部存儲(chǔ)器做高速數(shù)據(jù)緩存。

方案一 采用SRAM芯片作為外部高速數(shù)據(jù)緩存芯片。

采用IDT71024來做高速緩存,由于SRAM提供了地址線端口和數(shù)據(jù)輸入和輸出端口,如果用MCU來控制的SRAM的地址線,中斷響應(yīng)不過來是反應(yīng)不過來,如果用計(jì)數(shù)器作為地址計(jì)數(shù)器,原理是可以,但是實(shí)際操作效果不佳。

方案二 采用FIFO芯片作為外部高速數(shù)據(jù)緩存芯片。

IDT7205是單向異步FIFO的典型芯片,由IDT公司生產(chǎn)的,是一種高速、低功耗的先進(jìn)先出雙端口存儲(chǔ)緩沖器。這種FIFO芯片內(nèi)部的雙端口RAM具有2套數(shù)據(jù)線,分別執(zhí)行輸入和輸出功能,各自獨(dú)立的寫讀指針分別在寫、讀時(shí)鐘的控制下順序地從RAM中寫、讀數(shù)據(jù)。

綜合上述方案,選擇方案二,它無地址線,布線簡單,只能是順序存取。

  1. 系統(tǒng)理論分析與計(jì)算

2.1快速傅里葉變換(FFT)

DFT(離散傅里葉變換)是數(shù)字信號(hào)分析與處理中的一種重要變換,它可以使數(shù)字信號(hào)處理可以在頻域內(nèi)采用數(shù)值運(yùn)算的方法進(jìn)行,大大增加了數(shù)字信號(hào)處理的靈活性,但直接計(jì)算DFT的計(jì)算量與變換區(qū)間長度N的平方成正比,當(dāng)N較大時(shí),計(jì)算量太大,所以在快速傅里葉變換(FFT)出現(xiàn)以前,直接用DFT算法進(jìn)行譜分析和信號(hào)的實(shí)時(shí)處理是不切實(shí)際的。

DFT的定義:設(shè) 是一個(gè)長度為N的有限長序列,定義 的N點(diǎn)離散傅里葉變換為

能提高DFT速度的唯一可利用的是因子 。 稱為旋轉(zhuǎn)因子可表示為具有以下兩個(gè)重要性質(zhì)。

①對(duì)稱性

②周期性

利用 的周期性和對(duì)稱性可把DFT的計(jì)算次數(shù)大大減小。

DFT分解法基本上分為兩類:一類是將時(shí)間序列X(n) (n 為時(shí)間標(biāo)號(hào))進(jìn)行逐次分解,由此得到的FFT算法稱為按時(shí)間抽取算法,另一類是將傅里葉交換序列X(k) ( k為頻率標(biāo)號(hào))進(jìn)行分解,叫做按頻率抽取算法。對(duì)每一算法,按基本的蝶形運(yùn)算的構(gòu)成又可分為基2、基4、基8以及任意因子等的FFT算法。不同基的FFT算法所需的計(jì)算量略有差異。之所以說略有差異是指并無數(shù)量級(jí)上的差異,甚至無成倍的差別。只是某種基的算法比另一種省幾分之幾而已。

而本方案采用的就是ST公司官方固件庫里DSP庫中已經(jīng)寫好的關(guān)于FFT的庫函數(shù),調(diào)用的是基4復(fù)數(shù)序列1024個(gè)點(diǎn)的FFT函數(shù)庫。

假設(shè)FFT之后某點(diǎn)n用復(fù)數(shù)表示,那么這個(gè)復(fù)數(shù)的模就是,相位就是,頻率就是,(其中N表示FFT要做的點(diǎn)數(shù),n表示排序的點(diǎn),F(xiàn)s為采樣頻率)。根據(jù)以上的結(jié)果,就可以計(jì)算出n點(diǎn),

所對(duì)應(yīng)信號(hào)的表達(dá)式為:

而對(duì)于n=1的點(diǎn)信號(hào),是直流分量,幅度即為:

因此對(duì)于直流量要特殊考慮,一是幅值是其它頻率點(diǎn)的2倍,二是直流量不含有相位信息。

但是由于所做的點(diǎn)數(shù)有限,其會(huì)造成頻譜泄露是必然的。因此并非要計(jì)算所有點(diǎn)的幅值,相位以及頻率信息,而只需要計(jì)算出各個(gè)峰值點(diǎn)的幅值,相位以及頻率即可表示采樣信號(hào)各諧波分量的全部信息。

因此算法模塊要實(shí)現(xiàn)的功能:保存FFT之后峰值點(diǎn)的實(shí)部和虛部,以及峰值點(diǎn)所處的位置這幾組點(diǎn)即可。

2.2窗函數(shù)的分析與計(jì)算

在頻譜分析過程中,加窗是提高信號(hào)分析精度的一個(gè)重要措施,對(duì)加窗函數(shù)的基本要求:時(shí)域為改善截?cái)嗵幍牟贿B續(xù)狀態(tài)(由于吉布斯現(xiàn)象造成的振蕩);頻域?yàn)榇白V的主瓣窄而高,以提高分辨率,旁瓣幅值應(yīng)小,正負(fù)交替接近相等,以減小泄露和假頻。因此在選擇窗函數(shù)的時(shí)候,應(yīng)考慮被分析信號(hào)的性質(zhì)和處理要求,如果僅要求精確求出主瓣頻率,而不考慮幅值精度,則可選擇用主瓣寬度比較窄而便于分辨的矩形窗,例如測(cè)量物體的自振頻率等;如果分析窄帶信號(hào),且有較強(qiáng)的干擾噪聲,則應(yīng)選用旁瓣幅度較小的窗函數(shù),如漢寧窗(Hanning)等。

為了使加窗函數(shù)后的功率譜和幅值譜不受窗函數(shù)的影響,必須根據(jù)一定的原則推導(dǎo)出恢復(fù)系數(shù)。加窗后的恢復(fù)系數(shù)一般遵守兩個(gè)原則之一:幅值相等或能量相等的原則。

因此加窗模塊要實(shí)現(xiàn)的功能:提高采樣信號(hào)分析的幅值精度。

頻譜分析中恢復(fù)系數(shù)的使用原則

在頻譜分析中,根據(jù)不同用途采用不同恢復(fù)系數(shù),在進(jìn)行倍頻程和三分之一倍頻程分析時(shí),為了使頻帶內(nèi)總能量不變,一定要采用能量相等的恢復(fù)系數(shù);而進(jìn)行譜分析時(shí),更關(guān)心的是各峰值頻率對(duì)應(yīng)的幅值,此時(shí)只能采用幅值相等的恢復(fù)系數(shù)。

常用的各種窗函數(shù)的恢復(fù)系數(shù)

2.3 A/D采樣的分析與計(jì)算

本系統(tǒng)采用的AD轉(zhuǎn)換芯片為TLC5510A,TLC5510A是采用高速CMOS技術(shù),8位的,最大轉(zhuǎn)換速率為20MSPS的AD轉(zhuǎn)換芯片。支持+5V電源供電,內(nèi)部包含采樣保持電路,輸出帶有高阻態(tài)模式,以及帶有內(nèi)部參考電阻。輸出數(shù)據(jù)在時(shí)鐘的下降沿有效,數(shù)據(jù)流水線結(jié)構(gòu)導(dǎo)致了2.5個(gè)時(shí)鐘的延時(shí)。雖然AD轉(zhuǎn)換數(shù)據(jù)輸出有2.5個(gè)時(shí)鐘延時(shí),但是只要量化的結(jié)果是正確的和數(shù)據(jù)是順序輸出,這個(gè)數(shù)據(jù)輸出延時(shí)我們可以不用關(guān)心。外部還需要接一個(gè)4V的參考電壓,這樣才能量化到0V~4V的輸入信號(hào)。TLC5510A引腳圖和時(shí)序圖如下:

圖2.3.1 TLC5510A的引腳圖

引腳功能描述:

由于TLC4F的浮點(diǎn)功能,就需要使用固件庫自帶的arm_math.h,這個(gè)文件根據(jù)編譯控制項(xiàng)(__FPU_USED == 1)來決定是使用那一種函數(shù)方法:如果沒有使用FPU,那就調(diào)用keil的標(biāo)準(zhǔn)math.h頭文件中定義的函數(shù);如果使用了FPU,那就是用固件庫自帶的優(yōu)化函數(shù)來解決問題。

在arm_math的開頭部分是有這些編譯控制信息:

#ifndef _ARM_MATH_H
#define _ARM_MATH_H
#define __CMSIS_GENERIC /* disable NVIC and Systick functions */

#if defined (ARM_MATH_CM4)
#include "core_cm4.h"
#elif defined (ARM_MATH_CM3)
#include "core_cm3.h"
#elif defined (ARM_MATH_CM0)
#include "core_cm0.h"
#else
#include "ARMCM4.h"
#warning "Define either ARM_MATH_CM4 OR ARM_MATH_CM3...By Default building on ARM_MATH_CM4....."
#endif
#undef __CMSIS_GENERIC /* enable NVIC and Systick functions */
#include "string.h"
#include "math.h"

就是說如果不使用CMSIS的,就會(huì)調(diào)用keil自帶的標(biāo)準(zhǔn)庫函數(shù)。否則就用CMSIS的定義。這里因?yàn)槭怯玫腟TM32F4固件庫還提供了其他很有用的數(shù)學(xué)函數(shù),都位于DSP_Lib文件夾。

3.有時(shí)候常會(huì)出現(xiàn)編譯錯(cuò)誤,會(huì)出現(xiàn)硬件錯(cuò)誤,導(dǎo)致MCU鎖住了,下不了程序。

解決方法就是硬件引導(dǎo)程序恢復(fù)

STM32F407雖然芯片資料說明端口可以忍受+5V的電壓,但這不代表其可以識(shí)別+5的高電平,因此在讀+5V的輸入端口電平,需要用電平轉(zhuǎn)換芯片將+5V轉(zhuǎn)換成+3.3V的,否則讀出的數(shù)據(jù)時(shí)一個(gè)錯(cuò)的。但是3.3V屬于高電平,因此其可以驅(qū)動(dòng)+5V工作的芯片。

參考文獻(xiàn)

[1] 萬永革編著. 數(shù)字信號(hào)處理的MATLAB實(shí)現(xiàn)(第2版) 北京:科學(xué)出版社,2012.5.

[2] A.V.奧本海姆著. 離散時(shí)間信號(hào)處理(第2版) 西安:西安交通大學(xué)出版社,2011.9.

[3] 李群芳著. 單片微型計(jì)算機(jī)與接口技術(shù)(第3版) 北京:電子工業(yè)出版社,2008.5.

[4] DSP常用算法的C語言實(shí)現(xiàn)

[5] Andrew Koenig著. C陷阱與缺陷. 北京:人民郵電出版社,2002.9.



評(píng)論


技術(shù)專區(qū)

關(guān)閉