《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > 基于USB的CAN總線智能適配卡的軟硬件設(shè)計(jì)

基于USB的CAN總線智能適配卡的軟硬件設(shè)計(jì)

2009-02-12
作者:季厭浮

  摘 要: 采用SJA1000作為CAN控制芯片,使用PDIUSBD12作為USB的控制芯片,并利用AT89C52作為微控制器,設(shè)計(jì)了基于USB的CAN總線智能適配卡的硬件結(jié)構(gòu)。在此基礎(chǔ)上,設(shè)計(jì)了適配卡的軟件實(shí)現(xiàn)方案。針對(duì)CAN總線容易受到外界干擾的弱點(diǎn),使用6N137進(jìn)行信號(hào)隔離。
  關(guān)鍵詞: USB接口;CAN總線;微控制器;智能適配卡

?

  隨著信息技術(shù)的飛速發(fā)展,各種數(shù)據(jù)的實(shí)時(shí)采集和處理在現(xiàn)代工業(yè)控制中已經(jīng)成為必不可少的部分,這就要求現(xiàn)場設(shè)計(jì)的接口簡單靈活且具有較高的數(shù)據(jù)傳輸率。控制器局域網(wǎng)CAN(Controller Area Network)總線屬于現(xiàn)場總線的范疇,是一種具有高可靠性、支持分布式控制和實(shí)時(shí)控制的串行通信總線標(biāo)準(zhǔn)。傳統(tǒng)的適配卡設(shè)計(jì)方案中,CAN總線網(wǎng)絡(luò)與計(jì)算機(jī)的連接通常采用的是RS232、ISA或者PCI接口,但是隨著計(jì)算機(jī)接口技術(shù)的迅速發(fā)展,ISA接口已經(jīng)逐漸被淘汰。RS232接口數(shù)據(jù)傳輸率太低,PCI接口雖然可以實(shí)現(xiàn)高速傳輸,但其主要缺點(diǎn)是占用有限的系統(tǒng)資源,設(shè)計(jì)復(fù)雜,并且無法用于便攜式計(jì)算機(jī)的擴(kuò)展,必須有高質(zhì)量的驅(qū)動(dòng)程序保證系統(tǒng)的穩(wěn)定。USB技術(shù)正是順應(yīng)接口技術(shù)發(fā)展而提出的一種快速、雙向、同步傳輸、廉價(jià)的并且可以進(jìn)行熱插拔的通用串行總線。
  本文設(shè)計(jì)了基于USB接口的CAN總線適配卡的硬件結(jié)構(gòu)和軟件實(shí)現(xiàn)方案。該適配卡既可以對(duì)數(shù)據(jù)起到轉(zhuǎn)發(fā)的作用,即收集CAN總線上各個(gè)節(jié)點(diǎn)的數(shù)據(jù),轉(zhuǎn)發(fā)給上位機(jī),并把上位機(jī)的命令和數(shù)據(jù)發(fā)給各節(jié)點(diǎn);也可以完成對(duì)CAN總線上的用戶系統(tǒng)的部分監(jiān)控管理工作,故又被稱為智能適配卡[1]。通過在礦井等特殊現(xiàn)場環(huán)境下的實(shí)踐應(yīng)用,證明該適配卡具有良好的抗干擾能力和高速的傳輸性能。
1 智能適配卡的硬件結(jié)構(gòu)
  適配卡的硬件電路主要由微控制器、CAN總線接口、USB總線接口和信號(hào)隔離模塊等部分組成,如圖1所示。

?


1.1 AT89C52微控制電路
  AT89C52是一個(gè)低電壓、高性能CMOS 8位單片機(jī),片中內(nèi)置有8KB可反復(fù)擦寫的Flash存儲(chǔ)單元和256B隨機(jī)存取數(shù)據(jù)存儲(chǔ)器RAM,功能強(qiáng)大。AT89C52是該接口電路的控制核心,其中P0、P2口用作16位數(shù)據(jù)I/O口,P1、P3口用作控制。
  微控制器負(fù)責(zé)對(duì)USB設(shè)備控制器和CAN控制器進(jìn)行控制。在微控制器內(nèi)部駐留有USB通信協(xié)議和CAN通信協(xié)議,完成USB通信協(xié)議和CAN總線通信協(xié)議轉(zhuǎn)換,實(shí)現(xiàn)USB接口和CAN接口通信數(shù)據(jù)的透明傳輸[2]。
