1 前言
隨著通信技術(shù)的發(fā)展,CAN總線已廣泛應(yīng)用于各行各業(yè)的工業(yè)現(xiàn)場(chǎng),根據(jù)不同的需要或以主從方式,或以多主方式工作,CAN總線使用的通信介質(zhì)為雙絞線及其他電纜,傳輸速率可達(dá)1Mbps。鑒于其極高的可靠性和獨(dú)特的設(shè)計(jì)以及高速率,傳輸距離較長(zhǎng)的特點(diǎn),特別適合工業(yè)現(xiàn)場(chǎng)監(jiān)控設(shè)備的互聯(lián)。概括起來(lái),它具有如下特點(diǎn):
可建立1 024條虛擬鏈路,CAN控制器的ID號(hào)共有11位,其中1位作為優(yōu)先級(jí),其余作為數(shù)據(jù)標(biāo)識(shí)符,其主鏈路可在任意兩點(diǎn)之間或一點(diǎn)至任意多個(gè)節(jié)點(diǎn)之間建立。
數(shù)據(jù)長(zhǎng)度有兩種形式:小于8字節(jié)的數(shù)據(jù)可選用單頁(yè)P(yáng)age格式,大于8字節(jié)的數(shù)據(jù)可選用數(shù)據(jù)塊Block格式。
發(fā)送時(shí)將需要發(fā)送的數(shù)據(jù)填入發(fā)送信箱中,并在信息中置發(fā)送標(biāo)志,CAN驅(qū)動(dòng)程序循環(huán)查詢(xún)此標(biāo)志,帶有發(fā)送標(biāo)志的信箱會(huì)自動(dòng)發(fā)送出去,接受時(shí)經(jīng)硬件濾波后,從信箱中取出信箱號(hào)與本節(jié)點(diǎn)的接受箱號(hào)逐一比較,相符即把信件放入接受信箱中。
數(shù)據(jù)優(yōu)先級(jí)根據(jù)信箱號(hào)而定,信箱號(hào)越小,優(yōu)先級(jí)越高,同時(shí)還提供發(fā)送緊急數(shù)據(jù)的優(yōu)先級(jí)。
2 CAN總線系節(jié)點(diǎn)的構(gòu)成
該系統(tǒng)節(jié)點(diǎn)由CAN控制器和CAN驅(qū)動(dòng)器組成。
本文所設(shè)計(jì)的CAN總線系統(tǒng)智能節(jié)點(diǎn),采用89c51作為節(jié)點(diǎn)的微處理器,在CAN總線通信接口中,采用PHILIPS公司的SJA1000和82c250芯片,SJA1000是獨(dú)立的CAN通信控制器,82c250為高性能CAN總線收發(fā)器。圖1為總體框圖;圖2為CAN總線系統(tǒng)智能節(jié)點(diǎn)硬件電路原理圖。
圖1 總體框圖
圖2 CAN總線系統(tǒng)智能節(jié)點(diǎn)硬件電路原理圖
從圖2中可以看出電路主要由四部分構(gòu)成,微控制器89c51,獨(dú)立CAN通信控制器SJA1000,CAN總線收發(fā)器82c250和高速光電耦合器6N137。微處理器89c51負(fù)責(zé)SJA1000的初始化,通過(guò)控制SJA1000實(shí)現(xiàn)數(shù)據(jù)的接受和發(fā)送等通信任務(wù)。
硬件電路的設(shè)計(jì)并不是太困難,但有幾點(diǎn)應(yīng)引起注意:
(1) 為了增強(qiáng)CAN總線節(jié)點(diǎn)的抗干擾能力,SJA1000的TX0和RX0并不是直接與82c250的TXD和RXD相連,而是通過(guò)高速光電耦合器6N137后與82c250相連,這樣就很好地實(shí)現(xiàn)了總線上各CAN節(jié)點(diǎn)之間的電氣隔離。不過(guò)需特別說(shuō)明的是光耦部分電路所采用的兩個(gè)電源Vcc和VDD必須完全隔離,否則采用光耦也就失去了意義。
(2) 82c250與CAN總線的接口部分也采取了一定的安全和抗干擾措施。82c250的CANH和CANL引腳各自通過(guò)1個(gè)5Ω的電阻與CAN總線相連,電阻可起到一定的限流作用,保護(hù)82c250免受過(guò)流的沖擊;CANH和CANL與地之間并聯(lián)了2個(gè)30pF的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的作用;另外在兩根CAN總線接入端與地之間分別反接了一個(gè)保護(hù)二極管,當(dāng)CAN總線有較高的負(fù)電壓時(shí),通過(guò)二極管的短路可起到一定的過(guò)壓保護(hù)作用。82c250的Rs腳上與地之間的電阻Rs稱(chēng)為斜率電阻,它的取值決定了系統(tǒng)處于高速工作方式還是斜率控制方式,把該引腳直接與地相連,系統(tǒng)將處于高速工作方式,在這種方式下,為避免射頻干擾,建議使用屏蔽電纜作總線;而在波特率較低,總線較短時(shí),一般采用斜率控制方式,上升及下降的斜率取決于Rs的阻值,實(shí)驗(yàn)數(shù)據(jù)表明15~200kΩ為Rs的較理想的取值范圍,在這種方式下,可以使用平行線或雙絞線作總線。
(3) 總線兩端應(yīng)接有兩個(gè)120Ω的電阻,對(duì)于匹配總線阻抗起著相當(dāng)重要的作用,忽略掉它們,會(huì)使數(shù)據(jù)通信的抗干擾及可靠性大大降低,甚至無(wú)法通信。
3 軟件設(shè)計(jì)
CAN總線節(jié)點(diǎn)的軟件設(shè)計(jì)主要包括:CAN節(jié)點(diǎn)初始化,信息的接受和發(fā)送,熟悉這兩個(gè)方面的程序設(shè)計(jì),就能編寫(xiě)出利用CAN總線進(jìn)行通信的一般應(yīng)用程序。當(dāng)然,要將CAN總線應(yīng)用于通信任務(wù)比較復(fù)雜的系統(tǒng)中,還需詳細(xì)了解有關(guān)CAN總線錯(cuò)誤處理、總線脫離處理、接受濾波處理、波特率參數(shù)的設(shè)置和自動(dòng)檢測(cè)以及CAN總線通信距離和節(jié)點(diǎn)數(shù)的計(jì)算等方面的內(nèi)容。下面僅就前面提到的兩部分程序設(shè)計(jì)流程作個(gè)描述。
3.1 初始化子程序
SJA1000的初始化只有在復(fù)位模式下才可以進(jìn)行,初始化包括工作方式的設(shè)置,接受濾波方式的設(shè)置,接受屏蔽寄存器AMR和接受代碼寄存器ACR的設(shè)置,波特率參數(shù)設(shè)置和中斷允許寄存器IER的設(shè)置等,流程圖如圖3所示。
圖3 SJA1000的初始化流程圖
3.2 信息接受和發(fā)送子程序
流程圖如圖4所示。
4 設(shè)計(jì)中需注意的問(wèn)題
4.1 SJA1000的工作模式
SJA1000有Basicmode和Pelimode兩種工作模式,兩種模式的底層都遵守CAN協(xié)議,如數(shù)據(jù)編碼、錯(cuò)誤處理等,不同之處在于高層,如數(shù)據(jù)過(guò)濾、與MPU的接口部分等。
圖4 發(fā)送/接受中斷服務(wù)程序流程圖
SJA1000上電復(fù)位后自動(dòng)進(jìn)入Basicmode模式,在此模式下,SJA1000有復(fù)位(reset)和運(yùn)行(operating)兩種狀態(tài),在復(fù)位狀態(tài)下完成對(duì)SJA1000某些寄存器的初始化工作,上電復(fù)位,SJA1000退出總線(Bus-off)和軟件置位復(fù)位請(qǐng)求都能引起SJA1000進(jìn)入復(fù)位狀態(tài)。
4.2 總線定時(shí)寄存器BTR1和BTR0的初始化
總線定時(shí)寄存器的設(shè)置極大地影響了CAN性能的發(fā)揮,一般來(lái)說(shuō),若硬件連接無(wú)誤,通信失敗的主要原因在于總線定時(shí)寄存器的設(shè)置不當(dāng)。
4.3 接受碼寄存器和接受屏蔽寄存器的初始化
接受碼寄存器和接受屏蔽寄存器構(gòu)成硬件過(guò)濾,CAN控制節(jié)點(diǎn)通過(guò)它來(lái)決定是否接受總線上的報(bào)文,是否置CAN的接受中斷,極大的提高了系統(tǒng)的靈活性,為此,在對(duì)報(bào)文進(jìn)行編碼時(shí),需使每個(gè)節(jié)點(diǎn)所要接受的報(bào)文標(biāo)識(shí)符中有盡可能多的共同位,這樣可以減少總線上無(wú)關(guān)報(bào)文對(duì)該節(jié)點(diǎn)的干擾。
4.4 狀態(tài)寄存器的處理
可以通過(guò)CAN控制器的狀態(tài)寄存器了解數(shù)據(jù)傳輸狀況,為了保證數(shù)據(jù)的正常收發(fā),需要對(duì)狀態(tài)寄存器各狀態(tài)位作出相應(yīng)處理,這里可以采用查詢(xún)或中斷方式進(jìn)行。
4.5 SJA1000的自我測(cè)試功能
SJA1000的Pelican模式可提供自我測(cè)試功能,這種功能在進(jìn)行硬件設(shè)計(jì)時(shí)很有用,特別在只有一個(gè)CAN節(jié)點(diǎn)時(shí)也可以進(jìn)行測(cè)試。
5 CAN總線在智能儀表中的應(yīng)用及前景
現(xiàn)場(chǎng)總線技術(shù)以其獨(dú)有的技術(shù)優(yōu)勢(shì)和特點(diǎn),在現(xiàn)代分布式測(cè)量與控制技術(shù)領(lǐng)域中的應(yīng)用越來(lái)越廣泛。各種現(xiàn)場(chǎng)總線的主控制器一般都內(nèi)嵌有相當(dāng)完善的、開(kāi)放式的互連通信協(xié)議,它具有速度快、誤碼率低、開(kāi)放設(shè)計(jì)簡(jiǎn)單以及網(wǎng)絡(luò)使用維護(hù)方便等諸多特點(diǎn),是實(shí)現(xiàn)網(wǎng)絡(luò)化現(xiàn)場(chǎng)測(cè)量與控制技術(shù)的一個(gè)發(fā)展方向。但目前在許多現(xiàn)場(chǎng)已投入使用的測(cè)量與控制系統(tǒng)中,各儀器設(shè)備或裝置之間通信所使用的仍是傳統(tǒng)的RS-485或RS-422總線。在不斷投入新型現(xiàn)場(chǎng)總線系統(tǒng)的同時(shí),要在短期內(nèi)改造或淘汰那些舊系統(tǒng)是不現(xiàn)實(shí)的,但CAN總線廣泛應(yīng)用是大勢(shì)所趨,特別是在智能儀表方面的應(yīng)用中。
CAN總線具有高性能、高可靠性、高性?xún)r(jià)比、連接方便、實(shí)時(shí)性好以及獨(dú)特的設(shè)計(jì)等特點(diǎn),CAN總線廣泛應(yīng)用于控制系統(tǒng)中的各檢測(cè)和執(zhí)行機(jī)構(gòu)之間的數(shù)據(jù)通信。本文在pH測(cè)試儀的基礎(chǔ)上進(jìn)行不斷的更新,利用已經(jīng)投入的智能儀表進(jìn)一步改造,利用CAN總線負(fù)載能力大,上位機(jī)程序簡(jiǎn)單易開(kāi)發(fā),上位機(jī)界面易處理等特點(diǎn),逐步改進(jìn)智能儀表的通信,并將其逐漸推廣。而在此之前,筆者已經(jīng)進(jìn)行了pH測(cè)試儀的研究,實(shí)現(xiàn)了其在現(xiàn)場(chǎng)中的應(yīng)用。本文是在pH測(cè)試儀基礎(chǔ)上的更新,使其功能進(jìn)一步完善,實(shí)現(xiàn)網(wǎng)絡(luò)化,能夠完成現(xiàn)場(chǎng)總線在廠礦通信方面的應(yīng)用,替代RS-485等通信方式,突出現(xiàn)場(chǎng)總線在通信中易操作、成本低等優(yōu)點(diǎn),達(dá)到產(chǎn)品的實(shí)用和推廣,筆者探討的前景是逐步實(shí)現(xiàn)CAN總線網(wǎng)絡(luò)化的普及,令使用范圍擴(kuò)大化,最大限度的發(fā)揮其功效。