基于USB 2.0數(shù)據(jù)采集系統(tǒng)的程序設(shè)計
1 引言
在工業(yè)生產(chǎn)和科學(xué)技術(shù)研究的各行業(yè)中, 常利用PC或工控機對各種數(shù)據(jù)進(jìn)行采集, 如壓力、頻率、液位、溫度等。常用的采集方式是通過數(shù)據(jù)采集板卡, 其不僅安裝麻煩, 易受機箱內(nèi)環(huán)境的干擾,而且由于受計算機插槽數(shù)量和地址、中斷資源的限制, 不可能掛接很多設(shè)備。而通用串行總線( Universa l Ser ia l Bus, USB )的出現(xiàn), 很好地解決了以上這些沖突, 可實現(xiàn)低成本、高可靠性、多點的數(shù)據(jù)采集。USB 2. 0 是一種計算機外設(shè)連接規(guī)范, 除了USB1. 1中規(guī)定的1. 5Mb it / s和12Mb it / s兩個模式以外, 還增加了480Mbit / s( 60MB / s)這一 高速 模式, 將USB的應(yīng)用范圍得到進(jìn)一步擴大。
本文介紹的基于USB 2. 0的兩路力信號采集傳輸系統(tǒng), 可用于銷盤式摩擦實驗機, 測量材料的摩擦系數(shù)。
2 硬件設(shè)計
2. 1 系統(tǒng)方案
外部傳感器的摩擦力信號和壓力信號分別通過兩片8位AD轉(zhuǎn)換器轉(zhuǎn)換為數(shù)字信號, 由USB 芯片直接傳輸至計算機中處理, 并使用軟件演示兩路力之間的關(guān)系, 計算出材料的摩擦系數(shù)。主機同時負(fù)責(zé)數(shù)據(jù)傳輸?shù)膯优c停止, USB 控制器控制信號的采集并讀取到內(nèi)部緩沖區(qū)。
2. 2 控制器芯片選擇USB 控制器采用56 腳SSOP 封裝的CY7C68013, 屬于Cypresss 公司FX2 系列。
Cypresss EZFX2將USB 2. 0的收發(fā)器、SIE、增強型8051 和一個可編程邏輯接口集成在一個芯片上。在EZUSB FX2 上, 靈活的SIE 處理大部分USB1. 1和USB 2. 0硬件協(xié)議, 釋放了用于特殊應(yīng)用功能的嵌入式微控制器。通用可編程接口( GPIF)和主控/伺服端點FIFO ( 8..或16..位數(shù)據(jù)總線) 提供了其與常用接口, 如: ATA, UTOPA, EPP,PCMC IA, 以及大多數(shù)DSP /處理器的簡單無縫連接。其有如下特點:
內(nèi)核: 增強型8051的時鐘頻率高達(dá)48M; 每個周期4個時鐘; 運行來自內(nèi)部RAM的程序。
四個可編程BULK / INTERRUPT / ISOCHRONOUS端點: 緩沖區(qū)可選擇為雙緩沖區(qū), 三緩沖區(qū)或四緩沖區(qū); 外部數(shù)據(jù)接口可為8或16位。
GPIF: GPIF對于FX2的FIFO來說是一個內(nèi)部主機, 可編程狀態(tài)機是它的核心。對于56腳封裝,它可以產(chǎn)生三個‘控制?’( CTL [ 2: 0] ) 和九個‘地址’ (GPIFADR [ 8: 0] )輸出, 能接收兩個外部和兩個內(nèi)部‘準(zhǔn)備’ ( RDY [ 1: 0] )輸入。控制狀態(tài)機由四個用戶定義的!波形描述‘控制’。內(nèi)部RAM 中的波形描述符描述每個GPIF信號的行為。初始化階段, 波形描述符由FX2固件下載到GPIF寄存器中,通過GPIF接口在傳輸操作的代碼執(zhí)行全過程使用它??刂戚敵鲂盘? CTL[ 1: 0] )通常用做閘門控制(使能信號線)、讀/寫信號線等。CTLx波形邊沿可通過編程進(jìn)行傳輸, 速率可達(dá)每個IFCLK時鐘一次( IFCLK 運行于48MH z)。RDY[ 1: 0]由GPIF取樣,而且能迫使一個傳輸處于等待, 繼續(xù), 或重復(fù)狀態(tài),直到它們處于一個特殊的狀態(tài)。
2. 3 硬件電路圖
根據(jù)所選控制器和具體條件, 設(shè)計硬件電路如圖2所示。
采用從主機下載固件程序的方法, SCL, SDA引腳通過兩個2. 2k 的電阻接3. 3V 電源, RESET引腳有滯后作用, 低電平有效; 內(nèi)部PLL 在V cc 到達(dá)3. 3V后約200s后穩(wěn)定。典型電路是外接一個RC電路(R = 100K, C = 0. 1F)提供RESET:信號;軟件部分采用GPIF Master模式, 16 位數(shù)據(jù)總線,將兩路8位ADC 數(shù)據(jù)線直接連到GPIF數(shù)據(jù)總線上: FD[ 0: 7]接摩擦力數(shù)據(jù)信號FDATA [ 0: 8] ,FD[ 8 : 15] 接壓力數(shù)據(jù)信號PDATA [ 0 : 7 ]。
CTL0, CTL1分別連接ADC 的READ 和WRITE 引腳, 用于控制其工作時序。REY0連接ADC 的INTR, 用于判斷是否開始讀取數(shù)據(jù), 并由此判斷何時改變GPIF狀態(tài)。
芯片電源使用USB 總線電源, 采用MAX IM 公司的MAX882 芯片, 把5. 25V 的Vbus轉(zhuǎn)換為3.3V, 如圖3所示。
對于USB 2. 0系統(tǒng), D + 和D - 信號線上的差分特性阻抗會嚴(yán)重影響到信號眼圖、EOP、帶寬、信號抖動和干擾的大小。根據(jù)U SB 2. 0規(guī)范的要求,差分線對的特性阻抗要求控制在90 ? 10% 以內(nèi),使D+ 和D - 布線長度在1英寸以內(nèi), 匹配誤差在50m il以內(nèi)。
3 軟件設(shè)計
USB接口程序設(shè)計包括三部分: 固件程序設(shè)計、硬件驅(qū)動程序設(shè)計、高級應(yīng)用程序設(shè)計。
3. 1 固件( firmw are)設(shè)計
設(shè)備固件程序的主要功能是控制EZUSB FX2接收并處理USB 驅(qū)動程序的請求、控制芯片中應(yīng)用程序控制指令的接收、控制ADC 中的數(shù)據(jù)讀入等。該設(shè)計的固件程序除能夠使內(nèi)置的GPIF在沒有CPU 的干涉下通過四個端點FIFO ( EP2、EP4、EP6、EP8)中的兩個處理數(shù)據(jù)傳輸外, 還有配置端點、通過控制端點0 來響應(yīng)主機請求、控制和監(jiān)測GPIF的活動等固定工作。
GPIF的波形描述符通過FX2的固件保存在波形寄存器中。FX2可以保持多達(dá)4個波形描述符,均可采用4種傳輸方式( Single 讀, Single寫, FIFO讀, FIFO寫)中的一種。
一個波形由7 個可編程的狀態(tài)( S0 ~ S6 ) 和一個特殊的IDLE 狀態(tài)S7 組成, 當(dāng)程序分支到它的IDLE 狀態(tài)時波形終止。從一種狀態(tài)到另一個狀態(tài)的轉(zhuǎn)換發(fā)生在IFCLK 的上升沿, 但GPIF可以保持在同一種狀態(tài)很多IFCLK 周期。每一個狀態(tài)都通過一個32位的狀態(tài)指令定義: 1) NDP狀態(tài): 在整個狀態(tài)期間, 控制輸出CTLx 被GPIF 指令定義為1, 0, 或三態(tài)。NDP狀態(tài)有一個以IFCLK 周期為單位的程序固定周期。如果一個波形定義的狀態(tài)少于7個, 最后一個編程的狀態(tài)結(jié)束后不會自動進(jìn)入IDLE狀態(tài), 即最后一個編程狀態(tài)的狀態(tài)指令必須包含一個IDLE 狀態(tài)的明確分支。2) DP 狀態(tài): 任何一個狀態(tài)都可以定義為DP, 允許GPIF采樣兩個信號, 對采樣值進(jìn)行布爾操作, 根據(jù)結(jié)果跳轉(zhuǎn)到其它狀態(tài)(或循環(huán)到自身)。若一個狀態(tài)指令包含一個控制任務(wù)(遞增FIFO 指針, 增加GPIFADR 地址等) , 這些任務(wù)總是在進(jìn)入該狀態(tài)時執(zhí)行一次。若該狀態(tài)是一個循環(huán)到自身的DP, 可以編程為在每一個循環(huán)中重新執(zhí)行控制任務(wù)。
GPIF的設(shè)計使用的是Cypress的GPIF Design工具, 可根據(jù)ADC 的時序和控制要求方便地設(shè)計,設(shè)計波形如圖4。采用Sing le Read 方式, 每一個狀態(tài)的持續(xù)時間可設(shè)置為0~ 256個IFCLK 個周期。
在Status中設(shè)置了一個DP, 當(dāng)RDY0( INTR )信號為高時, 跳轉(zhuǎn)到狀態(tài)0 重新下一次數(shù)據(jù)采集; 當(dāng)為低時, 則返回到自身繼續(xù)執(zhí)行。定義好波形后, 由工具欄中的Too ls菜單中的Export to GPIF. c file導(dǎo)出為C語言文件。定義端點2, 6 為輸入端點, 對應(yīng)的FIFO 緩沖區(qū)為雙緩沖區(qū), 保證不會因為緩沖區(qū)中的數(shù)據(jù)沒有傳送完畢而被覆蓋。每次采集數(shù)據(jù)的高字節(jié)存入端點2緩沖區(qū), 低字節(jié)存入端點6緩沖區(qū)。
3. 2 驅(qū)動程序的設(shè)計
該系統(tǒng)需要兩個驅(qū)動程序, 下載固件的驅(qū)動程序和功能驅(qū)動程序。采用固件從主機下載的方式,由固件下載驅(qū)動程序完成。當(dāng)設(shè)備連接到U SB 總線后, 負(fù)責(zé)把固件程序下載到CY 7C68013的RAM中, 完成重列舉工作, 使內(nèi)核正常工作。主機根據(jù)其設(shè)置的V ID /PID尋找并安裝功能驅(qū)動程序, 從而實現(xiàn)主機與設(shè)備的通信。用戶程序與設(shè)備的通信及控制由功能驅(qū)動程序負(fù)責(zé)完成。
驅(qū)動程序設(shè)計采用WDM (W indow s DriveMode)。其引入設(shè)備對象的概念來描述一個設(shè)備,主要包括物理設(shè)備對象( PDO )、功能設(shè)備對象( FDO)、過濾設(shè)備對象( f ilter DO )。其中, PDO 對應(yīng)實際的物理設(shè)備, FDO 和f ilterDO 是相應(yīng)驅(qū)動程序的處理對象。WDM 驅(qū)動程序直接操作的不是硬件本身, 而是相應(yīng)的PDO, FDO, 和filter DO。當(dāng)用戶發(fā)出請求時, 操作系統(tǒng)會將其打包形成一個IRP結(jié)構(gòu), 并發(fā)送至驅(qū)動程序, 通過識別IRP 中的設(shè)備對象來區(qū)分它是發(fā)送給哪個設(shè)備。
USB設(shè)備最大優(yōu)點就是即插即用功能( PnP) ,PnP設(shè)備具有不同的設(shè)備狀態(tài), 當(dāng)它接收到某些PnP IRP時, 其所處的設(shè)備狀態(tài)就會發(fā)生改變。圖5描述了PnP設(shè)備狀態(tài)及其相應(yīng)的PnP IRP。
為保證USB設(shè)備連入系統(tǒng)時, W indow s能夠找到并加載與其進(jìn)行通信的設(shè)備驅(qū)動程序, 除提供的編譯好的驅(qū)動程序外, 還需為其提供一個設(shè)備信息文件( DIF) , 該文件包含USB 設(shè)備、設(shè)備驅(qū)動程序及其安裝過程的詳細(xì)信息, 如該為設(shè)備使用哪個驅(qū)動、系統(tǒng)注冊表中應(yīng)存儲哪些信息等, 以確保其硬件設(shè)備能正確地配置和安裝。在U SB 設(shè)備驅(qū)動程序安裝完畢后, 該設(shè)備的一些基本信息將被存儲到W indow s系統(tǒng)注冊表中, 驅(qū)動程序可執(zhí)行文件和其DIF也被復(fù)制到指定的系統(tǒng)目錄, 該USB 設(shè)備將出現(xiàn)在W indow s設(shè)備管理器中。
3. 3 應(yīng)用程序設(shè)計
高級應(yīng)用程序建立在驅(qū)動程序之上, 主機應(yīng)用程序的編寫使用VC 編譯環(huán)境中的API函數(shù)實現(xiàn)。
應(yīng)用程序的編程方法與串口編程類似。首先必須查找設(shè)備, 打開設(shè)備的句柄, 然后進(jìn)行讀寫和控制操作, 最后是關(guān)閉設(shè)備句柄。為了提高效率,可使用多線程技術(shù)實現(xiàn)讀寫。
4 結(jié)語
本文設(shè)計的用于摩擦實驗機的USB 數(shù)據(jù)采集系統(tǒng), 采用Cypress FX2系列芯片CY7C68013, 利用其GPIF Master模式的16位數(shù)據(jù)線與兩塊8位數(shù)模轉(zhuǎn)換芯片連接, 準(zhǔn)確地保證了兩路力信號的同步。該芯片靈活的接口大大簡化了硬件連接。其固件程序自動下載功能可方便地對固件進(jìn)行修改和調(diào)試。此USB設(shè)備的即插即用特性滿足了該系統(tǒng)便攜式及使用方便的要求。
評論