1.2 USB接口電路
  本設(shè)計(jì)中USB控制芯片采用Philips公司的PDIUSBD12。該芯片是一款性價(jià)比很高的USB器件,內(nèi)部集成了串行接口引擎SIE、存儲(chǔ)器管理單元MMU、集成RAM、模擬收發(fā)器以及電壓調(diào)整器,可與任何外部微控制器實(shí)現(xiàn)高速數(shù)據(jù)傳輸?shù)牟⑿薪涌冢?MB/s)。提供3個(gè)端點(diǎn),其中主端點(diǎn)(端點(diǎn)2)的雙緩沖配置增加了數(shù)據(jù)吞吐量并輕松實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)傳輸。
  PDIUSBD12與微控制器的接口有二種方式:多路地址/數(shù)據(jù)總線方式、單地址/數(shù)據(jù)總線方式。在本設(shè)計(jì)中,采用的是前一種方式,即使用了AT89C52的INT0、ALE、WR、RD和P0口,A0腳接地,當(dāng)PDIUSBD12接收到主機(jī)的有效信息時(shí),會(huì)產(chǎn)生一個(gè)中斷通知AT89C52進(jìn)行處理。若微控制器的輸出地址為奇數(shù),則表示對(duì)PDIUSBD12發(fā)送指令;若輸出地址為偶數(shù),則表示對(duì)PDIUSBD12進(jìn)行數(shù)據(jù)傳輸。AT89C52將數(shù)據(jù)經(jīng)PDIUSBD12的并行接口送入FIFO存儲(chǔ)器。對(duì)微控制器而言,PDIUSBD12看起來就像1個(gè)帶8位數(shù)據(jù)總線和1個(gè)地址位的存儲(chǔ)器件。由于在USB的信號(hào)傳遞過程中會(huì)摻雜進(jìn)瞬間的高壓噪聲,這些噪聲對(duì)USB口的收發(fā)電路將產(chǎn)生致命的危害,因此需要對(duì)這些噪聲電壓進(jìn)行抑制。在USB接口電路設(shè)計(jì)中,使用了SN75240,它可以對(duì)USB接口中的不正常電壓進(jìn)行有效的抑制,以保證硬件設(shè)備的安全[3]
1.3 CAN總線電路
  在本設(shè)計(jì)中,CAN總線控制器采用Philips公司生產(chǎn)的SJA1000,它作為一個(gè)發(fā)送、接收緩沖器,實(shí)現(xiàn)主控制器和總線之間的數(shù)據(jù)傳輸。CAN總線控制器接口芯片采用PCA82C250,它是CAN總線控制器和物理總線的接口,可以對(duì)總線提供不同的發(fā)送能力和對(duì)CAN控制器提供不同的接收能力。為了增強(qiáng)CAN總線的抗干擾能力,SJA1000的TX0和RX0并不是直接與PCA82C250的TXD和RXD相連,而是通過高速光電耦合器6N137后與PCA82C250相連。這樣就很好地實(shí)現(xiàn)了總線上各CAN節(jié)點(diǎn)間的電氣隔離,如圖2所示。不過應(yīng)注意:光耦部分電路所采用的兩個(gè)電源Vcc和Vdd必須完全隔離,否則采用光耦就會(huì)失去意義。電源的完全隔離可采用小功率電源隔離模塊,或帶+5V隔離輸出的開關(guān)電源模塊實(shí)現(xiàn)。

?

2 智能適配卡的軟件設(shè)計(jì)
  適配卡的軟件設(shè)計(jì)主要包括CAN通信軟件設(shè)計(jì)、USB設(shè)備端通信軟件設(shè)計(jì)、USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)和應(yīng)用程序設(shè)計(jì)四大部分。
2.1 CAN通信軟件設(shè)計(jì)
  CAN通信軟件設(shè)計(jì)主要包括三大部分:初始化CAN控制器SJA1000、發(fā)送數(shù)據(jù)模塊和接收數(shù)據(jù)模塊。同時(shí)還包括一些數(shù)據(jù)溢出中斷及幀出錯(cuò)的處理。初始化CAN控制器SJA1000主要用來實(shí)現(xiàn)CAN控制器工作時(shí)的參數(shù)設(shè)置,這些初始化的內(nèi)容包括硬件使能CAN控制器、設(shè)置CAN報(bào)警界限、設(shè)置CAN總線波特率、設(shè)置中斷工作方式、設(shè)置CAN驗(yàn)收過濾器的工作方式、設(shè)置CAN控制器的工作模式等[4]。這些功能主要是通過設(shè)置各寄存器予以實(shí)現(xiàn)。
  微控制器AT89C52將USB總線送來的數(shù)據(jù)轉(zhuǎn)換為符合CAN發(fā)送幀格式的數(shù)據(jù),通過調(diào)用CAN發(fā)送數(shù)據(jù)模塊將該數(shù)據(jù)從CAN控制器SJA1000轉(zhuǎn)發(fā)。微控制器AT89C52調(diào)用CAN接收數(shù)據(jù)模塊接收來自CAN總線的數(shù)據(jù),并把數(shù)據(jù)轉(zhuǎn)換為符合USB發(fā)送幀格式的數(shù)據(jù),將該數(shù)據(jù)通過PDIUSBD12進(jìn)行轉(zhuǎn)發(fā)[5]。CAN通信軟件整體工作流程如圖3所示。

