CAN總線(xiàn)與RS
CAN總線(xiàn)(ControllerAreaNetwork)是由德國B(niǎo)osch公司于20世紀80年代專(zhuān)門(mén)為汽車(chē)電子控制系統開(kāi)發(fā)的一種串行數據通訊協(xié)議,特別適合應用于分布式控制或實(shí)時(shí)控制領(lǐng)域。它的應用范圍遍及高速網(wǎng)絡(luò )和低本錢(qián)的分布式控制系統。CAN具有以下特點(diǎn):
本文引用地址:http://dyxdggzs.com/article/201612/329684.htm(1)無(wú)破壞的依據優(yōu)先權的仲裁;
(2)多主站點(diǎn)依據優(yōu)先級進(jìn)行總線(xiàn)訪(fǎng)問(wèn);
(3)嚴格的錯誤檢測和界定;
(4)支持遠程數據請求;
(5)借助接收濾波的多地址幀傳送;
(6)通訊介質(zhì)多樣,組合方式靈活;
(7)全系統數據兼容,系統靈活;
(8)最遠傳輸間隔為10Km(總線(xiàn)傳輸速率為5kbps),最大傳輸速率為1Mbps(總線(xiàn)傳輸間隔為40m)。
RS-485標準是美國EIA(電子產(chǎn)業(yè)聯(lián)合會(huì ))公布的串行通訊協(xié)議。它比RS-232C標準信號傳輸間隔長(cháng)、速度快、抗干擾性能好,廣泛應用于各種產(chǎn)業(yè)、樓宇、能源等領(lǐng)域。在實(shí)際應用中,很多產(chǎn)業(yè)控制設備(如PLC)都帶有RS-485接口。因此,有必要設計CAN總線(xiàn)與RS-485總線(xiàn)的通訊接口電路。
2硬件設計
整個(gè)通訊接口電路由單片機AT89C52、CAN控制器SJA1000、CAN收發(fā)器82C250、高速光電耦合器6N137和RS-485收發(fā)器MAX485組成。如圖1所示。單片機AT89C52主要完成SJA1000的初始化,及CAN總線(xiàn)和RS-485總線(xiàn)之間的數據通訊任務(wù)。SJA1000是CAN控制器82C200的替換產(chǎn)品。它主要由下列功能模塊構成:接口治理邏輯、發(fā)送緩沖器、接收緩沖器、接收過(guò)濾器、位流處理器、位時(shí)序邏輯和錯誤治理邏輯。除了與82C200兼容之外,它增加了很多新功能:PeliCAN工作模式、讀/寫(xiě)訪(fǎng)問(wèn)的錯誤計數器、標準和擴展結構信息的接收和發(fā)送、可編程的錯誤限制報警、只聽(tīng)模式和仲裁丟失中斷。單片機對SJA1000內部寄存器的控制是以訪(fǎng)問(wèn)外部寄存器的方式進(jìn)行的。CAN收發(fā)器82C250是CAN總線(xiàn)控制器和物理總線(xiàn)之間的接口,主要負責提供對總線(xiàn)的差分發(fā)送能力和對CAN控制器的差分接收能力。它的引腳8(RS)控制3種不同的工作方式的選擇:待機、斜率控制和高速。
(1)給RS接上高電平,則82C250以低電流待機方式工作;
(2)若RS通過(guò)連接電阻接地,則進(jìn)進(jìn)斜率控制方式,該方式可以通過(guò)改變電阻的阻值來(lái)調節斜率,適用于低速和較短的總線(xiàn)長(cháng)度的應用場(chǎng)合;
(3)假如RS接地,就選擇了高速工作方式。高速光電耦合器6N137實(shí)現了CAN控制器和收發(fā)器之間的電氣隔離,增強了系統的穩定性和抗干擾能力。RS-485收發(fā)器MAX485是一種差分平衡型的小功率收發(fā)器,包含一個(gè)驅動(dòng)器和一個(gè)接收器,使用單+5V電源供電,專(zhuān)門(mén)用于TTL協(xié)議(即通用于各型CPU的通訊協(xié)議)和485標準之間的相互轉換,使微控制器可以利用RS-485串行通訊協(xié)議直接進(jìn)行串行通訊。
整個(gè)轉換過(guò)程可分為:CAN總線(xiàn)轉換到RS-485總線(xiàn)和RS-485總線(xiàn)轉換到CAN總線(xiàn)。CAN總線(xiàn)轉換到RS-485總線(xiàn)的流程如下:微控制器接收到CAN總線(xiàn)節點(diǎn)發(fā)送的報文,根據CAN總線(xiàn)規定的數據格式取出報文的有用信息,然后由微控制器通過(guò)MAX485將信息發(fā)送到RS-485總線(xiàn)。而RS-485總線(xiàn)轉換到CAN總線(xiàn)則是上述流程的逆過(guò)程。

