摘 要: 介紹了一種基于FPGA與USB2.0的雙通道實時數(shù)據(jù)采集與處理系統(tǒng)。該系統(tǒng)采用XC3S1200E芯片作為核心處理芯片,,CY7C68013作為USB接口芯片,,通過FPGA內(nèi)部的控制模塊控制A/D數(shù)據(jù)轉(zhuǎn)換和USB的數(shù)據(jù)傳輸,并在FPGA內(nèi)部完成數(shù)據(jù)的處理,。實驗證明,,該系統(tǒng)基本能滿足設(shè)計的要求,計算出所求粒子的直徑,。
關(guān)鍵詞: 數(shù)據(jù)采集,;A/D;FPGA,;USB2.0
數(shù)據(jù)采集系統(tǒng)正越來越多地應(yīng)用于控制和測試領(lǐng)域,,在某些特定的領(lǐng)域,數(shù)據(jù)采集系統(tǒng)所起的作用也越來越大[1],。傳統(tǒng)的數(shù)據(jù)采集方法通常采用DSP作為核心芯片,,DSP雖然運行速度快,但是不能完成外圍的硬件邏輯控制,。FPGA時鐘頻率相對較高且延時小,,F(xiàn)PGA采用IP內(nèi)核技術(shù),可以集成外圍控制和接口電路[2],。本文根據(jù)項目需要,,設(shè)計了一種基于FPGA的雙通道、最大采樣率為5 Mb/s的通用數(shù)據(jù)采集與實時處理系統(tǒng),。
1 系統(tǒng)方案設(shè)計
數(shù)據(jù)采集和處理系統(tǒng)主要由信號調(diào)理電路,、A/D轉(zhuǎn)換器、FPGA和USB四部分組成,,如圖1所示,。
信號調(diào)理電路的作用是對所采集的模擬信號進(jìn)行放大、濾波,,將單路信號轉(zhuǎn)變?yōu)椴罘中盘?,?qū)動A/D轉(zhuǎn)換器的正常工作。本文選用TI公司的全差動運算放大器THS4503,它是模數(shù)轉(zhuǎn)換器ADS1605的數(shù)據(jù)手冊中推薦的運算放大器[3],。
A/D轉(zhuǎn)換器在FPGA內(nèi)的控制模塊控制下,,將所采集的模擬信號轉(zhuǎn)換為16 bit的數(shù)字信號,傳入FPGA中進(jìn)行處理,。本系統(tǒng)所采用的模數(shù)轉(zhuǎn)換器為TI公司的ADS1605,。
FPGA芯片采用的是Xilinx公司的Spartan 3E系列中的XC3S1200E。FPGA為本系統(tǒng)的核心部分,,控制A/D轉(zhuǎn)換器的數(shù)據(jù)轉(zhuǎn)換,,并將A/D轉(zhuǎn)換來的數(shù)據(jù)進(jìn)行FFT處理。同時,,F(xiàn)PGA的USB接口控制邏輯查詢CY7C68013是否空閑,,控制USB將處理完的數(shù)據(jù)傳遞給主機,并在PC機中顯示出來,,實現(xiàn)數(shù)據(jù)的可視化顯示和人機接口的互動,。
CY7C68013是Cypress公司推出的EZ-USB FX2系列的USB接口芯片,其作用是在FPGA的接口控制邏輯下,,把處理完的數(shù)據(jù)傳遞給主機,。
本系統(tǒng)的工作原理為:該系統(tǒng)可以完成兩路中頻信號的采樣處理,單路信號經(jīng)過THS4503后轉(zhuǎn)變?yōu)椴罘中盘?,輸入到模?shù)轉(zhuǎn)換器中,,F(xiàn)PGA中的A/D控制模塊向ADS1605發(fā)送采樣控制指令,A/D轉(zhuǎn)換器在控制模塊控制下進(jìn)行數(shù)據(jù)采集,,將模擬信號轉(zhuǎn)換成16 bit的數(shù)據(jù)信號,,并依次選通兩片A/D通道,,實現(xiàn)由A/D轉(zhuǎn)換器到FPGA的雙通道數(shù)據(jù)傳輸,。當(dāng)采集的數(shù)據(jù)達(dá)到處理條件后,相應(yīng)的數(shù)據(jù)在FPGA中進(jìn)行FFT計算,。計算完成后,,將處理過的數(shù)據(jù)在FPGA的USB接口控制邏輯下,經(jīng)過USB接口傳遞給主機,,當(dāng)數(shù)據(jù)傳遞完成后,,再進(jìn)行下一次的數(shù)據(jù)采集和處理。
2 系統(tǒng)硬件設(shè)計
2.1 信號調(diào)理電路
A/D轉(zhuǎn)換器的前端需要運放來驅(qū)動,,本設(shè)計中的信號調(diào)理電路采用TI公司的全差動運算放大器THS4503,。經(jīng)過信號調(diào)理電路后,單路信號轉(zhuǎn)變?yōu)椴罘中盘?,輸入到A/D轉(zhuǎn)換器中,。
全差動放大器的特點為:具有高分辨率、高精度以及出色的動態(tài)范圍,。THS4503就是一種高精度的全差動運放,,選擇它作為ADC的緩沖器可以簡化方案的設(shè)計[4],。
2.2 A/D轉(zhuǎn)換電路
A/D轉(zhuǎn)換電路是系統(tǒng)的重要組成部分,其與FPGA的連接如圖2所示,。
ADS1605是TI生產(chǎn)的一款高采樣率,、高精度、易使用的16 bit ΔΣ模數(shù)轉(zhuǎn)換器,,ADS1605的工作電源為+5 V的模擬電源和+3 V的數(shù)字電源,,獨立的數(shù)字I/O電源設(shè)計使芯片可靈活與其他邏輯芯片接口[3]。ADS1605需要外接時鐘源進(jìn)行工作,。本系統(tǒng)外接頻率為50 MHz的晶振時鐘源,,經(jīng)過FPGA分頻后,為ADS1605提供正常工作所需的頻率,。
ADS1605在FPGA的控制模塊下正常工作,。ADS1605的控制模塊對ADS1605的控制進(jìn)程為:
(1)狀態(tài)0:CS、RD置1,,RESET置0,,初始化ADS1605,進(jìn)入狀態(tài)1,。
(2)狀態(tài)1:CS置0,,RD置1,RESET置1,,開始數(shù)據(jù)轉(zhuǎn)換,,進(jìn)入狀態(tài)2。
(3)狀態(tài)2:CS置0,,RD置1,,RESET置1,檢測DRDY的狀態(tài),,若下降沿來臨,,進(jìn)入狀態(tài)3;否則,,繼續(xù)等待DRDY下降沿的到來,。
(4)狀態(tài)3:CS置0,RD[0]置0,,RESET置1,,輸出一通道轉(zhuǎn)換好的數(shù)據(jù),進(jìn)入狀態(tài)4,。
(5)狀態(tài)4:CS置0,,RD[1]置0,RESET置1,輸出兩通道轉(zhuǎn)換好的數(shù)據(jù),,進(jìn)入初始狀態(tài),。
2.3 FPGA的設(shè)計
本系統(tǒng)采用的是Xilinx公司的Spartan 3E系列的XC3S1200E芯片,它更好地利用了90 nm工藝,,擁有的系統(tǒng)門數(shù)達(dá)到120萬,,28個乘法器,504 KB的塊RAM,,136 KB的分布式RAM,,8個數(shù)字時鐘管理模塊,最大可用管腳可達(dá)304個,,它性價比也較高[2],。
XC3S1200E是基于SRAM工藝的查找表結(jié)構(gòu),它不具備非易失特性,,因此斷電后將丟失內(nèi)部邏輯配置,。在每次上電后,都需要從外部非易失存儲器(如PROM,、Flash存儲器等)中導(dǎo)入配置比特流,。本系統(tǒng)選用的是XCF04S芯片,這是FPGA數(shù)據(jù)手冊上提供的配置芯片[5],。
FPGA是本系統(tǒng)的核心部分,,構(gòu)成了數(shù)據(jù)采集系統(tǒng)和數(shù)據(jù)傳輸系統(tǒng)的“橋梁”,完成了對ADS的控制,,并對采集到的數(shù)據(jù)進(jìn)行存儲和處理,,同時也完成了對CY7C68013的控制。使用FPGA使電路得到了簡化,,不需要額外的分立器件來存儲數(shù)據(jù),。在FPGA內(nèi)部構(gòu)成了以下幾個模塊。
(1)兩片F(xiàn)IFO數(shù)據(jù)存儲模塊
FIFO數(shù)據(jù)存儲模塊主要用來存儲A/D轉(zhuǎn)換的數(shù)據(jù),。由于需要同時采集兩路信號(一路熒光信號,,一路多普勒信號),,因此需要兩個FIFO模塊,,這樣易于對數(shù)據(jù)的存儲和控制。
(2)數(shù)據(jù)處理模塊
本系統(tǒng)需要把采集到的數(shù)據(jù)進(jìn)行處理,,所以數(shù)據(jù)處理模塊是很重要的組成部分,。
在數(shù)據(jù)處理模塊中,首先將一路通道采集到的熒光信號數(shù)據(jù)進(jìn)行32個數(shù)據(jù)的求平均操作,,以預(yù)觸發(fā)兩個通道的信號,,然后再對一路通道的數(shù)據(jù)進(jìn)行最大值和最小值計算,通過這兩個數(shù)據(jù)求出熒光信號的寬度。對另一通道中的多普勒信號進(jìn)行FFT計算,。通過兩通道得到的數(shù)據(jù)計算出所求粒子的直徑,。
(3)控制模塊
控制模塊主要完成對ADS1605、FIFO存儲模塊和CY7C68013的控制,,這是整個系統(tǒng)的關(guān)鍵,。控制模塊將產(chǎn)生控制信號,,實現(xiàn)系統(tǒng)的數(shù)據(jù)采集,、處理和傳輸功能。
(4)分頻倍頻模塊
系統(tǒng)提供的FPGA外部時鐘頻率為50 MHz,,經(jīng)過分頻倍頻模塊將外部時鐘轉(zhuǎn)換成各個芯片工作所需的頻率,。
2.4 USB的設(shè)計
2.4.1 USB與FPGA的接口設(shè)計
在USB設(shè)計中,為了保持較高的傳輸速度,,使用不經(jīng)過CPU的SLAVEFIFO控制模式,。
接口方式如圖3所示:
本系統(tǒng)選用的芯片是Cypress公司的CY7C68013芯片。該模塊的工作過程為:當(dāng)采集的數(shù)據(jù)在FPGA中處理完后,,F(xiàn)PGA根據(jù)SLAVEFIFO的控制時序產(chǎn)生相應(yīng)的控制信號,,將在FPGA中的數(shù)據(jù)傳輸給EZ-IJSB FX2的內(nèi)部端點FIFO,而當(dāng)內(nèi)部端點存儲滿后,,F(xiàn)X2自動將數(shù)據(jù)傳輸?shù)絇C機上[6],。外部控制器FPGA對FX2的控制進(jìn)程如下:
(1)IDLE:空閑狀態(tài),此時如果寫事件發(fā)生,,將轉(zhuǎn)向狀態(tài)1,。
(2)狀態(tài)1:指向IN FIFO,觸發(fā)FIFOADR[1:0],,轉(zhuǎn)向狀態(tài)2,。
(3)狀態(tài)2:如果FIFO滿標(biāo)志為假,則轉(zhuǎn)向狀態(tài)3,;否則,,保持在狀態(tài)2。
(4)狀態(tài)3:驅(qū)動數(shù)據(jù)到總線上,,通過觸發(fā)SLWR來寫數(shù)據(jù)到FIFO,,并增加FIFO指針,然后轉(zhuǎn)向狀態(tài)4,。
(5)狀態(tài)4:如果還有數(shù)據(jù)寫,,轉(zhuǎn)向狀態(tài)2,否則,,轉(zhuǎn)向IDLE,。
2.4.2 USB接口芯片固件程序
固件程序是指運行設(shè)備CPU中的程序,,只有在運行該程序的時候,外設(shè)才能稱為具有給定功能的外圍設(shè)備,。在該系統(tǒng)中,,CY7C68013芯片的固件程序的主要功能就是輔助硬件系統(tǒng)工作,完成對設(shè)備的初始化,,處理應(yīng)用程序和驅(qū)動程序發(fā)送的各種命令和數(shù)據(jù)交換,。
Cypress公司為使用FX2芯片的用戶提供了一個完整的固件開發(fā)框架,用戶只需要在框架的基礎(chǔ)上提供一個USB描述符表,,添加其他端點接收和發(fā)送數(shù)據(jù)的通信代碼以及控制外圍電路的程序代碼,,即可完成固件的開發(fā)。該固件所使用的編程工具是Keil公司的C51編譯器[6],。
本文主要介紹了基于Xilinx公司XC3S1200E FPGA的數(shù)據(jù)采集與實時處理系統(tǒng),,采用計算機的USB接口作為數(shù)據(jù)傳輸接口。本系統(tǒng)利用FPGA內(nèi)部模塊來實現(xiàn)數(shù)據(jù)處理,,采用Verilog生成的狀態(tài)機來控制各個模塊的連接,,實現(xiàn)數(shù)據(jù)的采集、轉(zhuǎn)換,、處理和傳輸,。本文的創(chuàng)新點在于:利用FPGA生成了各個接口的控制模塊,并利用FPGA內(nèi)部的IP核完成了對數(shù)據(jù)的FFT計算,,簡化了硬件的設(shè)計,,使系統(tǒng)變的簡潔。在應(yīng)用中可以根據(jù)任務(wù)的不同改換內(nèi)部的數(shù)據(jù)處理模塊,,使系統(tǒng)可以靈活地處理各種數(shù)據(jù)采集處理任務(wù),。
參考文獻(xiàn)
[1] 沈蘭蓀.數(shù)據(jù)采集技術(shù)[M].北京:中國科學(xué)技術(shù)大學(xué)出版社,1990.
[2] 田耘,,徐文波,,胡彬.Xilinx ISE design suite 10.x FPGA開發(fā)指南[M].北京:人民郵電出版社,2008.
[3] Texas Instruments. ADS1605 data book.2007.5.
[4] Texas Instruments.THS4503 data book.2004.
[5] Xilinx.Xilinx Spartan-3E FPGA family data sheet,,2009.8.
[6] 薛園園.USB應(yīng)用開發(fā)技術(shù)大全[M].北京:人民郵電出版社,,2007.