基于CAN總線(xiàn)的RS-232串口設備遠程通信

發(fā)布時(shí)間:2010-6-11 16:45    發(fā)布者:techieboy
關(guān)鍵詞: CAN , RS-232 , 遠程通信
1 引言

工業(yè)設備通信通常涉及到很多硬件和軟件產(chǎn)品以及用于連通標準計算機平臺(個(gè)人計算機或工作站)和工業(yè)自動(dòng)化應用設備的協(xié)議,而且所使用設備和協(xié)議的種類(lèi)繁多。因此,大部分自動(dòng)化應用設備都希望執行簡(jiǎn)單的串行命令,并希望這些命令同個(gè)人計算機或者附加的串行端口板上的標準串行端口兼容。RS-232是目前PC機與通信工業(yè)中應用最廣泛的一種串行接口。RS-232被定義為一種在低速率串行通訊中增加通訊距離的單端標準。由于RS-232的發(fā)送端與接收端之間有公共信號地,所以它不能使用雙端信號,否則,共模噪聲會(huì )耦合到信號系統中。RS-232標準規定,其最大距離僅為15m,信號傳輸速率最高為20kbit/s。

CAN,全稱(chēng)為“Controller Area Network”,即控制器局域網(wǎng),是國際上應用最廣泛的現場(chǎng)總線(xiàn)之一,一個(gè)由CAN總線(xiàn)構成的單一網(wǎng)絡(luò )受到網(wǎng)絡(luò )硬件電氣特性的限制。CAN作為一種多主方式的串行通訊總線(xiàn),其基本設計規范要求高位速率和較高的抗電磁干擾性能,而且要能夠檢測出通訊總線(xiàn)上產(chǎn)生的任何錯誤。當信號傳輸距離達10km時(shí),CAN仍可提供高達50kbit/s的數據傳輸速率。表1為CAN總線(xiàn)上任意兩個(gè)節點(diǎn)之間最大傳輸距離與其位速率之間的對應關(guān)系。

表1 CAN總線(xiàn)系統任意兩節鼎足之勢之間的最大距離

位速率/kbps 1000 500 250 125 100
最大距離/m   40  130 270 530 620
位速率/kbps  50  20  10  5  
最大距離/m   1300 3300 6700 10000  

由此可見(jiàn),無(wú)論從實(shí)時(shí)性、適應性、靈活性,還是可靠性上來(lái)看,CAN總線(xiàn)都是一種比RS-232更為優(yōu)秀的串行總線(xiàn)。當兩臺串口設備的相距較遠,不能直接用RS-232把它們連接起來(lái)時(shí),就可以把RS-232轉換為CAN,通過(guò)CAN總線(xiàn)來(lái)實(shí)現串口設備的網(wǎng)絡(luò )互連。

但是,RS-232和CAN在電平和幀格式上都是很大的不同。具體表現如下:

RS-232標準電平采用負邏輯,規定+3V~+15V之間的任意電平為邏輯“0”電平,-3V~-15V之間的任意電平為邏輯“1”電平。而CAN信號則使用差分電壓傳送,兩條信號線(xiàn)稱(chēng)為“CAN_H”和“CAM_L”,靜態(tài)時(shí)均為2.5V左右,此時(shí)的狀態(tài)表示為邏輯“1”,也可以叫做“隱性”;用CAN_H比CAN_L高表示邏輯“0”,稱(chēng)為“顯性”。顯性時(shí),通常電壓值為:CAN_H=3.5V,CAN_L=1.5V;
RS-232串口的幀格式為:一位起始位,八位數據位,一位可編程的第九位(此位為發(fā)送和接收的地址/數據位),一位停止位。而CAN的數據幀格式為:幀信息+ID+數據(可分為標準幀和擴展幀兩種格式)。




因此,設計時(shí)就需要有一個(gè)微控制器來(lái)實(shí)現電平和幀格式等的轉換。其轉換方式如圖1所示。

2 RS-232到CAN轉換的硬件設計

在設計RS-232到CAN的轉換裝置時(shí),用單片機AT89C52作為微處理器;用SJA1000作為CAN微控制器,SJA1000中集成了CAN協(xié)議的物理層和數據鏈路層功能,可被動(dòng)局面對通信數據的幀處理;AT82C250作為CAN控制器和物理總線(xiàn)之間的接口,用于提供總線(xiàn)的差動(dòng)發(fā)送能力和CAN控制器的差動(dòng)接收能力,通過(guò)AT82C250的引腳3可選擇三種不同的工作方式(高速、斜率控制和待機)。其中引腳3接地時(shí)為高速方式;高速光隔用6N137實(shí)現,其作用是防止串入信號干擾;MAX232用來(lái)完成232電平到微控制器接口芯片TTL電平的轉換。具體的硬件接口電路參見(jiàn)SJA1000的有關(guān)資源,這里不再多做說(shuō)明。但有以下幾點(diǎn)需要注意。

