CAN總線是一種雙向、串行、多節(jié)點網絡,被廣泛應用于各種分布式和實時控制系統(tǒng)中,被認為是一種很有發(fā)展前景的現(xiàn)場總線。
列車控制網絡就是一種分布式計算機系統(tǒng),它通過車輛總線來傳遞控制、監(jiān)測及故障診斷等信息。由于列車控制網絡對于安全性的要求極高,為排除單一故障影響系統(tǒng)功能的可能性,對于控制系統(tǒng)的重要部分要求采取冗余設計[1]。CAN總線是一種支持構成多主結構或冗余結構的現(xiàn)場總線,對于實現(xiàn)提供多機備份、提高系統(tǒng)可靠性、簡化系統(tǒng)結構和降低安裝難度具有十分積極的作用。這種特性正好符合了列車上對于監(jiān)測控制系統(tǒng)布線精簡的要求,非常適合應用于列車控制網絡的設計。
與RS-485總線相比,CAN總線有其自身不可替代的優(yōu)勢。CAN總線發(fā)送、回收電平都需相互校驗,而且每一幀都有響應位,再加上硬化的CRC校驗,使得CAN總線在強噪聲環(huán)境下較RS-485總線的安全性更高。CAN總線系統(tǒng)還具有良好的故障隔離能力,在任意時刻CAN_H的電平只能處于高電平和懸浮狀態(tài),而CAN_L端的電平則只能是低電平和懸浮狀態(tài)?;谶@種電平特性,當多個節(jié)點向總線發(fā)送數(shù)據(jù)時,不會呈現(xiàn)RS-485總線那樣的低電平短路狀態(tài)。此外,當總線節(jié)點在發(fā)生嚴重錯誤時能夠及時關閉與總線的連接,即當有節(jié)點損壞時,不會導致整個總線停止工作,保證了列車通信的安全性,降低了故障風險。
但是在實際應用中,由于RS-485是一種相對經濟的、傳輸速率高、傳輸距離遠和寬共模范圍的總線技術,仍廣泛地應用于工業(yè)現(xiàn)場。由于列車上大多數(shù)的PLC或微控制器,特別是中小型PLC還不具備與CAN直接通信的能力,但一般的PLC或微控制器都具有RS-232/RS-485串行通信口,因此開發(fā)一款適用于列車通信接口的CAN-485協(xié)議控制器對于搭建CAN通信網絡顯得極為重要??刂凭W絡示意圖如圖1所示。
1 硬件電路設計
傳統(tǒng)的CAN-485協(xié)議控制器設計一般采用SJA1000和51單片機來實現(xiàn),但是由于其硬件電路較為復雜,不利于系統(tǒng)集成化。本文介紹的協(xié)議控制器以PIC18F258為核心處理芯片,該芯片自帶CAN收發(fā)接口,是一款高性能的PIC系列單片,有著先進的精簡指令集構架、增強型內核、32級堆棧,片內具有Flash程序存儲器、EEPROM數(shù)據(jù)存儲器、自編程功能、在線調試器(ICD)和多種內部、外部中斷源[2],應用十分廣泛。與傳統(tǒng)的設計方式不同,它并不需要通過訪問外部設備的方式來對CAN模塊進行控制,而只需對芯片內部的寄存器進行操作即可,降低了設計難度。
此外,為減少分立元件的數(shù)量,精簡電路設計,系統(tǒng)采用了ZLG公司帶隔離的485模塊RSM485C和高速CAN隔離收發(fā)器CTM1050。RSM485C和CTM1050模塊在內部集成了高速光耦合器6N137及DC隔離模塊,并具有極高的電磁抗干擾性(EMI)。不僅如此,還在CAN總線和RS485總線上添加了差分電阻,使總線的抗干擾能力更強,保證了數(shù)據(jù)傳輸質量,非常適用于列車中的高電磁噪聲環(huán)境。在數(shù)據(jù)操作方面,設計者只需要在程序編寫過程中操作TXD和RXD兩根線即可。這樣的設計使電路達到最簡,極大地提高了硬件電路的可靠性。硬件電路圖如圖2所示。
PIC18F258的RA、RB、RC均可作為I/O口進行使用,其中RB5/PGM、RB6/PGC、RB7/PGD可復用為ICSP下載端口,可直接通過連接下載器對程序進行燒寫和在線調試。RB2/CANTX、RB3/CANRX復用為CAN數(shù)據(jù)收發(fā)線,直接與CAN收發(fā)器連接進行通信。
考慮到實際應用的需要和調試的便利性,為了表征系統(tǒng)的通信狀況,在硬件設計中,將RA0、RA1、RA2這3個I/O口分別與2個LED指示燈和1個蜂鳴器相連,用于系統(tǒng)的故障監(jiān)測。LED燈用于指示當前系統(tǒng)的通信狀況,而蜂鳴器則用于報警,具體的監(jiān)測邏輯可在程序中根據(jù)需要進行修改。
2 程序設計
程序的設計采用Microchip公司提供的開發(fā)工具Mplab,用C語言進行編寫,并選用了Microchip公司的PICkit 3編程器/調試器對程序進行在線調試和下載。PICkit 3是一款支持硬件和軟件開發(fā)的調試器系統(tǒng),用于基于在線串行編程ICSP(In-Circuit Serial Programming)和增強型在線串行編程雙線串行接口的Microchip PIC單片機(MCU)和dsPIC數(shù)字信號控制器DSC(Digital Signal Controller)[3]。
為了提高可靠性和可理解性,軟件設計采用了模塊結構,主要包括初始化函數(shù)、CAN接收中斷服務程序、USART接收中斷服務程序以及主程序。
2.1 初始化程序
初始化程序用于設置串口初始化、CAN模塊通信波特率、工作方式、發(fā)送優(yōu)先級、接收郵箱、發(fā)送郵箱及對應的接收過濾器和接收屏蔽器等。初始化程序框圖如圖3所示。
首先,對串口進行初始化設置。由于串口的初始化較為簡單,主要是對中斷優(yōu)先級、波特率等進行設置, 在此不作過多的敘述,串口初始化的程序如下所示:
void SCIInit()
{
SPBRG=51;
/*8 MHz晶振波特率為9 600=Fosc/16(X+1)*/
TXSTA=0x04;
/*選擇異步高速方式傳輸8位數(shù)據(jù)*/
RCSTA=0x80;/*允許串口工作使能*/
TRISC=(TRISC|0x80)&0xBF;
/*設置RX/RC7為輸入,TX/RC6為輸出*/
PIE1=PIE1|0x20;/*允許串行通信接收中斷使能*/
PIE1=PIE1|0x10;/*允許串行通信發(fā)送中斷使能*/
IPR1bits.TXIP=0;
/*設置SCI發(fā)送中斷為低優(yōu)先級中斷*/
IPR1bits.RCIP=0;
/*設置SCI接收中斷為低優(yōu)先級中斷*/
RCSTAbits.CREN=1;/*允許串口接收數(shù)據(jù)*/
}
PIC18F258系列CAN模塊有6種操作方式:配置方式、關閉方式、正常工作方式、監(jiān)聽方式、自檢方式及錯誤識別方式。在實際應用時,首先使單片機進入配置方式,CAN模塊的初始化也只能在配置模式下進行。配置完成后使單片機進入正常方式,也就是標準的工作方式。在該方式下,模塊會主動地監(jiān)控所有總線信息和產生應答位、錯誤幀等。這也是可以在CAN總線上發(fā)送信息的唯一方式。在系統(tǒng)的開發(fā)測試過程中,配置完CAN模塊參數(shù)后,可以使其進入自檢方式。自檢方式允許信息不發(fā)到CAN總線,而在發(fā)送緩沖器和接收緩沖器之間內部進行信息發(fā)送與接收。在該方式下,ACK位被忽略,單片機可以接收來自自身的信息,就像來自其他節(jié)點一樣[4]。
2.2 接收中斷程序
考慮到更好地處理實時數(shù)據(jù)、實時響應控制命令,CAN報文和USART數(shù)據(jù)均采用中斷控制的接收方法。PIC18系列單片機提供了可配置的高低中斷優(yōu)先級的方式,由于CAN通信的傳輸速率較快,為避免長時間占用總線,提高傳輸速率,可將CAN接收中斷設置為高優(yōu)先級中斷。
中斷函數(shù)的處理邏輯十分簡單,若產生CAN接收中斷,則將CAN通信數(shù)據(jù)傳遞給串口通信數(shù)據(jù)緩存區(qū);反之,若產生串口接收中斷,則將串口通信數(shù)據(jù)傳遞給CAN模塊接收數(shù)據(jù)緩存區(qū)。經過這樣的設計,可實現(xiàn)多節(jié)點網絡的雙向通信,提高了系統(tǒng)的互操作性。在對系統(tǒng)進行監(jiān)控時,既可以及時獲取各個節(jié)點的工作狀態(tài)信息,又可以通過上位機對各節(jié)點進行網絡配置和發(fā)送指令。
2.3 主函數(shù)
主函數(shù)的作用主要是對CAN模塊、串口進行初始化,并不斷地掃描CAN和串口的中斷標志位。若經查詢得知產生了CAN接收中斷或串口接收中斷,則在發(fā)送數(shù)據(jù)之前對接收到的數(shù)據(jù)進行相應的處理,通過對數(shù)據(jù)的一系列處理,使得在上位機上可以直觀地了解到各節(jié)點的運行狀況。程序的整體流程圖如圖4所示。
3 系統(tǒng)測試
在軟硬件搭建完成后,對系統(tǒng)進行測試,系統(tǒng)的測試共分為兩個部分。
第一部分是利用PIC單片機CAN模塊的自檢模式,實現(xiàn)單一CAN-485協(xié)議控制器的自通信,即并不要求CAN數(shù)據(jù)對外傳輸,而是將數(shù)據(jù)收回,發(fā)送到上位機端,用于檢測單一模塊的功能是否正常。
第二部分是組建RS-232→RS-485→CAN→CAN→RS-485→RS-232通信網絡,用于實現(xiàn)雙機通信,充分驗證了CAN-485協(xié)議控制器的雙向數(shù)據(jù)傳輸能力。測試結果如圖5所示。
至此,系統(tǒng)的測試基本完成,若對于系統(tǒng)的應用有進一步的要求,只需對程序作相應的修改,并測試驗證即可。由測試結果可知,CAN-485協(xié)議控制器的設計是可行的。
CAN總線技術的優(yōu)越性,使其在列車控制網絡方面的應用逐步得到推廣。在測試過程中,借助串口調試助手來發(fā)送和接收數(shù)據(jù),并將CAN模塊設定為自檢模式,驗證了本協(xié)議控制器的可靠性。在正常的工作模式下,組建的多主結構實現(xiàn)了RS-485網絡與CAN總線網絡的互聯(lián)。實踐證明,本協(xié)議控制器的轉換速率高、誤碼率低、抗干擾能力強、電路精簡、占用空間小,非常適用于搭建列車控制網絡系統(tǒng)。
參考文獻
[1] 陳帥.CAN總線在列車通信網絡系統(tǒng)中的應用研究[J].黑龍江科技信息,2009(12):67.
[2] 王義.CAN總線單片機PIC18F258在汽車電子控制單元中的應用[J].貴州師范大學(自然科學版),2010,28(1):117-120.
[3] PI18F258英文手冊[Z].Microchip Technology Inc, 2003.
[4] 劉和平,劉釗,鄭群英,等.PIC18Fxxx單片機程序設計及應用[M].北京:北京航空航天大學出版社,2005.