基于USB總線和89C51單片機的數據采集系統設計
2005/3/23 10:26:00
摘要:本文介紹了基于USB總線的數據采集設備的開發方法,包括硬件設計、firmware(固件)設計、基于windows驅動程序模型(WDM)的設備驅動程序設計以及應用軟件的設計,同時也介紹了基于USB的遠程數據采集系統。 關鍵詞:通用串行總線;數據采集;單片機 The system design of data collect according to the USB and 89C51 DING Wei-xiong,SONG Xiao-guang,YANG Ding-an (Department of Computer Sciences,Foshan University,Foshan 52800,China) Abstract: This article introduced the development method according to USB data collect equipments, includes the hardware design, firmware design and the design of the program design and the application software according to the windows drives, also introducing to the collect system according to the USB long range data。 Key words:USB;Data collect;MCS 在工業生產和科學技術研究過程的各行業中,常常要對各種數據進行采集,現在常用的采集方式是在PC機或工控機內安裝數據采集卡,如A/D卡及RS-422卡、RS-485卡。采集卡不僅安裝麻煩,易受機箱內環境的影響,而且由于受計算機插槽數量和地址、中斷資源的限制,不可能掛接很多設備。而通用串行總線(Universal Serial Bus,簡稱USB)的出現能很好地解決以上這些沖突。我們利用89C51單片機設計了基于USB總線的數據采集設備,并可與MAX485結合起來實現數據的遠程采集。 系統硬件設計 USB數據采集系統硬件模塊主要由串行A/D轉換器、89C51芯片、USB接口芯片和多路模擬開關等組成。硬件總體結構框圖如圖1所示。 
圖1 硬件總體結構框圖 USB接口芯片采用National Semiconductor公司的一種專用芯片USBN9602。該芯片內部集成微處理器接口、 FIFO存儲器、時鐘發生器、串行接口引擎(SIE)、收發器、電壓轉換器,支持DMA、微波接口。 多路模擬輸入信號經多路模擬開關控制將其中的一路接入串行A/D轉換器,A/D轉換器經光電隔離后串行輸出到移位寄存器,移位寄存器將此結果轉為8位并行數據,89C51系統通過8位的并行接口傳送A/D轉換器采集的數據,存儲在FIFO存儲器中;一旦FIFO存滿,SIE立刻對數據進行處理,然后89C51系統將數據從FIFO存儲器中讀出,由收發器通過數據線(D+、D-)送至主機。 USBN9602與89C51的具體接口電路如圖2所示。圖中USBN9602的CLKOUT與89C51的XTAL1相連,即USBN9602的時鐘輸出為89C51提供時鐘輸入。USBN9602的復位端接RC電路以保證復位電路可靠地工作。由于晶振頻率較高,結合USBN9602內部網絡,在XOUT端串接100mF電容及470mH電感,起穩定內部振蕩頻率的作用。 
圖2 USBN9602與89C51接口電路 系統軟件設計 系統軟件包括設備固件、 USB設備驅動程序和應用程序。 設備固件(firmware)設計 此處固件是指固化到89C51E2PROM中的程序,其主要功能是: (1)控制A/D轉換器的采樣。(2)控制芯片USBN9602接受并處理USB驅動程序的請求及應用程序的控制指令。現主要介紹89C51系統如何控制USB控制器(USBN9602)與主機的通信。89C51系統對USB控制器的操作是嚴格按照USB協議1.1進行的,按照USB協議1.1的規定,USB傳輸方式分為4種:控制傳輸,塊傳輸,同步傳輸和中斷傳輸。在實際開發中使用了控制傳輸和塊傳輸。控制傳輸主要用來完成主機對設備的各種控制操作,也就是用來實現位于主機上的USB總線驅動程序(USBD.SYS)以及編寫的功能驅動程序對設備的各種控制操作。塊傳輸主要用來完成主機和設備間的大批量數據傳輸以及對傳輸數據進行錯誤檢測(若發生錯誤,它支持“重傳”功能)。 89C51系統控制USB控制器的工作過程可以簡單地概括為:當USB控制器從USB總線檢測到主機啟動的某一傳輸請求后,通過中斷方式將此請求通知89C51系統,89C51系統通過訪問USB控制器的狀態寄存器和數據寄存器獲得與此次傳輸有關的各種參數,并根據具體的傳輸參數,對USB控制器的控制寄存器和數據寄存器進行相應的操作,以完成主機的傳輸請求。 USB設備驅動程序設計 USB系統驅動程序的設計是基于WDM(Windows driver model 驅動程序模型)的。WDM采用分層驅動程序模型(見圖3所示),分為較高級的USB設備驅動程序和較低級的USB函數層。其中USB函數層由兩部分組成:較高級的通用串行總線模塊(USBD)和較低級的主控制器驅動程序模塊(HCD)。 在上述USB分層模塊中,USB函數層由Windows98提供,負責管理USB設備驅動程序和USB控制器之間的通信,加載及卸載USB驅動程序,與USB設備通用端點(endpoint)建立通信來執行設備配置、數據與USB協議框架和打包格式的雙向轉換任務。 目前Windows98提供了多種 USB設備驅動程序,但并不針對數據采集設備,因此需用DDK開發工具設計專用的USB設備驅動程序。在本設計中由四個模塊實現:初始化模塊、即插即用管理模塊、電源管理模塊以及I/O功能實現模塊。 
圖3 USB系統驅動程序層次關系 初始化模塊提供一個入口函數DriverEntry(),所有對各種IRP(I/O Request Packet,IRP請求包)的處理例程都在此入口函數中做出定義。 即插即用管理模塊實現USB設備的熱拔插及動態配置。當硬件檢測到USB設備接入時,Windows98查找響應的驅動程序,并調用它的DriverEntry例程,PnP(即插即用)管理器調用驅動程序的AddDevice例程,告訴它添加了一個設備;在此處理過程中,驅動程序收到一個設備啟動請求(IRP_MN_START_DEVICE)的IRP。同理,當要拔除時,PnP管理器會發出一個設備刪除請求(IRP_MN_REMOVE_DEVICE)的IRP,由驅動程序進行處理。通過對這些PnP請求的處理,可支持設備的熱插拔和即插即用功能。 電源管理模塊負責設備的掛起與喚醒。 I/O功能實現模塊完成I/O請求的大部分工作。若應用程序想對設備進行I/O操作,它便使用Windows API函數,對WIN32子系統進行WIN32調用。此調用由I/O系統服務接收并通知I/O管理器,I/O管理器將此請求構造成一個合適的I/O請求包(IRP)并把它傳遞給USB設備驅動程序,USB設備驅動程序接收到這個IRP以后,根據IRP中包含的具體操作代碼,構造相應的USB請求塊并把此URB(USB請求塊)放到一個新的IRP中,然后把此IRP傳遞到USB總線驅動程序,USB總線驅動程序根據IRP中所含的URB執行相應的操作(如從USB設備讀取數據等),并把操作結果通過IRP返還給USB設備驅動程序。USB設備驅動程序接收到此IRP后,將操作結果通過IRP返還給I/O管理器,最后I/O管理器將此IRP中操作結果返還給應用程序,至此應用程序對USB設備的一次I/O操作完成。 應用程序設計 用戶態的應用程序是數據采集系統的中心,其主要功能為:開啟或關閉USB設備、檢測USB設備、設置USB數據傳輸管道、設置A/D狀態和數據采集端口、實時從USB接口采集數據、顯示并分析數據。應用程序主流程圖如圖4所示。 
圖4 應用程序主流程圖 由于USBN9602提供的FIFO不超過64字節,當它存滿后,USBN9602自動將數據打包即時請求讀入數據,由SIE自動發送數據包。另外,當系統啟動A/D模塊后,便會創建兩個線程:采樣線程和顯示存盤線程。采樣線程負責將采集數據寫到應用程序提交的內存;而顯示存盤線程負責給應用程序發送顯示和存盤消息。當應用程序接收到此消息后,便從它提交的內存中讀取數據并顯示和存盤。此處需要注意的是采樣線程和顯示存盤線程在讀寫應用程序提交的內存時要保持同步。 遠程數據采集系統設計 傳輸距離是限制USB在工業現場應用的一個障礙,即使增加了中繼或Hub,USB傳輸距離通常也不超過幾十米,這對工業現場而言顯然太短了。現在工業現場有大量采用RS-485傳輸數據的采集設備,其優點主要為傳輸距離可達到1200米以上,并且可以掛接多個設備,但傳輸速度慢,且需要板卡支持,安裝麻煩。但將RS-485與USB結合起來就可以優勢互補,產生一種快速、可靠、低成本的遠程數據采集系統。 設計這樣一個系統的關鍵設備是RS-485~USB轉換器,可以采用USBN9602+89C51+ MAX485實現這一功能,整個系統的基本思想是:將傳感器采集到的模擬量數字化以后,利用RS-485協議將數據上傳,上述RS-485~USB轉換器在主機端接收485的數據并通過USB接口傳輸至主機進行處理,而主機向USB發送數據時,數據通過RS—485~USB轉換口轉換為485協議向遠端輸送,從而能夠實現遠程數據的雙向傳輸。如圖5所示。 軟件方面的設計跟前所述類似。 
圖5 采用USB和485實現遠距離數據傳輸 結語 基于USB外設的應用目前在國內外處于高速發展階段,利用USB進行數據采集和工業控制已得到成功應用,特別是隨著USB協議2.0的推出,數據傳輸速率高達480Mbps,如此高的傳輸速率必將使USB在數據采集中的優勢更加體現出來,同時會使其在更廣闊的領域得到更深層次的應用。 參考文獻 1 張念淮,江浩.USB總線接口開發指南.北京:國防工業出版社.2002 2 李朝青.PC機及單片機數據通信技術.北京:北京航空航天出版社.2000 3 原嵩,林滸.通用串行總線的原理及實現. 小型微行計算機系統.1999(5) 4 張洪潤,藍清華.單片機應用技術教程. 北京:清華大學出版社.1997 5 徐有青,余勝生.通用串行總線設備接口的設計.電子計算機與外部設備.1998(5) 作者簡介






提交
查看更多評論
其他資訊