王維斌(湖南汽車工程職業(yè)學(xué)院,湖南 株洲 412001)
CAN是Controller Area Network(控制器局域網(wǎng))的縮寫,屬于現(xiàn)場(chǎng)總線,是一種支持分布式控制、實(shí)時(shí)控制的串行通信總線協(xié)議,采用短報(bào)文幀及CSMA/CD-AMP(帶有信息優(yōu)先權(quán)及沖突檢測(cè)的載波監(jiān)聽多路訪問)的MAC(媒介訪問控制)方式[1]。CAN節(jié)點(diǎn)是CAN總線網(wǎng)絡(luò)中的一個(gè)單元,能通過CAN總線與其他各個(gè)節(jié)點(diǎn)之間實(shí)現(xiàn)通信,降低控制系統(tǒng)的復(fù)雜程序,當(dāng)前主要用于汽車電子控制系統(tǒng)中的各傳感器之間以及各控制模塊之間的通信。CAN總線節(jié)點(diǎn)一般由單片機(jī)、CAN控制器以及CAN收發(fā)器三部分組成,如圖1所示。

圖1 CAN總線節(jié)點(diǎn)的組成
設(shè)計(jì)中采用MC9S12系列單片機(jī)作為主控芯片,內(nèi)部集成了MSCAN模塊,能夠滿足CAN2.0A和CAN2.0B協(xié)議標(biāo)準(zhǔn),是當(dāng)前汽車控制器中最流行的CAN控制器架構(gòu)。CAN收發(fā)器是CAN控制器和物理總線之間的接口,用于實(shí)現(xiàn)CAN控制器與CAN總線之間差分信號(hào)和二進(jìn)制碼流的相互轉(zhuǎn)換,是CAN總線網(wǎng)絡(luò)中必不可少的組成部分。本設(shè)計(jì)中采用專用CAN收發(fā)器芯片TJA1040。它是NXP公司推出的針對(duì)汽車電子行業(yè)使用的高性能CAN收發(fā)器。此外,系統(tǒng)中還包括電源部分、顯示部分和按鍵控制等其他部分電路。
單片機(jī)最小系統(tǒng)電路包括電源電路、復(fù)位電路、時(shí)鐘電路以及BDM下載電路等[2],是保證單片機(jī)能夠可靠工作的基本電路,如圖2所示。時(shí)鐘電路采用晶振Y1與單片機(jī)內(nèi)部的電路組成振蕩電路來(lái)產(chǎn)生時(shí)鐘信號(hào),系統(tǒng)中選擇頻率為16 MHz的晶振,C3、C4為起振電容,R2為晶振電阻。復(fù)位引腳是第30腳,復(fù)位電路由電阻R4、電容C6和按鍵S1組成,S1用于手動(dòng)控制單片機(jī)復(fù)位。BDM電路是單片機(jī)的調(diào)試接口電路,用于連接BDM下載器,實(shí)現(xiàn)程序的調(diào)試與下載。它是一個(gè)6針的接口,1腳與單片機(jī)的BKGD引腳相連,4引腳接單片機(jī)的RESET復(fù)位腳,6腳接電源,3腳和5腳懸空。
CAN總線收發(fā)器電路如圖3所示,采用CAN收發(fā)器專用芯片TJA1040實(shí)現(xiàn)。3腳和2腳分別接電源與地,1腳和4腳分別與單片機(jī)的CAN總線模塊輸出腳PM0、PM1腳連接,實(shí)現(xiàn)CAN總線控制器與收發(fā)器之間的數(shù)據(jù)傳輸。SPLIT為共模穩(wěn)壓輸出腳,用于穩(wěn)定共模輸出。第7和第8腳為CAN信號(hào)的差分輸出腳,外接2個(gè)60 Ω的終端電阻,使阻抗連續(xù),消除反射。

圖2 最小系統(tǒng)電路

