張建文, 馮 林, 李百余
(東華理工大學(xué),江西撫州 344000)
CAN總線通信接口設(shè)計(jì)
張建文, 馮 林, 李百余
(東華理工大學(xué),江西撫州 344000)
提出了一種用單片機(jī) STC89C52及 SJA1O00總線控制器組成CAN總線智能節(jié)點(diǎn)的設(shè)計(jì)方案,給出了硬件電路,并詳細(xì)介紹了 SJA1000初始化、接收及發(fā)送數(shù)據(jù)程序的框圖及程序設(shè)計(jì)。設(shè)計(jì)中程序均已通過調(diào)試,介紹的設(shè)計(jì)方法易于掌握且具有較強(qiáng)的靈活性和通用性,方便使用者學(xué)習(xí)和掌握。
CAN總線;STC89C52單片機(jī);SJA1O000控制器;PCA82C25;通信
CAN-bus(Controller Area Net work),即控制器局域網(wǎng),是國際上應(yīng)用最廣泛的現(xiàn)場總線之一。CAN-bus是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產(chǎn)生的任何錯(cuò)誤。當(dāng)信號(hào)傳輸距離達(dá)到 10 km時(shí),CAN-bus仍可提供高達(dá) 5 kbps的數(shù)據(jù)傳輸速率。作為一種技術(shù)先進(jìn)、可靠性高、功能完善、成本合理的遠(yuǎn)程網(wǎng)絡(luò)通訊控制方式,CAN-bus已被廣泛應(yīng)用到汽車電子、自動(dòng)控制、智能大廈、電力系統(tǒng)、安全監(jiān)控等各領(lǐng)域的自動(dòng)化控制系統(tǒng)中。
本設(shè)計(jì)是基于 SJA1000的 CAN總線通信模塊的設(shè)計(jì),可以完成在 CAN總線上的信息通信,筆者對CAN總線節(jié)點(diǎn)的硬件和軟件設(shè)計(jì)作了詳細(xì)的介紹。
CAN總線系統(tǒng)節(jié)點(diǎn)硬件電路如圖 1所示,從圖中可以看出,電路主要由 MAX232、微控制器89C52、獨(dú)立 CAN通信控制器 SJA1000、CAN總線驅(qū)動(dòng)器 PCA82C250、高速光電耦合器 6N137、8位拔動(dòng)開關(guān)和 2個(gè)發(fā)送按鍵構(gòu)成。當(dāng)有兩個(gè)或多個(gè)CAN節(jié)點(diǎn)時(shí),可構(gòu)成一個(gè) CAN互聯(lián)網(wǎng)絡(luò),網(wǎng)絡(luò)中的任一節(jié)點(diǎn)均可向其他節(jié)點(diǎn)發(fā)送報(bào)文,網(wǎng)絡(luò)中的任一節(jié)點(diǎn)也可向其他節(jié)點(diǎn)發(fā)送遠(yuǎn)程請求幀,請求對方發(fā)送本節(jié)點(diǎn)所需的報(bào)文。為了方便測試,將已接收的數(shù)據(jù)通過 RS232串口發(fā)送到計(jì)算機(jī),通過計(jì)算機(jī)調(diào)試軟件進(jìn)行測試。串口與單片機(jī)接線電路采用的常規(guī)接線法,串口初始化程序、串口發(fā)送程序在此也不做介紹。
本系統(tǒng)通信方式為:按 K1鍵啟動(dòng)一次點(diǎn)到點(diǎn)通信,按指定 I D號(hào)向指定節(jié)點(diǎn)發(fā)送一幀報(bào)文,按K2鍵啟動(dòng)一次請求數(shù)據(jù)操作,本節(jié)點(diǎn)可獲得指定I
D節(jié)點(diǎn)的數(shù)據(jù)。用戶通過 8位開關(guān)設(shè)置節(jié)點(diǎn) I D號(hào),I D號(hào)由 P1口讀入。輸入的 8位 I D值分兩部分:低 4位為本節(jié)點(diǎn)自身的 I D值;高 4位為點(diǎn)到點(diǎn)通信時(shí)接收節(jié)點(diǎn)的 I D值,可見,總線上最多可設(shè)置16個(gè)不同 I D值的節(jié)點(diǎn) (饒運(yùn)濤,2003)。
本文 CAN總線智能節(jié)點(diǎn)的軟件程序設(shè)計(jì)主要包括:主程序、CAN節(jié)點(diǎn)初始化、數(shù)據(jù)的發(fā)送、數(shù)據(jù)的接收、RS232數(shù)據(jù)發(fā)送等程序(鄒繼軍等,2001)。
主程序設(shè)置為一個(gè)死循環(huán),循環(huán)中要不停地檢測發(fā)送按鍵 K1和 K2是否按下,調(diào)用接收子程序,查詢接收緩沖器中是否有數(shù)據(jù)。主程序流程如圖 2所示。
主程序如下:
圖1 CAN總線通信接口電路Fig.1 Communication interface circuit of CAN bus
圖2 主程序流程圖Fig.2 The fl ow chart ofmain program
對 SJA1000進(jìn)行初始化實(shí)際上就是通過單片機(jī)向其片內(nèi)的各個(gè)寄存器寫入控制字的過程。本設(shè)計(jì)采用了Basic CAN模式。SJA1000的初始化只有在復(fù)位模式下可以進(jìn)行。初始化主要包括時(shí)鐘分頻寄存器設(shè)置、驗(yàn)收屏蔽寄存器設(shè)置、驗(yàn)收代碼寄存器設(shè)置、總線定時(shí)寄存器設(shè)置和輸出模式寄存器設(shè)置等。初始化設(shè)置完成以后,SJA1000就可以進(jìn)入工作狀態(tài),進(jìn)行正常的通訊工作(韓黨群,2003)。本設(shè)計(jì)的初始化時(shí),要注意驗(yàn)收代碼寄存器和驗(yàn)收屏蔽寄存器的設(shè)置。其流程圖如圖3所示。初始化程序如下:
圖3 CAN控制器初始化流程圖Fig.3 The flow chart of CAN controller initializati on
發(fā)送程序負(fù)責(zé)節(jié)點(diǎn)報(bào)文的發(fā)送,發(fā)送程序分發(fā)送數(shù)據(jù)幀和遠(yuǎn)程幀兩種,兩種程序基本相同,只是遠(yuǎn)程幀無數(shù)據(jù)域。發(fā)送過程可由 CAN控制段的查詢狀態(tài)標(biāo)志位控制。通過查詢 CAN控制器的狀態(tài)寄存器,得到發(fā)送緩沖器的狀態(tài),當(dāng)發(fā)送緩沖器可以被訪問時(shí),微處理器將要發(fā)送的數(shù)據(jù)從其數(shù)據(jù)存儲(chǔ)區(qū)中取出,與主機(jī)的 I D地址一起組成信息幀,按CAN報(bào)文結(jié)構(gòu)發(fā)送到發(fā)送緩沖器中,并置位發(fā)送請求位,啟動(dòng)發(fā)送命令,最后由硬件完成數(shù)據(jù)的發(fā)送(鄭勇蕓等,2004)。發(fā)送的標(biāo)識(shí)碼 I D需做一些運(yùn)算,使報(bào)文能通過接收節(jié)點(diǎn)驗(yàn)收濾波器的測試,CAN發(fā)送程序流程圖如圖 4所示。
圖4 CAN發(fā)送程序流程圖Fig.4 The fl ow chart of transm itting data program
發(fā)送數(shù)據(jù)幀程序如下:
SJA1000的報(bào)文接收可采用中斷接收方式或查詢接收方式。在通訊實(shí)時(shí)性要求不高的情況下可以用查詢方式接收,兩種接收方式編程的思路基本相同。本程序采用查詢接收方式。CPU在檢測到接收緩沖器中存在有效報(bào)文后,如接收到的是數(shù)據(jù)幀,則將接收緩沖器中的內(nèi)容讀入 CPU的數(shù)據(jù)存儲(chǔ)區(qū),并將接收到的數(shù)據(jù)通過串口在 PC機(jī)串口調(diào)試助手上顯示出來;如接收到的是遠(yuǎn)程請求幀,則調(diào)用發(fā)送程序,發(fā)送對方請求的數(shù)據(jù) (宋清昆,2009)。接收程序流程圖如圖 5所示。
接收程序如下:
圖5 CAN接收程序流程圖Fig.5 The flow chart of receiving data program
本文詳細(xì)地給出了基于單片機(jī)實(shí)現(xiàn) CAN總線通信的軟硬件的設(shè)計(jì),同時(shí)在節(jié)點(diǎn)設(shè)計(jì)中加入了基于 RS-232總線的數(shù)據(jù)通信功能。設(shè)計(jì)中程序都已經(jīng)通過調(diào)試,調(diào)試結(jié)果證實(shí)了該方案的實(shí)用性和可靠性。CAN總線是一種功能強(qiáng)大、應(yīng)用廣泛的現(xiàn)場總線,它的優(yōu)異性能使得其越來越受到關(guān)注,被認(rèn)為是最有前途的現(xiàn)場總線通信技術(shù)。
韓黨群.2003.CAN控制器 SJA1000及其應(yīng)用[J].電子技術(shù)應(yīng)用,29(1):66-69.
饒運(yùn)濤.2003.現(xiàn)場總線CAN原理與應(yīng)用技術(shù)[M].北京:北京航空航天大學(xué)出版社:224-227.
宋清昆,蔣繼成.2009.基于AT89C52單片機(jī)CAN總線節(jié)點(diǎn)的設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用,28(5):55-58.
鄭勇蕓,饒運(yùn)濤,鄒繼軍,等.2004.現(xiàn)場總線 CAN通信中多線程的應(yīng)用[J].東華理工學(xué)院學(xué)報(bào),27(2):196-200.
鄒繼軍,饒運(yùn)濤.2001.基于 SJA1000的 CAN總線智能節(jié)點(diǎn)設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,(12):26-31.
Design of Communication I nterface Based on CAN
ZHANG Jian-wen, FENGLin, L IBai-yu
(East China Institute of Technology,Fuzhou,JX 344000,China)
The communication based on the CAN bus has better merits in reliability and flexibility compared to general serial bus and the infor mation based on the CAN bus can be transmitted ti mely.This paper introduces one design method of the CAN intelligent node which use the STC89C52 and CAN controller SJA 1 000 as its core,it also gives the designing chart of hardware.The flow chart of soft ware and the program of initialization,transmitting and receiving are described in detail.The method of design in this paper is easy to grasp and is flexibility and versatility,itwill help readers to learn and master the application about the CAN bus.
CAN bus;STC89C52;SJA1000 controller;PCA82C25;communication
TP273
A
1674-3504(2010)03-293-04
10.3969/j.issn.1674-3504.2010.03.14
2010-05-01
張建文 (1966—),男,副教授,主要從事電子技術(shù)的教學(xué)與研究工作。