錢新恩
(紫瑯職業(yè)技術(shù)學(xué)院,江蘇南通226002)
汽車總線為汽車內(nèi)部各種復(fù)雜的電子設(shè)備、控制器和測(cè)量儀器等提供了統(tǒng)一數(shù)據(jù)交換渠道??刂凭钟蚓W(wǎng)CAN-BUS是一重要的車載網(wǎng)絡(luò),CAN總線標(biāo)準(zhǔn)及應(yīng)用是現(xiàn)代汽車維修人員必學(xué)的關(guān)鍵技術(shù)。
我們?cè)凇捌囓囕d網(wǎng)絡(luò)技術(shù)”課程的教學(xué)過程中感到,由于學(xué)生缺少感性認(rèn)識(shí),不易理解CAN總線的特點(diǎn)和優(yōu)點(diǎn),覺得CAN總線標(biāo)準(zhǔn)抽象無味,學(xué)習(xí)興趣不高。學(xué)生如果采用邊學(xué)習(xí)邊實(shí)踐,先易后難,循序漸進(jìn);教師理論聯(lián)系實(shí)際,學(xué)生就能夠從實(shí)踐中獲得興趣和理解。
SJA1000獨(dú)立CAN控制器可靈活組成低成本的小型CAN總線節(jié)點(diǎn),SJA1000與80C51系列微處理器組成的系統(tǒng)是一常用CAN總線節(jié)點(diǎn)形式。編寫SJA1000與80C51系列微處理器的接口程序是學(xué)習(xí)和掌握CAN總線技術(shù)的一條有效途徑,采用匯編語言程序編程可直接感受CAN總線標(biāo)準(zhǔn)的實(shí)現(xiàn)。SJA1000的PeliCAN模式能充分發(fā)揮CAN的先進(jìn)特性。開始學(xué)習(xí)CAN總線時(shí),要突出主要性能方面。為了使總線系統(tǒng)盡快工作起來,應(yīng)主要關(guān)注系統(tǒng)復(fù)位、標(biāo)示碼設(shè)置和波特率設(shè)置等方面內(nèi)容。本文以SJA1000的PeliCAN接口編程為主線,介紹CAN總線的實(shí)驗(yàn)系統(tǒng)。
實(shí)驗(yàn)系統(tǒng)包括:微處理器(STC89C52);CAN總線通訊模塊[1](采用SJA1000+82C250構(gòu)成CAN控制器和驅(qū)動(dòng)器)和四位七段碼顯示器。系統(tǒng)框圖見圖1所示。單片機(jī)STC89C52是以訪問外部存儲(chǔ)器的方式訪問SJA1000。單片機(jī)的P2.0與SJA1000片選管腳連接,在本系統(tǒng)的地址為#0FE00H。SJA1000復(fù)位管腳連接到單片機(jī)的P2.3。四位LED顯示器,段選地址為#80H,位選地址為#0A0H;前兩位顯示自發(fā)信息,后兩位顯示接收的信息,采用中斷方式發(fā)送和接收[2]。
圖1 實(shí)驗(yàn)系統(tǒng)框圖
SJA1000寄存器的設(shè)置是編寫程序的第一步。CAN總線協(xié)議具體體現(xiàn)在SJA1000寄存器設(shè)置上,在認(rèn)真閱讀SJA1000在PeliCAN模式下各寄存器的定義的基礎(chǔ)上,逐步進(jìn)行[3]。為了便于描述,在介紹SJA1000寄存器設(shè)置時(shí),用的是CAN內(nèi)部地址。實(shí)際編程用的是外部地址(實(shí)驗(yàn)系統(tǒng)地址),外內(nèi)部地址的關(guān)系為:外部地址=FE00H+內(nèi)部地址。
1)復(fù)位
首先進(jìn)行模式設(shè)置,SJA1000內(nèi)部寄存器地址0,主設(shè)置:
MOD.3(AFM)=0;驗(yàn)收(兩個(gè))濾波器模式;
MOD.2(STM)=0;自檢測(cè)模式,正常模式;
MOD.0(RM)=1;復(fù)位測(cè)模式,復(fù)位。
在復(fù)位程序后應(yīng)加入延時(shí)程序,因?yàn)橄到y(tǒng)整體復(fù)位的到位是需要時(shí)間的,學(xué)生常會(huì)忽略這點(diǎn)。
2)識(shí)別碼編程
SJA1000內(nèi)部寄存器在工作模式與復(fù)位模式下的定義和作用不同,對(duì)于學(xué)生來說較難理解,易于造成混亂。在識(shí)別碼和驗(yàn)收碼方面尤為突出,這是因?yàn)橛行┑刂肥菑?fù)用的。
復(fù)位模式下:驗(yàn)收代碼寄存碼地址:FE10HFE13H;驗(yàn)收屏蔽寄存器地址:FE14H-FE17H。
工作模式下(發(fā)送節(jié)點(diǎn)):識(shí)別碼寄存器地址:FE11H-FE14H;數(shù)據(jù)傳送寄存器地址:FE15HFE1CH。
CAN節(jié)點(diǎn)通過標(biāo)識(shí)符來識(shí)別自己想要的CAN幀,接收濾波寄存器設(shè)置了標(biāo)識(shí)符每位的值。接收屏蔽寄存器一般有相同的數(shù)量匹配接收濾波寄存器,規(guī)定接收濾波寄存器標(biāo)識(shí)符每一位的值是否需要進(jìn)行匹配。
節(jié)點(diǎn)從總線上接收CAN幀,依次將收到的CAN幀標(biāo)識(shí)符與4對(duì)接收濾波和屏蔽寄存器進(jìn)行匹配,符合某對(duì)接收濾波和屏蔽寄存器要求了,就停止匹配,將數(shù)據(jù)接收到對(duì)應(yīng)的緩沖區(qū)中。
某節(jié)點(diǎn)只接收?qǐng)?bào)文標(biāo)示碼為:10101010XXX
設(shè)置驗(yàn)收代碼寄存器(ACR):10101010
設(shè)置驗(yàn)收屏蔽寄存器(AMR):00000000
該對(duì)組合會(huì)拒絕接收10101010xxx之外所有的標(biāo)識(shí)符對(duì)應(yīng)的CAN幀。因?yàn)槠帘纹饕?guī)定前8位(為0)標(biāo)識(shí)符位要嚴(yán)格匹配,其他位的濾波器值和收到的CAN標(biāo)識(shí)符值是否一致都可以。
3)波特率預(yù)設(shè)值
波特率預(yù)設(shè)值時(shí)鐘頻率為16MHz,總線的頻率為125kHz(總線位時(shí)間的倒數(shù))。
總線位時(shí)間(TBIT)=時(shí)間段1(TTSEG1)+時(shí)間段2(TTSEG2)+位同步時(shí)間段(TSYNCSEG)。具體設(shè)置如下所述。
(1)總線定時(shí)器0(CAN地址6)的定義
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 SJW.1 SJW.0 BRP.5 BRP.4 BRP.3 BRP.2 BRP.1 BRP.0
最小時(shí)間段為TSCL=2TCLK(32BRP.5+16BRP.4+8BRP.3+4BRP.2+2BRP.1+BRP.0+1)
同步跳轉(zhuǎn)寬度TSJW=TSCL(2SJW.1+SJW.0+1)
參數(shù)設(shè)置為03H,結(jié)果為
(2/16M)×(2+1+1)=0.5×10-6(s),其結(jié)果相當(dāng)于2 MHz。
(2)總線定時(shí)器1(CAN地址7)的定義
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 SAM TSEG2.2 TSEG2.1 TSEG2.0 TSEG1.3 TSEG1.2 TSEG1.1 TSEG1.0
參數(shù)設(shè)置為1CH,結(jié)果為
這個(gè)結(jié)果相當(dāng)于125kHz。
4)其他
對(duì)于輸出控制命令寄存器(OCR)、狀態(tài)寄存器(SR)、中斷寄存器(IR)和中斷使能寄存器(IER)依照定義進(jìn)行類似設(shè)置。
由于單片機(jī)是以訪問外部存儲(chǔ)器的方式訪問SJA1000的,數(shù)據(jù)在CAN線上傳送,結(jié)果表現(xiàn)在將數(shù)據(jù)寫入SJA1000或是從SJA1000讀出數(shù)據(jù)。為使實(shí)驗(yàn)步驟先易后難,先讓學(xué)生進(jìn)行自發(fā)自收編程,再進(jìn)行兩點(diǎn)互發(fā)編程,最后是多點(diǎn)互連實(shí)驗(yàn)。
1)自發(fā)自收編程和兩點(diǎn)互發(fā)編程
自發(fā)自收實(shí)驗(yàn)是為了排除連線問題,將精力集中在SJA1000的參數(shù)設(shè)置方面。自發(fā)自收編程,只需將MOD.2(STM)置1,即進(jìn)入自檢測(cè)模式。
若自發(fā)自收成功了,可以說明系統(tǒng)基本上可以運(yùn)行了。兩點(diǎn)互發(fā)實(shí)驗(yàn),將MOD.2(STM)置零進(jìn)入正常模式,可將驗(yàn)收屏蔽寄存器地址FE14HFE17H全置1。
2)多點(diǎn)互連實(shí)驗(yàn)
暫以四個(gè)節(jié)點(diǎn)為例,四個(gè)節(jié)點(diǎn)分別為1號(hào)、2號(hào)、3號(hào)和4號(hào),連接方式如圖2所示。規(guī)定前8位標(biāo)識(shí)符位要嚴(yán)格匹配,其他為任意。四個(gè)節(jié)點(diǎn)的驗(yàn)收屏蔽寄存器(AMR)前8位都設(shè)置為0,其余24為設(shè)置為1。
圖2 四個(gè)節(jié)點(diǎn)連接框圖
四個(gè)節(jié)點(diǎn)設(shè)置驗(yàn)收代碼寄存器(ACR)如下:
1號(hào)2號(hào)3號(hào)4號(hào)00000001 00000010 00000011 00000100
發(fā)送信息時(shí),在工作模式下,將驗(yàn)收代碼寄存器設(shè)置為需要接受信息節(jié)點(diǎn)的標(biāo)識(shí)碼。
本文通過對(duì)SJA1000與80C51系列微處理器組成CAN節(jié)點(diǎn)的實(shí)驗(yàn),加深了學(xué)生對(duì)CAN總線的了解。在“汽車車載網(wǎng)絡(luò)技術(shù)”課程的學(xué)習(xí)中,汽車電子技術(shù)專業(yè)和汽車檢測(cè)與維修專業(yè)的學(xué)生,通過互連的CAN節(jié)點(diǎn)實(shí)驗(yàn),較好地理解了報(bào)文標(biāo)識(shí)符的含義,從而較快地設(shè)計(jì)出不同的節(jié)點(diǎn)同時(shí)接收到相同數(shù)據(jù)的實(shí)現(xiàn)程序,與此同時(shí)對(duì)自檢模式、差分輸出和波特率的設(shè)置等有了較深理解。由此增強(qiáng)了學(xué)生學(xué)習(xí)的興趣,為今后進(jìn)一步學(xué)習(xí)和應(yīng)用汽車總線技術(shù)打下了良好的基礎(chǔ)。
[1] CEPARK+CAN總線開發(fā)板V3.0原理圖www.bbs.cepark.com[eb/ol] ∥2012.9.22
[2] 陳蕾,鄧晶,仲光榮.單片機(jī)原理與接口技術(shù)[M] .北京:機(jī)械工業(yè)出版社,2012.129-145
[3] 李勇,李鵬偉,茍丹丹.汽車單片機(jī)與車載網(wǎng)絡(luò)技術(shù)[M] .北京:電子工業(yè)出版社,2012.207-224