謝 勇,姚遠(yuǎn)程,秦明偉
(西南科技大學(xué) 信息工程學(xué)院,四川 綿陽(yáng) 621010)
通用串行總線 (Universal Serial Bus,USB)是一個(gè)外部總線協(xié)議標(biāo)準(zhǔn),用于規(guī)范電腦與外部設(shè)備的連接和通訊?;赨SB接口的數(shù)據(jù)采集卡具有熱插拔、傳輸速度快、通用性強(qiáng)、易擴(kuò)展和性價(jià)比高等優(yōu)點(diǎn)。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一種基于圖形程序的虛擬儀器編程語(yǔ)言,在測(cè)試與測(cè)量、數(shù)據(jù)采集、儀器控制、數(shù)字信號(hào)分析等領(lǐng)域獲得了廣泛的應(yīng)用。
文中介紹了一種基于USB2.0[1]和LabVIEW[2]的高速數(shù)據(jù)采集系統(tǒng)設(shè)計(jì),詳細(xì)描述了系統(tǒng)硬件和軟件設(shè)計(jì)實(shí)現(xiàn)方案。
本系統(tǒng)由軟件設(shè)計(jì)和硬件電路兩部分構(gòu)成,系統(tǒng)總體結(jié)構(gòu)如圖1所示。軟件設(shè)計(jì)主要包括上位機(jī)PC程序設(shè)計(jì),其中底層驅(qū)動(dòng)程序基于NI-VISA設(shè)計(jì)[3],用戶應(yīng)用程序由Lab VIEW開(kāi)發(fā),驅(qū)動(dòng)程序的功能如同上位機(jī)應(yīng)用程序和下位機(jī)硬件之間通信的橋梁。
硬件電路由FPGA、USB2.0控制器和ADC器件構(gòu)成[4]。其中USB2.0控制器芯片采用Cypress公司的EZ-USB FX2芯片,F(xiàn)PGA芯片選用了Xilinx公司的Virtex-4系列的XC4VSX55,ADC器件采用AD公司的AD9430。USB2.0控制器部分負(fù)責(zé)FPGA與上位機(jī)PC間的雙向通信;FPGA部分作為系統(tǒng)的主控制器,負(fù)責(zé)接收并解析上位機(jī)PC傳遞的控制指令,同時(shí)FPGA將下位機(jī)采集的數(shù)據(jù)通過(guò)USB接口傳送到上位機(jī)PC處理;AD9430完成前端模擬信號(hào)的高速采集。
AD9430是AD公司的一款12位單芯片采樣模數(shù)轉(zhuǎn)換器(ADC),專門針對(duì)高性能、低功耗和易用性進(jìn)行了優(yōu)化。AD9430的轉(zhuǎn)換速率最高可達(dá)210 MSPS,具有杰出的動(dòng)態(tài)性能,適合寬帶載波和寬帶系統(tǒng)使用。芯片上集成了全部必需功能,包括采樣保持(T/H)與基準(zhǔn)電壓源,可提供完整的信號(hào)轉(zhuǎn)換解決方案。AD9430要求采用3.3 V電源供電及差分ENCODE時(shí)鐘信號(hào),以便充分發(fā)揮其工作性能。數(shù)字輸出為TTL/CMOS兼容或LVDS兼容,支持二進(jìn)制補(bǔ)碼或偏移二進(jìn)制格式。
圖1 系統(tǒng)總體結(jié)構(gòu)圖Fig.1 Whole structure chart of system
本系統(tǒng)采用FPGA生成AD9430的采樣時(shí)鐘和工作模式寄存器的配置。前端模擬信號(hào)經(jīng)過(guò)AD9430采樣量化為數(shù)字信號(hào)后送入FPGA內(nèi)部生成的FIFO做緩存處理,避免了采樣數(shù)據(jù)率和USB接口傳輸數(shù)據(jù)率不匹配而發(fā)生數(shù)據(jù)丟失。FIFO的深度是由讀寫(xiě)FIFO的時(shí)鐘以及所需連續(xù)傳輸數(shù)據(jù)塊的大小來(lái)決定的,本設(shè)計(jì)FIFO深度為1 024,數(shù)據(jù)總線位寬為16 bit。
EZ-USB FX2有3種接口方式:Ports、slaveFIFO和GPIF。在本系統(tǒng)中采用的是slaveFIFO模式,在該模式下,F(xiàn)X2芯片內(nèi)部FIFO能自動(dòng)向USB提交包,外部控制器可以將數(shù)據(jù)連續(xù)傳輸?shù)紽IFO中,而不需要FX2固件程序的干預(yù),較好地解決了USB高速模式的帶寬瓶頸問(wèn)題。在slaveFIFO模式下,EZ-USB FX2與FPGA主控制器的接口電路如圖2所示。
其中IFCLK為接口時(shí)鐘,為了保持系統(tǒng)良好的時(shí)鐘同步性,設(shè)計(jì)中采用FPGA通過(guò)DCM分頻生成40 MHz時(shí)鐘。FLAGA-FLAGD為FIFO標(biāo)志管腳,用于映射端點(diǎn)的空、滿;SLOE用于使能數(shù)據(jù)總線FD的輸出,當(dāng)SLOE信號(hào)有效時(shí),才能從FIFO讀數(shù)據(jù);SLRD和SLWR分別作為FIFO的同步讀、寫(xiě)選通信號(hào),當(dāng)SLRD或SLWR信號(hào)有效時(shí),才能在IFCLK的驅(qū)動(dòng)下讀寫(xiě)FIFO;FD [15:0]為16位雙向數(shù)據(jù)總線,負(fù)責(zé)上下位機(jī)之間數(shù)據(jù)的傳輸;FIFOADR[1:0]用于選擇當(dāng)前操作的端點(diǎn)緩沖區(qū),其中“00”表示選擇 EP2,“10”表示選擇 EP6。
系統(tǒng)軟件設(shè)計(jì)主要包括USB固件程序、USB驅(qū)動(dòng)程序、FPGA控制程序以及LabVIEW應(yīng)用程序4個(gè)部分。
USB固件程序開(kāi)發(fā)主要包括如下幾個(gè)部分,首先定義USB設(shè)備的描述符:VID為0x04B4,PID為0x1002。然后設(shè)定EZ-USB FX2的工作模式為slaveFIFO模式,F(xiàn)IFO工作時(shí)鐘IFCLK由FPGA分頻產(chǎn)生;配置EP2為OUT端點(diǎn),上位機(jī)指令通過(guò)OUT端點(diǎn)下傳給FPGA解析,配置EP6為IN端點(diǎn),下位機(jī)采集的數(shù)據(jù)通過(guò)IN端點(diǎn)上傳到上位機(jī)PC,端點(diǎn)數(shù)據(jù)總線寬度為16 bit,數(shù)據(jù)緩沖區(qū)大小為2048字節(jié);同時(shí)配置FLAGA為端口EP2空標(biāo)志,配置FLAGC為端口EP6滿標(biāo)志。Cypress公司為了簡(jiǎn)化和加快用戶使用EZ-USB FX2芯片進(jìn)行USB外設(shè)的開(kāi)發(fā)過(guò)程,提供了一個(gè)完整的固件程序的框架[5-6],本設(shè)計(jì)的主要固件程序如下:
USB設(shè)備的驅(qū)動(dòng)程序是開(kāi)發(fā)USB外設(shè)的一個(gè)關(guān)鍵,它在整個(gè)系統(tǒng)中處于上位機(jī)應(yīng)用程序和USB固件程序之間。它的主要作用是使上位機(jī)操作系統(tǒng)能夠識(shí)別USB設(shè)備,并建立起上位機(jī)和下位機(jī)USB設(shè)備之間的通訊。
本設(shè)計(jì)通過(guò)配置NI-VISA直接開(kāi)發(fā)USB驅(qū)動(dòng)程序[7],極大降低了設(shè)計(jì)難度和開(kāi)發(fā)時(shí)間,同時(shí)設(shè)計(jì)的驅(qū)動(dòng)程序可以實(shí)現(xiàn)下位機(jī)USB設(shè)備和上位機(jī)LabVIEW應(yīng)用程序無(wú)縫連接。設(shè)計(jì)中采用了比較成熟的NI-VISA 5.0版本,配置NI-VISA的步驟如下:
1)使用Driver Development Wizard(驅(qū)動(dòng)程序開(kāi)發(fā)向?qū)В﹦?chuàng)建INF文檔;
2)安裝INF文檔,并安裝使用INF文檔的USB設(shè)備;
3)使用NI-VISA Interactive Control(NI-VISA互動(dòng)控制工具)對(duì)設(shè)備進(jìn)行測(cè)試,以證實(shí)USB設(shè)備已正確安裝,并獲得USB設(shè)備的各屬性值。
FPGA作為外部主控制器,負(fù)責(zé)產(chǎn)生EZ-USB FX2工作在slaveFIFO模式所需的控制信號(hào)。FPGA通過(guò)監(jiān)測(cè)EZ-USB FX2內(nèi)部FIFO的空滿標(biāo)志,生成對(duì)應(yīng)的讀寫(xiě)信號(hào)來(lái)操作FIFO,實(shí)現(xiàn)采集數(shù)據(jù)的傳輸。
在slaveFIFO模式下,EZ-USB FX2有兩種傳輸方式:同步和異步。同步方式可以實(shí)現(xiàn)更高的傳輸速度,所以被本設(shè)計(jì)采用。在同步方式下,傳輸時(shí)鐘IFCLK由FPGA提供,當(dāng)SLOE和SLRD為低電平且SLWR為高電平時(shí),一個(gè)IFCLK周期完成一個(gè)數(shù)據(jù)的讀操作;當(dāng)SLWR為低電平且SLOE和SLRD為高電平時(shí),一個(gè)IFCLK周期完成一個(gè)數(shù)據(jù)的寫(xiě)操作。USB接口芯片的控制信號(hào)由VHDL硬件描述語(yǔ)言開(kāi)發(fā)并映射到FPGA中運(yùn)行。FPGA讀、寫(xiě)EZ-USB FX2內(nèi)部FIFO的時(shí)序仿真結(jié)果分別如圖3、圖4所示。
圖2 FPGA與EZ-USB FX2連接圖Fig.2 Connection diagram of FPGA and EZ-USB FX2
圖3 FPGA讀FIFO仿真波形Fig.3 Simulation waveform of FPGA reading FIFO
圖4 FPGA寫(xiě)FIFO仿真波形Fig.4 Simulation waveform of FPGA writing FIFO
在LabVIEW軟件平臺(tái)下,用戶利用創(chuàng)建和調(diào)用子程序的方法編寫(xiě)程序,使創(chuàng)建的程序模塊化,程序結(jié)構(gòu)簡(jiǎn)單、直觀,易于調(diào)試和維護(hù)。而且應(yīng)用程序的界面美觀、逼真,人機(jī)界面更友好。一個(gè)LabVIEW程序分為3部分:前面板、框圖程序和圖標(biāo)/接線端口。前面板用于模擬真實(shí)儀器的前面板;框圖程序是利用圖形語(yǔ)言對(duì)前面板上的控件對(duì)象進(jìn)行控制;圖標(biāo)/接線端口用于把LabVIEW程序定義成一個(gè)子程序模塊,從而實(shí)現(xiàn)模塊化編程。
LabVIEW程序的程序框圖如圖5所示。整個(gè)應(yīng)用程序的主框架使用了WHILE循環(huán)不斷的查詢主機(jī)狀態(tài)。設(shè)計(jì)中采用了LabVIEW的事件結(jié)構(gòu)編程。事件驅(qū)動(dòng)的編程允許用戶通過(guò)前面板的操作,或是其他的異步事件來(lái)驅(qū)動(dòng)LabVIEW程序的運(yùn)行。本設(shè)計(jì)中采用前面板的用戶按鈕操作作為事件驅(qū)動(dòng)源。同時(shí)關(guān)閉程序也作為一個(gè)事件分支,避免了程序死鎖問(wèn)題的發(fā)生。在“開(kāi)始采集”事件中通過(guò)直接調(diào)用VISA函數(shù)子VI來(lái)讀寫(xiě)USB設(shè)備,實(shí)現(xiàn)上位機(jī)控制指令的下傳和下位機(jī)采集數(shù)據(jù)的上傳。
LabVIEW程序主要工作流程:用戶在操作應(yīng)用程序前面板界面時(shí),點(diǎn)擊開(kāi)始采集按鈕就會(huì)觸發(fā)程序的開(kāi)始采集事件分支。在該分支中程序首先通過(guò) “VISA打開(kāi)”VI打開(kāi)USB設(shè)備,然后通過(guò)“VISA寫(xiě)入”VI將上位機(jī)十六進(jìn)制的控制指令 “0101”通過(guò)USB接口發(fā)送到下位機(jī),F(xiàn)PGA完成指令的接收和解析。下位機(jī)接收到采集指令后開(kāi)始往EZUSB FX2芯片的FIFO中寫(xiě)入采集的數(shù)據(jù),上位機(jī)則通過(guò)“VISA讀取”VI開(kāi)始接收下位機(jī)上傳的數(shù)據(jù)。采集到的數(shù)據(jù)通過(guò)“數(shù)據(jù)顯示”VI顯示在前面板,同時(shí)利用LabVIEW靈活的數(shù)據(jù)文件存儲(chǔ)方式,將采集到的數(shù)據(jù)存儲(chǔ)為二進(jìn)制格式的文件保存起來(lái)以便后續(xù)處理。用戶完成采集過(guò)程后,關(guān)閉VISA,結(jié)束程序運(yùn)行。
圖5 LabVIEW程序框圖Fig.5 Block diagram of LabVIEW program
系統(tǒng)的硬件電路和軟件程序開(kāi)發(fā)完成后,通過(guò)軟硬件聯(lián)合測(cè)試以驗(yàn)證系統(tǒng)傳輸系能。測(cè)試步驟如下:首先通過(guò)NIVISA配置好EZ-USB FX2的驅(qū)動(dòng)程序,用EZ-USB Control Panel軟件完成固件程序下載。如圖6前面板所示,上位機(jī)檢測(cè)到的USB設(shè)備的VID為0x04B4,PID為0x1002,這與在固件程序中的設(shè)定一致,說(shuō)明通過(guò)NI-VISA完成了USB設(shè)備的驅(qū)動(dòng)程序設(shè)計(jì)。USB設(shè)備和上位機(jī)PC正確連接后即可進(jìn)行數(shù)據(jù)采集。然后在前面板設(shè)置采集長(zhǎng)度為512字節(jié),單擊“開(kāi)始采集”按鈕,下位機(jī)采集的數(shù)據(jù)顯示在圖6中數(shù)據(jù)顯示VI中。采集的數(shù)據(jù)為十六進(jìn)制數(shù)表示的0000~00FF,與下位機(jī)FPGA寫(xiě)入U(xiǎn)SB芯片內(nèi)部FIFO的數(shù)據(jù)完全一致,證明系統(tǒng)數(shù)據(jù)傳輸?shù)目煽啃浴Mㄟ^(guò)總線數(shù)據(jù)監(jiān)測(cè)軟件BusHound實(shí)時(shí)測(cè)試,本設(shè)計(jì)的數(shù)據(jù)傳輸速度高達(dá)30 MByte/s。
圖6 LabVIEW程序前面板Fig.6 Front panel of LabVIEW program
本系統(tǒng)軟件、硬件均已調(diào)試通過(guò),并已應(yīng)用于實(shí)際項(xiàng)目中,運(yùn)行良好。實(shí)踐證明,本系統(tǒng)結(jié)合USB和LabVIEW各自優(yōu)點(diǎn)完成設(shè)計(jì),降低了開(kāi)發(fā)USB設(shè)備驅(qū)動(dòng)程序的難度,縮短了研制周期,而由LabVIEW開(kāi)發(fā)的人機(jī)界面更友好、美觀。同時(shí)本系統(tǒng)硬件集成度高,成本低,結(jié)構(gòu)靈活便于擴(kuò)展,具有更強(qiáng)的實(shí)用和推廣價(jià)值。
[1]羅偉林.基于USB2.0的高速數(shù)據(jù)采集系統(tǒng) [D].哈爾濱:哈爾濱工業(yè)大學(xué),2008.
[2]楊樂(lè)平,李海濤,楊磊.LabVIEW 程序設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2005.
[3]National Instruments.USB Instrument Control Tutorial[EB/OL].[2003]http://www.ni.com.Nov.
[4]曹輝,劉波,姜秀杰.基于USB與FPGA的多路總線通信接口的設(shè)計(jì)與實(shí)現(xiàn)[J].導(dǎo)彈與航天運(yùn)載技術(shù),2009,4(302):18-22.CAO Hui,LIU Bo,JIANG Xiu-jie.Design and implementation of a multi-channel bus interface based on USB and FPGA[J].Missiles and Space Vehicles,2009,4(302):18-22.
[5]錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出社,2006.
[6]Cypress Semiconductor Corporation. EZ-USB FX2 Technical Reference Manual[S].USA,2002.
[7]余志榮, 楊莉.基于NI-VISA與LabVIEW 的USB接口應(yīng)用設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(1):66-69.YU Zhi-rong,YANG Li.Design of USB interface based on NI-VISA and LabVIEW[J].Microcontroller and Embedded Systems,2007(1):66-69.