基于Infineon單片機(jī)的CAN網(wǎng)關(guān)研究
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在歐洲乃至世界上的很多汽車廠家,大部分的車內(nèi)電子控制單元大量使用原德國(guó)西門子半導(dǎo)體部門英飛凌科技(Infineon Technologies)的微控制器,特別是C166系列MCU,其優(yōu)良特性得到各大汽車廠家的公認(rèn)[1]。Infineon XC2000系列MCU是英飛凌新推出的具有32位處理器性能的16位MCU。XC2000家族又下分3個(gè)系列:XC2200、XC2300和XC2700。XC2200主要針對(duì)車身網(wǎng)關(guān)的應(yīng)用;XC2300主要針對(duì)汽車安全性能的應(yīng)用;XC2700則主要針對(duì)傳動(dòng)系統(tǒng)的應(yīng)用。XC2000系列相對(duì)XC166系列,其內(nèi)部的Flash和SRAM更大、主頻更快、外設(shè)(如CAN節(jié)點(diǎn))更多。其中,片內(nèi)Flash最大為768 KB,片內(nèi)SRAM最大為82 KB,主頻最高為80 MHz。
本網(wǎng)關(guān)采用Infineon公司生產(chǎn)的XC2200單片機(jī),利用該單片機(jī)MultiCAN模塊的網(wǎng)關(guān)(Gateway)功能實(shí)現(xiàn)CAN網(wǎng)關(guān)[2]。
1 CAN總線協(xié)議
CAN總線是一種多主總線,支持分布式實(shí)時(shí)控制的串行數(shù)據(jù)通信網(wǎng)絡(luò),可以有效地構(gòu)成分布式實(shí)時(shí)監(jiān)測(cè)控制系統(tǒng)。CAN提供高達(dá)1 Mb/s的數(shù)據(jù)傳輸速率,這使實(shí)時(shí)控制變得非常容易。另外,硬件的錯(cuò)誤檢定特性增強(qiáng)了CAN的抗電磁干擾能力。CAN 協(xié)議支持4種不同的幀類型:數(shù)據(jù)幀、遠(yuǎn)程幀、出錯(cuò)幀、超載幀。
在各種幀類型中,最常用的是數(shù)據(jù)幀。CAN標(biāo)準(zhǔn)幀類型的數(shù)據(jù)幀如圖1所示,這也是CiA推薦的CANopen數(shù)據(jù)幀格式。
2 CAN總線通信硬件實(shí)現(xiàn)
通常,1個(gè)完整的CAN節(jié)點(diǎn)應(yīng)該包括以下3個(gè)部分:微控制器(MCU)、CAN控制器、CAN收發(fā)器。在本系統(tǒng)中,由于XC2200單片機(jī)內(nèi)部集成了CAN控制器,因此在外圍電路設(shè)計(jì)上只需考慮CAN收發(fā)器[3]。
本系統(tǒng)CAN收發(fā)器采用PCA82C250,PCA82C250與CAN總線的接口部分采用了安全和抗干擾措施。CANH和CANL與地之間并聯(lián)了2個(gè)30 pF的小電容,可以濾除總線的高頻干擾。另外,在2根CAN總線接入端與地之間分別反接1個(gè)保護(hù)二極管,當(dāng)CAN總線有較高的負(fù)電壓時(shí),通過二極管的短路可起到一定的過壓保護(hù)作用。PCA82C250的Rs腳上接有1個(gè)斜率電阻,電阻大小可根據(jù)總線通信速度適當(dāng)調(diào)整,一般在16~140 kΩ之間。
用光電隔離芯片6N137將CAN控制器和收發(fā)器PCA82C250隔離, 以便有效地增加通信距離和抗干擾能力。CAN 總線物理層接口電路如圖2所示,隔離器把單片機(jī)的TXD、RXD與PCA82C250的TXD、RXD分別連接,然后把PCA82C250的CANH和CANL腳分別接到CAN 總線的CANH和CANL上。
3 MultiCAN模塊及網(wǎng)關(guān)功能實(shí)現(xiàn)
3.1 MultiCAN模塊[4]
本方案采用XC2267單片機(jī),該單片機(jī)MultiCAN模塊擁有5個(gè)CAN節(jié)點(diǎn)和128個(gè)信息對(duì)象。本方案只使用其中4個(gè)CAN節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都連接獨(dú)立的CAN收發(fā)器,構(gòu)成CAN通道。在MultiCAN模塊中,每個(gè)CAN節(jié)點(diǎn)可以被獨(dú)立地配置,且每個(gè)節(jié)點(diǎn)所在的CAN總線波特率可以不同。
利用該模塊的Gateway模式可方便地實(shí)現(xiàn)CAN網(wǎng)關(guān)功能,完成不同CAN總線上的數(shù)據(jù)交換[5]。這個(gè)過程無需CPU參與,有效減輕了CPU負(fù)荷,而使硬件承接了更多的工作量,改進(jìn)了CAN網(wǎng)關(guān)設(shè)備的實(shí)時(shí)性能。
網(wǎng)關(guān)模式以信息對(duì)象為基礎(chǔ),在該模式下,數(shù)據(jù)在2個(gè)信息對(duì)象之間傳遞,從而實(shí)現(xiàn)信息對(duì)象所隸屬的CAN節(jié)點(diǎn)之間的數(shù)據(jù)交換。利用信息對(duì)象之間的交換機(jī)制可以在任意2個(gè)CAN節(jié)點(diǎn)之間建立起網(wǎng)關(guān),通常需要指明信息對(duì)象的具體傳輸方向(接收或發(fā)送)。
該單片機(jī)MultiCAN模塊擁有多達(dá)128個(gè)信息對(duì)象,所有的CAN節(jié)點(diǎn)共享有這些信息對(duì)象,每個(gè)對(duì)象都可獨(dú)立地分配給MultiCAN模塊內(nèi)任1個(gè)CAN節(jié)點(diǎn)。每個(gè)CAN節(jié)點(diǎn)都有1個(gè)相應(yīng)的雙向信息對(duì)象列表,通過這個(gè)列表來管理該節(jié)點(diǎn)的信息對(duì)象,每個(gè)CAN節(jié)點(diǎn)只能把CAN信息儲(chǔ)存在位于自身列表中的信息對(duì)象中。
3.2 CAN網(wǎng)關(guān)軟件設(shè)計(jì)
3.2.1 PC端網(wǎng)關(guān)配置軟件
利用MFC編寫PC端網(wǎng)關(guān)配置軟件。PC機(jī)通過異步串行通信接口連接到網(wǎng)關(guān)設(shè)備,對(duì)其進(jìn)行配置,配置即時(shí)生效。其配置界面如圖3所示。
Visual C++提供了一種好用的ActiveX控件MSComm(Microsoft Communications Control)來支持應(yīng)用程序?qū)Υ诘脑L問,在應(yīng)用程序中插入MSComm控件后,可以方便地通過PC機(jī)串口實(shí)現(xiàn)數(shù)據(jù)收發(fā)。
在PC端網(wǎng)關(guān)配置軟件里配置串口、網(wǎng)關(guān)通道使能、網(wǎng)關(guān)路由、驗(yàn)收過濾器等內(nèi)容,然后點(diǎn)擊“下載到網(wǎng)關(guān)設(shè)備”按鈕,完成配置工作。
3.2.2 MultiCAN模塊初始化
在網(wǎng)關(guān)設(shè)備接收到來自串口的配置數(shù)據(jù)后,解析該配置數(shù)據(jù),隨后啟動(dòng)單片機(jī)MultiCAN模塊初始化,主要包括CAN節(jié)點(diǎn)初始化和信息對(duì)象初始化。
CAN節(jié)點(diǎn)初始化的主要任務(wù)有:將單片機(jī)對(duì)應(yīng)引腳定義為CAN輸入/輸出引腳、定義通信波特率,根據(jù)接收到的配置信息在信息對(duì)象列表內(nèi)增加信息對(duì)象。
信息對(duì)象初始化的主要任務(wù)有:配置信息對(duì)象屬性、ID、幀類型、優(yōu)先級(jí)、定義數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)傳輸方向,同時(shí)需要配置屏蔽寄存器,以決定信息對(duì)象的濾波方案。
在初始化時(shí),需要注意對(duì)節(jié)點(diǎn)控制寄存器NCR的CCE和INIT位域的置位和復(fù)位設(shè)置,以及信息對(duì)象控制寄存器MOCTRn的MSGVAL位域的置位和復(fù)位設(shè)置。
3.3 網(wǎng)關(guān)數(shù)據(jù)交換過程
接收數(shù)據(jù)幀的網(wǎng)關(guān)方稱為“源”,通過網(wǎng)關(guān)發(fā)送數(shù)據(jù)幀的網(wǎng)關(guān)方,稱為“目標(biāo)”。網(wǎng)關(guān)數(shù)據(jù)交換過程如圖4所示。
首先經(jīng)過接收過濾后,目標(biāo)信息對(duì)象由源信息對(duì)象MOFGPRn寄存器內(nèi)CUR位域?qū)ぶ?。源信息?duì)象MOFCRn寄存器的位域IDC、DLCC、DATC分別控制是否復(fù)制所接收數(shù)據(jù)幀的ID、數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)字節(jié)到目標(biāo)信息對(duì)象中,位域GDFS決定在完成數(shù)據(jù)復(fù)制過程之后,是否置位目標(biāo)信息對(duì)象的發(fā)送請(qǐng)求標(biāo)志。到達(dá)源節(jié)點(diǎn)的匹配數(shù)據(jù)幀,被自動(dòng)復(fù)制到目標(biāo)信息對(duì)象中。在復(fù)制數(shù)據(jù)幀之后,目標(biāo)信息對(duì)象的TXRQ、NEWDAT、RXPND被置位,網(wǎng)關(guān)源方接收的數(shù)據(jù)幀自動(dòng)在目標(biāo)方上發(fā)送,完成網(wǎng)關(guān)數(shù)據(jù)交換過程。
3.4 CAN網(wǎng)關(guān)功能測(cè)試
德國(guó)IXXAT公司的USB-to-CAN compact是一種經(jīng)濟(jì)型智能接口,是標(biāo)準(zhǔn)的USB-CAN接口板卡。配合CanAnalyser分析軟件便成為一種高效、便捷、靈活的CAN應(yīng)用領(lǐng)域分析和開發(fā)工具。
本CAN網(wǎng)關(guān)設(shè)備應(yīng)用基于CANopen協(xié)議的某監(jiān)控系統(tǒng)。經(jīng)測(cè)試,該網(wǎng)關(guān)設(shè)備可及時(shí)轉(zhuǎn)發(fā)CANopen協(xié)議的SDO、PDO、NMT、Heartbeat消息等報(bào)文,網(wǎng)關(guān)通信狀況運(yùn)行良好,設(shè)備符合CAN規(guī)范2.0A(11位CAN標(biāo)識(shí)符)和2.0B(29位CAN標(biāo)識(shí)符),可用于各種不同的高層CAN協(xié)議:CANOpen、SDS、J1939、DeviceNet或其他定制的協(xié)議。
與其他類似網(wǎng)關(guān)設(shè)計(jì)不同[6],在網(wǎng)關(guān)某一通道接收CAN信息之后,并沒有產(chǎn)生MCU中斷,無需MCU做出路由判斷和轉(zhuǎn)發(fā)處理。整個(gè)接收和轉(zhuǎn)發(fā)過程中,延時(shí)較短,提高了網(wǎng)關(guān)運(yùn)行速度和轉(zhuǎn)發(fā)速率。
本設(shè)計(jì)采用Infineon XC2000系列單片機(jī),可實(shí)現(xiàn)多個(gè)CAN網(wǎng)絡(luò)的連接。該網(wǎng)關(guān)具有4個(gè)通信端口,可迅速增加節(jié)點(diǎn)數(shù)目。因此在提供自由的布線方式的同時(shí),也解除了系統(tǒng)總線上CAN收發(fā)器最大節(jié)點(diǎn)數(shù)驅(qū)動(dòng)限制。結(jié)合PC端網(wǎng)關(guān)配置軟件的使用,可以快速配置相應(yīng)的CAN路由功能和信息過濾器。每個(gè)端口還具備檢測(cè)總線活動(dòng)功能及總線故障指示燈,方便觀察CAN總線網(wǎng)絡(luò)工作狀態(tài)。