《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > 基于PIC單片機的CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器的設(shè)計

基于PIC單片機的CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器的設(shè)計

2009-02-23
作者:蘇義鑫1, 王 軍1, 何 力2

??? 摘??要: 為了通過以太網(wǎng)遠(yuǎn)程監(jiān)控基于CAN總線的工業(yè)控制系統(tǒng),設(shè)計了一個CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器。TCP/IP傳輸層的協(xié)議選擇UDP協(xié)議,用單片機實現(xiàn)CAN與UDP協(xié)議之間的轉(zhuǎn)換。
??? 關(guān)鍵詞: CAN; UDP; 協(xié)議轉(zhuǎn)換; 單片機

?

  隨著計算機技術(shù)、現(xiàn)場總線技術(shù)及信息技術(shù)的發(fā)展,CAN(Controller Area Network)總線在工業(yè)控制中的應(yīng)用越來越普遍。CAN總線能實現(xiàn)現(xiàn)場各類儀表相互間的通信,但其遠(yuǎn)程通信能力較弱。而以太網(wǎng)作為當(dāng)今的主流網(wǎng)絡(luò),具有很強的遠(yuǎn)程通信能力。為了融合這兩類網(wǎng)絡(luò)的技術(shù)優(yōu)勢,實現(xiàn)CAN總線網(wǎng)絡(luò)與以太網(wǎng)的數(shù)據(jù)互聯(lián),必須設(shè)計CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器。
  本文提出一種設(shè)計CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器的方法,用16位PIC單片機設(shè)計一種CAN總線協(xié)議與TCP/IP協(xié)議的轉(zhuǎn)換網(wǎng)關(guān)。由于所針對的傳輸層協(xié)議是UDP(User Datagram Protocol),因此,實際上設(shè)計的是CAN總線協(xié)議與UDP協(xié)議的轉(zhuǎn)換網(wǎng)關(guān)。
1 CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器的系統(tǒng)結(jié)構(gòu)
  系統(tǒng)主要由CAN通信模塊以太網(wǎng)通信模塊和協(xié)議轉(zhuǎn)換模塊三部分構(gòu)成,通過一個16位的PIC單片機相連。CAN通信模塊主要用于采集現(xiàn)場儀表的數(shù)據(jù)和與協(xié)議轉(zhuǎn)換模塊之間的數(shù)據(jù)傳遞;以太網(wǎng)通信模塊主要負(fù)責(zé)協(xié)議轉(zhuǎn)換模塊與以太網(wǎng)之間的數(shù)據(jù)傳輸;協(xié)議轉(zhuǎn)換模塊是將CAN協(xié)議數(shù)據(jù)包與UDP協(xié)議數(shù)據(jù)包進行轉(zhuǎn)換。
  當(dāng)現(xiàn)場儀表有數(shù)據(jù)要傳送到以太網(wǎng)上的工控機時,CAN通信模塊會采集CAN節(jié)點的數(shù)據(jù),放入數(shù)據(jù)緩沖區(qū);協(xié)議的轉(zhuǎn)換由PIC單片機完成,它將數(shù)據(jù)緩沖區(qū)CAN協(xié)議數(shù)據(jù)包轉(zhuǎn)換成UDP協(xié)議數(shù)據(jù)包,最后由以太網(wǎng)通信模塊發(fā)送給以太網(wǎng)。當(dāng)控制命令或數(shù)據(jù)要從以太網(wǎng)傳送給現(xiàn)場儀表時,以太網(wǎng)通信模塊將接收以太網(wǎng)上的數(shù)據(jù)包,并放入數(shù)據(jù)緩沖區(qū);然后協(xié)議轉(zhuǎn)換模塊把從以太網(wǎng)上接收到的UDP協(xié)議數(shù)據(jù)包轉(zhuǎn)換成CAN協(xié)議數(shù)據(jù)包;最后通過CAN通信模塊,將數(shù)據(jù)包發(fā)送給相應(yīng)的現(xiàn)場儀表,從而實現(xiàn)對現(xiàn)場儀表的遠(yuǎn)程控制。
2 硬件設(shè)計
  CAN-以太網(wǎng)協(xié)議轉(zhuǎn)換器的硬件主要由兩部分組成:CAN通信模塊接口電路和以太網(wǎng)通信接口電路。協(xié)議轉(zhuǎn)換主要通過單片機進行編程實現(xiàn)。
