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