摘要:本文介紹了以高性能的USB2.0芯片CY7C68013為核心的EZ-USB FX2微處理器,以及以MAX1198為核心的A/D采樣芯片構(gòu)成的高速數(shù)據(jù)采集和傳輸系統(tǒng),論述了系統(tǒng)硬件的結(jié)構(gòu),給出了應(yīng)用程序流程圖和實現(xiàn)方案。
關(guān)鍵詞:EZ-USB FX2;CY7C68013;MAX1198;USB2.0;信號傳輸
引言
UWB(ultra wideband)雷達(dá)在探測隱身目標(biāo),人體皮下組織,目標(biāo)識別、目標(biāo)精細(xì)成像等方面都具有優(yōu)良的性能。通過UWB雷達(dá)零中頻信號實時采集和傳輸系統(tǒng),獲取的數(shù)據(jù)量很大,傳輸速度要求高,因此,對于傳輸線路的帶寬以及系統(tǒng)的硬件資源提出了較高的要求。本文探討了以高性能的CY7C68013芯片為核心的EZ-USBFX2微處理器,以及以MAX1198為核心的A/D采樣卡實現(xiàn)高速數(shù)據(jù)的采集和傳輸系統(tǒng)的設(shè)計和應(yīng)用。
系統(tǒng)硬件電路
系統(tǒng)硬件電路結(jié)構(gòu)如圖1所示。UWB脈沖雷達(dá)信號在進入A/D轉(zhuǎn)換電路以前,要進行限幅、降壓、濾波和增加輸入阻抗等措施以保護后端的A/D采樣芯片。
A/D轉(zhuǎn)換電路
經(jīng)過調(diào)理后的信號進入模/數(shù)轉(zhuǎn)換電路,高速A/D芯片選用美國MAXIM公司的MAXl 198。MAXl 198是3.3V、雙通道的8位模數(shù)轉(zhuǎn)換器(ADC),具備全差分寬帶跟蹤/保持(T/H)輸入,驅(qū)動2路ADC[32]。同時還具有并行、CMOS兼容的三態(tài)輸出。通過單個控制引腳,數(shù)字輸出格式可以選擇為二進制補碼或直接偏移二進制碼。
在信號采集系統(tǒng)設(shè)計中,MAX1198的模擬信號輸入采用了差分輸入驅(qū)動方式。MAX1198的模擬信號差分輸入方式同時使用1NA+和1NA一,1NB+和1NB一引腳。MAX1198提供的三種參考模式中選擇了內(nèi)部參考模式。
系統(tǒng)主控電路
主控電路采用集成了USB2.0收發(fā)器的微處理器EZ-USB FX2。該處理器是基于USB2.0總線控制器,包含標(biāo)準(zhǔn)的MCS51外設(shè)模塊和USB模塊,具有加強的8051內(nèi)核性能、集成度高、方便靈活的軟配置以及便捷的軟件開發(fā)工具等主要特性。
在主控電路設(shè)計中,使用CPLD控制ADC以及FIFO的時序、控制ADC的啟動與停止和查詢ADC的狀態(tài)等。CY7C68013控制MAX1198進行間隔采樣,然后把結(jié)果傳送到FIFO中,當(dāng)采集到一定量的數(shù)據(jù)后,CY7C68013將數(shù)據(jù)打包通過USB總線傳到PC,由高級應(yīng)用程序進行數(shù)據(jù)處理。上電時805l程序從內(nèi)部RAM中開始運行,從外部EEPROM中加載程序。USB啟動后,內(nèi)部邏輯會檢查連接到I2c總線上的EEROM中的第一個字節(jié)(OxCO或0 xc 2)。如果是0 x C O,就會使用EEPROM中的VID/PID/DID來替代內(nèi)部存儲值;如果是OxC2,內(nèi)部邏輯就會把EEPROM中的內(nèi)容裝入到內(nèi)部RAM中;如果沒有檢查到EEPROM,F(xiàn)X2就會使用內(nèi)部存儲的描述符來枚舉。FX2缺省的VID/PID/DID是0x0484/0x8613/Oxxxyy。
接口電路
MAX1198與CY7C68013的接口設(shè)計通過一個外接FIFO存儲器來實現(xiàn)與CY7C680 1 3的連接以保持?jǐn)?shù)據(jù)采集的連續(xù)性,F(xiàn)IFO主要起著高速數(shù)據(jù)緩沖的作用。這些端點FIFO系統(tǒng)提供了通用時序信號,握手信號(滿、空、可編程),讀寫選通,輸出使能等。另外其內(nèi)部還提供了一個用于控制FIFO存儲器的通用可編程接口( GPIF,Ge neral Programme Interface),在FX2連接到不包含標(biāo)準(zhǔn)FIFO接口的外部邏輯單元時,可以用作一個內(nèi)部主機。
系統(tǒng)應(yīng)用程序設(shè)計
系統(tǒng)應(yīng)用程序主要功能有:開啟或關(guān)閉USB設(shè)備、檢測USB設(shè)備、設(shè)置A/D狀態(tài)、啟動數(shù)據(jù)采集、顯示并保存采集的數(shù)據(jù)、測試速度等。應(yīng)用程序主框圖如圖2所示:
應(yīng)用程序設(shè)計由動態(tài)鏈接庫DLL(Dynamic Link Libraries)和客戶端程序組成。
1動態(tài)鏈接庫DLL(Dynamm’LinkLibraries)
負(fù)責(zé)與內(nèi)核態(tài)的USB功能驅(qū)動程序通信并接收應(yīng)用程序的各種操作請求。動
態(tài)鏈接庫中定義有兩種函數(shù):導(dǎo)出函數(shù)(Export function)和內(nèi)部函數(shù)fIntemal function),導(dǎo)出函數(shù)可以被其他模塊調(diào)用,內(nèi)部函數(shù)只能在DLL內(nèi)部使用。我們在用c++定制DLL文件時,需要編寫的就是包含導(dǎo)出函數(shù)表的模塊定義文件[.DEF]和實現(xiàn)導(dǎo)出函數(shù)功能的c++文件。
定義文件d11.def源代碼如下所示:
LIBRARY“dllu”//DLL庫的名稱為dllu.1ib,
DESCRIPTION’my d11’//IDLL庫的描述為“my dll”
EXPORTS//定義導(dǎo)出函數(shù)
opendevice//打開設(shè)備函數(shù)
closedevice//關(guān)閉設(shè)備函數(shù)
ReadLocation//從設(shè)備讀取數(shù)據(jù)
WriteLocation//向設(shè)備寫入數(shù)據(jù)
test //速度測試函數(shù)
客戶端程序
負(fù)責(zé)對所采集的數(shù)據(jù)進行實時顯示。包括:
(1)客戶端軟件與USB設(shè)備連接
客戶端軟件與USB設(shè)備的連接實際上是與WDM設(shè)備驅(qū)動程序的連接。在客戶軟件中通過調(diào)用CreateFile()函數(shù)可建立客戶軟件與WDM設(shè)備驅(qū)動程序的連接。CreateFile()函數(shù)屬于windows應(yīng)用程序接口(API,Application Programming Interface),當(dāng)客戶軟件調(diào)用CreateFile()函數(shù)時,操作系統(tǒng)將按照一定的路徑查找并加載所需的動態(tài)鏈接庫,實現(xiàn)與設(shè)備驅(qū)動程序的連接成功調(diào)用,隨后CreateFil()函數(shù)就會返回代表其所連接設(shè)備的設(shè)備句柄,通過所得到設(shè)備句柄可以實現(xiàn)對設(shè)備的控制。
(2)I/O控制函數(shù)
DeviceloControl()函數(shù)可以在客戶軟件程序中實現(xiàn)設(shè)備的I/O控制,驅(qū)動程序根據(jù)I/O控制命令來決定該如何獲取應(yīng)用程序的緩沖器地址。I/O控制命令中的數(shù)據(jù)訪問方式的定義有M E T H 0 D—B U F F E R E D.M E T H O D—I N—D I R E C T,METHOC一0UT—DIRECT或METHOD_NEITHER:
DeviceloControl()函數(shù)主體如下:
BOOL DeviceloControl (HANDLEhDevice, //設(shè)備句柄
DWORD dwloControlCode, //NO控制代碼IOCTL
LPVOID lpInBufer,//緩沖區(qū)
DWORD nlnBuferSize,//緩沖區(qū)大小
LPVOID IpOutBufer,//緩沖區(qū)
DWORD nOutBuferSize,//緩沖區(qū)大小
LPDWORD JpB)rtesRetumed.
LPOVERLAPPED IpOverlapped);
(3)塊輸入輸出函數(shù)
CreateEvent()可以控制設(shè)備自動從它的塊輸入端點返回,并從它的塊輸出端點接收任意字節(jié)。
CCyUSBDevice*USBDevice=newCCyUSBDevice(Handle);
OVERLAPPED outOvLap,inOvLap;
O u t 0 V L a p.h E v e n t
=CreateEvent(NULL,1,1,“CYUSB—0UT”);//塊輸出
i n 0 v L a p.h E v e n t
=CreateEvent(NULL,1,1,“CYUSB_IN”);//塊輸入
char inBuf[l28];
ZeroMemory(inBuf,128);
char buffer[128];
LONG length=128:
(4)客戶端程序初始化
BOOL CWzylApp::InitInstance()
{
XferThread=NULL;
USBDevice--new CCyUSBDevice0;
AfxEnableControlContaine();
//初始化定義字段
#ifdef—AFXDLL
Enable3dControls(); //使用MFC時在一個共享的DLL中調(diào)用該控制函數(shù)
#else
Enable3dControlsStatic();//連接到靜態(tài)MFC時調(diào)用該函數(shù)
#endif
}
(5)USB數(shù)據(jù)傳輸
USB進行數(shù)據(jù)傳輸時,采用塊傳輸模式,輸入管道為管道0,讀取的數(shù)據(jù)先
保存到緩沖區(qū)再顯示在PC機上。
for(i-O;i<16Ii++)
btc.pipeNum=0;//設(shè)置輸入管道為管道0
bResult=DeviceloControl(hDevice,//引用所獲得的設(shè)備句柄
IOCTL—EZUSB BULK READ,//定義傳輸方式為塊傳輸方式
btc,
sizeof(BULK TRANSFERCONTROL),
mBufer,//讀取的數(shù)據(jù)段保存到mBufer由
64,//每段數(shù)據(jù)長度為64字節(jié)
結(jié)語
本文提出了一種基于EZ-USB FX2微處理器和MAXl 198 A/D采樣芯片的數(shù)據(jù)采集系統(tǒng)設(shè)計方案,經(jīng)過實驗測定,在塊傳輸方式下實現(xiàn)了最高48MHz的數(shù)據(jù)采樣速率,滿足了系統(tǒng)設(shè)計的基本要求。C51語言結(jié)合CPLD的軟配置方案便于系統(tǒng)軟件的升級和維護。與微機接口部分設(shè)計嚴(yán)格遵守usb2.0協(xié)議,具有一定的通用性,對于一般基于usb的高速數(shù)據(jù)傳輸系統(tǒng)的設(shè)計具有一定的應(yīng)用參考價值。
參考文獻(xiàn):
1.Microsoft Coration.Windows 2000 Driver Development Kit Documentation[EB/oL].2 0 0 0.O 6.2 8 h ct D://www.microsoft.com,ddk。
2.EZ-USB Series 2200 TechnicalReference Manual,http://www.cypress.com.
3.Max1198 datasheet.http://ITlsxim.com,Rev0,2002,4.
4.許永和,‘USB外圍設(shè)備設(shè)計與應(yīng)用,’北京:北京航空航天大學(xué)出版社.2002.