2.1 CAN通信模塊接口電路設(shè)計
  CAN通信接口電路主要由主控芯片PIC24FJ64GA008、CAN總線控制器SJA1000、CAN總線收發(fā)器82C250和高速光耦6N137組成,其接口電路如圖1所示。PIC24FJ64GA008單片機初始化CAN總線控制器SJA1000,并通過讀寫SJA1000的數(shù)據(jù)緩沖區(qū)實現(xiàn)CAN幀信息的接收和發(fā)送。CAN總線控制器SJA1000實現(xiàn)CAN總線數(shù)據(jù)鏈路層協(xié)議??偩€收發(fā)器82C250將CAN協(xié)議控制器與物理通信線路連接在一起。高速光耦6N137用于隔離,起到保護SJA1000型CAN總線控制器的作用。接口電路主要用到了單片機的并行主控端口模塊,它能夠很方便地實現(xiàn)與并行外設(shè)的連接。通過對并行端口控制寄存器(PMCON)和并行端口模式寄存器(PMMODE)進行適當(dāng)?shù)呐渲茫共⑿兄骺囟丝谀K的8位地址線與數(shù)據(jù)線復(fù)用,并提供鎖存信號PMALL、片選信號、讀信號、寫信號PMWR[1]。連接時將SJA1000的AD7~AD0腳與單片機的PMD[7..0]相連,用于傳送地址和數(shù)據(jù)。單片機通過引腳PMALL、、控制SJA1000的ALE、引腳,實現(xiàn)對SJA1000的讀寫控制。若片選信號與SJA1000的片選引腳相連,使SJA1000的基地址為0X8000,則SJA1000內(nèi)部的32個寄存器的地址為:0X8000~0X801F。單片機的引腳與SJA1000的引腳INT相連,由于SJA1000的引腳是集電極開路輸出,因此需要加上拉電阻,這樣單片機就可以通過中斷方式讀寫SJA1000中的數(shù)據(jù)緩沖區(qū)[2]。

?

2.2 以太網(wǎng)接口電路設(shè)計
  以太網(wǎng)接口電路用到的主要芯片有單片機PIC24FJ64GA008、以太網(wǎng)控制器RTL8019AS、鎖存器74LS373、存儲器93LC46、隔離濾波器20F001N。RTL8019AS是臺灣Realtek公司生產(chǎn)的以太網(wǎng)控制器,符合Ethernet II和IEEE802.3標(biāo)準(zhǔn),收發(fā)速率可同時達到10Mb/s,內(nèi)部有16K BRAM。接收數(shù)據(jù)和發(fā)送數(shù)據(jù)需通過DMA(Direct Memory Access)讀寫RTL8019AS的內(nèi)部RAM來實現(xiàn),單片機讀寫RAM時使用的是遠(yuǎn)程DMA,RTL8019AS讀寫RAM時使用的是本地DMA。其接口電路如圖2所示[3],圖中,RTL8019AS的數(shù)據(jù)線SD[7..0]與單片機的PMD[7..0]相連,地址線SA9、SA8與PMCS1相連,低五位地址SA4~SA0與74LS373的Q[4..0]相連。93LC46是三線SPI串行接口EEPROM,主要保存RTL8019AS的配置信息,其00H~03H地址空間用于存儲RTL8019AS的配置寄存器CONFIG1~4的初始化值;04H~11H地址空間存儲網(wǎng)絡(luò)節(jié)點的地址;12H~7FH地址空間存儲即插即用的配置信息。若00H單元的值為0X00,RTL8019AS在復(fù)位后會自動讀取93LC46,這樣配置寄存器CONFIG1的值為00H,低四位IOS3~0的值為0,而當(dāng)IOS[3..0]=0時,RTL8019AS的I/O端口的基地址為300H。因為RTL8019AS的地址為20位,所以其I/O口的地址空間為00300H~0031FH。據(jù)此,在接線時將SA19~SA10直接接地,SA9~SA8與PMCS1相連,SA7~SA5接地,當(dāng)PMCS1=1時就可以選中芯片RTL8019AS。PMCS1是單片機的ADDR14,因此,RTL8019AS的內(nèi)部地址空間00300H~0031FH的外部映射地址是4000H~401FH。RTL8019AS的IOCS16B引腳通過27k?贅的電阻下拉接地,將數(shù)據(jù)總線定義為8位[2,4]。

