周述良
(成都電子機(jī)械高等專科學(xué)校 通信工程系,成都 610071)
CAN總線(Controller Area Network,控制器局域網(wǎng)絡(luò)總線)屬于串行通信網(wǎng)絡(luò),早期主要應(yīng)用在汽車電子網(wǎng)絡(luò)通信中。與一般的通信總線相比,CAN總線采用了許多新技術(shù)和獨(dú)特的設(shè)計(jì),其數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性,因此越來越受到開發(fā)者的重視,并廣泛應(yīng)用在諸多通信網(wǎng)絡(luò)。RS232作為標(biāo)準(zhǔn)的計(jì)算機(jī)串行接口已被廣泛使用,但由于兩者的總線結(jié)構(gòu)、通信協(xié)議及傳輸特點(diǎn)各不相同,給不同設(shè)備之間的連接帶來了不便。因此,如何以最簡(jiǎn)單的方式實(shí)現(xiàn)CAN接口與RS232串行口的通信就成為工程實(shí)踐中一個(gè)不可回避的問題。本文主要介紹CAN通信總線與RS232串行口總線之間通信轉(zhuǎn)換的實(shí)現(xiàn)。
CAN通信總線與RS232串行口總線之間的轉(zhuǎn)換主要涉及電平轉(zhuǎn)換和幀格式轉(zhuǎn)換[1]。
在RS-232-C中,任何一條信號(hào)線的電壓均為負(fù)邏輯關(guān)系。即:邏輯“1”為-3~-15 V;邏輯“0”為+3~+15 V。而CAN通信總線采用的是“顯性”和“隱性”兩個(gè)互補(bǔ)的邏輯值表示“0”和“1”,其信號(hào)是以兩條信號(hào)線之間的差分電壓形式來表現(xiàn)的。因此,由于兩種通信總線間的電壓不相同,導(dǎo)致它們之間無法直接進(jìn)行通信,需要相應(yīng)的硬件接口電路實(shí)現(xiàn)電平標(biāo)準(zhǔn)轉(zhuǎn)換。
CAN通信屬于現(xiàn)場(chǎng)總線范疇,其幀格式主要由幀起始、仲裁場(chǎng)、控制場(chǎng)、數(shù)據(jù)場(chǎng)和CRC校驗(yàn)序列組成。而RS232屬于串口總線,一般都是由2個(gè)節(jié)點(diǎn)實(shí)現(xiàn),其每幀主要由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位(可省略)、停止位等組成。由于2種通信總線的幀結(jié)構(gòu)存在差異,因此需要用軟件對(duì)其幀格式進(jìn)行轉(zhuǎn)換處理,才能實(shí)現(xiàn)相互通信。
硬件接口電路主要由CAN通信接口電路與RS232串行接口電路組成[2]。其中CAN接口電路包括主控制器芯片80C51、CAN總線控制器和CAN總線收發(fā)器。而RS232接口電路則主要包括RS232串口收發(fā)接口電路。
CAN總線控制器選用Philips公司生產(chǎn)的SJA1000,該芯片是PCA82C200CAN控制器的替代品,而且新增加了一種PeliCAN工作模式,能夠支持CAN2.0B協(xié)議。它還支持錯(cuò)誤中斷、報(bào)警限制、驗(yàn)收濾波器擴(kuò)展和自接收請(qǐng)求等功能。
CAN收發(fā)器選擇芯片82C250作為CAN控制器和物理總線間的驅(qū)動(dòng)接口,可以提供對(duì)總線的差動(dòng)發(fā)送能力和對(duì)CAN控制器的差動(dòng)接收能力,其最高速可達(dá)1 Mb/s。
由于RS232工作電壓是5~15 V之間,而單片機(jī)51芯片的電壓是5 V,所以為了與單片機(jī)51芯片進(jìn)行通信,必須對(duì)其電平進(jìn)行轉(zhuǎn)換。本文選擇MAX232作為轉(zhuǎn)換芯片。MAX232內(nèi)部有電壓倍增電路和轉(zhuǎn)換電路,只需5 V電源便可實(shí)現(xiàn)TTL電平與RS232電平的轉(zhuǎn)換,使用十分方便。
實(shí)現(xiàn)CAN與RS232轉(zhuǎn)換器的接口電路的原理框圖如圖1所示。其工作流程為:微控器通過數(shù)據(jù)總線對(duì)CAN控制器進(jìn)行訪問和控制,實(shí)現(xiàn)CAN控制器的數(shù)據(jù)收發(fā),從而實(shí)現(xiàn)現(xiàn)場(chǎng)控制。微控器把RS232接收到的數(shù)據(jù)寫入微控器的緩沖區(qū)中,然后經(jīng)過I/O口和控制信號(hào)線傳輸?shù)紺AN控制器中,經(jīng)CAN收發(fā)器發(fā)送到CAN總線上進(jìn)行數(shù)據(jù)的傳輸。CAN節(jié)點(diǎn)向主節(jié)點(diǎn)傳輸?shù)臄?shù)據(jù)經(jīng)CAN收發(fā)器接收,把數(shù)據(jù)寫入CAN控制器中,通過中斷信號(hào)通知微控器接收數(shù)據(jù),數(shù)據(jù)接收后,再經(jīng)由RS232發(fā)送。
圖1 硬件接口原理圖
圖2 CAN控制器初始化
CAN-RS232轉(zhuǎn)換器的軟件實(shí)現(xiàn)主要包括4個(gè)模塊[3]:初始化模塊、CAN接口模塊、RS232接口模塊和數(shù)據(jù)幀格式轉(zhuǎn)換模塊。其中初始化模塊主要負(fù)責(zé)微控器初始化和CAN控制器初始化以及串口初始化,CAN接口模塊主要負(fù)責(zé)CAN控制器的接收和發(fā)送程序、RS232接口模塊負(fù)責(zé)串口數(shù)據(jù)的接收和發(fā)送。整個(gè)軟件實(shí)現(xiàn)的工作流程為:若轉(zhuǎn)換器從RS232串口接收到數(shù)據(jù)后傳輸?shù)轿⒖仄髦?,在微控器中?duì)數(shù)據(jù)幀格式進(jìn)行分析并轉(zhuǎn)換成符合CAN2.0的幀格式,微控器通過數(shù)據(jù)總線把數(shù)據(jù)傳輸?shù)紺AN控制器的發(fā)送緩沖區(qū)中,然后通過CAN發(fā)送程序把數(shù)據(jù)發(fā)送到CAN總線上進(jìn)行數(shù)據(jù)的傳輸。同樣轉(zhuǎn)換器從CAN接口接收到數(shù)據(jù)首先通過CAN接收程序接收數(shù)據(jù),然后傳輸?shù)轿⒖仄髦羞M(jìn)行數(shù)據(jù)幀格式的分析并轉(zhuǎn)換成符合RS232幀格式的數(shù)據(jù),經(jīng)RS232接口模塊把數(shù)據(jù)傳輸?shù)酱诳偩€上。
初始化模塊主要包括對(duì)80C51微控器的初始化,CAN控制器SJA1000的初始化和串口的初始化。其中微控器的初始化包括對(duì)微控器的端口控制器、定時(shí)計(jì)數(shù)控制器、中斷控制器、中斷使能寄存器和串口的波特率等特殊功能寄存器進(jìn)行設(shè)置。CAN控制器SJA1000的初始化主要是在上電復(fù)位后對(duì)CAN控制器的工作模式(BasicCan模式和Pelican模式)、驗(yàn)收碼寄存器(ACR)、驗(yàn)收碼屏蔽寄存器(AMR)、中斷使能寄存器(IER)、時(shí)鐘分頻寄存器等寄存器的設(shè)置,其中CAN初始化流程圖如圖2所示。
CAN接口模塊主要包括CAN格式數(shù)據(jù)的發(fā)送和接收任務(wù)。CAN數(shù)據(jù)的發(fā)送和接收由CAN控制器SJA1000獨(dú)立來完成的。
CAN數(shù)據(jù)發(fā)送任務(wù)過程為:微控器將CPU緩沖區(qū)中的數(shù)據(jù)寫入到CAN控制器的發(fā)送緩沖區(qū),然后置位命令寄存器中的發(fā)送請(qǐng)求位就可以完成相應(yīng)的發(fā)送程序。其相關(guān)的發(fā)送流程圖如圖3所示。CAN數(shù)據(jù)發(fā)送數(shù)程序關(guān)鍵代碼如下:
圖3 CAN發(fā)送程序流程圖
CAN數(shù)據(jù)的接收任務(wù)過程為:CAN控制器進(jìn)入工作模式后,能夠自動(dòng)接收總線上的數(shù)據(jù),并將其放入接收緩沖區(qū),同時(shí)產(chǎn)生接收中斷,微控器進(jìn)入中斷后將數(shù)據(jù)從緩沖區(qū)中讀出,并釋放緩沖區(qū)。具體流程是CAN控制器接收到數(shù)據(jù)后將數(shù)據(jù)存入CAN接收緩沖區(qū),微控器將數(shù)據(jù)從緩沖區(qū)數(shù)據(jù)寫入微控器的CPU緩沖區(qū)中,然后清除接收中斷標(biāo)志位RI0釋放接收緩沖器。其相關(guān)的接收流程圖如圖4所示。
CAN數(shù)據(jù)的接收程序關(guān)鍵代碼如下:
圖4 CAN接收程序流程圖
RS232串口模塊包括RS232幀格式數(shù)據(jù)的發(fā)送和接收。本文中RS232幀格式設(shè)置如下:波特率為115 200 b/s、8位數(shù)據(jù)位、2位停止位、0位的奇偶校驗(yàn)位。其中對(duì)數(shù)據(jù)的接收和發(fā)送采用中斷方式來完成,SBUF1寄存器每次只接收或發(fā)送一個(gè)字節(jié)。當(dāng)軟件向SBUF1寄存器寫入一個(gè)字節(jié)時(shí)開始數(shù)據(jù)發(fā)送。UART1中斷被允許后,每次發(fā)送完成(SCON1中的TI1位被置“1”)或接收到數(shù)據(jù)字節(jié)(SCON1中的RI1位被置“1”)時(shí)將產(chǎn)生中斷。由于用戶可以靈活地建立自己的RS232總線通信協(xié)議,并且其程序設(shè)計(jì)易于實(shí)現(xiàn),這里不再給出其程序流程圖。
本文設(shè)計(jì)的CAN-RS232轉(zhuǎn)換器結(jié)構(gòu)簡(jiǎn)單、便捷、可靠。經(jīng)過實(shí)驗(yàn)驗(yàn)證,可以達(dá)到預(yù)期的要求。當(dāng)CAN總線系統(tǒng)數(shù)據(jù)流量較大時(shí),可以考慮使用其它高速率總線與其通信,這樣就能夠更好地解決速度匹配問題。
[1]丁亮.基于RS232接口接入CAN的實(shí)現(xiàn)[J].常州工學(xué)院學(xué)報(bào),2008(5):48-51.
[2]張同新,戴義保,吳斌.RS232-CAN總線協(xié)議轉(zhuǎn)換器設(shè)計(jì)[J].電氣自動(dòng)化,2001(4):36-37.
[3]陳大鵬,王寧會(huì).CAN和RS232協(xié)議轉(zhuǎn)換卡的軟件設(shè)計(jì)[J].儀器儀表學(xué)報(bào),2003(S2):311-312,316.
[4]張毅坤.單片微型計(jì)算機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,1998.
[5]陽憲惠.現(xiàn)場(chǎng)總線技術(shù)及其應(yīng)用[M].北京:清華大學(xué)出版社,1999.