趙樂森,王旭柱
(中國海洋大學(xué) 信息科學(xué)與工程學(xué)院 電子系,山東 青島 266100)
數(shù)據(jù)采集系統(tǒng)正越來越多地應(yīng)用于控制和測試領(lǐng)域,在某些特定的領(lǐng)域,數(shù)據(jù)采集系統(tǒng)所起的作用也越來越大[1]。傳統(tǒng)的數(shù)據(jù)采集方法通常采用DSP作為核心芯片,DSP雖然運(yùn)行速度快,但是不能完成外圍的硬件邏輯控制。FPGA時(shí)鐘頻率相對較高且延時(shí)小,F(xiàn)PGA采用IP內(nèi)核技術(shù),可以集成外圍控制和接口電路[2]。本文根據(jù)項(xiàng)目需要,設(shè)計(jì)了一種基于FPGA的雙通道、最大采樣率為5 Mb/s的通用數(shù)據(jù)采集與實(shí)時(shí)處理系統(tǒng)。
數(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公司的全差動運(yùn)算放大器THS4503,它是模數(shù)轉(zhuǎn)換器ADS1605的數(shù)據(jù)手冊中推薦的運(yùn)算放大器[3]。
A/D轉(zhuǎn)換器在FPGA內(nèi)的控制模塊控制下,將所采集的模擬信號轉(zhuǎn)換為16 bit的數(shù)字信號,傳入FPGA中進(jìn)行處理。本系統(tǒng)所采用的模數(shù)轉(zhuǎn)換器為TI公司的ADS1605。
圖1 實(shí)時(shí)數(shù)據(jù)采集與處理系統(tǒng)框圖
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處理。同時(shí),F(xiàn)PGA的USB接口控制邏輯查詢CY7C68013是否空閑,控制USB將處理完的數(shù)據(jù)傳遞給主機(jī),并在PC機(jī)中顯示出來,實(shí)現(xiàn)數(shù)據(jù)的可視化顯示和人機(jī)接口的互動。
CY7C68013是Cypress公司推出的EZ-USB FX2系列的USB接口芯片,其作用是在FPGA的接口控制邏輯下,把處理完的數(shù)據(jù)傳遞給主機(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通道,實(shí)現(xiàn)由A/D轉(zhuǎn)換器到FPGA的雙通道數(shù)據(jù)傳輸。當(dāng)采集的數(shù)據(jù)達(dá)到處理?xiàng)l件后,相應(yīng)的數(shù)據(jù)在FPGA中進(jìn)行FFT計(jì)算。計(jì)算完成后,將處理過的數(shù)據(jù)在FPGA的USB接口控制邏輯下,經(jīng)過USB接口傳遞給主機(jī),當(dāng)數(shù)據(jù)傳遞完成后,再進(jìn)行下一次的數(shù)據(jù)采集和處理。
A/D轉(zhuǎn)換器的前端需要運(yùn)放來驅(qū)動,本設(shè)計(jì)中的信號調(diào)理電路采用TI公司的全差動運(yùn)算放大器THS4503。經(jīng)過信號調(diào)理電路后,單路信號轉(zhuǎn)變?yōu)椴罘中盘?,輸入到A/D轉(zhuǎn)換器中。
全差動放大器的特點(diǎn)為:具有高分辨率、高精度以及出色的動態(tài)范圍。THS4503就是一種高精度的全差動運(yùn)放,選擇它作為ADC的緩沖器可以簡化方案的設(shè)計(jì)[4]。
A/D轉(zhuǎn)換電路是系統(tǒng)的重要組成部分,其與FPGA的連接如圖2所示。
圖2 ADS1605與FPGA的接口框圖
ADS1605是TI生產(chǎn)的一款高采樣率、高精度、易使用的16 bit ΔΣ模數(shù)轉(zhuǎn)換器,ADS1605的工作電源為+5 V的模擬電源和+3 V的數(shù)字電源,獨(dú)立的數(shù)字I/O電源設(shè)計(jì)使芯片可靈活與其他邏輯芯片接口[3]。ADS1605需要外接時(shí)鐘源進(jìn)行工作。本系統(tǒng)外接頻率為50 MHz的晶振時(shí)鐘源,經(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)。
本系統(tǒng)采用的是Xilinx公司的Spartan 3E系列的XC3S1200E芯片,它更好地利用了90 nm工藝,擁有的系統(tǒng)門數(shù)達(dá)到120萬,28個(gè)乘法器,504 KB的塊 RAM,136 KB的分布式RAM,8個(gè)數(shù)字時(shí)鐘管理模塊,最大可用管腳可達(dá)304個(gè),它性價(jià)比也較高[2]。
XC3S1200E是基于SRAM工藝的查找表結(jié)構(gòu),它不具備非易失特性,因此斷電后將丟失內(nèi)部邏輯配置。在每次上電后,都需要從外部非易失存儲器 (如PROM、Flash存儲器等)中導(dǎo)入配置比特流。本系統(tǒng)選用的是XC F04S芯片,這是FPGA數(shù)據(jù)手冊上提供的配置芯片[5]。
FPGA是本系統(tǒng)的核心部分,構(gòu)成了數(shù)據(jù)采集系統(tǒng)和數(shù)據(jù)傳輸系統(tǒng)的“橋梁”,完成了對 ADS的控制,并對采集到的數(shù)據(jù)進(jìn)行存儲和處理,同時(shí)也完成了對CY7C68013的控制。使用FPGA使電路得到了簡化,不需要額外的分立器件來存儲數(shù)據(jù)。在FPGA內(nèi)部構(gòu)成了以下幾個(gè)模塊。
FIFO數(shù)據(jù)存儲模塊主要用來存儲A/D轉(zhuǎn)換的數(shù)據(jù)。由于需要同時(shí)采集兩路信號(一路熒光信號,一路多普勒信號),因此需要兩個(gè)FIFO模塊,這樣易于對數(shù)據(jù)的存儲和控制。
(2)數(shù)據(jù)處理模塊
本系統(tǒng)需要把采集到的數(shù)據(jù)進(jìn)行處理,所以數(shù)據(jù)處理模塊是很重要的組成部分。
在數(shù)據(jù)處理模塊中,首先將一路通道采集到的熒光信號數(shù)據(jù)進(jìn)行32個(gè)數(shù)據(jù)的求平均操作,以預(yù)觸發(fā)兩個(gè)通道的信號,然后再對一路通道的數(shù)據(jù)進(jìn)行最大值和最小值計(jì)算,通過這兩個(gè)數(shù)據(jù)求出熒光信號的寬度。對另一通道中的多普勒信號進(jìn)行FFT計(jì)算。通過兩通道得到的數(shù)據(jù)計(jì)算出所求粒子的直徑。
(3)控制模塊
控制模塊主要完成對ADS1605、FIFO存儲模塊和CY7C68013的控制,這是整個(gè)系統(tǒng)的關(guān)鍵。控制模塊將產(chǎn)生控制信號,實(shí)現(xiàn)系統(tǒng)的數(shù)據(jù)采集、處理和傳輸功能。
(4)分頻倍頻模塊
系統(tǒng)提供的FPGA外部時(shí)鐘頻率為50 MHz,經(jīng)過分頻倍頻模塊將外部時(shí)鐘轉(zhuǎn)換成各個(gè)芯片工作所需的頻率。
京津冀協(xié)同發(fā)展戰(zhàn)略是河北省實(shí)現(xiàn)跨越式發(fā)展的歷史機(jī)遇。河北省只有立足現(xiàn)實(shí)、抓住機(jī)遇,才能構(gòu)建起有效的人才支撐體系,為河北省經(jīng)濟(jì)社會發(fā)展服務(wù)。
2.4.1 USB與FPGA的接口設(shè)計(jì)
在USB設(shè)計(jì)中,為了保持較高的傳輸速度,使用不經(jīng)過CPU的SLAVEFIFO控制模式。
接口方式如圖3所示:
圖3 USB與FPGA的接口框圖
本系統(tǒng)選用的芯片是Cypress公司的CY7C68013芯片。該模塊的工作過程為:當(dāng)采集的數(shù)據(jù)在FPGA中處理完后,F(xiàn)PGA根據(jù)SLAVEFIFO的控制時(shí)序產(chǎn)生相應(yīng)的控制信號,將在FPGA中的數(shù)據(jù)傳輸給EZ-IJSB FX2的內(nèi)部端點(diǎn)FIFO,而當(dāng)內(nèi)部端點(diǎn)存儲滿后,F(xiàn)X2自動將數(shù)據(jù)傳輸?shù)絇C機(jī)上[6]。外部控制器FPGA對FX2的控制進(jìn)程如下:
(1)IDLE:空閑狀態(tài),此時(shí)如果寫事件發(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接口芯片固件程序
固件程序是指運(yùn)行設(shè)備CPU中的程序,只有在運(yùn)行該程序的時(shí)候,外設(shè)才能稱為具有給定功能的外圍設(shè)備。在該系統(tǒng)中,CY7C68013芯片的固件程序的主要功能就是輔助硬件系統(tǒng)工作,完成對設(shè)備的初始化,處理應(yīng)用程序和驅(qū)動程序發(fā)送的各種命令和數(shù)據(jù)交換。
Cypress公司為使用FX2芯片的用戶提供了一個(gè)完整的固件開發(fā)框架,用戶只需要在框架的基礎(chǔ)上提供一個(gè)USB描述符表,添加其他端點(diǎn)接收和發(fā)送數(shù)據(jù)的通信代碼以及控制外圍電路的程序代碼,即可完成固件的開發(fā)。該固件所使用的編程工具是Keil公司的C51編譯器[6]。
本文主要介紹了基于Xilinx公司XC3S1200E FPGA的數(shù)據(jù)采集與實(shí)時(shí)處理系統(tǒng),采用計(jì)算機(jī)的USB接口作為數(shù)據(jù)傳輸接口。本系統(tǒng)利用FPGA內(nèi)部模塊來實(shí)現(xiàn)數(shù)據(jù)處理,采用Verilog生成的狀態(tài)機(jī)來控制各個(gè)模塊的連接,實(shí)現(xiàn)數(shù)據(jù)的采集、轉(zhuǎn)換、處理和傳輸。本文的創(chuàng)新點(diǎn)在于:利用FPGA生成了各個(gè)接口的控制模塊,并利用FPGA內(nèi)部的IP核完成了對數(shù)據(jù)的FFT計(jì)算,簡化了硬件的設(shè)計(jì),使系統(tǒng)變的簡潔。在應(yīng)用中可以根據(jù)任務(wù)的不同改換內(nèi)部的數(shù)據(jù)處理模塊,使系統(tǒng)可以靈活地處理各種數(shù)據(jù)采集處理任務(wù)。
[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.