?

  RTL8019AS內(nèi)置了10BASE-T收發(fā)器,可以通過雙絞線進行以太網(wǎng)通信。TPIN±為接收線,TPOUT±為發(fā)送線,經(jīng)隔離濾波器20F001N后分別與RJ-45的RX±、TX±相連接。
??? LED0和LED1各接一個發(fā)光二極管以反映通信狀態(tài),LED0被點亮表示通信沖突,LED1被點亮表示收到了網(wǎng)上的數(shù)據(jù)包。
3 軟件設(shè)計
??? 軟件主要分為三部分:CAN通信程序、以太網(wǎng)通信程序和CAN-UDP協(xié)議轉(zhuǎn)換程序。軟件設(shè)計的整體思路為:當(dāng)現(xiàn)場儀表有數(shù)據(jù)要發(fā)送到以太網(wǎng)時,首先由CAN通信程序采集現(xiàn)場儀表的CAN協(xié)議數(shù)據(jù)包,并存放在緩沖區(qū)Buffer1中,然后調(diào)用CAN-UDP協(xié)議轉(zhuǎn)換程序?qū)AN協(xié)議數(shù)據(jù)包封裝成UDP數(shù)據(jù)包,最后由以太網(wǎng)通信程序發(fā)送到以太網(wǎng)的應(yīng)用層。反之,當(dāng)以太網(wǎng)上的數(shù)據(jù)要發(fā)送給某個CAN節(jié)點時,以太網(wǎng)通信程序首先將以太網(wǎng)傳輸層的UDP數(shù)據(jù)包放入緩沖區(qū)Buffer2,然后調(diào)用協(xié)議轉(zhuǎn)換程序?qū)DP數(shù)據(jù)包轉(zhuǎn)換成CAN協(xié)議數(shù)據(jù)包,最后調(diào)用CAN通信程序?qū)⒕彌_區(qū)Buffer2中的數(shù)據(jù)發(fā)送到CAN總線上的指定節(jié)點。
3.1 CAN通信程序
??? CAN通信網(wǎng)絡(luò)是根據(jù)CAN協(xié)議2.0A構(gòu)建的,SJA1000工作在BasicCAN模式。CAN通信程序主要由以下幾部分構(gòu)成:SJA1000初始化程序Config_SJA1000( )、讀寫SJA1000內(nèi)部寄存器程序Read_SJA1000( )和Write_SJA1000( )、CAN發(fā)送程序BCAN_DATA_SEND( )、CAN接收程序BCAN_DATA_RECEIVE( )。
??? Config_SJA1000( )程序主要完成波特率的設(shè)置、CAN節(jié)點地址的設(shè)定、驗收屏蔽寄存器AMR的設(shè)置、中斷寄存器IR的設(shè)置以及命令寄存器CMR的設(shè)置。為了確保CAN通信正常,CAN總線所有節(jié)點的波特率必須相同。當(dāng)發(fā)送CAN協(xié)議數(shù)據(jù)包給CAN節(jié)點時,執(zhí)行BCAN_DATA_SEND( )函數(shù),該函數(shù)通過調(diào)用Write_SJA1000( )子程序,將待發(fā)送的數(shù)據(jù)寫入CAN的數(shù)據(jù)發(fā)送寄存器,從而實現(xiàn)發(fā)送。當(dāng)SJA1000接收到CAN節(jié)點的數(shù)據(jù)時,通過單片機的外部中斷INT2向單片機申請中斷,單片機在INT2的中斷服務(wù)程序中會調(diào)用CAN接收程序,由CAN接收程序調(diào)用Read_SJA1000( ),將SJA1000數(shù)據(jù)接收緩沖區(qū)中的數(shù)據(jù)讀到單片機的數(shù)據(jù)緩沖區(qū)Buffer1中。
3.2 CAN-UDP協(xié)議轉(zhuǎn)換程序
??? CAN-UDP協(xié)議轉(zhuǎn)換程序主要負(fù)責(zé)將數(shù)據(jù)緩沖區(qū)Buffer1中的CAN協(xié)議數(shù)據(jù)包封裝成UDP數(shù)據(jù)包;同時也會從以太網(wǎng)的傳輸層上接收UDP數(shù)據(jù)包,然后封裝成CAN協(xié)議數(shù)據(jù)包,存入數(shù)據(jù)緩沖區(qū)Buffer2。UDP協(xié)議的幀格式如圖3所示。

?


  源端口號(2B):發(fā)送進程的端口,即假定在沒有其他信息的情況下,返回信息應(yīng)該向什么地方發(fā)送。