圖3 收發(fā)器電路
電源電路是將12 V和24 V電壓轉(zhuǎn)換為5 V的工作電壓。電路如圖4所示,采用低壓差三端穩(wěn)壓芯片LM2940-5.0,輸入端由開關(guān)SW1、保險(xiǎn)F2以及去耦電容C2組成,輸出端分別并聯(lián)了兩電解電容C19和電容C3。其中,電解電容起到防止電流過大而燒壞芯片的作用,普通電容起到濾波的作用。LED和電阻用來(lái)作為電源指示燈。
以MC9S12XS128單片機(jī)為主控制器的CAN總線節(jié)點(diǎn)硬件電路如圖5所示,包括了單片機(jī)最小系統(tǒng)電路、CAN總線電路、顯示電路以及按鍵電路[3]。設(shè)計(jì)中采用LCD12864液晶顯示器進(jìn)行發(fā)送與接收數(shù)據(jù)信息的顯示,數(shù)據(jù)端口由PA0~PA7進(jìn)行驅(qū)動(dòng),控制端由PJ6、PJ7、PM3、PM2分別進(jìn)行控制。采用按鍵S1~S4進(jìn)行控制命令的輸入,分別與PB0、PB1、PB2、PB3端口連接。CAN收發(fā)器電路分別與單片機(jī)的75(RXCAN0)腳和74(TXCAN0)腳連接。

圖4 電源電路
主程序主要對(duì)端口進(jìn)行配置,進(jìn)行鎖相環(huán)(PLL)和ECT模塊的初始化、MSCAN模塊相應(yīng)寄存器的設(shè)置、MSCAN時(shí)序參數(shù)和MSCAN濾波參數(shù)的確定、中斷的設(shè)置等。
發(fā)送前檢測(cè)判斷是否存在可用的緩沖區(qū),若有可用的緩沖區(qū),將選擇相應(yīng)的發(fā)送緩沖區(qū)。當(dāng)有多個(gè)緩沖區(qū)空閑時(shí),選擇的緩沖區(qū)的序號(hào)是最小的,CPU將標(biāo)識(shí)符、數(shù)據(jù)段長(zhǎng)度和數(shù)據(jù)裝入緩沖區(qū),最后置位發(fā)送標(biāo)志位,將已選擇的緩沖區(qū)標(biāo)記為發(fā)送,同時(shí)TXE標(biāo)志位被清零[3]。此后,MSCAN會(huì)自動(dòng)把數(shù)據(jù)裝入傳送隊(duì)列,傳送成功后將TXE標(biāo)志位置1。若先前使能了發(fā)送中斷,則會(huì)產(chǎn)生一個(gè)發(fā)送中斷,用戶可以利用此中斷繼續(xù)加載數(shù)據(jù)到發(fā)送緩沖區(qū)。發(fā)送程序流程如圖6所示。

圖5 系統(tǒng)硬件電路圖
首先設(shè)置INITRQ(初始化模式請(qǐng)求),配置接收過濾器并啟動(dòng)接收中斷,然后讀取標(biāo)識(shí)符、數(shù)據(jù)長(zhǎng)度代碼字段、讀取數(shù)據(jù)字段、釋放接收緩沖器[4]。各信息在接收后被寫入后臺(tái)接收緩沖器,只有當(dāng)CPU達(dá)到標(biāo)識(shí)符接收和標(biāo)識(shí)符掩碼寄存器中規(guī)定的標(biāo)準(zhǔn)時(shí),CPU才會(huì)被通知讀取信息。接收程序流程如圖7所示。

圖6 發(fā)送子程序
設(shè)計(jì)中直接采用MC9S12(X)系列單片機(jī)內(nèi)部MSCAN模塊實(shí)現(xiàn)CAN總線網(wǎng)線節(jié)點(diǎn)的設(shè)計(jì),硬件電路結(jié)構(gòu)簡(jiǎn)單,程序設(shè)計(jì)方便,工作可靠性高,有效解決了利用專用CAN總線控制器芯片實(shí)現(xiàn)CAN總線網(wǎng)絡(luò)節(jié)點(diǎn)設(shè)硬件與軟件較復(fù)雜的問題。

圖7 接收子程序