《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于CAN總線智能節(jié)點的設(shè)計與實現(xiàn)
基于CAN總線智能節(jié)點的設(shè)計與實現(xiàn)
來源:微型機與應(yīng)用2012年第2期
紀(jì)文志1,,陳國忠1,,唐加山2
(1.南京郵電大學(xué) 通信與信息工程學(xué)院,江蘇 南京210003; 2.南京郵電大學(xué) 理學(xué)院,,江蘇 南
摘要: 根據(jù)CAN總線技術(shù)特點,,利用ARM STM32F107芯片和通用CAN收發(fā)器CTM8251T,,給出了基于CAN總線智能節(jié)點的硬件和軟件設(shè)計方法,,并實現(xiàn)了智能節(jié)點之間的通信。實際應(yīng)用表明,,該智能節(jié)點工作穩(wěn)定可靠,,具有較強的抗干擾能力。
Abstract:
Key words :

摘  要: 根據(jù)CAN總線技術(shù)特點,,利用ARM STM32F107芯片和通用CAN收發(fā)器CTM8251T,,給出了基于CAN總線智能節(jié)點的硬件和軟件設(shè)計方法,并實現(xiàn)了智能節(jié)點之間的通信,。實際應(yīng)用表明,,該智能節(jié)點工作穩(wěn)定可靠,具有較強的抗干擾能力,。
關(guān)鍵詞: CAN總線,;CAN收發(fā)器;智能節(jié)點

1 CAN總線技術(shù)特點
    CAN(Controller Area Network)控制器局域網(wǎng)絡(luò)是在20世紀(jì)80年代初由德國Bosch公司為解決現(xiàn)代汽車中眾多的測控儀器之間的數(shù)據(jù)交換而設(shè)計的一種有效支持分布式實時控制的串行數(shù)據(jù)通信網(wǎng)絡(luò)[1],。1993年11月ISO正式頒布了CAN國際標(biāo)準(zhǔn)(ISO 11898),,它以半雙工方式工作,采用基于數(shù)據(jù)的傳輸機制,通信介質(zhì)可以是雙絞線,、同軸電纜, 其通信速率可達(dá)1 Mb/s,,最大傳輸距離可達(dá)10 km(速率在5 kb/s以下)。CAN總線的主要特點[2]為:
    (1)多主技術(shù),。網(wǎng)絡(luò)上任一節(jié)點均可在任意時刻主動地且不分主從地向網(wǎng)絡(luò)上其他節(jié)點發(fā)送信息,,同時將節(jié)點信息分不同的優(yōu)先級,可滿足不同的實時需求,。
    (2)可靠性高,。節(jié)點在錯誤嚴(yán)重的情況下,具有自動關(guān)閉輸出功能,,切斷自身與總線的聯(lián)系,,使總線上其他節(jié)點的操作不受影響。
    (3)完善的錯誤監(jiān)測機制,。采用短幀結(jié)構(gòu),,傳輸時延短,受干擾概率低,,每幀信息都進(jìn)行16 bit的CRC 校驗及其他校驗措施,,使數(shù)據(jù)出錯率極低。
    這些優(yōu)良的特性使CAN總線在汽車工業(yè),、機械工業(yè),、醫(yī)療器械及傳感器等領(lǐng)域得以廣泛應(yīng)用,。CAN總線被公認(rèn)為極具發(fā)展前途的現(xiàn)場總線之一。
2 CAN總線智能節(jié)點設(shè)計
2.1 CAN總線智能節(jié)點硬件電路設(shè)計

    本文中的CAN總線智能節(jié)點通信模塊采用ARM STM32F107芯片作為CAN節(jié)點的微處理器,,在CAN總線通信接口中,,采用一款帶隔離的通用CAN收發(fā)器芯片CTM8251T。本著智能節(jié)點結(jié)構(gòu)簡單,、易于擴展以及能穩(wěn)定可靠地進(jìn)行通信的設(shè)計目標(biāo),設(shè)計了CAN總線智能節(jié)點硬件電路原理圖,,如圖1所示,。從圖中可以看出,電路主要由兩部分構(gòu)成:ARM微控制器STM32F107和通用CAN收發(fā)器CTM8251T[3],。

    STM32F107芯片是意法半導(dǎo)體公司推出的一款STM32互連型系列,、內(nèi)核為ARM Cortex-M3的32位高性能微控制器。通用CAN收發(fā)器CTM8251T是用于CAN控制器和CAN總線之間的接口芯片,,波特率是自適應(yīng)的,,其內(nèi)部集成了所有通信必需的CAN隔離及CAN收發(fā)器件。此外,,該芯片還具有自動熱關(guān)斷保護(hù),、未上電節(jié)點或者處于欠壓狀態(tài)的節(jié)點不會影響CAN總線、高壓瞬態(tài)保護(hù)等特點,。
2.2 CAN總線智能節(jié)點通信軟件設(shè)計
    CAN總線智能節(jié)點軟件設(shè)計的核心部分包括CAN智能節(jié)點初始化,、CAN報文發(fā)送和CAN報文接收。根據(jù)STM32F107內(nèi)部的PeliCAN的具體結(jié)構(gòu),,需要對STM32F107芯片進(jìn)行正確的初始化,、報文發(fā)送和接收等操作[4]。
    (1)CAN智能節(jié)點初始化
    下面分別給出波特率和報文接收濾波器的設(shè)置方法,。
    ①波特率的設(shè)置,。波特率是CAN總線傳輸?shù)囊粋€重要參數(shù),在應(yīng)用中選擇的波特率為250 kb/s,。位時間特性邏輯通過采樣來監(jiān)視串行數(shù)據(jù)通信的CAN總線,,并且通過與幀起始位的邊沿進(jìn)行同步,即通過與后面的邊沿進(jìn)行重新同步來調(diào)整其采樣點,。簡單地說就是把名義上的每位時間分為三段,,包括同步段(SYN_SEG)、時間段1(BS1),、時間段2(BS2),。位時間特性原理結(jié)構(gòu)如圖2所示。

 

 

    由位時間特性原理結(jié)構(gòu)可知,,CAN網(wǎng)波特率BaudRate=1/NominalBitTime,,其中名義上的位時間NominalBitTime=1×tq+tBS1+tBS2,,時間段1:tBS1=tq×(TS1[3:0]+1),時間段2:tBS2=tq×(TS2[2:0]+1),,時間片tq=(BRP[9:0]+1)×tPCLK,,tPCLK=1/36 MHz為APB的時鐘周期,時間段1(TS1[3:0])可通過位時間特性寄存器CAN_BTR[19:16]位來設(shè)置,,時間段2(TS2[2:0])可通過位時間特性寄存器CAN_BTR[22:20]位來設(shè)置,,波特率分頻器(BRP[9:0])可通過CAN_BTR[9:0]位來設(shè)置。
    由于選擇的通信波特率為250 kb/s,,為了計算方便,,可以按如下方式進(jìn)行設(shè)置:TS1[3:0]=0x08,TS2[2:0]=0x05,,BRP[9:0]=0x09,,則時間片tq=0.25μs,名義上的位時間NominalBitTime=16tq=4 μs,,BaudRate=1/NominalBitTime=250 kb/s,。
    ②接收濾波器的設(shè)置。STM32F107芯片共有14組過濾器,,每組過濾器的位寬都可以獨立配置,,以滿足應(yīng)用程序的不同需求。此外過濾器可配置為屏蔽位模式和標(biāo)識符列表模式,,在屏蔽位模式下,,標(biāo)識符寄存器和屏蔽寄存器一起,指定報文標(biāo)識符的任何一位,,應(yīng)該按照“必須匹配”(相應(yīng)屏蔽位置為1)或“不用關(guān)心”(相應(yīng)屏蔽位置為0)處理,。本文采取的是屏蔽位模式,標(biāo)識符寄存器中對應(yīng)目的地址的1個字節(jié)位設(shè)置為本節(jié)點地址,,屏蔽寄存器中對應(yīng)目的地址的位全部置為1,,剩余位置為0,則每個CAN節(jié)點都會收到目的地址為本節(jié)點地址的CAN報文,,丟棄目的地址不是本節(jié)點地址的CAN報文,。
    (2)CAN智能節(jié)點的報文發(fā)送過程
    STM32F107芯片提供一個專用的SRAM存儲器用于CAN報文的發(fā)送和接收,其中有3個郵箱供軟件來發(fā)送CAN報文,,發(fā)送調(diào)度器根據(jù)優(yōu)先級決定優(yōu)先發(fā)送報文的郵箱,。發(fā)送子程序主要負(fù)責(zé)CAN智能節(jié)點報文的發(fā)送。此發(fā)送子程序采用查詢發(fā)送方式,,發(fā)送時只需要將待發(fā)送的數(shù)據(jù)按照表1所示的幀格式(擴展幀)組合成一幀CAN報文,,送入CAN報文發(fā)送緩沖區(qū),然后判斷發(fā)送緩沖區(qū)是否有空郵箱。若有空郵箱,,則發(fā)送,;否則等待直到有空郵箱然后發(fā)送。

    (3)CAN智能節(jié)點的報文接收過程
    STM32F107芯片提供2個接收緩沖區(qū)FIFO,,每個FIFO都可以存放3個完整的CAN報文,,它們完全由硬件來管理。接收子程序主要負(fù)責(zé)CAN智能節(jié)點報文的接收及其他情況處理,。此接收子程序采用中斷接收方式和設(shè)置使用接收緩沖區(qū)FIFO_0存放接收到的CAN報文,,在接收到一個CAN報文后,就可以通過訪問FIFO_0來讀取它,,一旦報文被處理,,接收緩沖區(qū)FIFO_0就會被釋放,以便為后面收到的報文留出足夠的存儲空間,。
    (4)程序流程圖
    CAN智能節(jié)點初始化流程如圖3所示;CAN智能節(jié)點的報文發(fā)送流程如圖4所示,;CAN智能節(jié)點的報文接收流程如圖5所示,。