3軟件設計
軟件設計的主要任務(wù)是實(shí)現數據和控制命令在CAN總線(xiàn)網(wǎng)絡(luò )和RS-485總線(xiàn)之間的傳輸。它主要包括RS-485和CAN接口的初始化程序、報文發(fā)送和接收程序、中斷服務(wù)程序和錯誤處理程序等。其中,SJA1000的初始化程序是軟件設計中的難點(diǎn),需要完成各種工作參數的設置。其中,控制寄存器用來(lái)改變CAN控制器的行為,包括進(jìn)進(jìn)復位狀態(tài),激活不同類(lèi)型的中斷源,如接收中斷、發(fā)送中斷和數據溢出中斷等。驗收代碼寄存器和驗收屏蔽寄存器共同作用定義了能被節點(diǎn)所接收報文的條件:所收信息的標識符的相應位與驗收代碼寄存器驗收碼的相應位相等。驗收屏蔽寄存器的作用是確定驗收碼的哪些位對于驗收濾波是相關(guān)的或不相關(guān)的??偩€(xiàn)時(shí)序寄存器0定義了波特率的預設值及同步跳轉寬度;總線(xiàn)時(shí)序寄存器1則定義了位周期的長(cháng)度、采樣點(diǎn)的位置和采樣數目。輸出控制寄存器可以設置不同的輸出模式(如正常輸出模式、雙相輸出模式和時(shí)鐘輸出模式等)。時(shí)鐘分頻寄存器不僅可以控制SJA1000的輸出頻率及屏蔽CLKOUT引腳,而且還能夠對BasicCAN和PeliCAN模式進(jìn)行選擇。具體的SJA1000初始化程序流程如圖2所示。
CAN總線(xiàn)轉換到RS-485總線(xiàn)的程序如下:
CAN-RS485_TRANSITION:
MOVDPTR,#SR;狀態(tài)寄存器
MOVXA,@DPTR;
JNBACC.0,CAN_QUIT;
是否接收到信息,無(wú)數據則退出轉換程序
CAN-RS485_HANDLE:
MOVDPTR,#CANR;接收緩沖區首地址
MOVXA,@DPTR;接收幀的格式
JNBACC.6,RECEIVE_FRAME
;RTR=1則報文是遠程請求幀
LCALLTRANSMIT_DATA
;發(fā)送對方請求的數據
LJMPCAN_QUIT;退出轉換程序
RECEIVE_FRAME:MOVXA,@DPTR;
ANLA,#0FH;
ADDA,#05H
;獲得接收數據的長(cháng)度
MOVR7,A
MOVR0,#43H
;設定MCU接收數據緩沖區
DATAFRAME:MOVXA,@DPTR
;接收數據
MOV@R0,A
LCALLRS485_SEND;將有效信息通過(guò)MAX485轉發(fā)到RS-485總線(xiàn)
INCDPTR
INCR0
DJNZR7,DATAFRAME;判定接收是否結束
RECOUT:MOVDPTR,#CMR
MOVA,#04H
;開(kāi)釋接收緩沖區
MOVX@DPTR,A
CAN_QUIT:RET;退出轉換程序

4結束語(yǔ)
CAN總線(xiàn)是當前應用最為廣泛的現場(chǎng)總線(xiàn)之一,而RS-485總線(xiàn)則是常用的串行總線(xiàn),兩者之間的相互轉換具有很高的實(shí)用價(jià)值。本文設計的CAN-RS485通訊接口電路能夠很好地解決這兩種串行數據總線(xiàn)之間的相互轉換題目,并已成功應用于某地區的智能交通控制系統。
評論