郝志廷
隨著汽車電子技術(shù)的發(fā)展,車載網(wǎng)絡(luò)技術(shù)的應(yīng)用已成為主流趨勢,車用軟件開發(fā)、協(xié)議芯片制造、車載網(wǎng)絡(luò)協(xié)議制定成為研究熱點(diǎn).然而,在我國這項(xiàng)技術(shù)發(fā)展較為滯后,仍處在起步階段,而且在當(dāng)前汽車線路中傳統(tǒng)的布線方式依然存在,電路布線系統(tǒng)較為復(fù)雜、電磁干擾嚴(yán)重、可靠性不高.
本文主要研究車載網(wǎng)絡(luò)中CAN總線智能節(jié)點(diǎn)的硬件電路和軟件設(shè)計(jì).
CAN(Controller Area Network)即控制器局域網(wǎng),一般稱為CAN總線,是當(dāng)前世界上開放式現(xiàn)場總線使用最為廣泛的一種.
CAN總線由德國博世公司在上世紀(jì)80年代首先提出,并應(yīng)用在汽車工業(yè)中.起初主要目的是為了克服當(dāng)前汽車中較為龐大復(fù)雜的電子設(shè)備和控制裝置之間的通信問題,實(shí)現(xiàn)彼此之間通信的網(wǎng)絡(luò)化,減少信號線的使用,降低布線的復(fù)雜程度,有效提高電子線路的穩(wěn)定性和可靠性.
數(shù)據(jù)幀的構(gòu)成可分為七個(gè)位場,它們分別是起始幀、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場和幀結(jié)束[1].數(shù)據(jù)長度可為0.CAN技術(shù)規(guī)范2.0B數(shù)據(jù)幀的組成如圖1所示.
在CAN技術(shù)規(guī)范2.0B中有兩種因標(biāo)識符的長度不同作為主要區(qū)別的幀格式;其中一種是標(biāo)準(zhǔn)幀,它有11位標(biāo)識符,另外一種是擴(kuò)展幀,它有29位標(biāo)識符[2].標(biāo)準(zhǔn)格式如圖2所示,擴(kuò)展據(jù)幀結(jié)構(gòu)如圖3所示.
圖3 擴(kuò)展格式的數(shù)據(jù)幀
圖3中所表示的SRR、IDE、RTR分別是指替代遠(yuǎn)程請求、標(biāo)識位擴(kuò)展位和遠(yuǎn)程發(fā)送請求位.
如圖4所示,遠(yuǎn)程幀由幀起始、仲裁場、控制場、CRC場、應(yīng)答場和幀結(jié)束組成.由圖4可以看出,遠(yuǎn)程幀和前面介紹的數(shù)據(jù)幀在結(jié)構(gòu)上幾乎一樣,遠(yuǎn)程幀的遠(yuǎn)程發(fā)送請求位是隱性位,而且它也沒有數(shù)據(jù)場.
圖4 遠(yuǎn)程幀組成
如圖5所示,出錯(cuò)幀由錯(cuò)誤疊加標(biāo)志和錯(cuò)誤界定符構(gòu)成.
圖5 出錯(cuò)幀的組成
(1)錯(cuò)誤標(biāo)志的形式.①激活錯(cuò)誤標(biāo)志(ac?tive error flag):激活錯(cuò)誤標(biāo)志是由6個(gè)連續(xù)的顯性位組成的.②認(rèn)可錯(cuò)誤標(biāo)志(passive error flag):在沒有被其他的節(jié)點(diǎn)顯性位給沖擊掉的情況下,認(rèn)可錯(cuò)誤標(biāo)志是由6個(gè)連續(xù)隱性位組成.
錯(cuò)誤條件被檢測到的“錯(cuò)誤激活”站通過發(fā)送錯(cuò)誤激活標(biāo)志指示錯(cuò)誤.錯(cuò)誤標(biāo)志的格式破壞了從幀起始到循環(huán)冗余校驗(yàn)場界定符的位填充規(guī)則,應(yīng)答場或幀結(jié)束場的固定格式也被破壞了[3].故此,每一個(gè)站發(fā)送的不一樣的錯(cuò)誤標(biāo)志疊加在一塊就導(dǎo)致“顯性”位序列的形成.
檢測出錯(cuò)誤條件的“錯(cuò)誤認(rèn)可”的站指示錯(cuò)誤的方法是通過發(fā)送錯(cuò)誤認(rèn)可標(biāo)志.該“錯(cuò)誤認(rèn)可”站是以錯(cuò)誤認(rèn)可標(biāo)志作為起始點(diǎn),等待極性一致的6個(gè)連續(xù)位.當(dāng)檢測到這6個(gè)連續(xù)位時(shí),即完成了錯(cuò)誤認(rèn)可標(biāo)志的發(fā)送[3].
(2)出錯(cuò)界定符.它包括8個(gè)隱性位.在錯(cuò)誤標(biāo)志發(fā)送后,每個(gè)站都會發(fā)送出1個(gè)隱性位,并對總線進(jìn)行監(jiān)視,一旦有1個(gè)隱性位被檢測到,其余的7個(gè)隱性位被立刻啟動(dòng)發(fā)送[3].
在考慮到系統(tǒng)穩(wěn)定性、可靠性和性價(jià)比的前提下,在本設(shè)計(jì)中,節(jié)點(diǎn)微處理器選用的是AT89C51、通訊控制器采用SJA1000、CAN總線驅(qū)動(dòng)器采用了PCA82C250.在不同節(jié)點(diǎn)之間的CAN總線物理層介質(zhì)連接由雙絞線實(shí)現(xiàn).
節(jié)點(diǎn)微處理器選用的是AT89C51,該處理器是一種低電壓,高性能CMOS8位微處理器,并且?guī)в?K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FalshProgrammableandErasable Read Only Memory),也即是俗稱的單片機(jī).
微處理器電路原理圖如圖6所示,主要包括晶振電路、復(fù)位電路和接口電路等.
圖6 MCU電路原理圖
所謂接口電路,即與微處理器輸入輸出相連接的外部硬件電路,在本設(shè)計(jì)中主要有SJA1000CAN通訊控制器,PCA82C250總線驅(qū)動(dòng)器模塊等接口.
在本設(shè)計(jì)中,CAN控制器選用的是SJA1000,SJA1000芯片是來自飛利浦公司生產(chǎn)的一種獨(dú)立的CAN控制器.該控制器替代了原來的PCA82C200(CAN控制器、BasieCAN),它增加了一種名為PdiCAN的新的操作模式,而且也支持CAN2.0B協(xié)議.
CAN控制器的電路原理圖如圖7所示,主要包括晶振電路、復(fù)位電路、模式選擇電路,以及SJA1000與MCU的接口電路.
圖7 CAN控制器SJA1000電路原理圖
CAN控制器SJA1000外接12MHz晶振,片選端/CS直接連接AT89C51單片機(jī)的P2.7引腳.當(dāng)CS=0時(shí),AT89C51單片機(jī)可以對SJA1000進(jìn)行寫操作,因此CAN控制器SJA1000將從地址0開始尋址.AD0-AD7直接和微處理器的P0口進(jìn)行連接,MODE接高電平信號、設(shè)為Intel模式,中斷輸出信號/INT和微處理器的/INT0直接相連,這樣,CAN通信有中斷和查詢兩種方式可供選擇.TX0與RX0外接的390Ω電阻R15、R16為限流保護(hù)電阻,為避免當(dāng)驅(qū)動(dòng)器失效時(shí)出現(xiàn)過流導(dǎo)致控制器損壞.
CAN總線驅(qū)動(dòng)器接口芯選用的是PCA82C250芯片,該驅(qū)動(dòng)器是CAN控制器和數(shù)據(jù)傳輸線路之間的接口[4-6],一方面它可以提供給傳輸總線差動(dòng)發(fā)送能力,另一方面它也可以提供給CAN控制器差動(dòng)接收能力.
圖8 CAN總線驅(qū)動(dòng)器模塊原理圖
圖8為CAN總線驅(qū)動(dòng)器模塊原理圖,由圖可知,為進(jìn)一步提高安全性和抗干擾性,在PCA82C25O和CAN總線的接口處,本設(shè)計(jì)采用了相關(guān)的安全和抗干擾措施.PCA82C25O的CANH引腳和CANL引腳分別通過一個(gè)5Ω的電阻連接到CAN總線,以達(dá)到限流作用,對PCA82C250進(jìn)行保護(hù),以免受到電流過大的沖擊.CANH和CANL分別與接地之間并聯(lián)了一個(gè)30pF的小電容,可以有效將總線上的高頻干擾去除及預(yù)防電磁輻射.而且,在兩根CAN總線輸入端與地之間均連接了防雷擊管,如果兩個(gè)輸入端與地之間出現(xiàn)瞬變干擾時(shí),防雷擊管就可以通過放電實(shí)現(xiàn)保護(hù)作用[4].
由于在本設(shè)計(jì)中各模塊均需要較高的工作穩(wěn)定性、實(shí)時(shí)性.本系統(tǒng)軟件設(shè)計(jì)思路主要從系統(tǒng)復(fù)位、初始化和節(jié)點(diǎn)程序設(shè)計(jì)著手.
要實(shí)現(xiàn)對寄存器進(jìn)行初始化,首先需保證系統(tǒng)進(jìn)入復(fù)位狀態(tài).完成初始化后,須將復(fù)位請求位清空,使SJAl000返回到工作狀態(tài).節(jié)點(diǎn)初始化程序設(shè)計(jì)的流程圖如圖9所示.
圖9 SJA1000的初始化程序流程圖
發(fā)送子程序流程圖如圖10所示.CAN控制器的中斷使能寄存器中有一位為中斷使能標(biāo)志位.當(dāng)AT89C51要發(fā)送數(shù)據(jù)時(shí),在發(fā)送緩沖區(qū)中寫操作將被禁止.如此一來,狀態(tài)寄存器中的發(fā)送緩沖區(qū)狀態(tài)標(biāo)志(TBS)將被CPU檢查,根據(jù)檢查來確定一個(gè)新信息是不是被放入發(fā)送緩沖區(qū)中.
圖10 發(fā)送子程序流程圖
接收子程序的主要功能是實(shí)現(xiàn)節(jié)點(diǎn)報(bào)文的接收,以及對其他情況的處理.節(jié)點(diǎn)的報(bào)文接收程序設(shè)計(jì)采用中斷控制方式,其流程圖如圖11所示.
本文對CAN總線報(bào)文的數(shù)據(jù)幀、硬件電路和軟件設(shè)計(jì)進(jìn)行了詳細(xì)介紹,設(shè)計(jì)了一種用于車載網(wǎng)絡(luò)中的CAN總線智能節(jié)點(diǎn),具有較好的穩(wěn)定性、可靠性及抗干擾性,結(jié)構(gòu)簡單、易于擴(kuò)展應(yīng)用.
圖11 報(bào)文接收流程圖
參考文獻(xiàn):
[1]周智慶.基于CAN總線電動(dòng)汽車驅(qū)動(dòng)控制系統(tǒng)的研究[D].重慶:重慶大學(xué),2008.
[2]洪曄,李海平,李崇.艦船安全監(jiān)控系統(tǒng)通用型CAN總線通訊模塊設(shè)計(jì)[J].船海工程,2017(3).
[3]羅峰,孫澤昌.汽車CAN總線系統(tǒng)原理、設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2010.
[4]王維斌.基于單片機(jī)的CAN總線節(jié)點(diǎn)的設(shè)計(jì)[J].科學(xué)技術(shù)創(chuàng)新,2017(31).
[5]劉俊萍.車載CAN總線技術(shù)及應(yīng)用[J].天津職業(yè)院校聯(lián)合學(xué)報(bào),2009(2).
[6]紀(jì)文志,陳國忠,唐加山.基于CAN總線智能節(jié)點(diǎn)的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2012(2).