技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 基于USB的CAN總線適配器的設(shè)計(jì)

基于USB的CAN總線適配器的設(shè)計(jì)

時(shí)間:2008-08-27 10:42:00來源:ronggang

導(dǎo)語:?本文簡要提出了USB 接口與CAN總線連接方案,論述了系統(tǒng)的硬件構(gòu)成,固件開發(fā)和驅(qū)動(dòng)程序等內(nèi)容
摘 要:隨著現(xiàn)場總線技術(shù)和計(jì)算機(jī)外設(shè)接口技術(shù)的發(fā)展,現(xiàn)場總線與計(jì)算機(jī)快速有效的連接又有了更多的方案,USB作為一種新型的接口技術(shù),以其簡單易用、速度快等特點(diǎn)而備受青睞。本文簡要提出了USB 接口與CAN總線連接方案,論述了系統(tǒng)的硬件構(gòu)成,固件開發(fā)和驅(qū)動(dòng)程序等內(nèi)容。 關(guān)鍵詞:現(xiàn)場總線; USB; CAN總線 引 言:   隨著信息技術(shù)的飛速發(fā)展,各種數(shù)據(jù)的實(shí)時(shí)采集和處理在現(xiàn)代工業(yè)控制中已成為必不可少的部分。這要求我們?cè)O(shè)計(jì)的接口簡單靈活且具有較高的數(shù)據(jù)傳輸率。現(xiàn)場總線是連接智能現(xiàn)場設(shè)備和自動(dòng)化系統(tǒng)的數(shù)字式、雙向傳輸、多分支結(jié)構(gòu)的通信網(wǎng)絡(luò)。如何將其與PC機(jī)安全可靠低成本的互連,是一個(gè)亟待解決的問題。傳統(tǒng)的外設(shè)與主機(jī)的通信接口難以滿足上述要求。這些接口一般采用PCI總線或RS-232串行總線。PCI總線雖然有很高的傳輸率(可達(dá)132Mbps),但是它們的擴(kuò)充槽相當(dāng)有限,且設(shè)計(jì)復(fù)雜。RS-232串行總線連接方便,可是它的帶寬非常有限,傳輸速度慢。USB技術(shù)正是順應(yīng)這一要求提出的一種快速的,雙向的,同步傳輸?shù)?廉價(jià)的并可以進(jìn)行熱插拔的通用串行總線。它還提供了內(nèi)置電源,可向低壓設(shè)備提供5伏的電源。正是由于USB的這些特點(diǎn),使其獲得了廣泛的應(yīng)用。CAN總線是現(xiàn)場總線的一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò),具有卓越的特性和極高的可靠性,特別適合工業(yè)過程監(jiān)控設(shè)備的互連,被公認(rèn)為幾種最有前途的現(xiàn)場設(shè)備總線之一。   整個(gè)系統(tǒng)設(shè)計(jì)目的就是設(shè)計(jì)一個(gè)適配器,可以將CAN總線數(shù)據(jù)通過USB接口迅速轉(zhuǎn)送到PC機(jī)進(jìn)行處理分析,也可以通過它向CAN節(jié)點(diǎn)傳送數(shù)據(jù)或命令,以實(shí)現(xiàn)計(jì)算機(jī)與現(xiàn)場設(shè)備的通訊。 一、硬件電路的設(shè)計(jì)   該系統(tǒng)主要由AT89C52控制電路、USB 接口電路、CAN總線電路、掛起復(fù)位電路、光電隔離電路等組成,本設(shè)計(jì)系統(tǒng)主要部件結(jié)構(gòu)圖如下: [align=center] 圖1 硬件電路結(jié)構(gòu)圖[/align]   1.1 AT89C52控制電路   AT89C52 是一個(gè)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)置8k bytes的可反復(fù)擦寫的Flash存儲(chǔ)單元和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),功能強(qiáng)大。89C52是該接口電路的控制核心,其中P0,P2口用做16位數(shù)據(jù)I/O口,P1,P3口用做控制。   1.2 CAN總線   在本系統(tǒng)中,CAN控制器采用Philips公司生產(chǎn)的SJA1000,它作為一個(gè)發(fā)送、接受緩沖器,實(shí)現(xiàn)主控制器和總線之間的數(shù)據(jù)傳輸;CAN收發(fā)器采用TJA1050芯片,它是CAN控制器和物理總線的接口,主要可以提供對(duì)總線的差動(dòng)發(fā)送能力和對(duì)CAN控制器的差動(dòng)接受能力。 在CAN總線結(jié)構(gòu)中,總線的兩端還要配置兩個(gè)120Ω的電阻,其作用是總線匹配阻抗,可以增加總線傳輸?shù)姆€(wěn)定性和抗干擾能力,減少數(shù)據(jù)傳輸中的出錯(cuò)率。為了增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,SJA1000的TXO和RX0可通過高速光耦6N137與TJA1050相連,這樣就很好的實(shí)現(xiàn)了總線上各節(jié)點(diǎn)的電氣隔離。光耦部分電源與CAN_V必須用小功率電源隔離模塊進(jìn)行隔離,這樣就提高了節(jié)點(diǎn)的穩(wěn)定性和安全性。   1.3 USB接口   本設(shè)計(jì)中的PDIUSBD12是一個(gè)性能優(yōu)化的USB器件,通常用于基于微控制器的系統(tǒng)并與微控制器通過高速通用并行接口進(jìn)行通信。   PDIUSBD12與MCU的接口有2種方式:多路地址/數(shù)據(jù)總線方式、單地址/數(shù)據(jù)總線方式。在這個(gè)系統(tǒng)中,我們采用的是前一種方式:使用了AT89C52的INT0、ALE、WR、RD和P0口,A0 腳接地,當(dāng)PDIUSBD12接收到主機(jī)的有效信息時(shí),會(huì)產(chǎn)生一個(gè)中斷通知89C52進(jìn)行處理。若單片機(jī)的輸出地址為奇數(shù),則表示對(duì)PDIUSBD12發(fā)送指令;若輸出地址為偶數(shù),則表示對(duì)PDIUSBD12進(jìn)行數(shù)據(jù)傳輸。AT89C52將數(shù)據(jù)經(jīng)PDIUSBD12的并行接口送入FIFO存儲(chǔ)器。對(duì)一個(gè)單片機(jī)而言,PDIUSBD12看起來就像1個(gè)帶8位數(shù)據(jù)總線和1個(gè)地址位的存儲(chǔ)器件??刂艭LKOUT 時(shí)鐘輸出為SJA1000提供時(shí)鐘輸入。由于在USB的信號(hào)傳遞過程中會(huì)摻雜進(jìn)瞬間的高壓噪聲,這些噪聲對(duì)USB口的收發(fā)電路將產(chǎn)生致命的危害,因此需要對(duì)這些噪聲電壓進(jìn)行抑制。在USB接口電路中使用了SN75240,它可以對(duì)USB接口中的不正常電壓進(jìn)行有效的抑制,以保證硬件設(shè)備的安全。 二、微控制器的固件編程   2.1 CAN總線的軟件設(shè)計(jì)   CAN總線的三層結(jié)構(gòu)模型為:物理層、數(shù)據(jù)鏈路層和應(yīng)用層。其中物理層和數(shù)據(jù)鏈路層的功能由SJA1000完成,系統(tǒng)的開發(fā)主要在應(yīng)用層軟件的設(shè)計(jì)上,它主要由三個(gè)子程序:初始化子程序、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)程序。同時(shí),還包括一些數(shù)據(jù)溢出中斷以及幀出錯(cuò)的處理。   SJA1000在上電硬件復(fù)位之后,必須對(duì)其進(jìn)行軟件初始化之后才可以進(jìn)行數(shù)據(jù)通訊,初始化過程主要包括對(duì)其復(fù)位模式下配置時(shí)鐘分頻寄存器CDR、總線定時(shí)寄存器BTR0和BTR1、驗(yàn)收代碼寄存器ACR、驗(yàn)收屏蔽寄存器AMR及輸出控制寄存器OCR等,實(shí)現(xiàn)對(duì)總線的速率、驗(yàn)收屏蔽碼、輸出引腳驅(qū)動(dòng)方式、總線模式及時(shí)鐘分頻進(jìn)行定義。下面為SJA1000發(fā)送和接收數(shù)據(jù)的流程,基本過程為主控制器將數(shù)據(jù)保存到SJA1000發(fā)送緩沖器,然后對(duì)命令寄存器的發(fā)送請(qǐng)求TR標(biāo)志位進(jìn)行置位開始發(fā)送;接收過程為SJA1000將從總線上接收到的數(shù)據(jù)存入接收緩沖器,通過其中斷標(biāo)志位通知主控制器來處理接收到的信息,接收完畢之后清空緩沖器,等待下次接收[3]。 [align=center] 圖 2 CAN的發(fā)送數(shù)據(jù)流程[/align] [align=center] 圖 3 CAN接收數(shù)據(jù)的流程[/align]   2.2 USB總線的軟件設(shè)計(jì)   PDIUSBD12 是一款帶有并行總線和局部DMA傳輸能力的高速USB 接口器件,它支持USB1.1協(xié)議的所有傳輸方式,在本設(shè)計(jì)中用到了控制傳輸,中斷傳輸和批量傳輸??刂苽鬏斕幚碇鳈C(jī)到USB設(shè)備的控制信息,固定使用端點(diǎn)0。中斷傳輸用來傳送數(shù)據(jù)量很小,但需要及時(shí)處理,以達(dá)到實(shí)時(shí)效果的數(shù)據(jù),使用端點(diǎn)1。批量傳輸用來實(shí)現(xiàn)CAN節(jié)點(diǎn)與主機(jī)之間大數(shù)據(jù)快傳送,使用主端點(diǎn)(端點(diǎn)2),一次最大可發(fā)送64字節(jié)。PDIUSBD12 的固件設(shè)計(jì)成完全的中斷驅(qū)動(dòng),當(dāng)MCU 處理前臺(tái)任務(wù)時(shí)USB 的傳輸可在后臺(tái)進(jìn)行。這就確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡化了編程和調(diào)試。后臺(tái)ISR 中斷服務(wù)程序和前臺(tái)主程序循環(huán)之間的數(shù)據(jù)交換通過事件標(biāo)志和數(shù)據(jù)緩沖區(qū)來實(shí)現(xiàn),當(dāng)PDIUSBD12 從USB 收到一個(gè)數(shù)據(jù)包那么就對(duì)MCU 產(chǎn)生一個(gè)中斷請(qǐng)求,MCU立即響應(yīng)中斷,在ISR中固件將數(shù)據(jù)包從PDIUSBD12 內(nèi)部緩沖區(qū)移到數(shù)據(jù)緩沖區(qū),并在隨后清零PDIUSBD12 的內(nèi)部緩沖區(qū),以使能接收新的數(shù)據(jù)包。MCU 可以繼續(xù)它當(dāng)前的前臺(tái)任務(wù),返回到主循環(huán)檢查循環(huán)緩沖區(qū)內(nèi)是否有新的數(shù)據(jù)[1]。 [align=center] 圖4 PDIUSBD12固件編程結(jié)構(gòu)圖[/align]   這部分程序結(jié)構(gòu)可包括[4]:   1) 請(qǐng)求處理程序   對(duì)USB的標(biāo)準(zhǔn)設(shè)備請(qǐng)求進(jìn)行處理和對(duì)用戶添加的廠商請(qǐng)求進(jìn)行處理;USB設(shè)備接入主機(jī)后要進(jìn)入復(fù)雜的設(shè)備列舉過程,并安裝正確的驅(qū)動(dòng)程序。   2)硬件提取層   對(duì)單片機(jī)的I/O口、數(shù)據(jù)總線等硬件接口進(jìn)行操作,該層包含最底層的函數(shù),這些函數(shù)在不同的MCU 平臺(tái)上需要進(jìn)行改變,   void outportb(unsigned char port,unsigned char val);   void inportb(unsigned char port);   對(duì)PDIUSBD12 所有的I/O 訪問都可由它們實(shí)現(xiàn);   3)PDIUSBD12 命令接口   對(duì)PDIUSBD12器件進(jìn)行操作的模塊子程序集,以簡化器件的編程;   4)中斷服務(wù)程序   當(dāng)PDIUSBD12向單片機(jī)發(fā)出中斷請(qǐng)求時(shí),讀取PDIUSBD12的中斷傳輸來的數(shù)據(jù),并設(shè)定事件標(biāo)志和Setup包數(shù)據(jù)緩沖區(qū),傳輸給主循環(huán)。   5)主循環(huán)   發(fā)送USB請(qǐng)求,處理USB總線事件和用戶功能處理等。MCU 一旦上電就需要初始化其所有端口存儲(chǔ)區(qū),中斷服務(wù)程序。在主循環(huán)程序中MCU 對(duì)事件進(jìn)行輪詢,如有CAN總線發(fā)來的數(shù)據(jù),則送往PDIUSBD12進(jìn)行發(fā)送,如有USB總線數(shù)據(jù),則啟動(dòng)CAN發(fā)送程序,它們?cè)诮涌诘慕邮展ぷ鞣謩e由各自的中斷程序完成。要注意的是,我們?cè)谟昧薖DIUSBD12的端口最大一次可發(fā)送64字節(jié),SJA1000一次最多能發(fā)8字節(jié), 如果端口1傳輸?shù)拈L度大于8 字節(jié),MCU 在傳輸階段就必須根據(jù)數(shù)據(jù)大小,分?jǐn)?shù)次完成CAN數(shù)據(jù)的發(fā)送工作。 三、USB驅(qū)動(dòng)程序的編寫   在WINDOWS平臺(tái)下,與USB外設(shè)的任何通信必須通過USB設(shè)備驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)知道如何與系統(tǒng)的USB驅(qū)動(dòng)接口和訪問設(shè)備的應(yīng)用程序通信。設(shè)備驅(qū)動(dòng)是保證應(yīng)用程序訪問硬件設(shè)備的軟件組件,使得應(yīng)用程序不必知道物理連接、信號(hào)和與一個(gè)設(shè)備通信需要的協(xié)議等的細(xì)節(jié),可以保證應(yīng)用程序代碼只通過外設(shè)名字訪問外設(shè)或端口目的地。USB驅(qū)動(dòng)程序(USBD)的功能可以概括為:配置管理、總線管理、數(shù)據(jù)傳輸管理、提供客戶服務(wù)。USBD把I/O請(qǐng)求分組(IRP)劃分為USB和設(shè)備需要大小的塊,確保每一個(gè)設(shè)備能分配到它所要求的USB資源,這樣它就可以支持USB設(shè)備配置。USB是使用標(biāo)準(zhǔn)Windows系統(tǒng)USB類驅(qū)動(dòng)程序來訪問USB驅(qū)動(dòng)程序接口(USBDI),USBD.sys就是USB類驅(qū)動(dòng)程序,它使用通用主控制器驅(qū)動(dòng)程序(UHCD)或開發(fā)主控制器接口(openHCI)來訪問通用主程序控制器接口設(shè)備。USBHUB.sys就是根集線器和外部集線器的USB驅(qū)動(dòng)程序。在PCI枚舉器發(fā)現(xiàn)USB主控制器后,它會(huì)自動(dòng)裝入相關(guān)驅(qū)動(dòng)程序。 [align=center] 圖5 USB的WDM接口框圖[/align]   大量的客戶服務(wù)是由USB的驅(qū)動(dòng)程序提供的,它幫助USB的客戶控制和訪問它們的功能單元。編寫USB設(shè)備驅(qū)動(dòng)需要使用Visual C++,此外還需要Windows 98或2000驅(qū)動(dòng)設(shè)備開發(fā)包(98DDK/NTDDK) [5]。 四 、應(yīng)用程序設(shè)計(jì)   微處理器固件程序和USB設(shè)備驅(qū)動(dòng)程序的設(shè)計(jì)是USB設(shè)備開發(fā)者的工作,對(duì)于廣大用戶而言,與系統(tǒng)的交互是通過應(yīng)用程序?qū)崿F(xiàn),而且整個(gè)實(shí)時(shí)采集系統(tǒng)的主要數(shù)據(jù)處理都是在這里完成的。因此,運(yùn)行效率高、界面友好、具有強(qiáng)大數(shù)據(jù)分析和處理的應(yīng)用程序的設(shè)計(jì),也是系統(tǒng)設(shè)計(jì)上一個(gè)不容忽視的關(guān)鍵因素。其關(guān)鍵是實(shí)現(xiàn)從USB 外設(shè)讀取或發(fā)送特定數(shù)量的數(shù)據(jù),應(yīng)用程序的主要功能有:啟動(dòng)/關(guān)閉USB設(shè)備,檢測USB設(shè)備,設(shè)置USB數(shù)據(jù)傳輸管道/端口,顯示接收數(shù)據(jù),發(fā)送數(shù)據(jù)。這里,我們采用Visual C++6.0作為程序的開發(fā)環(huán)境,   可以把USB設(shè)備當(dāng)成文件來操作,利用Windows API:當(dāng)設(shè)備成功插入U(xiǎn)SB總線,USBD被自動(dòng)載入,CreateFile()就會(huì)返回一個(gè)句柄給驅(qū)動(dòng)。用DeviceIoControl()來進(jìn)行控制傳輸,用ReadFile()、WriteFile()進(jìn)行數(shù)據(jù)傳輸。CloseHandle()用來結(jié)束與USB設(shè)備的通信,此時(shí)對(duì)于此設(shè)備驅(qū)動(dòng)的句柄也就通過它釋放出來。使用上述API函數(shù)可編制USB數(shù)據(jù)收發(fā)的主機(jī)軟件[6]。 五、結(jié) 語   基于USB技術(shù)的CAN現(xiàn)場總線適配器系統(tǒng)的設(shè)計(jì),從硬件和軟件兩方面看是可行的, 實(shí)驗(yàn)結(jié)果較好的完成了通訊任務(wù),這為在工業(yè)現(xiàn)場傳送的數(shù)據(jù)接收與處理方式提供了新的方案。隨著現(xiàn)場總線技術(shù)的發(fā)展,探索其與計(jì)算機(jī)的接口技術(shù)是很有實(shí)踐意義的。 參考文獻(xiàn)   [1] Philips Corp. PDIUSBD12 Users Manual   [2] Philips Corp. SJA1000 Users Manual   [3] 饒運(yùn)濤 等 現(xiàn)場總線CAN原理與應(yīng)用技術(shù) 北京航空航天大學(xué)出版社 2003.6   [4] 周立功 PDIUSBD12 USB固件編程與驅(qū)動(dòng)開發(fā) 北京航空航天大學(xué)出版社 2003.2

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:基于MPC823e的嵌入式多媒體信...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來源“中國傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)