3 CAN總線智能節(jié)點間通信的實現(xiàn)
   根據(jù)本文第二部分設(shè)計的CAN智能節(jié)點很容易實現(xiàn)節(jié)點之間的通信。為方便起見,,本文構(gòu)建了一個簡單的CAN網(wǎng)絡(luò),,包括兩個CAN智能節(jié)點Node1和Node2、兩個120 ?贅的端接電阻,、兩根20 m的屏蔽雙絞線,、一塊CAN適配器卡和一臺PC機。CAN總線智能節(jié)點間通信的原理框圖如圖6所示,。

    假設(shè)節(jié)點Node1為管理節(jié)點,,控制數(shù)據(jù)優(yōu)先級設(shè)置為2,節(jié)點地址置為0x66,;節(jié)點Node2為從設(shè)備節(jié)點,,查詢應(yīng)答優(yōu)先級設(shè)置為3,節(jié)點地址為0x88,;若數(shù)據(jù)長度小于或等于8 B,,則不需要分段,其分段傳輸標(biāo)志置為0,,采用無組播發(fā)送,,其組播碼置為0000B,應(yīng)答位Ack均置為0,。依據(jù)表1中規(guī)定的CAN報文標(biāo)識符和數(shù)據(jù)幀格式定義,,定義了如下4種CAN報文: CAN網(wǎng)工作狀態(tài)查詢命令、CAN網(wǎng)工作狀態(tài)應(yīng)答命令、設(shè)備復(fù)位命令和設(shè)備復(fù)位報告命令,。
      (1)CAN網(wǎng)工作狀態(tài)查詢命令幀標(biāo)識符定義為0x408866a0,,其報文數(shù)據(jù)部分設(shè)置如表2所示。

      (2)CAN網(wǎng)工作狀態(tài)應(yīng)答命令幀標(biāo)識符定義為0x60668810,,其報文數(shù)據(jù)部分設(shè)置如表3所示,。
      (3)設(shè)備復(fù)位命令幀標(biāo)識符定義為0x40-886600,其報文數(shù)據(jù)部分設(shè)置如表4所示,。

      (4)設(shè)備復(fù)位報告命令幀標(biāo)識符定義為0x446688f0,,其報文數(shù)據(jù)部分設(shè)置如表5所示。
    現(xiàn)在讓管理節(jié)點Node1與從設(shè)備節(jié)點Node2進(jìn)行通信,,用上位機軟件來監(jiān)視節(jié)點Node1與節(jié)點Node2通信過程中發(fā)送的CAN報文數(shù)據(jù),,實驗結(jié)果如圖7所示。

    分析圖7的實驗結(jié)果:4個在第0路CAN上傳輸?shù)腃AN報文的幀格式均為數(shù)據(jù)幀,,幀類型為擴展幀,;由第0條CAN報文幀標(biāo)識符0x408866a0可知,報文優(yōu)先級為2,,目的地址為0x88,,源地址為0x66,說明該報文是管理節(jié)點Node1發(fā)向從設(shè)備節(jié)點Node2的CAN網(wǎng)工作狀態(tài)查詢命令,;由第1條CAN報文幀標(biāo)識符0x60668810可知,,報文優(yōu)先級為3,目的地址為0x66,,源地址為0x88,,說明該報文是從設(shè)備節(jié)點Node2發(fā)向管理節(jié)點Node1的對CAN網(wǎng)工作狀態(tài)查詢命令的應(yīng)答命令,此外由DATA4=0x00,,DATA5=0x00可知,,CAN錯誤狀態(tài)寄存器接收計數(shù)器和發(fā)送計數(shù)器值均為0,說明CAN網(wǎng)是穩(wěn)定可靠的,;由第2條CAN報文幀標(biāo)識符0x40886600可知,,報文優(yōu)先級為2,目的地址為0x88,,源地址為0x66,,說明該報文是管理節(jié)點Node1發(fā)向從設(shè)備節(jié)點Node2的設(shè)備復(fù)位命令;由第3條CAN報文幀標(biāo)識符0x406688f0可知,,報文優(yōu)先級為2,,目的地址為0x66,源地址為0x88,,說明該報文是從設(shè)備節(jié)點Node2發(fā)向管理節(jié)點Node1的設(shè)備復(fù)位報告命令,,即對設(shè)備復(fù)位命令的回應(yīng)報文,。
    本文設(shè)計的CAN總線智能節(jié)點已應(yīng)用于車載控制系統(tǒng)中。應(yīng)用結(jié)果表明,,利用ARM STM32F107芯片和通用CAN收發(fā)器CTM8251T芯片設(shè)計的CAN總線智能節(jié)點具有結(jié)構(gòu)簡單,、節(jié)點易于擴展、系統(tǒng)運行穩(wěn)定可靠,、實時性好,、抗干擾能力強等特點,具有良好的應(yīng)用前景,。
參考文獻(xiàn)
[1] 吳文珍,,韓玉祥,司光宇,,等.基于CAN總線智能檢測儀的設(shè)計[J].大慶石油學(xué)院學(xué)報,,2009,29(5):85-87.
[2] 饒運濤,,鄒繼軍,,王進(jìn)宏,等.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社,,2010.
[3] 王月嬌,,朱家駒.CAN總線智能測控節(jié)點的設(shè)計[J].湖北大學(xué)學(xué)報,2005,,27(2):133-136.
[4] 徐愛鈞.IAR EMARM V5嵌入式系統(tǒng)應(yīng)用編程與開發(fā)[M]. 北京:北京航空航天大學(xué)出版社,2009.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。