周述良
(成都電子機械高等專科學校 通信工程系,成都 610071)
CAN總線(Controller Area Network,控制器局域網絡總線)屬于串行通信網絡,早期主要應用在汽車電子網絡通信中。與一般的通信總線相比,CAN總線采用了許多新技術和獨特的設計,其數據通信具有突出的可靠性、實時性和靈活性,因此越來越受到開發者的重視,并廣泛應用在諸多通信網絡。RS232作為標準的計算機串行接口已被廣泛使用,但由于兩者的總線結構、通信協議及傳輸特點各不相同,給不同設備之間的連接帶來了不便。因此,如何以最簡單的方式實現CAN接口與RS232串行口的通信就成為工程實踐中一個不可回避的問題。本文主要介紹CAN通信總線與RS232串行口總線之間通信轉換的實現。
CAN通信總線與RS232串行口總線之間的轉換主要涉及電平轉換和幀格式轉換[1]。
在RS-232-C中,任何一條信號線的電壓均為負邏輯關系。即:邏輯“1”為-3~-15 V;邏輯“0”為+3~+15 V。而CAN通信總線采用的是“顯性”和“隱性”兩個互補的邏輯值表示“0”和“1”,其信號是以兩條信號線之間的差分電壓形式來表現的。因此,由于兩種通信總線間的電壓不相同,導致它們之間無法直接進行通信,需要相應的硬件接口電路實現電平標準轉換。
CAN通信屬于現場總線范疇,其幀格式主要由幀起始、仲裁場、控制場、數據場和CRC校驗序列組成。而RS232屬于串口總線,一般都是由2個節點實現,其每幀主要由起始位、數據位、奇偶校驗位(可省略)、停止位等組成。由于2種通信總線的幀結構存在差異,因此需要用軟件對其幀格式進行轉換處理,才能實現相互通信。
硬件接口電路主要由CAN通信接口電路與RS232串行接口電路組成[2]。其中CAN接口電路包括主控制器芯片80C51、CAN總線控制器和CAN總線收發器。而RS232接口電路則主要包括RS232串口收發接口電路。
CAN總線控制器選用Philips公司生產的SJA1000,該芯片是PCA82C200CAN控制器的替代品,而且新增加了一種PeliCAN工作模式,能夠支持CAN2.0B協議。它還支持錯誤中斷、報警限制、驗收濾波器擴展和自接收請求等功能。
CAN收發器選擇芯片82C250作為CAN控制器和物理總線間的驅動接口,可以提供對總線的差動發送能力和對CAN控制器的差動接收能力,其最高速可達1 Mb/s。
由于RS232工作電壓是5~15 V之間,而單片機51芯片的電壓是5 V,所以為了與單片機51芯片進行通信,必須對其電平進行轉換。本文選擇MAX232作為轉換芯片。MAX232內部有電壓倍增電路和轉換電路,只需5 V電源便可實現TTL電平與RS232電平的轉換,使用十分方便。
實現CAN與RS232轉換器的接口電路的原理框圖如圖1所示。其工作流程為:微控器通過數據總線對CAN控制器進行訪問和控制,實現CAN控制器的數據收發,從而實現現場控制。微控器把RS232接收到的數據寫入微控器的緩沖區中,然后經過I/O口和控制信號線傳輸到CAN控制器中,經CAN收發器發送到CAN總線上進行數據的傳輸。CAN節點向主節點傳輸的數據經CAN收發器接收,把數據寫入CAN控制器中,通過中斷信號通知微控器接收數據,數據接收后,再經由RS232發送。

圖1 硬件接口原理圖

