摘 要: 根據(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世紀80年代初由德國Bosch公司為解決現(xiàn)代汽車中眾多的測控儀器之間的數(shù)據(jù)交換而設(shè)計的一種有效支持分布式實時控制的串行數(shù)據(jù)通信網(wǎng)絡(luò)[1]。1993年11月ISO正式頒布了CAN國際標準(ISO 11898),它以半雙工方式工作,采用基于數(shù)據(jù)的傳輸機制,通信介質(zhì)可以是雙絞線、同軸電纜, 其通信速率可達1 Mb/s,最大傳輸距離可達10 km(速率在5 kb/s以下)。CAN總線的主要特點[2]為:
(1)多主技術(shù)。網(wǎng)絡(luò)上任一節(jié)點均可在任意時刻主動地且不分主從地向網(wǎng)絡(luò)上其他節(jié)點發(fā)送信息,同時將節(jié)點信息分不同的優(yōu)先級,可滿足不同的實時需求。
(2)可靠性高。節(jié)點在錯誤嚴重的情況下,具有自動關(guān)閉輸出功能,切斷自身與總線的聯(lián)系,使總線上其他節(jié)點的操作不受影響。
(3)完善的錯誤監(jiān)測機制。采用短幀結(jié)構(gòu),傳輸時延短,受干擾概率低,每幀信息都進行16 bit的CRC 校驗及其他校驗措施,使數(shù)據(jù)出錯率極低。
這些優(yōu)良的特性使CAN總線在汽車工業(yè)、機械工業(yè)、醫(yī)療器械及傳感器等領(lǐng)域得以廣泛應(yīng)用。CAN總線被公認為極具發(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)定可靠地進行通信的設(shè)計目標,設(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)斷保護、未上電節(jié)點或者處于欠壓狀態(tài)的節(jié)點不會影響CAN總線、高壓瞬態(tài)保護等特點。
2.2 CAN總線智能節(jié)點通信軟件設(shè)計
CAN總線智能節(jié)點軟件設(shè)計的核心部分包括CAN智能節(jié)點初始化、CAN報文發(fā)送和CAN報文接收。根據(jù)STM32F107內(nèi)部的PeliCAN的具體結(jié)構(gòu),需要對STM32F107芯片進行正確的初始化、報文發(fā)送和接收等操作[4]。
(1)CAN智能節(jié)點初始化
下面分別給出波特率和報文接收濾波器的設(shè)置方法。
①波特率的設(shè)置。波特率是CAN總線傳輸?shù)囊粋€重要參數(shù),在應(yīng)用中選擇的波特率為250 kb/s。位時間特性邏輯通過采樣來監(jiān)視串行數(shù)據(jù)通信的CAN總線,并且通過與幀起始位的邊沿進行同步,即通過與后面的邊沿進行重新同步來調(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,為了計算方便,可以按如下方式進行設(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)用程序的不同需求。此外過濾器可配置為屏蔽位模式和標識符列表模式,在屏蔽位模式下,標識符寄存器和屏蔽寄存器一起,指定報文標識符的任何一位,應(yīng)該按照“必須匹配”(相應(yīng)屏蔽位置為1)或“不用關(guān)心”(相應(yīng)屏蔽位置為0)處理。本文采取的是屏蔽位模式,標識符寄存器中對應(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ā)送子程序主要負責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報文,它們完全由硬件來管理。接收子程序主要負責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,則不需要分段,其分段傳輸標志置為0,采用無組播發(fā)送,其組播碼置為0000B,應(yīng)答位Ack均置為0。依據(jù)表1中規(guī)定的CAN報文標識符和數(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)查詢命令幀標識符定義為0x408866a0,其報文數(shù)據(jù)部分設(shè)置如表2所示。
(2)CAN網(wǎng)工作狀態(tài)應(yīng)答命令幀標識符定義為0x60668810,其報文數(shù)據(jù)部分設(shè)置如表3所示。
(3)設(shè)備復(fù)位命令幀標識符定義為0x40-886600,其報文數(shù)據(jù)部分設(shè)置如表4所示。
(4)設(shè)備復(fù)位報告命令幀標識符定義為0x446688f0,其報文數(shù)據(jù)部分設(shè)置如表5所示。
現(xiàn)在讓管理節(jié)點Node1與從設(shè)備節(jié)點Node2進行通信,用上位機軟件來監(jiān)視節(jié)點Node1與節(jié)點Node2通信過程中發(fā)送的CAN報文數(shù)據(jù),實驗結(jié)果如圖7所示。
分析圖7的實驗結(jié)果:4個在第0路CAN上傳輸?shù)腃AN報文的幀格式均為數(shù)據(jù)幀,幀類型為擴展幀;由第0條CAN報文幀標識符0x408866a0可知,報文優(yōu)先級為2,目的地址為0x88,源地址為0x66,說明該報文是管理節(jié)點Node1發(fā)向從設(shè)備節(jié)點Node2的CAN網(wǎng)工作狀態(tài)查詢命令;由第1條CAN報文幀標識符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報文幀標識符0x40886600可知,報文優(yōu)先級為2,目的地址為0x88,源地址為0x66,說明該報文是管理節(jié)點Node1發(fā)向從設(shè)備節(jié)點Node2的設(shè)備復(fù)位命令;由第3條CAN報文幀標識符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)用前景。
參考文獻
[1] 吳文珍,韓玉祥,司光宇,等.基于CAN總線智能檢測儀的設(shè)計[J].大慶石油學(xué)院學(xué)報,2009,29(5):85-87.
[2] 饒運濤,鄒繼軍,王進宏,等.現(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.