文獻(xiàn)標(biāo)識(shí)碼: B
隨著大規(guī)模集成電路與計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)據(jù)采集在語音處理,、智能儀器,、工業(yè)自動(dòng)化及生物醫(yī)學(xué)工程等眾多領(lǐng)域中的地位日益突出,并且對數(shù)據(jù)采集的各項(xiàng)技術(shù)指標(biāo)要求越來越高,。傳統(tǒng)的數(shù)據(jù)采集卡主要有PCI卡或者ISA卡,,這些采集卡都存在著各種各樣的缺陷,,比如傳輸速度慢、不支持熱插拔,、安裝不方便,、受計(jì)算機(jī)地址、中斷和插槽的限制,,可擴(kuò)展性差等[1],。
近年來,USB接口以其傳輸速度快,、成本低,、可靠性高、支持即插即用和熱插拔等優(yōu)點(diǎn)[2],,迅速成為數(shù)據(jù)傳輸?shù)闹髁?。因此,開發(fā)這種基于USB2.0的高速數(shù)據(jù)采集系統(tǒng),,代表了現(xiàn)代數(shù)據(jù)采集和傳輸?shù)陌l(fā)展趨勢,,必將被越來越多的用戶所接受。
1 系統(tǒng)工作原理與硬件結(jié)構(gòu)
基于USB接口的數(shù)據(jù)采集系統(tǒng)的硬件部分主要包括信號(hào)調(diào)理電路,、A/D轉(zhuǎn)換電路,、USB控制電路三部分。PC機(jī)端的應(yīng)用程序通過USB主機(jī)發(fā)送控制信號(hào),,通知CY7C68013開始數(shù)據(jù)采集,。當(dāng)CY7C68013接收到控制信號(hào)以后,通過GPIF模式發(fā)送控制波形到MAX125,,控制其開始的數(shù)據(jù)轉(zhuǎn)換,。當(dāng)MAX125接收到控制信號(hào)以后,開始進(jìn)行數(shù)據(jù)采集,。采集完成后,,在USB主機(jī)控制器的控制下,MAX125把轉(zhuǎn)換后的數(shù)字信號(hào)發(fā)送到CY7C68013,,最后通過USB總線把采集到的數(shù)據(jù)發(fā)送到PC機(jī),,并進(jìn)行相應(yīng)的處理。
系統(tǒng)硬件框圖如圖1所示,。
1.1 信號(hào)調(diào)理電路和電源電路
擬電壓范圍為-5 V~+5 V,,所以在輸入信號(hào)進(jìn)入之前必須進(jìn)行相應(yīng)的處理。本設(shè)計(jì)所采集的語音信號(hào)的電壓范圍是0~30 mV,,初步調(diào)理之后的電壓范圍為0~2 V,,為了得到所需的增益,采用同相輸入放大電路對初步調(diào)理后的電壓放大,。完成電壓轉(zhuǎn)換后,,還必須由低通濾波器濾除高頻信號(hào),,在本設(shè)計(jì)中,采用4階巴特沃斯濾波器,。濾波電路和放大電路所采用的放大器為OP07,其輸入電壓范圍為±3 V~±22 V,。本設(shè)計(jì)采用開關(guān)電源供電,,提供的輸出電壓為±5 V、12 V,,其中,,MAX125需要5 V的數(shù)字電源和±5 V的模擬電源工作,運(yùn)算放大器的供電電壓為5 V和-5 V,,而系統(tǒng)中USB2.0芯片采用3.3 V供電,,為此,需要電源轉(zhuǎn)換模塊以獲得系統(tǒng)所需要的電源電壓值,其中5 V轉(zhuǎn)3.3 V電壓用到AS1117-3.3系列芯片,。
1.2 USB控制電路
USB2.0傳輸芯片采用CYPRESS公司的CY7C68013A-56PIN,,芯片的商標(biāo)號(hào)是FX2。EZ-USB FX2微處理器是世界上第一款集成USB2.0的微處理器,具有增強(qiáng)型的8051內(nèi)核性能,、集成度高,、方便靈活的軟配置和快捷的軟件開發(fā)工具等主要特性[3]。該芯片的內(nèi)部結(jié)構(gòu)如圖2所示,,其中主要包括USB2.0收發(fā)器,、串行引擎(SIE)、增強(qiáng)型的8051內(nèi)核,、16 KB的RAM,、4 KB的FIFO存儲(chǔ)器、I/O接口,、8位數(shù)據(jù)總線,、16位地址總線和通用可編程接口(GPIF)。
EZ-USB FX2是整個(gè)系統(tǒng)的控制核心,,除了完成與上位機(jī)的USB總線通信,,還要實(shí)現(xiàn)對A/D采樣電路的控制。CY7C68013本身有一個(gè)4 KB的內(nèi)部FIFO存儲(chǔ)器,,可以滿足常規(guī)的數(shù)據(jù)采集的需求,,更重要的是其內(nèi)部還提供了一個(gè)用于控制FIFO存儲(chǔ)器的通用可編程接口(GPIF),大大方便了用戶的需求[4],,而且在GPIF的控制下,,內(nèi)部的FIFO利用其高速緩沖區(qū)可以在不需要固件的參與下與USB之間進(jìn)行自動(dòng)高速通信。GPIF是一個(gè)內(nèi)置接口控制器,,用來取代外接的控制邏輯,,可以工作在內(nèi)部時(shí)鐘(30 MHz或48 MHz),,也可以由外部時(shí)鐘驅(qū)動(dòng)(5 MHz~48 MHz)。GPIF的核心實(shí)際上是一個(gè)可編程狀態(tài)機(jī),,最多可產(chǎn)生6個(gè)控制信號(hào)和9位地址總線,。4個(gè)用戶定義的波形描述符控制這個(gè)狀態(tài)機(jī),一般來講,,有單次讀取,、單次寫入、連續(xù)讀取,、連續(xù)寫入4個(gè)波形[5],。在GPIF模式下,讀和寫的操作都是從EZ-USB的角度來說的,。即一個(gè)讀波形數(shù)據(jù)傳輸表示數(shù)據(jù)從外部邏輯傳輸?shù)紼X-USB的內(nèi)部FIFO,,而一個(gè)寫波形數(shù)據(jù)傳輸表示數(shù)據(jù)傳輸從EZ-USB內(nèi)部的FIFO發(fā)送到外部邏輯。FX2用4個(gè)波形描述符來控制各個(gè)狀態(tài),,這些波形描述符可動(dòng)態(tài)地配置給任何一個(gè)端點(diǎn)FIFO,。配置后GPIF將依據(jù)波形描述符產(chǎn)生相應(yīng)的邏輯控制CTL及握手信號(hào)RDY來和外界接口,以滿足向FIFO讀寫數(shù)據(jù)的需要。GPIF的數(shù)據(jù)總線可以是8位,,也可以是16位,,本設(shè)計(jì)采用16位數(shù)據(jù)總線。
1.3 硬件連接圖
EZ-USB FX2接口芯片和MAX125芯片的連接圖如圖3所示,。
2 系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)的軟件設(shè)計(jì)主要包括固件設(shè)計(jì),、驅(qū)動(dòng)程序設(shè)計(jì)和應(yīng)用程序設(shè)計(jì)3部分。
2.1 固件程序設(shè)計(jì)
固件程序是整個(gè)程序設(shè)計(jì)的核心,,它主要負(fù)責(zé)處理PC機(jī)發(fā)送來的各種USB設(shè)備請求,,并與外圍電路進(jìn)行交換,存放在主機(jī)上,,當(dāng)系統(tǒng)上電或連接時(shí)將其自動(dòng)下載到芯片的RAM中,,并由8051執(zhí)行。固件程序主要包括設(shè)備初始化和GPIF波形控制,。固件程序流程如圖4所示,。
USB的固件程序是由main主函數(shù)處開始執(zhí)行的,在主函數(shù)中,,主要的初始化有:初始化休眠模式,、遠(yuǎn)程呼喚和自供電;初始化用戶設(shè)備,。其中設(shè)備初始化包括FX2工作模式的配置和數(shù)據(jù)采集參數(shù)的配置,。FX2工作模式配置主要包括時(shí)鐘模式和端點(diǎn)配置,用到的寄存器有CPUCS和EP2CFG。端點(diǎn)0作為控制傳輸,,端點(diǎn)2作為輸入端點(diǎn),,傳輸方式為批量傳輸。這部分程序主要位于TD_Init( )中,,此外還包括對生成的GPIF.C中的GPIF寄存器的初始化函數(shù)GPIFInit()的調(diào)用,。
GPIF編程主要包括GPIF工作模式的初始化、GPIF波形描述符配置,、GPIF觸發(fā)三部分內(nèi)容,。GPIF工作模式初始化主要是對寄存器IFCONFIG、EP2FIFOCFG進(jìn)行配置,,即IFCONFIG=0xFA,EP2FIFOCFG=0x09,。GPIF對MAX125的控制是按照GPIF波形描述符所表達(dá)的時(shí)序進(jìn)行的,。根據(jù)MAX125提供的讀寫時(shí)序,本系統(tǒng)利用CYPRESS提供的開發(fā)工具GPIF Designer設(shè)計(jì)了GPIF波形描述符,。GPIF觸發(fā)過程是在TD_Poll()中實(shí)現(xiàn)的,,其中寫AD控制字波形的代碼為:XGPIFSGLDATLXH=gdata[13:8],XGPIFSGLDATLXL=gdata[7:0],;啟動(dòng)GPIF FIFO讀傳輸?shù)拇a為:GPIFTRIG=GPIFTRIGRD|GPIF_EP2,。
2.2 驅(qū)動(dòng)程序設(shè)計(jì)
設(shè)備驅(qū)動(dòng)程序的主要作用是使操作系統(tǒng)能夠識(shí)別USB設(shè)備,并建立起主機(jī)和設(shè)備之間的通信,。USB驅(qū)動(dòng)程序采用WDM驅(qū)動(dòng)模型[6],,支持即插即用功能。在WDM驅(qū)動(dòng)程序模型中,,每個(gè)硬件設(shè)備至少有兩個(gè)驅(qū)動(dòng)程序,。其中一個(gè)驅(qū)動(dòng)程序?yàn)楣δ茯?qū)動(dòng)程序,即硬件設(shè)備驅(qū)動(dòng)程序,,它了解使硬件工作的所有細(xì)節(jié),,負(fù)責(zé)初始化I/O操作、處理I/O操作完成時(shí)所帶來的中斷事件,,并為用戶提供一種設(shè)備適合的控制方式,。另一個(gè)為總線驅(qū)動(dòng)程序,由操作系統(tǒng)提供,,它位于USB功能驅(qū)動(dòng)程序的下面,,負(fù)責(zé)管理硬件與計(jì)算機(jī)的連接。
在Windows操作系統(tǒng)下,,開發(fā)WDM驅(qū)動(dòng)程序可以選擇DDK開發(fā)工具,。主要有4個(gè)驅(qū)動(dòng)例程:入口例程、即插即用例程、分發(fā)例程以及電源管理例程,。
入口例程,,即DriverEntry例程,由操作系統(tǒng)的I/O管理器在設(shè)備驅(qū)動(dòng)功能加載時(shí)進(jìn)行調(diào)用,主要負(fù)責(zé)WDM驅(qū)動(dòng)程序的初始化,。
即插即用例程實(shí)現(xiàn)USB設(shè)備的熱插拔和動(dòng)態(tài)配置,。當(dāng)設(shè)備與計(jì)算機(jī)連接時(shí),系統(tǒng)自動(dòng)識(shí)別并調(diào)用其DriverEntry例程,,自動(dòng)選擇并加載合適的驅(qū)動(dòng)程序,。當(dāng)設(shè)備從系統(tǒng)中移除時(shí),自動(dòng)處理相應(yīng)的清除工作,。其驅(qū)動(dòng)例程主要有兩個(gè):AddDevice例程和IRP_MJ_PNP例程,。AddDevice例程用于完成設(shè)備的添加。IRP_MJ_PNP例程主要負(fù)責(zé)處理系統(tǒng)即插即用管理器發(fā)出的PnP信息,,包括啟動(dòng)設(shè)備,、停止設(shè)備、刪除設(shè)備等,。
分發(fā)例程用于處理各種I/O請求,,每個(gè)分發(fā)例程都對應(yīng)一個(gè)Win32函數(shù)。常用的分發(fā)例程主要有IRP_MJ_CREATE例程和IRP_MJ_CLOSE例程,。
電源管理例程負(fù)責(zé)設(shè)備的掛起與喚醒,。
2.3 應(yīng)用程序設(shè)計(jì)
上位機(jī)應(yīng)用程序給用戶提供一個(gè)操作采集系統(tǒng)的界面,將采集到的數(shù)據(jù)以多種方式顯示給用戶,,用戶也可以對采集到的數(shù)據(jù)進(jìn)行分析處理,。應(yīng)用程序采用Visual C++集成開發(fā)環(huán)境,利用MFC編程,,主要功能有:開啟和關(guān)閉USB設(shè)備,、檢測USB設(shè)備、設(shè)置USB設(shè)備傳輸管道,、設(shè)置數(shù)據(jù)采集端口,、實(shí)時(shí)地從USB接口采集數(shù)據(jù)、顯示并分析數(shù)據(jù),。應(yīng)用程序流程圖如圖5所示,。
應(yīng)用程序使用Win32的API函數(shù)CreateFile()來創(chuàng)建和打開設(shè)備,并返回該設(shè)備的句柄,。當(dāng)對設(shè)備進(jìn)行讀取時(shí),,首先調(diào)用打開并獲得指定的USB設(shè)備的句柄,然后對指定管道進(jìn)行復(fù)位,,準(zhǔn)備接收數(shù)據(jù),,然后啟動(dòng)接收數(shù)據(jù)線程。應(yīng)用程序通過使用標(biāo)準(zhǔn)的Win32 API函數(shù)DeviceIoControl()調(diào)用驅(qū)動(dòng)程序中定義的宏代碼IO_PICUSB_
CTRL_READ來執(zhí)行這部分操作,而驅(qū)動(dòng)程序與設(shè)備之間的通信中,,DeviceIoControl()調(diào)用被轉(zhuǎn)化成一個(gè)帶有IRP_MJ_DEVICE_CONTROL功能代碼的IRP,。關(guān)閉USB設(shè)備需調(diào)用CloseHandle()函數(shù), 其調(diào)用方式為CloseHandle(hDevice),其中hDevice為在調(diào)用CreateFile()函數(shù)時(shí)返回的設(shè)備句柄,。
3 試驗(yàn)結(jié)果與分析
圖6為本數(shù)據(jù)采集系統(tǒng)在批量傳輸下的應(yīng)用程序界面,。圖中曲線是對模擬語音信號(hào)采集生成的波形圖。實(shí)驗(yàn)表明,,該基于USB2.0接口的數(shù)據(jù)采集系統(tǒng)可實(shí)現(xiàn)對語音信號(hào)的采集,,傳輸速度能達(dá)到30 Mb/s,具有很強(qiáng)的抗干擾性,,完全滿足設(shè)計(jì)和使用要求,。在保存數(shù)據(jù)和退出應(yīng)用程序前,應(yīng)先停止采集,。保存數(shù)據(jù)時(shí),,通過在“保存”欄中選擇對應(yīng)的選項(xiàng),就可以保存數(shù)據(jù),。
本文所設(shè)計(jì)的基于USB2.0接口的數(shù)據(jù)采集系統(tǒng)具有8路輸入14位分辨率的性能,,可滿足語音處理,、工業(yè)自動(dòng)化及生物醫(yī)學(xué)工程中心電信號(hào)等領(lǐng)域中大多數(shù)場合的數(shù)據(jù)采集要求,。不僅克服了傳統(tǒng)采集系統(tǒng)的缺陷,而且充分利用USB優(yōu)點(diǎn),,提高了傳輸速度,,給用戶帶來許多方便。本文的創(chuàng)新點(diǎn)在于采用USB接口進(jìn)行微處理器與上位機(jī)之間的通信,,并結(jié)合CY7C68013特有的GPIF編程技術(shù),,有效提升了整個(gè)系統(tǒng)數(shù)據(jù)采集速率,在實(shí)際應(yīng)用中取得了良好的效果,。
參考文獻(xiàn)
[1] 肖忠祥.數(shù)據(jù)采集原理[M].西安:西北工業(yè)大學(xué)出版社,,2001.
[2] 邊海龍.USB2.0設(shè)備的設(shè)計(jì)與開發(fā)[M].北京:人民郵電出版社,2004.
[3] 錢峰.EZ-USB FX2單片機(jī)原理,、編程及應(yīng)用. 北京:北京航空航天大學(xué)出版社,,2006.
[4] 尹偉,婁淑琴.基于GPIF模式的USB接口電路的設(shè)計(jì)和實(shí)現(xiàn)[J].儀器儀表用戶,2008(2):61-62.
[5] Cypress Semiconductor Corporation.EZ-USB FX2 technical reference manual[Z].2001.
[6] 胡文靜,陳松.基于EZ-USB芯片CY7C68013的驅(qū)動(dòng)程序設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用研究,2005,22(9):221.