?


2.2 USB設(shè)備端通信軟件設(shè)計(jì)
  USB設(shè)備端通信軟件設(shè)計(jì)主要包括PDIUSBD12的硬件驅(qū)動(dòng)層、USB接口控制驅(qū)動(dòng)層、USB協(xié)議層和USB應(yīng)用層軟件設(shè)計(jì)[6]。
2.2.1 PDIUSBD12的硬件驅(qū)動(dòng)層軟件設(shè)計(jì)
  PDIUSBD12硬件驅(qū)動(dòng)層主要任務(wù)是初始化PDIUSBD12與AT89C52連接的配置,復(fù)位PDIUSBD12并建立PDIUSBD12與AT89C52的通信函數(shù)。
2.2.2 USB接口控制驅(qū)動(dòng)層軟件設(shè)計(jì)
  USB接口控制驅(qū)動(dòng)層的主要任務(wù)是實(shí)現(xiàn)PDIUSBD12的各種功能,包括地址使能、讀取端點(diǎn)數(shù)據(jù)、向端點(diǎn)寫入數(shù)據(jù)和設(shè)置DMA等,該層中的功能函數(shù)通過調(diào)用PDIUSBD12硬件驅(qū)動(dòng)層的各函數(shù)予以實(shí)現(xiàn)。
2.2.3 USB協(xié)議層軟件設(shè)計(jì)
  USB協(xié)議層的主要任務(wù)是處理標(biāo)準(zhǔn)的USB設(shè)備請(qǐng)求以及特殊的廠商請(qǐng)求。USB主機(jī)通過標(biāo)準(zhǔn)USB設(shè)備請(qǐng)求,可設(shè)定和獲取USB設(shè)備的有關(guān)信息,完成USB設(shè)備的枚舉。所有的請(qǐng)求都是通過PDIUSBD12的端點(diǎn)0接收和發(fā)送SETUP包來完成。
2.2.4 USB應(yīng)用層軟件設(shè)計(jì)
  PDIUSBD12支持所有的四種USB數(shù)據(jù)傳輸方式。本文適配卡的設(shè)計(jì)中使用了控制傳輸、中斷傳輸和批量傳輸??刂苽鬏斨挥脕韨鬟f控制信息,固定使用端點(diǎn)0;中斷傳輸使用端點(diǎn)1,用來傳送CAN網(wǎng)絡(luò)狀態(tài)信息;批量傳輸使用端點(diǎn)2,用來實(shí)現(xiàn)主機(jī)和CAN網(wǎng)絡(luò)節(jié)點(diǎn)之間的數(shù)據(jù)傳送。
  PDIUSBD12具有完善的中斷機(jī)制,微控制器AT89C52可以通過讀PDIUSBD12的中斷寄存器獲得總線事件。為了提高USB應(yīng)用層軟件的運(yùn)行效率,主程序?qū)ο到y(tǒng)進(jìn)行初始化后開放中斷,在中斷服務(wù)程序中對(duì)事件進(jìn)行分析和必要的處理,并設(shè)置相應(yīng)的變量標(biāo)志和數(shù)據(jù)緩沖區(qū)。主程序則循環(huán)查詢變量標(biāo)志,調(diào)用相應(yīng)的子程序進(jìn)行處理。這種程序結(jié)構(gòu)使得主程序能夠在前臺(tái)處理各種數(shù)據(jù)傳送任務(wù),同時(shí)又可以通過中斷在后臺(tái)及時(shí)處理總線事件,有力地確保了最佳的傳輸速率和更好的軟件結(jié)構(gòu),同時(shí)簡化了編程和調(diào)試[7]。PDIUSBD12中斷服務(wù)程序如圖4所示。