(1)CAN總線(xiàn)兩端接有一個(gè)120Ω的電阻,其作用是匹配總線(xiàn)阻抗,提高數據通信的抗干擾性及可靠行。但實(shí)際上只需保證CAN網(wǎng)絡(luò )中“CAN_H”和“CAN_L”之間的跨接電阻為60Ω即可。
(2)SJA1000的20引腳RX1在不使用時(shí)可接地(具體原因見(jiàn)軟件設計),配合CDR.6的置位可使總線(xiàn)長(cháng)度大大增加。
(3)引腳TX0、TX1的接法決定了串行輸出的電平。具體關(guān)系可參考輸出控制寄存器OCR的設置。
(4)AT82C250的RS引腳與地間接有一個(gè)斜率電阻。電阻大小可根據總線(xiàn)通信速度作適當調整,一般在16kΩ~140kΩ之間。
(5)MAX232外圍需要四個(gè)電解電容C1、C2、C3、C4,這些電容也是內部電源轉換所需電容,其取值均為1μF/25V,宜選用鉭電容并且位置應用量靠近芯片,電源VCC和地之間要接一個(gè)0.1μF的去耦電容。

3 RS-232到CAN轉換的軟件設計

在微處理控制下,RS-232和CAN進(jìn)行數據交換時(shí),采用串口接收和CAN中斷方式可提高工作效率。其主程序流程圖如圖2所示。SJA1000的初始化在復位模式下才可以進(jìn)行,主要包括工作方式的設置、時(shí)鐘分頻和驗收濾波寄存器的設置、波特率參數的設置以及中斷允許寄存器的設置等。

數據能否準確傳遞還取決于波特率和流量控制,這也是軟件設計時(shí)不可忽略的地方。因此接下來(lái)主要介紹CAN波特率的設置、串口波特率的自動(dòng)檢測、串口數據流量控制。




3.1 CAN濾波率的設置

CAN協(xié)議中的要素之一是波特率。用戶(hù)可以設置位周期中的位采樣點(diǎn)位置和采樣次數,以使用戶(hù)可以自由地優(yōu)化應用網(wǎng)絡(luò )性能,但在優(yōu)化過(guò)程中,要注意位定時(shí)參數基準參考振蕩器的容差和系統中不同信號傳播延遲之間的關(guān)系。

系統的位速率fBil表示每單位時(shí)間傳輸數據位的量,即波特率fBit=1/tBit。額定的位定時(shí)由3個(gè)互不重疊的段SYNC_SEG、TSEG1和TSEG2組成,這3個(gè)時(shí)間段分別是TSYNC_SEG、TSEG1和TSEG2組成,這3個(gè)時(shí)間段分別是tSYNC_SEG、tTSEG1和tTSEG2。所以,額定位周期tBit是3個(gè)時(shí)間段的和。

tBit=tSYNC_SEG+tTSEG1+tTSEG2

位周期中這些段都用整數個(gè)基本時(shí)間單位來(lái)表示。該時(shí)間單位叫時(shí)間份額TQ,時(shí)間份額的持續時(shí)間是CAN系統時(shí)鐘的一個(gè)周期tSCL,可從振蕩器時(shí)鐘周期tCLK取得。通過(guò)編程預分頻因數(波特率預設值BRP)可以調整CAN系統時(shí)鐘。具體如下:

tSCL=BRP×2tCLK=2BPR/fCLK

對CAN位定時(shí)計算的另一個(gè)很重要的時(shí)間段是同步跳轉寬度(SJW),持續時(shí)間是tSJW。SJW段并不是位周期的一段,只是定義了在重同步事件中被增長(cháng)或縮短的位周期的最大TQ數量。此外,CAN協(xié)議還允許用戶(hù)指定位采樣模式(SAM),分別是單次采樣和三次采樣模式(在3個(gè)采樣結果中選出1個(gè))。在單次采樣模式中,采樣點(diǎn)在TESG1段的末端。而三次采樣模式比單次采樣多取兩個(gè)采樣點(diǎn),它們在TSEG1段末端的前面,之間相差一個(gè)TQ。




上面所提到的BPR、SJW、SAM、TESG1、TESG2都可由用戶(hù)通過(guò)CAN控制器的內裝中寄存器BTR0和BTR1來(lái)定義。具體如圖3所示。設置好BTR0和BTR1后,實(shí)際傳輸的波特率范圍為:

最大=1/(tBit-tSJW),最小=1/(tBit+tSJW)

3.2 串口波特率檢測

當串口設備是主機時(shí),如需檢測此時(shí)轉換裝置的串口波特率,首先可對主機的接收波特率(以9600波特為例)進(jìn)行設定,并在終端發(fā)送一個(gè)特定的字符(以回車(chē)符為例),這樣,主機根據接收到的字符信息就可以確定轉換裝置的通信波特率;剀(chē)符的ASCII值是0DH,在不同波特率下接收到的值如表2所列。

