基于USB總線的高速數(shù)據(jù)采集系統(tǒng)
關(guān)鍵詞:USB;數(shù)據(jù)采集;EZ-USB FX2;GPIF
1 引言
現(xiàn)代工業(yè)生產(chǎn)和科學(xué)研究對(duì)數(shù)據(jù)采集的要求日益提高。目前比較通用的是在PC或工控機(jī)內(nèi)安裝數(shù)據(jù)采集卡(如A/D卡及422、485卡)。但這些數(shù)據(jù)采集設(shè)備存在以下缺陷:安裝麻煩、價(jià)格昂貴、受計(jì)算機(jī)插槽數(shù)量、地址、中斷資源的限制,可擴(kuò)展性差,同時(shí)在一些電磁干擾性強(qiáng)的測(cè)試現(xiàn)場(chǎng),可能無法專門對(duì)其作電磁屏蔽,從而導(dǎo)致采集的數(shù)據(jù)失真。
傳統(tǒng)的外設(shè)與主機(jī)的通訊接口一般是基于PCI總線、ISA總線或者是RS-232C串行總線。PCI總線雖然具有較高的傳輸速度(132Mbps),并支持“即插即用”功能,但其缺點(diǎn)是插拔麻煩,且擴(kuò)展槽有限(一般為5~6個(gè)),ISA總線顯然存在同樣的問題。RS-232C串行總線雖然連結(jié)簡(jiǎn)單,但其傳輸速度慢(56kbps),且主機(jī)的串口數(shù)目也有限。
通用串行總線(Universal Serial Bus,簡(jiǎn)稱USB)是1995年康柏、微軟、IBM、DEC等公司為了解決傳統(tǒng)總線的不足,而推出的一種新型串行通信標(biāo)準(zhǔn)。該總線接口具有安裝方便、高帶寬、易擴(kuò)展等優(yōu)點(diǎn),已經(jīng)逐漸成為現(xiàn)代數(shù)據(jù)傳輸?shù)陌l(fā)展趨勢(shì)?;冢眨樱碌臄?shù)據(jù)采集系統(tǒng)充分利用USB總線的上述優(yōu)點(diǎn),有效地解決了傳統(tǒng)數(shù)據(jù)采集系統(tǒng)的缺陷。USB的規(guī)范能針對(duì)不同的性能價(jià)格比要求提供不同的選擇,以滿足不同的系統(tǒng)和部件及相應(yīng)不同的功能,從而給使用帶來極大方便。
2 系統(tǒng)介紹
2.1 數(shù)據(jù)采集系統(tǒng)的結(jié)構(gòu)與功能
常見的數(shù)據(jù)采集系統(tǒng)的硬件總體結(jié)構(gòu)如圖1所示。其中數(shù)據(jù)采集接口卡是硬件部分的核心,它包括A/D轉(zhuǎn)換器、微控制器、USB通信接口等。
在高速數(shù)據(jù)采集系統(tǒng)中?由于現(xiàn)場(chǎng)輸入信號(hào)是高頻模擬信號(hào),因而信號(hào)的變化范圍都比較大?如果采用單一的增益放大?那么放大以后的信號(hào)幅值有可能超過A/D轉(zhuǎn)換的量程?所以必須根據(jù)信號(hào)的變化相應(yīng)地調(diào)整放大器的增益。在自動(dòng)化程度較高的系統(tǒng)中?希望能夠在程序中用軟件控制放大器的增益?AD8321正是這樣一種具有增益可編程功能的芯片。AD8321是美國AD公司生產(chǎn)的一種增益可編程線性驅(qū)動(dòng)器。它具有頻帶寬、噪聲低、增益可編程且易于與單片機(jī)進(jìn)行串行通信等優(yōu)點(diǎn),十分適合在數(shù)據(jù)采集系統(tǒng)中做前置放大。
經(jīng)過調(diào)理后的信號(hào)可送入模/數(shù)變換器(ADC)進(jìn)行A/D變換。筆者選用的ADC是TLC5540,它是一種高速8位模擬數(shù)字轉(zhuǎn)換器,能以高達(dá)每秒40M的采樣速率進(jìn)行轉(zhuǎn)換,由于采用半閃速結(jié)構(gòu)和CMOS工藝制造,因此功耗和成本很低。其75MHz(典型值)的模擬輸入帶寬使該器件成為欠采樣應(yīng)用的良好選擇。該器件帶有內(nèi)部電阻,可用于從5V電源產(chǎn)生2V滿度的基準(zhǔn)電壓,以減少外部元件數(shù)。數(shù)字輸出置于高阻方式。它僅需要5V電源工作,可由USB總線供電。
由于數(shù)據(jù)采集接口卡是硬件部分的核心,因此應(yīng)選擇能適用USB協(xié)議的合適芯片。EZ-USB FX2是一種USB2.0集成微控制器。它的內(nèi)部集成了USB2.0收發(fā)器、串行接口引擎(SIE)、增強(qiáng)的8051微控制器和一個(gè)可編程的串行接口。其主要特性如下:
●帶有加強(qiáng)的8051內(nèi)核性能,可達(dá)到標(biāo)準(zhǔn)8051的5~10倍,且與標(biāo)準(zhǔn)8051的指令完全兼容;
●集成度高,芯片內(nèi)部集成有微處理器、RAM、SIE(串行接口引擎)等多個(gè)功能模塊,從而減少了多個(gè)芯片接口部分需要時(shí)序配合的麻煩;
●采用軟配置,在外設(shè)未通過USB接口接到PC機(jī)之前,外設(shè)上的固件存儲(chǔ)在PC上;而一旦外設(shè)連接到PC機(jī)上,PC則先詢問外設(shè)是“誰”(即讀設(shè)備描述符),然后將該外設(shè)的固件下載到芯片的RAM中,這個(gè)過程叫做再枚舉。這樣,在開發(fā)過程中,當(dāng)固件需要修改時(shí),可以先在PC機(jī)上修改好,然后再下載到芯片中;
●具有易用的軟件開發(fā)工具,該芯片開發(fā)系統(tǒng)的驅(qū)動(dòng)程序和固件的開發(fā)和調(diào)試相互獨(dú)立,可加快開發(fā)的速度。
圖2 USB接口示意圖
2.2 方案選擇
FX2有三種可用的接口模式:端口、GPIF主控和從FIFO。
在“端口”模式下,所有I/O引腳都可作為8051的通用I/O口。
在“從FIFO”模式下,外部邏輯或外部處理器直接與FX2端點(diǎn)FIFO相連。在這種模式下,GPIF不被激活,因?yàn)橥獠窟壿嬁芍苯涌刂疲疲桑疲?。這種模式下,外部主控端既可以是異步方式,也可以是同步方式,并可以為FX2接口提供自己的獨(dú)立時(shí)鐘。
“GPIF主控”接口模式使用PORTB和PORTD構(gòu)成通向四個(gè)FX2端點(diǎn)FIFO( EP2? EP4? EP6和EP8)的16位數(shù)據(jù)接口。GPIF作為內(nèi)部的主控制器與FIFO直接相連,并產(chǎn)生用戶可編程的控制信號(hào)與外部接口進(jìn)行通信。同時(shí),GPIF還可以通過RDY引腳采樣外部信號(hào)并等待外部事件。由于GPIF的運(yùn)行速度比FIFO快得多,因此其時(shí)序信號(hào)具有很好的編程分辨率。另外,GPIF既可以使用內(nèi)部時(shí)鐘,也可以使用外部時(shí)鐘。故此,筆者選擇了GPIF模式。
高速數(shù)據(jù)采集卡的設(shè)計(jì)存在兩大難點(diǎn):一是模擬信號(hào)的A/D高速轉(zhuǎn)換;二是變換后數(shù)據(jù)的高速存儲(chǔ)及提取。對(duì)于第一個(gè)問題,由于制造ADC的技術(shù)不斷進(jìn)步,這個(gè)問題已經(jīng)得到解決。而對(duì)于第二個(gè)問題,一般的數(shù)據(jù)采集系統(tǒng)是將A/D轉(zhuǎn)換后的數(shù)據(jù)先存儲(chǔ)在外部數(shù)據(jù)存儲(chǔ)器中,然后再對(duì)其進(jìn)行處理。對(duì)于高速數(shù)據(jù)采集而言,這種方式將嚴(yán)重影響采集速度,且存儲(chǔ)值也會(huì)受到很大限制。而改進(jìn)方案是將A/D轉(zhuǎn)換后的數(shù)據(jù)直接送至計(jì)算機(jī)內(nèi)存,這樣,采集速度將大大提高,而且可存儲(chǔ)大量數(shù)據(jù),以便于下一步的處理。
為了解決同步問題,可以由CPLD產(chǎn)生同步時(shí)鐘信號(hào)提供給ADC和FX2。在本數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)中,CPLD同時(shí)還可用于產(chǎn)生不同的控制信號(hào),以便對(duì)采樣進(jìn)行實(shí)時(shí)控制。CPLD是復(fù)雜可編程邏輯器件,它包括可編程邏輯宏單元、可編程I/O單元和可編程內(nèi)部連線。由于CPLD的內(nèi)部資源豐富,因而可廣泛應(yīng)用在數(shù)據(jù)采集、自動(dòng)控制、通訊等各個(gè)領(lǐng)域。在本系統(tǒng)的設(shè)計(jì)中,筆者選用的CPLD是Lattice公司的ispLSI1016。圖2所示是其整個(gè)USB接口卡的硬件電路圖。
3 系統(tǒng)軟件設(shè)計(jì)
該系統(tǒng)軟件主要包括USB設(shè)備驅(qū)動(dòng)程序、設(shè)備固件和應(yīng)用程序。
3.1 設(shè)備固件(Firmware)設(shè)計(jì)
設(shè)備固件是設(shè)備運(yùn)行的核心,可采用匯編語言或C語言設(shè)計(jì)。其主要功能是控制CY7C68013接收并處理USB驅(qū)動(dòng)程序的請(qǐng)求(如請(qǐng)求設(shè)備描述符、請(qǐng)求或設(shè)置設(shè)備狀態(tài),請(qǐng)求或設(shè)置設(shè)備接口等USB2.0標(biāo)準(zhǔn)請(qǐng)求)、控制芯片CY7C68013接收應(yīng)用程序的控制指令、控制A/D模塊的數(shù)據(jù)采集、通過CY7C68013緩存數(shù)據(jù)并實(shí)時(shí)上傳至PC等。
即使外部邏輯或內(nèi)置的普通可編程接口(GPIF)在沒有CPU的任何干涉下能夠通過四個(gè)大的端點(diǎn)FIFO來處理高速寬帶數(shù)據(jù),固件還是有如下固定的工作:
●配置端點(diǎn);
●通過控制端點(diǎn)零來響應(yīng)主機(jī)請(qǐng)求;
●控制和監(jiān)測(cè)GPIF的活動(dòng);
●利用USART處理所有的特殊請(qǐng)求任務(wù),如計(jì)時(shí)器、中斷、I/O引腳等。
3.2 USB設(shè)備驅(qū)動(dòng)程序開發(fā)
USB系統(tǒng)驅(qū)動(dòng)程序采用分層結(jié)構(gòu)模型?分別為較高級(jí)的USB設(shè)備驅(qū)動(dòng)程序和較低級(jí)的USB函數(shù)層。其中USB函數(shù)層由兩部分組成:較高級(jí)的通用串行總線驅(qū)動(dòng)程序模塊(USBD)和較低級(jí)的主控制器驅(qū)動(dòng)程序模塊(HCD)。
在上述USB分層模塊中,USB函數(shù)層(USBD及HCD)由Windows提供,負(fù)責(zé)管理USB設(shè)備驅(qū)動(dòng)程序和USB控制器之間的通信;加載及卸載USB驅(qū)動(dòng)程序;與USB設(shè)備通用端點(diǎn)(endpoint)建立通信并執(zhí)行設(shè)備配置、數(shù)據(jù)與USB協(xié)議框架和打包格式的雙向轉(zhuǎn)換任務(wù)。目前?Windows提供有多種USB設(shè)備驅(qū)動(dòng)程序,但并不針對(duì)實(shí)時(shí)數(shù)據(jù)采集設(shè)備,因此需采用DDK開發(fā)工具來設(shè)計(jì)專用的USB設(shè)備驅(qū)動(dòng)程序。該設(shè)備驅(qū)動(dòng)程序應(yīng)由初始化模塊、即插即用管理模塊、電源管理模塊以及I/O功能等四個(gè)模塊來實(shí)現(xiàn)。
初始化模塊可提供一個(gè)DriverEntry入口點(diǎn)以執(zhí)行大量的初始化函數(shù)。
即插即用管理模塊用來實(shí)現(xiàn)USB設(shè)備的熱插拔及動(dòng)態(tài)配置。當(dāng)硬件檢測(cè)到USB設(shè)備接入時(shí),Windows查找相應(yīng)的驅(qū)動(dòng)程序,并調(diào)用它的DriverEn-try例程,同時(shí)告訴它添加了一個(gè)設(shè)備;然后,驅(qū)動(dòng)程序?yàn)椋眨樱略O(shè)備建立一個(gè)FDO(功能設(shè)備對(duì)象)。在此處理過程中,驅(qū)動(dòng)程序收到一個(gè)IRP MN START DE-VICE 的IRP,在它之中包括有設(shè)備的資源信息。至此,設(shè)備被正確配置,驅(qū)動(dòng)程序開始與硬件進(jìn)行對(duì)話。當(dāng)然,在設(shè)備運(yùn)行過程中,如果設(shè)備狀態(tài)發(fā)生變化(拔除、暫停等),PnP管理器也同樣發(fā)出相應(yīng)的IRP,以便由驅(qū)動(dòng)程序進(jìn)行相應(yīng)的處理。
電源管理模塊負(fù)責(zé)設(shè)備的掛起與喚醒。
I/O功能實(shí)現(xiàn)模塊可完成I/O請(qǐng)求的大部分工作。當(dāng)應(yīng)用程序提出I/O請(qǐng)求時(shí),它將調(diào)用Win32 API函數(shù)DeviceIoControl向設(shè)備發(fā)出命令,然后由I/O管理器構(gòu)造一個(gè)IRP并設(shè)置其MajorFunction.域?yàn)椋桑遥?MJ DEVICE CONTROL。在USB設(shè)備驅(qū)動(dòng)程序收到該IRP后?它將取出其中的控制碼?并利用一個(gè)開關(guān)語句查找對(duì)應(yīng)的程序入口。
3.3 應(yīng)用程序設(shè)計(jì)
應(yīng)用程序設(shè)計(jì)由兩個(gè)部分組成:動(dòng)態(tài)鏈接庫和應(yīng)用程序。動(dòng)態(tài)鏈接庫負(fù)責(zé)與內(nèi)核態(tài)的USB功能驅(qū)動(dòng)程序通信并接收應(yīng)用程序的各種操作請(qǐng)求,而應(yīng)用程序則負(fù)責(zé)對(duì)所采集的數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示、分析和存盤。
PC機(jī)或工控機(jī)應(yīng)用程序是數(shù)據(jù)實(shí)時(shí)采集系統(tǒng)的中心?可采用Labview編程。它是當(dāng)今國際上唯一的編譯型圖形化編程語言,其特點(diǎn)如下:
(1) 能完成對(duì)固體表面速度的實(shí)時(shí)測(cè)量;
(2)主介面與多重窗口結(jié)合?可完成數(shù)據(jù)連續(xù)采集、實(shí)時(shí)統(tǒng)計(jì)分析、系統(tǒng)參數(shù)設(shè)置、信號(hào)波形顯示、被測(cè)參數(shù)輸出等綜合系統(tǒng)功能。
(3)能充分利用Labview開發(fā)平臺(tái)和WINDOWS視窗所提供的良好操作環(huán)境?集曲線、圖形、數(shù)據(jù)于一體?可準(zhǔn)確描述過程參數(shù)的變化。
圖3所示是用高速數(shù)據(jù)采集系統(tǒng)采集通過Lab-view顯示的一個(gè)波形實(shí)例,其輸入信號(hào)是一個(gè)頻率為5MHz的正弦波。
4 結(jié)束語
隨著電子計(jì)算機(jī)的廣泛應(yīng)用,社會(huì)的數(shù)字化程度越來越高,數(shù)據(jù)采集也越來越重要,本系統(tǒng)是一種通用的高速數(shù)據(jù)采集系統(tǒng),可用于生物電波、電子學(xué)頻譜、聲波分析等瞬態(tài)信號(hào)的實(shí)時(shí)采集和觀察等場(chǎng)合。其中基于USB總線的高速數(shù)據(jù)采集系統(tǒng)具有可靠性高、數(shù)據(jù)不丟失、抗干擾性強(qiáng)、便于數(shù)據(jù)傳輸和處理等優(yōu)點(diǎn),因而具有良好的應(yīng)用前景和很大的實(shí)用價(jià)值。
評(píng)論