?

2.3 USB設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)
  USB設(shè)備驅(qū)動(dòng)程序采用的是WDM( Windows Driver Mode)
  類型。WDM屬于操作系統(tǒng)的內(nèi)核模式,其驅(qū)動(dòng)程序由運(yùn)行于內(nèi)核模式的系統(tǒng)代碼組成。WDM設(shè)備驅(qū)動(dòng)模型與先前的VXD型驅(qū)動(dòng)程序相比,降低了所需驅(qū)動(dòng)程序的數(shù)量和復(fù)雜性,簡化了驅(qū)動(dòng)程序的開發(fā)[8]。
  本文采用DriverStudio開發(fā)工具進(jìn)行開發(fā)。DriverStudio包含VtoolsD、softICE和DriverWork等工具,通過DriverWorks的開發(fā)向?qū)river Wizard生成驅(qū)動(dòng)程序框架,在其生成的代碼框架中再加入對(duì)設(shè)備上LED燈的控制操作,實(shí)現(xiàn)一個(gè)完整的USB設(shè)備驅(qū)動(dòng)程序。在生成驅(qū)動(dòng)程序的同時(shí),可以同時(shí)生成驅(qū)動(dòng)程序的測試程序。編譯運(yùn)行DriverWorks生成的驅(qū)動(dòng)測試程序,能夠發(fā)現(xiàn)此設(shè)備驅(qū)動(dòng)運(yùn)行是否良好,并能夠?qū)崿F(xiàn)對(duì)設(shè)備上的LED燈的控制。
2.4 應(yīng)用程序設(shè)計(jì)
  對(duì)于廣大用戶而言,與系統(tǒng)的交互是通過應(yīng)用程序?qū)崿F(xiàn),而且整個(gè)系統(tǒng)的主要數(shù)據(jù)處理都在這里完成。因此,運(yùn)行效率高、界面友好、具有強(qiáng)大數(shù)據(jù)分析和處理的應(yīng)用程序的設(shè)計(jì),也是系統(tǒng)設(shè)計(jì)上一個(gè)不容忽視的關(guān)鍵因素。應(yīng)用程序設(shè)計(jì)的關(guān)鍵是實(shí)現(xiàn)從USB外設(shè)讀取或發(fā)送特定數(shù)量的數(shù)據(jù),本設(shè)計(jì)中采用Visual C++6.0作為應(yīng)用程序的開發(fā)環(huán)境。
  CAN總線與USB總線作為流行的、先進(jìn)的總線技術(shù)都具有廣泛的應(yīng)用和發(fā)展前途。本設(shè)計(jì)通過結(jié)合USB與CAN的優(yōu)點(diǎn)連接擴(kuò)展了USB在工業(yè)控制中的功能,同時(shí)大大簡化了工業(yè)控制與PC機(jī)之間的數(shù)據(jù)通信,具有十分廣泛的應(yīng)用價(jià)值。本設(shè)計(jì)已經(jīng)完成,并在礦井下數(shù)據(jù)傳輸中得到應(yīng)用,取得了良好的現(xiàn)場應(yīng)用效果。


參考文獻(xiàn)
[1] 張延宇,曹云俠. 基于USB的CAN適配卡的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006,22(1):6-8.
[2] ?高強(qiáng),任恩恩,張濤. CAN總線的PCI接口通信卡設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2007,33(7):122-124.
[3] ?周立功. PDIUSBD12固件編程與驅(qū)動(dòng)開發(fā)[M]. 北京:北京航空航天大學(xué)出版社,2003.
[4] ?律德才,馬峰. CAN總線控制器SJA1000的原理及應(yīng)用[J].電測與儀表,2002,(4):57-59.
[5] ?CENA G, VALENZANO A.FastCAN: A high-performance?enhance CAN-like network[J]. IEEE Transactions on
Industrial? Electronics, 2000,47(4):951-952.
[6] ?高軍,劉曉莉,趙延明.基于LPC2292的CAN總線USB接口適配器的設(shè)計(jì)[J].化工自動(dòng)化及儀表,2007,34(4):49-52.
[7] ?張紅彩,賴聯(lián)琨,姜學(xué)東.USB總線在CAN接口卡上的應(yīng)用與設(shè)計(jì)[J].自動(dòng)化與儀表,2006,(3):27-30.
[8] ?CANT C. Windows WDM 設(shè)備驅(qū)動(dòng)程序開發(fā)指南[M].北京:機(jī)械工業(yè)出版社,2000.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。