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