基于FPGA的USB接口數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要:介紹了一種高速實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)。該系統(tǒng)以FPGA作為邏輯控制的核心,以USB2.0作為與上位機(jī)數(shù)據(jù)傳輸?shù)慕涌?,能同時(shí)支持單端16路和差分8路模擬信號(hào)輸入,最大采樣率為200 kHz,12位的轉(zhuǎn)換精度。描述了系統(tǒng)的主要組成和FPGA模塊化設(shè)計(jì)的實(shí)現(xiàn)方法,并給出了其核心模塊的時(shí)序仿真波形圖。
關(guān)鍵詞: FPGA; USB2.0; 數(shù)據(jù)采集; 轉(zhuǎn)換精度
傳統(tǒng)的數(shù)據(jù)采集系統(tǒng)中通常采用單片機(jī)或DSP作為控制模塊,控制A/D轉(zhuǎn)換、存儲(chǔ)和其他外圍電路的工作,利用PCI、ISA等接口與上位機(jī)進(jìn)行通信。隨著數(shù)據(jù)采集對(duì)速度、實(shí)時(shí)性、簡(jiǎn)易性的要求越來(lái)越高,傳統(tǒng)數(shù)據(jù)采集系統(tǒng)的弊端也日趨明顯。近年來(lái)隨著FPGA技術(shù)和USB技術(shù)的應(yīng)用深度和廣度的不斷加大,利用FPGA芯片和USB接口設(shè)計(jì)高速數(shù)據(jù)采集系統(tǒng)成為新的研究熱點(diǎn)。FPGA芯片不僅體積小、功耗低、時(shí)鐘頻率高、內(nèi)部時(shí)延小,而且能夠使用VHDL語(yǔ)言來(lái)編程實(shí)現(xiàn)程序的并行執(zhí)行,配置靈活,開(kāi)發(fā)周期短,性能可靠。USB是一種高效、快速、價(jià)格低廉、體積小并支持熱插拔的新型串行通信接口,目前USB2.0的高速傳輸速率能夠達(dá)到480 Mb/s,能夠?qū)崿F(xiàn)數(shù)據(jù)的高速傳輸。
1 系統(tǒng)總體結(jié)構(gòu)
本設(shè)計(jì)采用FPGA+USB的設(shè)計(jì)思路,利用FPGA芯片作為系統(tǒng)的邏輯控制核心,通過(guò)USB 2.0接口與上位機(jī)通信,實(shí)現(xiàn)單端16路/差分8路模擬數(shù)據(jù)的高速、實(shí)時(shí)、便攜式的采集。本文設(shè)計(jì)的數(shù)據(jù)采集系統(tǒng)劃分為A/D轉(zhuǎn)換電路、FPGA采集控制和USB傳輸控制器等若干部分。如圖1所示。
本數(shù)據(jù)采集系統(tǒng)支持單端16路和差分8路模擬信號(hào)輸入,每路12 bit的轉(zhuǎn)換精度,最高采樣率為200 kHz。主機(jī)應(yīng)用程序首先向USB控制器發(fā)出采樣時(shí)控包,在時(shí)控包中設(shè)置采集通道及其采樣頻率。進(jìn)而USB控制器觸發(fā)FPGA采集信息,F(xiàn)PGA根據(jù)時(shí)控包開(kāi)始啟動(dòng)A/D進(jìn)行模數(shù)轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后,F(xiàn)PGA接受A/D輸出的12 bit串行數(shù)據(jù),并通過(guò)串并轉(zhuǎn)換將它轉(zhuǎn)換成16 bit并行數(shù)據(jù)輸出。然后將采集到的數(shù)據(jù)信息通過(guò)USB控制器發(fā)送給主機(jī),最后由主機(jī)做進(jìn)一步信息處理。
2 主要芯片選型
本數(shù)據(jù)采集系統(tǒng)用到的主要芯片包括FPGA芯片、A/D轉(zhuǎn)換芯片和USB傳輸控制芯片。
2.1 FPGA芯片的選取
依據(jù)本系統(tǒng)設(shè)計(jì)的需要選用Altera公司的Cyclone II系列EP2C8Q208C8。該芯片內(nèi)部邏輯單元8 256個(gè),有165 888個(gè)RAM位,182個(gè)可用I/O口,系統(tǒng)時(shí)鐘頻率高于260 MHz,只需要3.3 V和1.2 V的工作電壓,完全能夠滿足設(shè)計(jì)的要求。
2.2 ADC轉(zhuǎn)換芯片的選取
考慮到系統(tǒng)的采樣率、分辨率、通道數(shù)等要求,本系統(tǒng)選用德州儀器公司(TI)的ADS7817模數(shù)轉(zhuǎn)換器。該器件是12位的低功耗、高阻抗全差分模擬輸入、具有串行輸出接口的模數(shù)轉(zhuǎn)換器,內(nèi)部基準(zhǔn)電壓范圍為100 mV~2.5 V,最高采樣率200 kHz,相應(yīng)輸入分辨率范圍49 μV~1.22 mV。
2.3 USB傳輸控制芯片的選取[1]
本系統(tǒng)選用CYPRESS公司的USB2.0外設(shè)控制器EZ-USB FX2 CY7C68013-56。該芯片包括帶8.5 KB片上RAM的高速8051單片機(jī)、4 KB FIFO存儲(chǔ)器以及通用可編程接口(GPIF)、串行接口引擎(SIE)和USB2.0收發(fā)器,可與任何ASIC或DSP進(jìn)行接合,并且還支持所有通用總線標(biāo)準(zhǔn),性價(jià)比較高。USB2.0協(xié)議提供480 Mb/s的傳輸速度,因此CY7C68013是USB2.0的完整解決方案。
3 系統(tǒng)硬件設(shè)計(jì)方案實(shí)現(xiàn)
3.1 FPGA與ADC及模擬多路開(kāi)關(guān)的電路設(shè)計(jì)
系統(tǒng)選用8通道模擬多路開(kāi)關(guān)CD4501和SN74LS174集成D觸發(fā)器組合構(gòu)成FPGA信號(hào)采集控制的輸入通道。本系統(tǒng)要求支持單端16路和差分8路模擬信號(hào)輸入,因此使用2片CD4501來(lái)實(shí)現(xiàn)最大16路模擬輸入通道的多路復(fù)用。在選擇單端或差分輸入時(shí),通過(guò)硬件開(kāi)關(guān)來(lái)實(shí)現(xiàn)。在一個(gè)采樣周期內(nèi),選擇哪路模擬信號(hào)進(jìn)行A/D轉(zhuǎn)換由FPGA控制D觸發(fā)器SN74LS174其中的5個(gè)D輸入端的電平高低來(lái)選擇通道實(shí)現(xiàn)。每路模擬信號(hào)都要經(jīng)過(guò)多路模擬開(kāi)關(guān)選擇通道后,再送入A/D芯片的輸入端,如圖2所示。本方案中,FPGA為采樣通道SN74LS174提供30 MHz的時(shí)鐘CLK1及復(fù)位信號(hào)CLR,為A/D芯片提供3 MHz的同步時(shí)鐘信號(hào)DCLK和片選信號(hào)CS,從而使A/D芯片對(duì)相應(yīng)的通道進(jìn)行數(shù)據(jù)轉(zhuǎn)換。
3.2 FPGA與USB芯片的連接設(shè)計(jì)
當(dāng)EZ-USB FX2LP工作于Slave FIFO模式時(shí),外圍電路可以像普通FIFO一樣對(duì)EZ-USB FX2LP中的端點(diǎn)數(shù)據(jù)緩沖區(qū)進(jìn)行讀寫(xiě)[2]。本系統(tǒng)采用FPGA作為主控制器,因而,對(duì)USB控制采用Slave FIFO模式,F(xiàn)PGA通過(guò)控制CY7C68013內(nèi)4 KB的FIFO進(jìn)行與上位機(jī)之間的數(shù)據(jù)傳輸。FPGA與USB芯片的硬件連接如圖3所示。
4 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)軟件設(shè)計(jì)主要包括FPGA控制邏輯設(shè)計(jì)、USB固件程序設(shè)計(jì)、USB設(shè)備驅(qū)動(dòng)程序和上位機(jī)應(yīng)用程序。
4.1 FPGA設(shè)計(jì)
FPGA程序的設(shè)計(jì)是整個(gè)采集系統(tǒng)的關(guān)鍵,整體分成三大模塊:分頻采樣控制模塊、通道選擇模塊和USB傳輸控制模塊。以下是各個(gè)模塊設(shè)計(jì)的具體介紹。
4.1.1 分頻采樣控制模塊
本系統(tǒng)中,F(xiàn)PGA的主時(shí)鐘m_clk由USB芯片輸出的30 MHz頻率提供,由于A/D采樣需要3 MHz的時(shí)鐘頻率,因此首先模塊對(duì)主時(shí)鐘進(jìn)行10分頻得到3 MHz同步時(shí)鐘信號(hào)o_clk。同時(shí),該模塊還要控制數(shù)據(jù)采樣、A/D轉(zhuǎn)換以及數(shù)據(jù)的串并轉(zhuǎn)換。在采樣時(shí)刻到來(lái)時(shí),在同步脈沖o_clk和片選信號(hào)cs(低電平有效)的控制下,依據(jù)ADS7817轉(zhuǎn)換時(shí)序圖進(jìn)行采樣、轉(zhuǎn)換。轉(zhuǎn)換過(guò)程中計(jì)數(shù)o_clk脈沖,每12個(gè)脈沖置位cs為高電平,使結(jié)果僅輸出一次,否則在DOUT端繼續(xù)從最低位到最高位依次輸出轉(zhuǎn)換結(jié)果。in_data是A/D轉(zhuǎn)換后的串行輸出數(shù)據(jù),o_Para是對(duì)in_data經(jīng)過(guò)串并轉(zhuǎn)換后輸出的并行16 bit數(shù)據(jù)。
4.1.2 USB傳輸控制模塊
該模塊主要負(fù)責(zé)對(duì)USB芯片端點(diǎn)的讀寫(xiě)控制。USB芯片端點(diǎn)FIFO用于數(shù)據(jù)的緩存,一方面存儲(chǔ)上位機(jī)發(fā)出的采集參數(shù)信息,另一方面存儲(chǔ)FPGA輸出的并行16 bit采集數(shù)據(jù)。該模塊通過(guò)判斷端點(diǎn)FIFO的空、滿標(biāo)志位來(lái)對(duì)USB端點(diǎn)2、4、6、8進(jìn)行讀寫(xiě)控制。本系統(tǒng)采用異步FIFO讀、寫(xiě)控制模式,該模塊用狀態(tài)機(jī)來(lái)實(shí)現(xiàn),將讀、寫(xiě)過(guò)程分別分成5個(gè)狀態(tài),異步FIFO讀狀態(tài)機(jī)如圖4所示。
IDLE:當(dāng)“寫(xiě)”事件發(fā)生時(shí),轉(zhuǎn)到狀態(tài)1。
狀態(tài)1:指向OUT FIFO,激活FIFOADR[1:0],轉(zhuǎn)向狀態(tài)2。
狀態(tài)2:激活SLOE,如果FIFO空標(biāo)志為“假”(FIFO 不空),則轉(zhuǎn)向狀態(tài)3;否則停留在狀態(tài)2。
狀態(tài)3:激活SLOE,SLRD,傳送數(shù)據(jù)到總線上;撤銷激活SLRD(指針加1)和SLOE,轉(zhuǎn)向狀態(tài)4。
狀態(tài)4:如果有更多的數(shù)據(jù)要求,則轉(zhuǎn)向狀態(tài)2;否則轉(zhuǎn)向IDLE。
4.1.3 通道選擇模塊
該模塊主要負(fù)責(zé)系統(tǒng)通道的選通,根據(jù)得到的采集參數(shù)信息選擇相應(yīng)的通道進(jìn)行數(shù)據(jù)采集[3]。該模塊通過(guò)產(chǎn)生不同的電平,來(lái)控制集成D觸發(fā)器SN74LS174的其中5個(gè)輸入端,從而達(dá)到選擇通道的目的。
4.2 USB固件程序設(shè)計(jì)
本系統(tǒng)中數(shù)據(jù)通道分為采集數(shù)據(jù)上傳通道和控制字下傳通道。根據(jù)設(shè)計(jì)需要進(jìn)行配置,配置端點(diǎn)4、6、8為采集數(shù)據(jù)上傳通道,用于從FPGA向主機(jī)傳輸采集數(shù)據(jù),采用塊傳輸模式,512 B 2重緩沖,16 bit數(shù)據(jù)自動(dòng)輸入模式;配置端點(diǎn)2為控制字下傳通道,用于傳送主機(jī)控制字到FPGA,采用塊傳輸模式,512 B 2重緩沖,16 bit自動(dòng)輸出模式。固件程序采用Cypress公司提供的固件程序框架,在其初始化函數(shù)中添加了用戶配置代碼。改動(dòng)部分代碼如下所示:
void TD_Init(void)
{...
EP2CFG=0xA2;
EP4CFG=EP6CFG=EP8CFG=0xE2;
EP2FIFOCFG=0x15;
EP4FIFOCFG=EP6FIFOCFG=EP6FIFOCFG=0x0D;
...
}
4.3 USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
Cypress為其EZ-USB系列USB接口芯片提供了一個(gè)完整的開(kāi)發(fā)包,其中包括通用USB驅(qū)動(dòng)程序。本系統(tǒng)按照設(shè)計(jì)要求,在DDK平臺(tái)上修改通用USB驅(qū)動(dòng)程序代碼,生成本系統(tǒng)的驅(qū)動(dòng)程序代碼。
4.4 上位機(jī)應(yīng)用程序設(shè)計(jì)
上位機(jī)應(yīng)用程序的作用就是提供一個(gè)人機(jī)交互的顯示界面,體現(xiàn)系統(tǒng)的運(yùn)行狀態(tài)。這里采用Microsoft Visual C++ 6.0進(jìn)行上位機(jī)應(yīng)用程序的設(shè)計(jì),程序中采用CYAPI控制函數(shù)類。CyAPI控制函數(shù)類為EZ-USB FX2LP系列USB接口芯片提供了十分精細(xì)的控制接口[4]。在使用Cypress公司提供的驅(qū)動(dòng)程序基礎(chǔ)上,只需在主機(jī)程序中加入頭文件CyAPI.h和庫(kù)文件CyAPI.lib即可調(diào)用相應(yīng)的控制函數(shù)。
5 FPGA核心模塊仿真
圖5是針對(duì)分頻采樣控制模塊的仿真時(shí)序。波形結(jié)果顯示該模塊在一個(gè)采樣周期內(nèi)能夠準(zhǔn)確產(chǎn)生同步時(shí)鐘信號(hào)o_clk和片選信號(hào)cs,并且串行輸入數(shù)據(jù)in_data經(jīng)過(guò)串并轉(zhuǎn)換后能夠準(zhǔn)確無(wú)誤地并行輸出。
本文創(chuàng)新點(diǎn)是設(shè)計(jì)了一款同時(shí)支持單端16路和差分8路模擬信號(hào)輸入、FPGA為核心控制和USB2.0為接口傳輸?shù)亩嗤ǖ?、?shí)時(shí)、高速、便攜式數(shù)據(jù)采集系統(tǒng)。本系統(tǒng)在Altera公司提供的Quartus II 8.0 集成開(kāi)發(fā)環(huán)境下進(jìn)行設(shè)計(jì)、編譯、綜合、優(yōu)化、布局布線、驗(yàn)證和仿真,并成功下載到FPGA芯片中。經(jīng)過(guò)長(zhǎng)時(shí)間的測(cè)試,系統(tǒng)工作穩(wěn)定、性能可靠,說(shuō)明了設(shè)計(jì)結(jié)構(gòu)的合理性,比較適合野外現(xiàn)場(chǎng)數(shù)據(jù)采集的場(chǎng)合。
參考文獻(xiàn)
[1] 劉福奇.FPGA嵌入式項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)[M]. 北京:電子工業(yè)出版社,2009.
[2] 薛園園.USB應(yīng)用開(kāi)發(fā)技術(shù)大全[M]. 北京:人民郵電出版社,2007:190-191.
[3] 李艷軍,郭正剛,張志新,等.基于FPGA多通道同步數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].微計(jì)算機(jī)信息,2007,23(2-2):212-213.
[4] 戴小俊,丁鐵夫,鄭喜鳳. 基于USB和DSP的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2007,33(1):84-86.