基于通用串行總線(USB)的實時數據采集系統的設計嚴格遵循USB1.1協議,充分體現USB便捷、易擴展、低成本、低干擾的特點。詳細介紹系統的USB設備驅動程序、設備固體、應用程序的具體設計。
現代工業生產和科學研究對數據采集的要求日益提高。目前比較通用的是在PC或工控機內安裝數據采集板卡,如A/D卡及422、485卡。這些數據采集設備存在以下缺陷:安裝麻煩;價格昂貴;受計算機插槽數量、地址、中斷資源限制,可擴展性差;在一些電磁干擾性強的測試現場,無法專門對其做電磁屏蔽,導致采集的數據失真。
通用串行總線(Universal Serial Bus,簡稱USB)是1995年康柏、微軟、IBM、DEC等公司為了解決傳統總線的不足推廣的一種新型串行通信標準。該總線接口具有安裝方便、高帶寬、易擴展等優點,已經逐漸成為現代數據傳輸的發展趨勢。基于USB的數據采集系統充分利用USB總線的上述優點,有效解決了傳統數據采集系統的缺陷。
1 系統硬件設計
1.1 硬件總體結構
USB實時數據采集系統硬件模塊包括A/D轉換器、微控制器、USB通信接口和多路模擬開關。硬件總體結構如圖1所示。
1.2 USBN9602芯片
USB接口芯片采用National Semiconductor公司的一種專用芯片USBN9602。該芯片內部集成微處理器接口、FIFO存儲器、時鐘發生器、串行接口引擎(SIE)、收發器、3.3V電壓轉換器,支持DMA、微波接口,內部結構如圖2所示。
微控制器通過8位的并行接口傳送A/D采集的數據,存儲在FIFO存儲器中;一旦FIFO存滿,SIE立刻對數據進行處理,其中包括:同步模式識別、并/串轉換、位填充/解填充、CRC產生與校驗、地址識別、握手響應與產生、USB特殊事件(Reset、Suspend、Resume)檢測;最后由收發器通過數據線(D+、D-)傳送數據至PC。上述過程嚴格遵守USB1.1協議。USBN9602與89C52的具體實現電路如圖3所示。
2 系統軟件設計
系統軟件包括USB設備驅動程序、設備固件、應用程序。
2.1 USB設備驅動程序開發
USB系統驅動程序采用分層結構模型:較高級的USB設備驅動程序和較低級的USB函數層。其中USB函數層由兩部分組成:較高級的通用串行總線驅動程序模塊(USBD)和較低級的主控制器驅動程序模塊(HCD)。它們的層次關系如圖4所示。
在上述USB分層模塊中,USB函數層(USBD及HCD)由Windows98提供,負責管理USB設備驅動程序和USB控制器之間的通信;加載及卸載USB驅動程序;與USB設備通用端點(endpoint)建議通信來執行設備配置、數據與USB協議框架和打包格式的雙向轉換任務。
目前Windows98提供了多種USB設備驅動程序,但并不針對實時數據采集設備,因此需采用DDK開發工具設計專用的USB設備驅動程序。可以由四個模塊實現:初始化模塊、即插即用管理模塊、電源管理模塊以及I/O功能實現模塊。
初始化模塊提供一個DriverEntry入口點來執行大量的初始化函數。

即插即用管理模塊實現USB設備的熱插拔及動態配置。當硬件檢測到USB設備接入時,Winodws98查找響應的驅動程序,并調用它的DriverEntry例程,PnP管理器調用驅動程序的AddDevice例程,告訴它添加了一個設備;然后,驅動程序為USB設備建立一個FDO(功能設備對象),在此處理過程中,驅動程序收到一個IRP_MN_START_DEVICE的IRP,包括設備分配的資源信息。至此,設備被正確配置,驅動程序開始與硬件進行對話。當然,在設備運行過程中,如果設備的狀態發生變化(拔除、暫停等),PnP管理器也同樣發出相應的IRP,由驅動程序進行相應的處理。
電源管理模塊負責設備的掛起與喚醒。
I/O功能實現模塊完成I/O請求的大部工作。當應用程序提出I/O請求時,它調用Win32 API函數DeviceIoControl來向設備發出命令。然后,由I/O管理器構成一個IRP并設置其MajorFunction域為IRP_MJ_DEVICE_CONTROL。USB設備驅動程序收到該IRP后,取出其中的控制碼,并利用一個開關語句來找到對應的例程入口。
2.2 設備固件(firmware)設計
設備固件是設備運行的核心,采用匯編語言設計。其主要功能是控制芯片USB9602接受并處理USB驅動程序的請求(如請求設備描述符、請求或設置設備狀態、請求設備設置、請求或設置設備接口等供10種USB1.1標準請求);控制芯片USB962接受應用程序的控制指令;控制A/D模塊的數據采集;通過USB9602存儲數據并實時上傳PC。其程序主框圖如圖5所示。
在圖5中,ALT事件表示硬件檢測到USBN96902處于下列狀態:Reset、Resume、Suspend,由ALTEV寄存器匯報并產生中斷。

2.3 應用程序設計
PC機或工控機應用程序是數據實時采集系統的中心,采用Visual C++ 5.0編程。其功能主要有:開啟或關閉USB設備、檢測USB設備、設置USB數據傳輸管道(pipe)、設置A/D狀態和數據采集端口、實時從USB接口采集數據、顯示并分析數據。USB程序主框圖如圖6所示。
由于USB9602提供的FIFO不超過64字節,當FIFO存滿后,USB9602自動將數據打包即時請求讀入數據,由SIE自動發送數據包。程序獲得數據后,需延遲至下組數據包準備完畢,從而保證程序與設備采集頻率同步。另外,當系統啟動A/D模塊后程序持續執行,并采用多線程編程發出停止采集和關閉USB設備的命令。
3 基于USB總線的數據實時采集系統特點
基于USB總線的數據實時采集系統設計上嚴格遵循USB1.1協議,其性能特點如下:
(1)安裝方便,支持即插即用。安裝時可在不關機不打開機箱的情況下將設備插入USB插槽,運行驅動程序即可,以后可直接對設備熱插拔。
(2)易擴展。最第傳輸距離5m,采用Hub或中繼器可達30m;最多對外可接127個設備。
(3)供電方便。USB總線直接利用主機電源為外設提供最大5V 500mA的電流,系統無需另備電源。
(4)電源干擾影響極小。由于本產品放置在計算機機箱外,不受箱內的板間電源干擾。如在電磁干擾較嚴重的環境下,可以為該產品專門設計屏蔽方案。
(5)性價比高。遠優于傳統的實時數據采集系統。
(6)實時采集,實時顯示。
編輯:何世平