表2 不同波特率下接收的字節
波特率(bit/s) 接收字節(十六進(jìn)制) 波特率(bit/s) 接收字節(十六進(jìn)制)
1200               80                   4800          E6
1800               F0                   9600          0D
2400               78                   19200         F*

3.3 串口流控制

此處講到的“流“指的是數據流。數據在兩個(gè)串口之間的傳輸時(shí),常常會(huì )出現丟失數據的現象。由于單片機緩沖區有限,如接收數據時(shí)緩沖區已滿(mǎn),那么此時(shí)繼續發(fā)送來(lái)的數據就會(huì )丟失。而流控制能有效地解決該問(wèn)題,當接收端數據處理不過(guò)來(lái)時(shí),流控制系統就會(huì )發(fā)出“不再接收”的信號,而使發(fā)送端停止發(fā)送,直到收到“可以繼續發(fā)送”的信號再發(fā)送數據。因此流控制可以控制數據傳輸的進(jìn)程,防止數據丟失。常用的兩種流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和軟件流控制XON/XOFF(繼續/停止),下面僅就硬件流控制RTS/CTS加以說(shuō)明。

采用硬件進(jìn)行流控制時(shí),串口終端RTS、CTS接到單片機的I/O口,通過(guò)置I/O口為1或0來(lái)接收和發(fā)出起停信號。數據終端設備(如計算機)使用RTS來(lái)起始單片機發(fā)出的數據流,而單片機則用CTS來(lái)起動(dòng)和暫停來(lái)自計算機的數據流。實(shí)現這種硬件握手方式時(shí),在編程時(shí)根據接收端緩沖區的大小設置一個(gè)高位標志和一個(gè)低位標志,當緩沖區內數據量達到高位時(shí),就在接收端將CTS線(xiàn)置低(送邏輯0),而當發(fā)送端的程序檢測到CTS為低后,就停止發(fā)送數據,直到接收端緩沖區的數據量低于低位而將CTS置高為止。RTS則用來(lái)標明接收設備有沒(méi)有準確好接收數據。

3.4 CAN接收子程序

PeliCAN格式既可以發(fā)送標準幀也可以送擴展幀,利用時(shí)鐘分頻寄存器中的CDR.7可以調協(xié)CAN模式(0-BasicCAN,1-PeliCAN),接收CAN數據時(shí),可根據幀信息中的FF位來(lái)判斷是標準幀還是擴展幀,并且RTR位來(lái)判斷是遠程幀還是數據幀。以下是CAN接收子程序:

;//////////////////////////////////////////////////////////////////
;//CAN數據接收/統一成2個(gè)字節ID的幀格式//
;///////////////////////////////////////////////////////////////////////
RECAN:
MOV R0,#C_RE ;單片機內緩沖區起始地址
MOV DPTR,#RXBUF ;讀取并保存接收緩沖區的內容
MOVX A,@DPTR ;讀取CAN緩沖區的2號字節
MOV @R0,A ;保存
JB ACC.7,EFF_RE ;FF位,0-SFF,1-EFF
MOV R2,#0
SJMP SFF_RE ;ID數目不同,截取“數據字節”的位置不同
EFF_RE:MOV R2,#2
SFF_RE:MOV R2,#2
SFF_RE:
JB ACC.6,EXIT_RECAN ;RTR位判斷,1-遠程幀,則跳出
ANL A,#0FH
MOV R3,A ;這時(shí)截取中間4位是數據長(cháng)度
MOV C_NUM,A ;R3,R5中存放接收幀的長(cháng)度
RDATA0:
INC DPTR ;2個(gè)字節ID
INC R0
MOVX A,@DPTR
MOV @R0,A
INC DPTR
MOVX A,@R0,A
INC DPTR
MOVX A,@DPTR
MOV @R0,A
MOV A,R2 ;如果是EFF則跳過(guò)兩個(gè)字節ID
JZ DRATA1
INC DPTR
INC DPTR
DATA1: ;數據字節
INC DPTR
INC R0
MOVX A,@DPTR
MOV @R0,A
DJNZ R3,RDATA1
EXIT_RECAN:
RET

4 結束語(yǔ)

計算機的微型化為測控儀表的智能化提供了必要的條件,使得帶微處理器的終端設備具備更好的數字通信能力。隨著(zhù)越來(lái)越多智能終端的出現,無(wú)論是對網(wǎng)絡(luò )的結構、協(xié)議、實(shí)時(shí)性,還是適用性、靈活性、可靠性乃至成本都有了更高的要求,因此現場(chǎng)總線(xiàn)有著(zhù)很好的發(fā)展前景。CAN總線(xiàn)的幀結構擁有標識ID,這使得設備網(wǎng)絡(luò )中擁有多臺網(wǎng)絡(luò )主機成為可能,即通過(guò)網(wǎng)絡(luò )主機可以監控整個(gè)設備網(wǎng)絡(luò )的工作情況并作出相應的控制決策。本裝置目前已開(kāi)發(fā)完成,并在實(shí)際應用中取得了非常好的效果。
本文地址:http://selenalain.com/thread-12783-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页