湖南工業(yè)職業(yè)技術(shù)學(xué)院電氣工程學(xué)院 賀力克
湖南工業(yè)大學(xué)交通工程學(xué)院 易吉良
快速傅里葉變換(FFT)采用時(shí)間抽取或頻率抽取方式大大提高了傅里葉變換的運(yùn)算效率。但在旋轉(zhuǎn)變壓器解碼和電能質(zhì)量分析等應(yīng)用領(lǐng)域,由于信號(hào)采樣率很高,同時(shí)這些應(yīng)用中FFT算法的運(yùn)算量很大,在DSP芯片中很難實(shí)現(xiàn)實(shí)時(shí)處理。本文介紹一種采用TMS320F28335DSP實(shí)現(xiàn)高速信號(hào)采集并實(shí)時(shí)進(jìn)行FFT運(yùn)算的方法,為基于FFT的大運(yùn)算量算法的實(shí)時(shí)應(yīng)用提供一種解決方案。
以采用DSP解碼的旋轉(zhuǎn)變壓器解碼系統(tǒng)為例,其系統(tǒng)結(jié)構(gòu)框圖如圖1所示。從圖1可以看出,旋轉(zhuǎn)變壓器的三路信號(hào)Vc、Vs和Ve通過信號(hào)調(diào)理電路轉(zhuǎn)換為滿足DSP內(nèi)置AD端口需要的電壓信號(hào)V1~V3。
圖1 旋轉(zhuǎn)變壓器解碼系統(tǒng)框圖
一般上述三路信號(hào)的頻率為5KHz~10KHz,需要AD的采樣頻率為50KHz~200KHz。以10KHz信號(hào)頻率和100KHz采樣頻率為例,若在分析數(shù)據(jù)過程中截取10周期數(shù)據(jù),則待分析信號(hào)的時(shí)長(zhǎng)為0.1ms。在上述條件下,若要做到實(shí)時(shí)運(yùn)算,則芯片要在0.1ms內(nèi)要處理完數(shù)據(jù)采樣、算法運(yùn)算和其他數(shù)據(jù)通信等事務(wù)。如果每次數(shù)據(jù)采樣都需要CPU參與,而FFT沒有高效算法的情況下,一般的DSP芯片很難做到實(shí)時(shí)性。TI公司的TMS320F28335DSP芯片設(shè)計(jì)了直接存儲(chǔ)器訪問技術(shù)(DMA),AD采樣的數(shù)據(jù)直接傳送到指定的數(shù)據(jù)緩沖區(qū),不需要CPU在每個(gè)采樣周期都參與數(shù)據(jù)傳輸,只需在完成一定量的數(shù)據(jù)采集后,才通過中斷通知CPU執(zhí)行相關(guān)操作。另外,該芯片的軟件開發(fā)資源非常豐富,包括開發(fā)環(huán)境CCS和資源包c(diǎn)ontrolSUITE,為高數(shù)據(jù)采樣率和大運(yùn)算量的實(shí)時(shí)應(yīng)用提供了支持。
DMA提供了外設(shè)和存儲(chǔ)器之間的一種直接硬件傳輸數(shù)據(jù)的方式,可以大大減少CPU的開銷。為了簡(jiǎn)要描述DMA的工作原理,以ADC采樣結(jié)果傳輸?shù)絉AM的過程為例,描述TMS320F28335的DMA如何直接將AD采樣的數(shù)據(jù)傳輸?shù)街付ǖ腞AM中。
圖2中DMA的工作首先要分配好源地址和目的地址,在本例中,源地址就是AD采樣結(jié)果寄存器,而目的地址就是存放采樣結(jié)果的數(shù)據(jù)緩沖區(qū)RAM。DSP傳輸數(shù)據(jù)要用到數(shù)據(jù)總線,而這些總線都是共享的,也就是說只有在傳輸數(shù)據(jù)時(shí)才能占用。而DMA的傳輸觸發(fā)是通過中斷實(shí)現(xiàn)的,即AD一旦完成了采樣就發(fā)出中斷信號(hào),通知DMA將結(jié)果寄存器的數(shù)據(jù)取走,這時(shí)DMA就要占用數(shù)據(jù)總線,傳完數(shù)據(jù)就會(huì)自動(dòng)釋放總線。而當(dāng)數(shù)據(jù)緩沖區(qū)填滿的新的數(shù)據(jù)后,可以設(shè)置DMA發(fā)出中斷,通知CPU對(duì)緩沖區(qū)的數(shù)據(jù)進(jìn)行處理,這樣,CPU只需在DMA中斷時(shí)才提取數(shù)據(jù),節(jié)省了大量的CPU時(shí)間。
圖2 TMS320F28335DMA原理
根據(jù)上述DMA原理,使用DMA需要對(duì)相關(guān)寄存器做設(shè)置,在初始化程序中,主要利用如下幾個(gè)C語(yǔ)言函數(shù):(1)DMACH1AddrConfig( ):該函數(shù)用來(lái)配置DMA的源地址和目的地址。(2)DMACH1BurstConfig( ):該函數(shù)用于配置每幀DMA傳輸?shù)臄?shù)據(jù)量,以及每次傳輸源地址和目標(biāo)地址改變的步長(zhǎng)。(3)DMACH1TransferConfig( ):該函數(shù)用于配置傳輸幀數(shù)量,以及幀地址步長(zhǎng)。(4)DMACH1Wrap-Config( ):該函數(shù)用于定義進(jìn)行循環(huán)傳輸,以及相應(yīng)的源地址和目的地址與步長(zhǎng)。(5)DMACH1ModeConfig( ):這個(gè)函數(shù)有10個(gè)參數(shù)需要配置,關(guān)系到DMA的中斷使能和工作模式等。每個(gè)參數(shù)的具體含義需結(jié)合數(shù)據(jù)手冊(cè)中的DMA工作流程加以理解,限于篇幅,不再贅述。
在DMA完成DMACH1TransferConfig( )函數(shù)定義的數(shù)據(jù)幀后,就需要產(chǎn)生中斷,執(zhí)行interrupt void local_DINTCH1_ISR( )中斷函數(shù),在該函數(shù)中執(zhí)行FFT等算法程序。
FFT是很多應(yīng)用中的算法。在DSP中實(shí)現(xiàn)FFT有兩種方案,一種是直接根據(jù)FFT的定義編寫程序;另一種是利用TI的FFT庫(kù)函數(shù)實(shí)現(xiàn)。作者對(duì)兩種方案進(jìn)行了測(cè)試,發(fā)現(xiàn)庫(kù)函數(shù)有更高的運(yùn)算效率,下面主要介紹庫(kù)函數(shù)的應(yīng)用方法。
庫(kù)函數(shù)利用壓縮算法實(shí)現(xiàn)FFT,使得計(jì)算效率得到了很大提高。其實(shí)整個(gè)庫(kù)函數(shù)除了FFT外,還有求IFFT和求幅值等函數(shù)。庫(kù)函數(shù)的源碼在controlSUITE目錄下可以找到,基本都是采用匯編語(yǔ)言編寫。庫(kù)函數(shù)的詳細(xì)的使用方法可以從TI公司官網(wǎng)下載文檔C28x-FPU-LIB-UG.pdf進(jìn)行了解。這里主要介紹在使用庫(kù)函數(shù)過程中需要注意一些細(xì)節(jié),如輸入數(shù)據(jù)是否對(duì)齊、處理結(jié)果存放在哪些緩沖區(qū)等。
使用庫(kù)函數(shù)只要在CCS工程中添加C28x_FPU_Lib.lib庫(kù)文件和FPU.h頭文件,然后就可以直接調(diào)用FFT相關(guān)函數(shù),包括:(1)CFFT_f32( ):該函數(shù)用于計(jì)算FFT,注意該函數(shù)的參數(shù)是復(fù)數(shù)格式,在DSP中需要用兩個(gè)單元分別存放實(shí)部和虛部,且實(shí)部在前,虛部在后。(2)ICFFT_f32( ):該函數(shù)用于計(jì)算IFFT,其參數(shù)要求與CFFT_f32( )一樣。(3)abs_SP_CV_2( ):該函數(shù)用于求復(fù)數(shù)的幅值,三個(gè)參數(shù)分別是存放幅值結(jié)果,輸入的復(fù)數(shù)和數(shù)據(jù)長(zhǎng)度。
圖3 CCS調(diào)試界面
在使用庫(kù)函數(shù)求FFT時(shí)對(duì)數(shù)據(jù)存放的存儲(chǔ)單元有特殊要求,即對(duì)齊某個(gè)地址,這就需要在存儲(chǔ)器分配文件*.cmd中對(duì)相應(yīng)數(shù)據(jù)變量進(jìn)行說明。*.cmd文件中用到兩條分配存儲(chǔ)單元,即指令MEMORY和SECTIONS。其中MEMORY用于說明系統(tǒng)中有哪些可用的存儲(chǔ)器,而SECTIONS用于將定義的變量分配到可用的存儲(chǔ)器中。為了滿足FFT庫(kù)函數(shù)的要求,在SECTIONS指令中需要用到如下說明:
該語(yǔ)句的含義是將FFTRAML3s數(shù)據(jù)段定位到數(shù)據(jù)空間PAGE1的RAML3存儲(chǔ)器中,當(dāng)然PAGE1和RAML3是在MEMORY指令中定義好的。同時(shí)可以注意到,該指令后面還有ALIGN(512)的說明,它是保證FFTRAML3s對(duì)齊512個(gè)存儲(chǔ)單元,對(duì)齊的意思是該數(shù)據(jù)段的起始地址應(yīng)保證最低的N位為0,N要滿足:2N≥512。這樣CCS給FFTRAML3s分配的地址最低9位就是0。這樣做的目的是滿足DSP芯片的高效尋址方式,以使FFT算法快速執(zhí)行。
采用TMS320F28335開發(fā)板進(jìn)行測(cè)試,系統(tǒng)時(shí)鐘頻率位150MHz,利用DMA技術(shù)高速采樣,采樣頻率100kHz。利用庫(kù)函數(shù)計(jì)算128點(diǎn)FFT,測(cè)得需要機(jī)器周期為5926,如圖3所示??梢运愠鲎?28點(diǎn)的FFT時(shí)間為:5926×6.67ns=0.039766ms,而128數(shù)據(jù)時(shí)間為0.128ms,因此,在上述條件下能夠?qū)崿F(xiàn)FFT的實(shí)時(shí)運(yùn)算。
綜上所述,利用TMS320F28335的DMA技術(shù)和FFT庫(kù)函數(shù),能夠?qū)崿F(xiàn)數(shù)據(jù)的高頻采集和FFT算法的快速運(yùn)算,滿足對(duì)信號(hào)采集和頻譜分析的實(shí)時(shí)性要求極高的應(yīng)用場(chǎng)合。