基于stm32f4的高速信號頻譜分析儀
系統(tǒng)設(shè)計任務(wù)
本文引用地址:http://m.butianyuan.cn/article/201611/316133.htm一、任務(wù)
設(shè)計并制作一個高速頻譜分析儀。
1系統(tǒng)方案
本系統(tǒng)由前置匹配放大電路,AD采樣電路,高速FIFO緩存電路,以及液晶顯示電路組成。其中高速數(shù)據(jù)緩存電路,以及高精度的顯示數(shù)據(jù)是本次設(shè)計的難點!下面分別論證這幾個模塊的選擇。
系統(tǒng)框圖
1.1測量方法的論證與選擇
1.1.1 MCU處理器的比較與選擇
做DSP處理主要是要考慮到運算速度。
在處理器的選擇上通??梢圆捎?位,16位或者32位的MCU,但由于在處理信號的過程中,通常會遇到快速傅里葉FFT算法,所以會遇到大量的浮點運算,而且一個浮點數(shù)要占用四個字節(jié),故在處理過程中要占用大量的內(nèi)存,同時浮點運算速度比較慢,所以采用普通的MCU在一定時間內(nèi)難以完成,所以綜合考慮運算速度和內(nèi)存大小等因素。
本系統(tǒng)采用32位的STM32F407做為核心DSP處理器件,該芯片具有1MB的Flash閃存空間,196KB的SRAM空間,并且時鐘頻率達到了168MHz。程序運行于168MHz主頻時,通過Flash取指令(不是內(nèi)部SRAM),通過Dhrysone測試得到210DMIPS,主要采用ART加速器,可以最大限度的消除Flash存儲器較慢從而限制MCU性能的發(fā)揮,這可以使CPU可以在所有工作頻率下近乎零等待的方式,從Flash中運行程序。還有就是STM32F407帶有硬件FPU處理單元,這樣可以不用軟件算法實現(xiàn)浮點運算,而直接采用硬件來實現(xiàn)浮點運算,這樣就減小了編譯器生成的代碼量,并且使用更方便,浮點數(shù)只占用四個字節(jié)就可以表示的數(shù)據(jù)范圍很大,因此不用擔心計算后的數(shù)據(jù)溢出問題!進一步提高運算速度。
1.1.2 采樣方法比較與選擇
方案一 通過DDS集成芯片產(chǎn)生一個頻率穩(wěn)定度和精度相當高的方波信號作為時鐘信號。
可選用直接數(shù)字頻率合成(DDS)芯片AD9851,AD9851為ADI公司生產(chǎn)的高性能器件,可與單片機通過簡單的接口完成串行或者并行通信??赏瓿赏獠枯斎腩l率控制字與芯片內(nèi)部頻率相位控制字之間的轉(zhuǎn)換,可以非常容易的通過頻率控制字調(diào)整輸出頻率,以及精確的調(diào)整輸出信號的相位,輸出信號幅值穩(wěn)定,但是由于DDS控制也需要占用一部分MCU的IO口資源,并且DDS在價格上成本有點高。
方案二 直接由MCU產(chǎn)生PWM波做為采樣時鐘信號。
可直接由STM32F407產(chǎn)生的PWM波,可實現(xiàn)頻率,占空比可調(diào)的方波。最快IO口翻轉(zhuǎn)速度可以達到84MHz,可以輕松實現(xiàn)想要的采樣頻率。由于輸出的是3.3V的幅值的電壓,與外圍芯片相連,需要經(jīng)過電平轉(zhuǎn)換芯片轉(zhuǎn)成5V,才能作為外圍芯片的時鐘信號。
方案三 采樣時鐘信號選用Linear公司生產(chǎn)的LTC1799提供。
LTC1799是一款精準型振蕩器,使用方便。它采用2.7V到5.5V單電源工作,并提供了軌至軌、占空比為50%的方波輸出。CMOS輸出驅(qū)動器確保了快速上升/下降時間和軌至軌開關(guān)操作。頻率設(shè)定通過電阻器調(diào)節(jié),電阻阻值在 的范圍內(nèi)變化,以選擇處于100KHz到33MHz之間的任何一個頻率。三態(tài)DIV輸入負責決定驅(qū)動輸出之前對主時鐘進行1、10或100分頻。
綜合上述方案,選擇方案三,采用一片LTC1799來產(chǎn)生15MHz的采樣時鐘信號。
1.1.3 AD采樣芯片的論證與選擇
方案一 采用MCU內(nèi)部ADC對采樣信號進行采樣。
STM32F407內(nèi)部最大轉(zhuǎn)換速率為7.2MSPS,而且被采樣信號的幅值只能在0V到3.3V之間,能測得動態(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ù)據(jù)流水線結(jié)構(gòu)導(dǎo)致了2.5個時鐘的延時。而且高速AD普遍價格比較昂貴,在滿足輸入信號在2V以上動態(tài)范圍,TI公司可供申請的高速AD芯片只有TLC5510A這一種。
綜合上述方案,選擇方案二,在精度要求不高場合,采用TLC5510A作為高速采樣芯片。
1.1.4 高速數(shù)據(jù)緩存芯片的論證與選擇
由于15MHz的高速數(shù)據(jù)流,如果中斷來標記數(shù)據(jù)流的地址,由于MCU的中斷響應(yīng)時間有限,有12個時鐘周期的中斷延時,因此就需要外部存儲器做高速數(shù)據(jù)緩存。
方案一 采用SRAM芯片作為外部高速數(shù)據(jù)緩存芯片。
采用IDT71024來做高速緩存,由于SRAM提供了地址線端口和數(shù)據(jù)輸入和輸出端口,如果用MCU來控制的SRAM的地址線,中斷響應(yīng)不過來是反應(yīng)不過來,如果用計數(shù)器作為地址計數(shù)器,原理是可以,但是實際操作效果不佳。
方案二 采用FIFO芯片作為外部高速數(shù)據(jù)緩存芯片。
IDT7205是單向異步FIFO的典型芯片,由IDT公司生產(chǎn)的,是一種高速、低功耗的先進先出雙端口存儲緩沖器。這種FIFO芯片內(nèi)部的雙端口RAM具有2套數(shù)據(jù)線,分別執(zhí)行輸入和輸出功能,各自獨立的寫讀指針分別在寫、讀時鐘的控制下順序地從RAM中寫、讀數(shù)據(jù)。
綜合上述方案,選擇方案二,它無地址線,布線簡單,只能是順序存取。
系統(tǒng)理論分析與計算
2.1快速傅里葉變換(FFT)
DFT(離散傅里葉變換)是數(shù)字信號分析與處理中的一種重要變換,它可以使數(shù)字信號處理可以在頻域內(nèi)采用數(shù)值運算的方法進行,大大增加了數(shù)字信號處理的靈活性,但直接計算DFT的計算量與變換區(qū)間長度N的平方成正比,當N較大時,計算量太大,所以在快速傅里葉變換(FFT)出現(xiàn)以前,直接用DFT算法進行譜分析和信號的實時處理是不切實際的。
DFT的定義:設(shè) 是一個長度為N的有限長序列,定義 的N點離散傅里葉變換為
能提高DFT速度的唯一可利用的是因子 。 稱為旋轉(zhuǎn)因子,可表示為具有以下兩個重要性質(zhì)。
①對稱性
②周期性
利用 的周期性和對稱性可把DFT的計算次數(shù)大大減小。
DFT分解法基本上分為兩類:一類是將時間序列X(n) (n 為時間標號)進行逐次分解,由此得到的FFT算法稱為按時間抽取算法,另一類是將傅里葉交換序列X(k) ( k為頻率標號)進行分解,叫做按頻率抽取算法。對每一算法,按基本的蝶形運算的構(gòu)成又可分為基2、基4、基8以及任意因子等的FFT算法。不同基的FFT算法所需的計算量略有差異。之所以說略有差異是指并無數(shù)量級上的差異,甚至無成倍的差別。只是某種基的算法比另一種省幾分之幾而已。
而本方案采用的就是ST公司官方固件庫里DSP庫中已經(jīng)寫好的關(guān)于FFT的庫函數(shù),調(diào)用的是基4復(fù)數(shù)序列1024個點的FFT函數(shù)庫。
假設(shè)FFT之后某點n用復(fù)數(shù)表示,那么這個復(fù)數(shù)的模就是,相位就是,頻率就是,(其中N表示FFT要做的點數(shù),n表示排序的點,F(xiàn)s為采樣頻率)。根據(jù)以上的結(jié)果,就可以計算出n點,
所對應(yīng)信號的表達式為:
而對于n=1的點信號,是直流分量,幅度即為:
因此對于直流量要特殊考慮,一是幅值是其它頻率點的2倍,二是直流量不含有相位信息。
但是由于所做的點數(shù)有限,其會造成頻譜泄露是必然的。因此并非要計算所有點的幅值,相位以及頻率信息,而只需要計算出各個峰值點的幅值,相位以及頻率即可表示采樣信號各諧波分量的全部信息。
因此算法模塊要實現(xiàn)的功能:保存FFT之后峰值點的實部和虛部,以及峰值點所處的位置這幾組點即可。
2.2窗函數(shù)的分析與計算
在頻譜分析過程中,加窗是提高信號分析精度的一個重要措施,對加窗函數(shù)的基本要求:時域為改善截斷處的不連續(xù)狀態(tài)(由于吉布斯現(xiàn)象造成的振蕩);頻域為窗譜的主瓣窄而高,以提高分辨率,旁瓣幅值應(yīng)小,正負交替接近相等,以減小泄露和假頻。因此在選擇窗函數(shù)的時候,應(yīng)考慮被分析信號的性質(zhì)和處理要求,如果僅要求精確求出主瓣頻率,而不考慮幅值精度,則可選擇用主瓣寬度比較窄而便于分辨的矩形窗,例如測量物體的自振頻率等;如果分析窄帶信號,且有較強的干擾噪聲,則應(yīng)選用旁瓣幅度較小的窗函數(shù),如漢寧窗(Hanning)等。
為了使加窗函數(shù)后的功率譜和幅值譜不受窗函數(shù)的影響,必須根據(jù)一定的原則推導(dǎo)出恢復(fù)系數(shù)。加窗后的恢復(fù)系數(shù)一般遵守兩個原則之一:幅值相等或能量相等的原則。
因此加窗模塊要實現(xiàn)的功能:提高采樣信號分析的幅值精度。
頻譜分析中恢復(fù)系數(shù)的使用原則
在頻譜分析中,根據(jù)不同用途采用不同恢復(fù)系數(shù),在進行倍頻程和三分之一倍頻程分析時,為了使頻帶內(nèi)總能量不變,一定要采用能量相等的恢復(fù)系數(shù);而進行譜分析時,更關(guān)心的是各峰值頻率對應(yīng)的幅值,此時只能采用幅值相等的恢復(fù)系數(shù)。
常用的各種窗函數(shù)的恢復(fù)系數(shù)
2.3 A/D采樣的分析與計算
本系統(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ù)據(jù)流水線結(jié)構(gòu)導(dǎo)致了2.5個時鐘的延時。雖然AD轉(zhuǎn)換數(shù)據(jù)輸出有2.5個時鐘延時,但是只要量化的結(jié)果是正確的和數(shù)據(jù)是順序輸出,這個數(shù)據(jù)輸出延時我們可以不用關(guān)心。外部還需要接一個4V的參考電壓,這樣才能量化到0V~4V的輸入信號。TLC5510A引腳圖和時序圖如下:
圖2.3.1 TLC5510A的引腳圖
引腳功能描述:
由于TLC
在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的,就會調(diào)用keil自帶的標準庫函數(shù)。否則就用CMSIS的定義。這里因為是用的STM
3.有時候常會出現(xiàn)編譯錯誤,會出現(xiàn)硬件錯誤,導(dǎo)致MCU鎖住了,下不了程序。
解決方法就是硬件引導(dǎo)程序恢復(fù)
STM32F407雖然芯片資料說明端口可以忍受+5V的電壓,但這不代表其可以識別+5的高電平,因此在讀+5V的輸入端口電平,需要用電平轉(zhuǎn)換芯片將+5V轉(zhuǎn)換成+3.3V的,否則讀出的數(shù)據(jù)時一個錯的。但是3.3V屬于高電平,因此其可以驅(qū)動+5V工作的芯片。
參考文獻
[1] 萬永革編著. 數(shù)字信號處理的MATLAB實現(xiàn)(第2版) 北京:科學出版社,2012.5.
[2] A.V.奧本海姆著. 離散時間信號處理(第2版) 西安:西安交通大學出版社,2011.9.
[3] 李群芳著. 單片微型計算機與接口技術(shù)(第3版) 北京:電子工業(yè)出版社,2008.5.
[4] DSP常用算法的C語言實現(xiàn)
[5] Andrew Koenig著. C陷阱與缺陷. 北京:人民郵電出版社,2002.9.
評論