張建文, 馮 林, 李百余
(東華理工大學,江西撫州 344000)
CAN總線通信接口設計
張建文, 馮 林, 李百余
(東華理工大學,江西撫州 344000)
提出了一種用單片機 STC89C52及 SJA1O00總線控制器組成CAN總線智能節(jié)點的設計方案,給出了硬件電路,并詳細介紹了 SJA1000初始化、接收及發(fā)送數(shù)據(jù)程序的框圖及程序設計。設計中程序均已通過調(diào)試,介紹的設計方法易于掌握且具有較強的靈活性和通用性,方便使用者學習和掌握。
CAN總線;STC89C52單片機;SJA1O000控制器;PCA82C25;通信
CAN-bus(Controller Area Net work),即控制器局域網(wǎng),是國際上應用最廣泛的現(xiàn)場總線之一。CAN-bus是一種多主方式的串行通訊總線,基本設計規(guī)范要求有高的位速率,高抗電磁干擾性,而且能夠檢測出產(chǎn)生的任何錯誤。當信號傳輸距離達到 10 km時,CAN-bus仍可提供高達 5 kbps的數(shù)據(jù)傳輸速率。作為一種技術先進、可靠性高、功能完善、成本合理的遠程網(wǎng)絡通訊控制方式,CAN-bus已被廣泛應用到汽車電子、自動控制、智能大廈、電力系統(tǒng)、安全監(jiān)控等各領域的自動化控制系統(tǒng)中。
本設計是基于 SJA1000的 CAN總線通信模塊的設計,可以完成在 CAN總線上的信息通信,筆者對CAN總線節(jié)點的硬件和軟件設計作了詳細的介紹。
CAN總線系統(tǒng)節(jié)點硬件電路如圖 1所示,從圖中可以看出,電路主要由 MAX232、微控制器89C52、獨立 CAN通信控制器 SJA1000、CAN總線驅(qū)動器 PCA82C250、高速光電耦合器 6N137、8位拔動開關和 2個發(fā)送按鍵構(gòu)成。當有兩個或多個CAN節(jié)點時,可構(gòu)成一個 CAN互聯(lián)網(wǎng)絡,網(wǎng)絡中的任一節(jié)點均可向其他節(jié)點發(fā)送報文,網(wǎng)絡中的任一節(jié)點也可向其他節(jié)點發(fā)送遠程請求幀,請求對方發(fā)送本節(jié)點所需的報文。為了方便測試,將已接收的數(shù)據(jù)通過 RS232串口發(fā)送到計算機,通過計算機調(diào)試軟件進行測試。串口與單片機接線電路采用的常規(guī)接線法,串口初始化程序、串口發(fā)送程序在此也不做介紹。
本系統(tǒng)通信方式為:按 K1鍵啟動一次點到點通信,按指定 I D號向指定節(jié)點發(fā)送一幀報文,按K2鍵啟動一次請求數(shù)據(jù)操作,本節(jié)點可獲得指定I
D節(jié)點的數(shù)據(jù)。用戶通過 8位開關設置節(jié)點 I D號,I D號由 P1口讀入。輸入的 8位 I D值分兩部分:低 4位為本節(jié)點自身的 I D值;高 4位為點到點通信時接收節(jié)點的 I D值,可見,總線上最多可設置16個不同 I D值的節(jié)點 (饒運濤,2003)。
本文 CAN總線智能節(jié)點的軟件程序設計主要包括:主程序、CAN節(jié)點初始化、數(shù)據(jù)的發(fā)送、數(shù)據(jù)的接收、RS232數(shù)據(jù)發(fā)送等程序(鄒繼軍等,2001)。
主程序設置為一個死循環(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進行初始化實際上就是通過單片機向其片內(nèi)的各個寄存器寫入控制字的過程。本設計采用了Basic CAN模式。SJA1000的初始化只有在復位模式下可以進行。初始化主要包括時鐘分頻寄存器設置、驗收屏蔽寄存器設置、驗收代碼寄存器設置、總線定時寄存器設置和輸出模式寄存器設置等。初始化設置完成以后,SJA1000就可以進入工作狀態(tài),進行正常的通訊工作(韓黨群,2003)。本設計的初始化時,要注意驗收代碼寄存器和驗收屏蔽寄存器的設置。其流程圖如圖3所示。初始化程序如下:
圖3 CAN控制器初始化流程圖Fig.3 The flow chart of CAN controller initializati on
發(fā)送程序負責節(jié)點報文的發(fā)送,發(fā)送程序分發(fā)送數(shù)據(jù)幀和遠程幀兩種,兩種程序基本相同,只是遠程幀無數(shù)據(jù)域。發(fā)送過程可由 CAN控制段的查詢狀態(tài)標志位控制。通過查詢 CAN控制器的狀態(tài)寄存器,得到發(fā)送緩沖器的狀態(tài),當發(fā)送緩沖器可以被訪問時,微處理器將要發(fā)送的數(shù)據(jù)從其數(shù)據(jù)存儲區(qū)中取出,與主機的 I D地址一起組成信息幀,按CAN報文結(jié)構(gòu)發(fā)送到發(fā)送緩沖器中,并置位發(fā)送請求位,啟動發(fā)送命令,最后由硬件完成數(shù)據(jù)的發(fā)送(鄭勇蕓等,2004)。發(fā)送的標識碼 I D需做一些運算,使報文能通過接收節(jié)點驗收濾波器的測試,CAN發(fā)送程序流程圖如圖 4所示。
圖4 CAN發(fā)送程序流程圖Fig.4 The fl ow chart of transm itting data program
發(fā)送數(shù)據(jù)幀程序如下:
SJA1000的報文接收可采用中斷接收方式或查詢接收方式。在通訊實時性要求不高的情況下可以用查詢方式接收,兩種接收方式編程的思路基本相同。本程序采用查詢接收方式。CPU在檢測到接收緩沖器中存在有效報文后,如接收到的是數(shù)據(jù)幀,則將接收緩沖器中的內(nèi)容讀入 CPU的數(shù)據(jù)存儲區(qū),并將接收到的數(shù)據(jù)通過串口在 PC機串口調(diào)試助手上顯示出來;如接收到的是遠程請求幀,則調(diào)用發(fā)送程序,發(fā)送對方請求的數(shù)據(jù) (宋清昆,2009)。接收程序流程圖如圖 5所示。
接收程序如下:
圖5 CAN接收程序流程圖Fig.5 The flow chart of receiving data program
本文詳細地給出了基于單片機實現(xiàn) CAN總線通信的軟硬件的設計,同時在節(jié)點設計中加入了基于 RS-232總線的數(shù)據(jù)通信功能。設計中程序都已經(jīng)通過調(diào)試,調(diào)試結(jié)果證實了該方案的實用性和可靠性。CAN總線是一種功能強大、應用廣泛的現(xiàn)場總線,它的優(yōu)異性能使得其越來越受到關注,被認為是最有前途的現(xiàn)場總線通信技術。
韓黨群.2003.CAN控制器 SJA1000及其應用[J].電子技術應用,29(1):66-69.
饒運濤.2003.現(xiàn)場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社:224-227.
宋清昆,蔣繼成.2009.基于AT89C52單片機CAN總線節(jié)點的設計[J].自動化技術與應用,28(5):55-58.
鄭勇蕓,饒運濤,鄒繼軍,等.2004.現(xiàn)場總線 CAN通信中多線程的應用[J].東華理工學院學報,27(2):196-200.
鄒繼軍,饒運濤.2001.基于 SJA1000的 CAN總線智能節(jié)點設計[J].單片機與嵌入式系統(tǒ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—),男,副教授,主要從事電子技術的教學與研究工作。