??? 目標(biāo)端口號(2B):UDP數(shù)據(jù)包的接收端號。
  數(shù)據(jù)報長度(2B):包括報頭和數(shù)據(jù)報在內(nèi)的總字節(jié)數(shù)。
  校驗值(2B):對IP頭、UDP頭和數(shù)據(jù)中信息包頭的數(shù)位取反之和再取反。源端口號、目標(biāo)端口號、數(shù)據(jù)報長度和校驗值構(gòu)成UDP報頭。
  UDP數(shù)據(jù):是實際的傳輸信息,數(shù)據(jù)的最大長度可達到65 527 字節(jié)。在傳輸過程中數(shù)據(jù)字節(jié)設(shè)為8B,且第一個數(shù)據(jù)字節(jié)為CAN節(jié)點的地址。CAN數(shù)據(jù)包幀格式如圖4所示。

?

  地址(1B):8位標(biāo)識符,表示發(fā)送數(shù)據(jù)或接收數(shù)據(jù)的節(jié)點地址。字節(jié)數(shù)(1B):數(shù)據(jù)報和校驗和的字節(jié)數(shù)之和,固定值設(shè)為8。數(shù)據(jù)報(8B):前7個字節(jié)為傳送的實際信息,第8個字節(jié)為校驗和。
  將UDP協(xié)議數(shù)據(jù)包轉(zhuǎn)換成CAN協(xié)議數(shù)據(jù)包時,單片機將UDP數(shù)據(jù)包的報頭去掉,將第1個數(shù)據(jù)字節(jié)作為CAN協(xié)議包的第1個字節(jié),UDP的第3個數(shù)據(jù)字節(jié)~第10個數(shù)據(jù)字節(jié)作為CAN協(xié)議包的第3字節(jié)~第10字節(jié),UDP的第2個數(shù)據(jù)字節(jié)作為CAN協(xié)議包的第2個字節(jié),固定值設(shè)為8,最后將轉(zhuǎn)換好的數(shù)據(jù)包發(fā)送出去。將CAN協(xié)議數(shù)據(jù)包轉(zhuǎn)換成UDP協(xié)議數(shù)據(jù)包時,單片機要給UDP協(xié)議數(shù)據(jù)包加上報頭。數(shù)據(jù)報的轉(zhuǎn)換過程與上述過程類似,不再贅述。
3.3 以太網(wǎng)通信程序
  以太網(wǎng)通信程序主要由RTL8019AS的初始化程序、數(shù)據(jù)接收函數(shù)和數(shù)據(jù)發(fā)送函數(shù)組成。系統(tǒng)上電后,先執(zhí)行RTL8019AS的初始化程序,該子程序主要是對RTL8019AS中第0頁和第1頁的相關(guān)寄存器進行設(shè)置;然后程序?qū)TL8019AS數(shù)據(jù)發(fā)送寄存器、接收寄存器進行檢測,當(dāng)數(shù)據(jù)緩沖區(qū)Buffer1有數(shù)據(jù)向以太網(wǎng)發(fā)送時,單片機通過遠(yuǎn)程DMA通道將數(shù)據(jù)送到RTL8019AS的RAM中,然后發(fā)出傳送命令;之后RTL8019AS啟動本地DMA,將數(shù)據(jù)發(fā)送到以太網(wǎng)上。 反之,當(dāng)以太網(wǎng)上有數(shù)據(jù)要傳給CAN節(jié)點時,先啟動本地DMA,將網(wǎng)上的數(shù)據(jù)讀到RTL8019AS的RAM中,然后單片機通過遠(yuǎn)程DMA通道將RAM中的數(shù)據(jù)讀到緩沖區(qū)Buffer2。
  本文設(shè)計了一款價格低廉、性能可靠的CAN—以太網(wǎng)協(xié)議轉(zhuǎn)換器,為部分工業(yè)控制系統(tǒng)的遠(yuǎn)程監(jiān)控設(shè)計提供了一種新的選擇方案。


參考文獻
[1]?Microchip Technology Inc.PIC24FJ128GA系列數(shù)據(jù)手冊.2006.
[2]?Philips Semiconductors. SJA1000 datasheet.2000.
[3]?曹宇,魏豐,胡士毅.用51單片機控制RTL8019AS實現(xiàn)以太網(wǎng)通訊[J]. 電子技術(shù)應(yīng)用,2003,29(1):21-23.
[4]?REALTEK. Realtek RTL8019AS datasheet.2005.

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