CAN總線(xiàn)技術(shù)在車(chē)站信號系統中的應用
1、CAN總線(xiàn)的技術(shù)規范
CAN總線(xiàn)技術(shù)規范的目的是使任意兩個(gè)CAN總線(xiàn)的執行過(guò)程達到兼容,CAN技術(shù)規范版本2.0包括兩部分內容:
1) CAN技術(shù)規范版本2.0A
CAN技術(shù)規范版本2.0A描述的是在CAN技術(shù)規范1.2中定義的CAN報文格式,其范圍是定義傳輸層和與CAN有關(guān)的外層。在CAN技術(shù)規范版本2.0A中,CAN節點(diǎn)的分層結構如圖1(a)所示。
由于串行通信進(jìn)入了更多應用領(lǐng)域,因此要求各種應用領(lǐng)域通信功能報文標識符標注實(shí)現標準化。如果把原有的11個(gè)標識符定義的地址范圍加以擴展,CAN總線(xiàn)的功能將更加完善。因而,在引入了第二種報文格式(擴展格式)后,它可以提供由29位定義的更大地址范圍,這就很好的解決了系統設計者在定義結構名稱(chēng)方面存在的問(wèn)題,從而CAN技術(shù)規范版本2.0B也就相應的出現了。
?。╝) 2.0A中節點(diǎn)的結構圖 (b) 2.0B中分層結構 圖1
2) CAN技術(shù)規范版本2.0B
CAN技術(shù)規范版本2.0B描述標準和擴展兩種報文格式。在CAN技術(shù)規范版本2.0B中,CAN遵從OSI模型,按照OSI基準模型,CAN節點(diǎn)結構可以分為兩層:數據鏈路層和物理層,具體如圖1(b)所示。
2、CAN總線(xiàn)通信控制器SJA1000的簡(jiǎn)介
CAN總線(xiàn)通信控制器主要由實(shí)現CAN總線(xiàn)協(xié)議的電路和實(shí)現與微處理器接口的電路兩部分組成,它是完成通信協(xié)議的主體。對于不同型號的CAN總線(xiàn)通信控制器,實(shí)現CAN總線(xiàn)協(xié)議部分電路的結構和功能大多相同,而與微處理器接口部分的電路結構和連接方式存在一些差異。這里主要以SJAl000為代表對CAN總線(xiàn)通信控制器的功能作一簡(jiǎn)單介紹。
SJAl000是一種獨立CAN控制器。它是PHILIPS公司的PCA82C200CAN控制器的替代產(chǎn)品,SJAl000的內部邏輯結構和外部接口如圖2所示。
圖2 SJA1000內部邏輯框圖及外部接口
在性能方面,除了SJAl000在軟件和引腳上與它的前—款PCA82C200獨立CAN控制器兼容之外,其還增加了很多新的功能。在具體應用中,SJAl000采用了兩種工作方式:Basic CAN方式(PCA82C200兼容方式)和PeliCAN方式(擴展特性方式),這是SJAl000實(shí)現其兼容性的基礎。SJAl000的兩種工作方式是通過(guò)時(shí)鐘分頻寄存器中的CAN方式位來(lái)選擇的,其中上電復位的默認工作方式是Basic CAN方式。在PeliCAN方式下,SJAl000有一個(gè)重新設計的含很多新功能的寄存器組。SJAl000包含PCA82C200中的所有位,同時(shí)增加了一些新的功能位。PeliCAN方式支持CAN2.0B協(xié)議規定的所有功能(29位的標識符)[2]。
3、SAJ1000與Atmega128單片機接口技術(shù)的實(shí)現
在SJA1000的主要特性介紹中,提到其支持多種微處理器接口,在具體設計中,我們主要研究了其與Atmega 128單片機的接口,設計了用于CAN通信的最小單片機系統(以下簡(jiǎn)稱(chēng)CAN通信系統)接口方式如圖3所示。系統的通信部分主要有Atmega 128單片機、SJA1000CAN控制器、光電隔離部分和收發(fā)芯片組成。
圖3 單片機與SJA1000接口框圖
TJA1050是PHILIPS公司生產(chǎn)的、用以替代82C250的高速CAN總線(xiàn)驅動(dòng)器,是CAN控制器和物理總線(xiàn)之間的接口,可以提供向總線(xiàn)的差動(dòng)發(fā)送能力和對CAN控制器的差動(dòng)接收能力,其與ISO/DIS 11898標準完全兼容[3]。
光電隔離部分是為了增強CAN總線(xiàn)節點(diǎn)的抗干擾能力,不過(guò),應該特別說(shuō)明的一點(diǎn)是,光電耦合部分電路所采用的兩個(gè)電源必須完全隔離,否則采用光電耦合也就失去了意義。電源的完全隔離采用小功率電源隔離模塊實(shí)現。這部分雖然增加了接口電路的復雜性,但是卻提高了節點(diǎn)的穩定性和安全性。
4、CAN結點(diǎn)通信軟件的設計
SJA1000是I/O設備基于內存編址的微控制器,雙設備獨立操作通過(guò)像RAM一樣的片內寄存器修正來(lái)實(shí)現。因此CAN總線(xiàn)通信部分編程主要就是對SJAl000的片內寄存器的讀寫(xiě)操作。通信部分軟件設計總體上可以劃分為3大模塊:總線(xiàn)初始化、數據幀的接收和發(fā)送、總線(xiàn)出錯和異常處理。
4.1 CAN通信初始化
圖4 CAN初始化程序
其主要是設置CAN的通信參數。需要初始化的寄存器有:總線(xiàn)定時(shí)寄存器0、總線(xiàn)定時(shí)寄存器1、輸出控制寄存器、接收代碼寄存器、接收屏蔽寄存器等等。需要注意的是,只有當控制寄存器中的復位要求位置為高時(shí),這些寄存器才可被訪(fǎng)問(wèn)。因此,在對這些寄存器初始化前,必須確保系統進(jìn)入了復位狀態(tài)。在訪(fǎng)問(wèn)總線(xiàn)定時(shí)寄存器時(shí),由于其內容決定波特率的數值,總線(xiàn)定時(shí)寄存器的初始化字必須依據系統中各CAN控制器的晶振頻率而設定。初始化程序的流程圖如圖4所示[4]。
4.2 數據發(fā)送和接收程序
信息從CAN控制器發(fā)送到CAN總線(xiàn)是由CAN控制器自動(dòng)完成的。發(fā)送程序只需把發(fā)送的信息幀送到CAN的發(fā)送緩沖區,啟動(dòng)發(fā)送命令即可。需要注意的是,發(fā)送中斷不是由于發(fā)送完成而產(chǎn)生,而是由于發(fā)送緩沖區再次可用而產(chǎn)生的。
信息從CAN總線(xiàn)到CAN接收緩沖區是由CAN控制器自動(dòng)完成的。接收程序只需從接收緩沖區讀取要接收的信息即可。需要注意的是,讀取接收緩存器(RBF0或 RBF1)的內容后,CPU必須通過(guò)置位釋放接收緩存位來(lái)釋放緩存器,使得另一個(gè)報文立即變得有效。數據發(fā)送和接收中斷流程圖如圖5所示。
圖5 CAN通信數據發(fā)送和接收中斷
4.3 總線(xiàn)出錯和異常處理
CAN總線(xiàn)作為一種優(yōu)良的串行通信局域網(wǎng)絡(luò ),它自身的查錯和排錯能力相當強大,因此在設計時(shí)必須充分利用這一點(diǎn),提高通信系統的可靠性。CAN協(xié)議規定網(wǎng)絡(luò )上的任何一個(gè)節點(diǎn),根據其錯誤計數器中的數值,可能處于下列3種狀態(tài)之一:“錯誤—激活”狀態(tài)、“錯誤—認可”狀態(tài)、“總線(xiàn)脫離”狀態(tài)。處于前兩種狀態(tài)時(shí)節點(diǎn)都可以參與總線(xiàn)通信,而當處于“總線(xiàn)脫離”狀態(tài)時(shí)節點(diǎn)既不發(fā)送,也不接收任何數據幀。同時(shí)CAN協(xié)議還對脫離總線(xiàn)節點(diǎn)重新參與總線(xiàn)通信有嚴格規定。
由于節點(diǎn)自身的原因或是其它原因,節點(diǎn)脫離總線(xiàn),不參與通信,出現這種情況程序要做到及時(shí)發(fā)現,并且迅速做出有效處理,使之恢復參與總線(xiàn)通信。判斷節點(diǎn)是否脫離總線(xiàn)同樣既可通過(guò)查詢(xún)方式,又可通過(guò)中斷方式。而處于“總線(xiàn)脫離”狀態(tài)的節點(diǎn)通信功能的恢復,必須嚴格依照CAN協(xié)議規定的流程做,否則節點(diǎn)將一直處于“總線(xiàn)脫離”狀態(tài)。
5、總結 在車(chē)站信號系統中,用CAN總線(xiàn)代替RS-485總線(xiàn),其數據通信具有突出的可靠性、實(shí)時(shí)性和靈活性,而且通信距離也有了很大的提高,這些都在現場(chǎng)運行中得到了證實(shí),具有較強的實(shí)用價(jià)值。
本文作者創(chuàng )新點(diǎn):用CAN總線(xiàn)代替車(chē)站信號系統所使用的RS-485總線(xiàn),在軟/硬件設計中均采用了模塊化的方案,具有更高的靈活性和廣泛的適用性;同時(shí),用Atmega128單片機代替車(chē)站信號系統中所使用的Atmel8535單片機,使運行的速度也得到了提高。
評論