工控網(wǎng)首頁
>

應(yīng)用設(shè)計

>

基于USB總線和89C51單片機的數(shù)據(jù)采集系統(tǒng)設(shè)計

基于USB總線和89C51單片機的數(shù)據(jù)采集系統(tǒng)設(shè)計

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

提交

查看更多評論
其他資訊

查看更多

藍牙技術(shù)的安全機制

步進電機的控制原理及其單片機控制實現(xiàn)

嵌入式實時系統(tǒng)中跨平臺通信的實現(xiàn)