近年來,隨著以太網技術的進一步發展和完善,特別是通信速率的提高和交互技術的應用,使得以太網技術應用于現場控制領域成為可能,這對工業控制網絡產生了新的影響。從目前的趨勢來看,以太網己經進入了現場控制級,但是已有的現場總線仍將繼續存在,工業以太網只能占領一定的市場。
從現實來看,以太網擴展了現有的系統,但是現場總線不可能完全被工業以太網替代,后者的潛力巨大,其應用領域一定會不斷擴大。所以,將現場總線與以太網結合,從而實現底層生產與上層管理的緊密集成,已經成為一種趨勢。CAN總線作為國際上應用最廣泛的現場總線之一,在我國也得到了很廣泛的應用,該設計以 CAN總線作為工業現場總線,實現其與以太網的互聯。
1 硬件結構
目前,對于CAN和以太網相連的嵌入式網關設計主要有兩種方法:一種是低檔MCU加接口芯片的設計方法,另一種是高檔MCU加EOS(實時多任務操作系統)再加接口芯片的設計方法。因CAN只采用了ISO/OSI參考模型的一、二層,協議相對簡單,比較適合用于低成本、速率要求不高的離散控制系統。從合理的成本和有效利用處理能力這兩方面考慮,該設計采用低檔MCU加接口芯片的方法,其硬件框圖見圖 1。
1.1 主控芯片及以太網接口模塊
根據要求,該系統選擇了性能價格比較高的Atmel公司生產的AT89C55單片機。它是面向測控對象和嵌入式應用的,所以它的體系結構以及CPU、指令系統、外圍單元電路都是按照這種要求專門設計的。它內部帶高達20 KB的FLASH程序存儲器,AT89C55完全兼容8051指令集,片上FLASH方便了使用者進行在線編程,工作速率最高可達33 MHz,256 B的內部RAM,32個可編程的I/O口,3個16位的定時/計數器,8個中斷源,支持低功耗的空閑工作模式。以太網接口選用的是RTL8019AS芯片,它是由Realtek公司生產的一種高度集成的以太網控制器,能實現以太網媒介訪問層(MAC)和物理層(PHY)的全部功能。RTL8019AS內部有兩個RAM區域:一是16 KB,地址為0x4000~0x7fff,要接收和發送數據包必須通過DMA讀寫RTL8019AS內部的16 KB的RAM,它實際上是雙端口RAM,即有兩條總線與其連接,一條總線用于RTL8019AS讀/寫或寫/讀該RAM,即本地DMA;另一條總線用于單片機讀或寫該RAM,即遠程DMA;二是32個字節,地址為0x0000~0x001F,用于存儲以太網物理地址。主控芯片和以太網接口芯片的硬件接口原理圖見圖2。值得注意的是由于以太網的包最大可以超過1 500個字節,AT89C55的片內RAM只有256個字節,因此無法存儲這么大的包,所以這里擴展了一個32 KB的外部RAM,這樣同時也能提高單片機的數據傳輸速度。
1.2 CAN接口模塊
組成CAN系統的主要器件是CAN控制器和收發器。該設計中,CAN接口模塊選用SJA1000芯片和PCA82C250芯片。SJA1000是一個獨立的CAN控制器,它是Philips公司另一個CAN控制器PCA82C200的替代產品,且增加了一種新的工作模式(Peli CAN),這種模式支持CAN 2.0B協議。SJA1000主要完成CAN的通信協議,實現報文的裝配和拆分、接收信息的過濾和校驗等。
PCA82C250是CAN控制器與物理總線之間的接口,主要用于增強系統的驅動能力。采用收發器的系統中,節點數至少可以達到110個,同時還具有降低射頻干擾(RFI)和很強的抗電磁干擾 (EMI)能力。在處理這部分電路時,有幾個地方要特別注意:
(1)晶振電路的問題。89C55和SJA1000都應該有各自獨立的晶振電路,不能夠用SJA1000的時鐘輸出信號CLKOUT來驅動單片機。
(2)復位引腳的問題。雖然SJA1000的復位是低電平,但不能通過一個非門直接連接單片機的復位引腳。一般對解決復位引腳問題有兩種方式:第一種是使用單片機的I/O引腳控制SJA的復位引腳,其好處是單片機可以完全控制SJA的復位過程;第二種是采用適當的復位芯片,為了降低成本,該設計采取的是第一種方法。
(3)RX1引腳的電位必須維持在約0.5 VCC上,否則將不能形成CAN協議所要求的邏輯電平。
(4)一定要注意電纜的終端阻抗匹配,它直接影響CAN總線是否能正常工作和網絡性能。CAN接口模塊的硬件電路圖見圖3,在PCA82C250的RS腳上接有一個斜率電阻R,可根據總線通信速度適當調整電阻的大小。
2 通信模塊軟件設計
2.1 SJA1000驅動程序的實現
SJA1000驅動程序是由SJA的初始化函數、發送函數、接收函數組成的,圖4所示為其流程圖。
(1)SJA1000的初始化。SJA1000在系統上電、硬件復位或主控制器發出復位命令后需要進行初始化,以設定它的工作模式、通信速率、輸出控制方式和標識符屏蔽格式等重要參數。CAN控制器SJA1000的初始化只能在復位模式下才能完成。程序的流程圖如圖4所示。
首先程序檢測CAN接口是否正常工作,即向SJA1000的測試寄存器寫入并讀出,校驗其結果是否一致,如果結果一致則進入復位模式進行初始化設置。在初始化的過程中,如果對某個寄存器的設置超過規定的時間還未完成,則認為初始化失敗,初始化程序自動發送錯誤信號。
(2)數據的發送與接收。SJA1000芯片有一個報文發送緩沖區和兩個報文接收緩沖區,用于CAN報文傳送。數據從CAN控制器SJA1000發送到 CAN總線首先是由CAN控制器自動完成的,發送數據程序把數據存儲區中待發送的數據取出,組成信息幀,并將主機的ID地址填人幀頭;然后將信息幀發送到 CAN控制器的發送緩沖區;最后啟動發送命令即可。信息從CAN總線到CAN接收緩沖區也是由CAN控制器自動完成的。接收程序只需從接收緩沖區讀取要接收的信息,并將其存儲在數據存儲區即可。
2.2 RTL8019AS驅動程序的實現
RTL8019AS的驅動程序和SJA的驅動程序一樣,有3種功能:芯片初始化、收包、發包。
(1)RTL8019AS的初始化。RTL8019AS的初始化過程比較復雜,但十分重要,它決定了通信過程中的一些重要參數。如設置相關工作模式的寄存器,分配和初始化接收及發送緩沖區,初始化網卡接收地址等,其流程圖見圖5所示。
(2)數據的發送與接收。因為在RTL8019AS的初始化程序中已經完成了以太網的物理地址設置,并指定了發送緩沖區起始頁面地址寄存器TPSR。此外,RTL8019AS的CRC校驗自動生成器也被使能,所以RTL8019AS的數據包發送程序相對要簡單。在數據包的發送過程中,AT89C55只要通過遠程DMA將待發送的數據包寫至RTL8019AS片內SRAM的發送緩沖區,并啟動發送過程即可。
在接收數據包時,有查詢和中斷兩種方式,鑒于AT89C55的處理能力有限,在該設計中采用查詢方式,根據判斷CURBBNRY+1,可以判斷是否收到新的數據包,如果有則通過DMA讀操作從網卡芯片RAM讀出數據。
2.3 網關協議轉換流程
嵌入式網絡接口實現兩種網絡的互連。當以太網應用層有數據要發送到CAN節點時,首先將數據發送到網關,由以太網控制器協議轉換模塊解析完整的CAN協議數據包,通過CAN控制器發送到CAN總線。反之,當CAN設備有數據要發送到用戶層時,首先將數據發送到透明網關,由CAN控制器協議模塊將完整的 CAN協議數據包存放在緩沖區,再通知主控芯片,由它調用以太網控制協議轉換模塊,將完整的 CAN協議數據包作為應用層數據封裝起來,再發送到以太網的應用層。
3 結 語
這里介紹的是一種低成本、高可靠性、快捷的CAN以太網網關的硬件、軟件設計方案,通過實際應用證明,該設計可以作為CAN總線節點的一個模塊,能夠與儀器儀表等設備相結合,使其具有網絡通信的能力,比較同類產品的設計,該設計能大大提高其性價比