| 1 引言 工業(yè)設(shè)備通信通常涉及到很多硬件和軟件產(chǎn)品以及用于連通標(biāo)準(zhǔn)計(jì)算機(jī)平臺(tái)(個(gè)人計(jì)算機(jī)或工作站)和工業(yè)自動(dòng)化應(yīng)用設(shè)備的協(xié)議,而且所使用設(shè)備和協(xié)議的種類繁多。因此,大部分自動(dòng)化應(yīng)用設(shè)備都希望執(zhí)行簡(jiǎn)單的串行命令,并希望這些命令同個(gè)人計(jì)算機(jī)或者附加的串行端口板上的標(biāo)準(zhǔn)串行端口兼容。RS-232是目前 PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口。RS-232被定義為一種在低速率串行通訊中增加通訊距離的單端標(biāo)準(zhǔn)。由于RS-232的發(fā)送端與接收端之間有公共信號(hào)地,所以它不能使用雙端信號(hào),否則,共模噪聲會(huì)耦合到信號(hào)系統(tǒng)中。RS-232標(biāo)準(zhǔn)規(guī)定,其最大距離僅為15m,信號(hào)傳輸速率最高為 20kbit/s。 CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一,一個(gè)由CAN總線構(gòu)成的單一網(wǎng)絡(luò)受到網(wǎng)絡(luò)硬件電氣特性的限制。CAN作為一種多主方式的串行通訊總線,其基本設(shè)計(jì)規(guī)范要求高位速率和較高的抗電磁干擾性能,而且要能夠檢測(cè)出通訊總線上產(chǎn)生的任何錯(cuò)誤。當(dāng)信號(hào)傳輸距離達(dá)10km時(shí), CAN仍可提供高達(dá)50kbit/s的數(shù)據(jù)傳輸速率。表1為CAN總線上任意兩個(gè)節(jié)點(diǎn)之間最大傳輸距離與其位速率之間的對(duì)應(yīng)關(guān)系。 表1 CAN總線系統(tǒng)任意兩節(jié)鼎足之勢(shì)之間的最大距離  點(diǎn)擊看原圖 由此可見(jiàn),無(wú)論從實(shí)時(shí)性、適應(yīng)性、靈活性,還是可靠性上來(lái)看,CAN總線都是一種比RS-232更為優(yōu)秀的串行總線。當(dāng)兩臺(tái)串口設(shè)備的相距較遠(yuǎn),不能直接用RS-232把它們連接起來(lái)時(shí),就可以把RS-232轉(zhuǎn)換為CAN,通過(guò)CAN總線來(lái)實(shí)現(xiàn)串口設(shè)備的網(wǎng)絡(luò)互連。 但是,RS-232和CAN在電平和幀格式上都是很大的不同。具體表現(xiàn)如下: RS -232標(biāo)準(zhǔn)電平采用負(fù)邏輯,規(guī)定+3V~+15V之間的任意電平為邏輯“0”電平,-3V~-15V之間的任意電平為邏輯“1”電平。而CAN信號(hào)則使用差分電壓傳送,兩條信號(hào)線稱為“CAN_H”和“CAM_L”,靜態(tài)時(shí)均為2.5V左右,此時(shí)的狀態(tài)表示為邏輯“1”,也可以叫做“隱性”;用 CAN_H比CAN_L高表示邏輯“0”,稱為“顯性”。顯性時(shí),通常電壓值為:CAN_H=3.5V,CAN_L=1.5V; RS-232串口的幀格式為:一位起始位,八位數(shù)據(jù)位,一位可編程的第九位(此位為發(fā)送和接收的地址/數(shù)據(jù)位),一位停止位。而CAN的數(shù)據(jù)幀格式為:幀信息+ID+數(shù)據(jù)(可分為標(biāo)準(zhǔn)幀和擴(kuò)展幀兩種格式)。  因此,設(shè)計(jì)時(shí)就需要有一個(gè)微控制器來(lái)實(shí)現(xiàn)電平和幀格式等的轉(zhuǎn)換。其轉(zhuǎn)換方式如圖1所示。 2 RS-232到CAN轉(zhuǎn)換的硬件設(shè)計(jì) 在設(shè)計(jì)RS-232到CAN的轉(zhuǎn)換裝置時(shí),用單片機(jī)AT89C52作為微處理器;用SJA1000作為CAN微控制器,SJA1000中集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可被動(dòng)局面對(duì)通信數(shù)據(jù)的幀處理 ;AT82C250作為CAN控制器和物理總線之間的接口,用于提供總線的差動(dòng)發(fā)送能力和CAN控制器的差動(dòng)接收能力,通過(guò)AT82C250的引腳3可選擇三種不同的工作方式(高速、斜率控制和待機(jī))。其中引腳3接地時(shí)為高速方式;高速光隔用 6N137實(shí)現(xiàn),其作用是防止串入信號(hào)干擾;MAX232用來(lái)完成232電平到微控制器接口芯片TTL電平的轉(zhuǎn)換。具體的硬件接口電路參見(jiàn)SJA1000 的有關(guān)資源,這里不再多做說(shuō)明。但有以下幾點(diǎn)需要注意。 (1)CAN總線兩端接有一個(gè)120Ω的電阻,其作用是匹配總線阻抗,提高數(shù)據(jù)通信的抗干擾性及可靠行。但實(shí)際上只需保證CAN網(wǎng)絡(luò)中“CAN_H”和“CAN_L”之間的跨接電阻為60Ω即可。 (2)SJA1000的20引腳RX1在不使用時(shí)可接地(具體原因見(jiàn)軟件設(shè)計(jì)),配合CDR.6的置位可使總線長(zhǎng)度大大增加。 (3)引腳TX0、TX1的接法決定了串行輸出的電平。具體關(guān)系可參考輸出控制寄存器OCR的設(shè)置。 (4)AT82C250的RS引腳與地間接有一個(gè)斜率電阻。電阻大小可根據(jù)總線通信速度作適當(dāng)調(diào)整,一般在16kΩ~140kΩ之間。 (5)MAX232外圍需要四個(gè)電解電容C1、C2、C3、C4,這些電容也是內(nèi)部電源轉(zhuǎn)換所需電容,其取值均為1μF/25V,宜選用鉭電容并且位置應(yīng)用量靠近芯片,電源VCC和地之間要接一個(gè)0.1μF的去耦電容。 3 RS-232到CAN轉(zhuǎn)換的軟件設(shè)計(jì) 在微處理控制下,RS-232和CAN進(jìn)行數(shù)據(jù)交換時(shí),采用串口接收和CAN中斷方式可提高工作效率。其主程序流程圖如圖2所示。SJA1000的初始化在復(fù)位模式下才可以進(jìn)行,主要包括工作方式的設(shè)置、時(shí)鐘分頻和驗(yàn)收濾波寄存器的設(shè)置、波特率參數(shù)的設(shè)置以及中斷允許寄存器的設(shè)置等。 數(shù)據(jù)能否準(zhǔn)確傳遞還取決于波特率和流量控制,這也是軟件設(shè)計(jì)時(shí)不可忽略的地方。因此接下來(lái)主要介紹CAN波特率的設(shè)置、串口波特率的自動(dòng)檢測(cè)、串口數(shù)據(jù)流量控制。  3.1 CAN濾波率的設(shè)置 CAN協(xié)議中的要素之一是波特率。用戶可以設(shè)置位周期中的位采樣點(diǎn)位置和采樣次數(shù),以使用戶可以自由地優(yōu)化應(yīng)用網(wǎng)絡(luò)性能,但在優(yōu)化過(guò)程中,要注意位定時(shí)參數(shù)基準(zhǔn)參考振蕩器的容差和系統(tǒng)中不同信號(hào)傳播延遲之間的關(guān)系。 系統(tǒng)的位速率fBil表示每單位時(shí)間傳輸數(shù)據(jù)位的量,即波特率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 位周期中這些段都用整數(shù)個(gè)基本時(shí)間單位來(lái)表示。該時(shí)間單位叫時(shí)間份額TQ,時(shí)間份額的持續(xù)時(shí)間是CAN系統(tǒng)時(shí)鐘的一個(gè)周期tS |