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