圖2 CAN控制器初始化
CAN-RS232轉換器的軟件實現主要包括4個模塊[3]:初始化模塊、CAN接口模塊、RS232接口模塊和數據幀格式轉換模塊。其中初始化模塊主要負責微控器初始化和CAN控制器初始化以及串口初始化,CAN接口模塊主要負責CAN控制器的接收和發送程序、RS232接口模塊負責串口數據的接收和發送。整個軟件實現的工作流程為:若轉換器從RS232串口接收到數據后傳輸到微控器中,在微控器中對數據幀格式進行分析并轉換成符合CAN2.0的幀格式,微控器通過數據總線把數據傳輸到CAN控制器的發送緩沖區中,然后通過CAN發送程序把數據發送到CAN總線上進行數據的傳輸。同樣轉換器從CAN接口接收到數據首先通過CAN接收程序接收數據,然后傳輸到微控器中進行數據幀格式的分析并轉換成符合RS232幀格式的數據,經RS232接口模塊把數據傳輸到串口總線上。
初始化模塊主要包括對80C51微控器的初始化,CAN控制器SJA1000的初始化和串口的初始化。其中微控器的初始化包括對微控器的端口控制器、定時計數控制器、中斷控制器、中斷使能寄存器和串口的波特率等特殊功能寄存器進行設置。CAN控制器SJA1000的初始化主要是在上電復位后對CAN控制器的工作模式(BasicCan模式和Pelican模式)、驗收碼寄存器(ACR)、驗收碼屏蔽寄存器(AMR)、中斷使能寄存器(IER)、時鐘分頻寄存器等寄存器的設置,其中CAN初始化流程圖如圖2所示。
CAN接口模塊主要包括CAN格式數據的發送和接收任務。CAN數據的發送和接收由CAN控制器SJA1000獨立來完成的。
CAN數據發送任務過程為:微控器將CPU緩沖區中的數據寫入到CAN控制器的發送緩沖區,然后置位命令寄存器中的發送請求位就可以完成相應的發送程序。其相關的發送流程圖如圖3所示。CAN數據發送數程序關鍵代碼如下:


圖3 CAN發送程序流程圖
CAN數據的接收任務過程為:CAN控制器進入工作模式后,能夠自動接收總線上的數據,并將其放入接收緩沖區,同時產生接收中斷,微控器進入中斷后將數據從緩沖區中讀出,并釋放緩沖區。具體流程是CAN控制器接收到數據后將數據存入CAN接收緩沖區,微控器將數據從緩沖區數據寫入微控器的CPU緩沖區中,然后清除接收中斷標志位RI0釋放接收緩沖器。其相關的接收流程圖如圖4所示。
CAN數據的接收程序關鍵代碼如下:


圖4 CAN接收程序流程圖

RS232串口模塊包括RS232幀格式數據的發送和接收。本文中RS232幀格式設置如下:波特率為115 200 b/s、8位數據位、2位停止位、0位的奇偶校驗位。其中對數據的接收和發送采用中斷方式來完成,SBUF1寄存器每次只接收或發送一個字節。當軟件向SBUF1寄存器寫入一個字節時開始數據發送。UART1中斷被允許后,每次發送完成(SCON1中的TI1位被置“1”)或接收到數據字節(SCON1中的RI1位被置“1”)時將產生中斷。由于用戶可以靈活地建立自己的RS232總線通信協議,并且其程序設計易于實現,這里不再給出其程序流程圖。
本文設計的CAN-RS232轉換器結構簡單、便捷、可靠。經過實驗驗證,可以達到預期的要求。當CAN總線系統數據流量較大時,可以考慮使用其它高速率總線與其通信,這樣就能夠更好地解決速度匹配問題。
[1]丁亮.基于RS232接口接入CAN的實現[J].常州工學院學報,2008(5):48-51.
[2]張同新,戴義保,吳斌.RS232-CAN總線協議轉換器設計[J].電氣自動化,2001(4):36-37.
[3]陳大鵬,王寧會.CAN和RS232協議轉換卡的軟件設計[J].儀器儀表學報,2003(S2):311-312,316.
[4]張毅坤.單片微型計算機原理及應用[M].西安:西安電子科技大學出版社,1998.
[5]陽憲惠.現場總線技術及其應用[M].北京:清華大學出版社,1999.