鳳 雷,陳 帥,吳家順,張博亞
(1.哈爾濱工業大學,哈爾濱 150001;2.中國艦船研究設計中心,武漢 430000;3.火箭軍裝備部駐哈爾濱地區軍事代表室,哈爾濱 150001)
控制器局域網(Controller Area Network,CAN)總線是由德國汽車系統供應商Robert Bosch于19世紀80年代中期開發的一種串行通信總線網絡[1],憑借著較高的性能,該總線吸引了越來越多的關注。由于其成本低、實時處理能力強、在強電磁干擾環境下工作可靠[2],其應用范圍已從汽車電子控制擴展到工業自動化、交通運輸、醫療設備、樓宇自動化等工業控制領域[3-4]。如今,CAN總線已通過國際標準(ISO 11898)認證,并成為了最有前途的現場總線之一[5]。
隨著CAN總線系統復雜程度越來越高,總線節點不斷增加,通信負荷不斷加重,采用單通道CAN總線通信難以滿足實時性的要求[6-7]。除此之外,為了滿足對通信可靠性和容錯性的日益嚴格的要求,可行的技術手段之一就是采用冗余通信網絡,而該網絡通常是以多通道通信技術為基礎的[8-9]。當一個CAN總線節點具有多個通道時,用戶可以更方便的進行冗余設計;另一方面,當數據傳輸比較繁忙時,多個通道可以分擔通信負荷。因此,多通道CAN總線通信具有一定的必要性和良好的應用前景。本文設計了一種CPCI四通道隔離CAN總線通訊模塊,該模塊不僅成本低、集成度高,而且具有良好的實時性、可靠性和容錯性。
設計的CPCI四通道CAN總線通信模塊作為外圍功能模塊插在CPCI機箱中,可構成如圖1所示的CPCI總線系統結構。四通道CAN總線通訊模塊作為節點連接外部CAN總線,CPCI控制器運行Windows操作系統,應用程序通過調用模塊函數庫中的接口函數實現對四通道CAN總線通訊模塊通信功能的控制。在四通道CAN總線通訊模塊的設計過程中,需要考慮CPCI總線接口和四通道CAN總線接口的實現方式。

圖1 CPCI總線系統結構
CPCI總線接口用于和主機進行數據交互,現如今有兩種主流的實現方式:
1)專用接口芯片:例如PLX公司的PCI9054和PCI9056。使用這些芯片的優點是可靠性高,缺點是可能會造成一定的資源浪費,并且缺乏設計靈活性。
2)專用IP核:使用IP核的優點是靈活性好,開發周期短;缺點是IP核的價格相對較高,例如,Xilinx的LogiCore,Altera的MegaCore。
CAN接口作為連接處理器和CAN總線的橋梁,主要由符合CAN總線協議規范的控制器和收發器組成。其中,CAN控制器用于控制節點的數據通信,完成收發報文與符合規范的CAN幀間的轉換;而CAN收發器的主要功能是完成控制器邏輯電平和總線差分電平間的轉換,實現物理層功能。
現如今CAN控制器有3種主流的實現方式:
1)獨立型CAN總線控制器芯片:常見的有NXP公司的SJA1000,該控制器發展時間長,產品性能好,技術成熟,但在多通道設計中,其具有集成度低的缺點。
2)集成有CAN總線控制器的單片機:這種方式在一定程度上提高了集成度和可靠性,但軟件程序可移植性差,而且單片機更新換代速度快,產品的生命周期無法得到保障。
3)CAN IP核:采用IP核可以大大提高模塊的集成度,降低系統功耗,提高產品的綜合性能,但核的價格普遍比較昂貴。
如今市場上有兩種類型的CAN收發器可供選擇:
1)非隔離收發器:常見的有NXP公司的TJA1050。為了增強節點的抗干擾能力,這種收發器在實現電氣隔離時,并不是直接和CAN控制器相連,而是在兩者之間加上高速光電耦合器件來實現電氣隔離,與此同時,還必須在光耦的兩端加上隔離的電源來保證光電耦合的有效性,這就需要設計額外的隔離電源模塊,增加了設計的復雜性。
2)隔離收發器:常用的隔離收發器有ZLG公司的CTM1051和AD公司的ADM3052/3/4系列,此類芯片通常內置有隔離電源轉換、信號隔離等電路,具備較高集成度和可靠性,減少了收發器外部輔助模塊的設計工作。
在實際設計的過程中,需要根據實際情況例如實現難度、成本和板卡尺寸等限制條件來選擇CPCI接口、CAN控制器和CAN收發器的實現方式。
硬件設計包括硬件電路設計和固件設計,下面分別介紹這兩個方面的設計工作。
根據設計指標要求,該模塊應設計為PCI總線3U尺寸的單槽儀器模塊,實現四通道CAN總線通訊接口,符合CAN 2.0B版本規范,波特率最高1Mbps,CAN總線接口電路可實現電氣隔離。綜合考慮成本、集成度、實現難度等因素,本次設計選擇PCI IP核來實現CPCI接口,CAN IP核來實現CAN總線控制器,ZLG公司的CTM1051來作為CAN總線收發器。硬件電路結構如圖2所示。硬件電路這部分主要包括以FPGA為核心的最小系統的外圍電路設計和四通道CAN總線接口設計。

圖2 四通道CAN通訊模塊的硬件電路結構
1) PCI IP核:使用Altera的開發工具Quartus Ⅱ提供的PCI核,并根據價格、I/O資源和邏輯資源等條件來選擇Altera的FPGA產品。通過在Quartus Ⅱ中建立相關工程,得到了該設計的整體資源占用情況,考慮到實驗室的庫存,最終選擇了Cyclone系列的FPGA EP1C12Q240C8,這款FPGA具有12 060個邏輯單元、240個管腳和239 616位的存儲,在滿足設計要求的同時可以大大降低設計的成本。
2) CAN IP核:使用開源平臺OpenCores提供的CAN總線IP核[10],這樣一來可以節省成本。然而,正如OpenCores網站的bugtracker頁中所報告的那樣,該內核中仍然存在著一些bug。在文獻[11]中,作者通過搭建基于UVM的驗證平臺并采用適當的驗證策略對該內核進行了驗證,并發現了其中存在的一些問題,解決了發現的問題后,成功通過了回歸測試。根據給出的功能覆蓋率和代碼覆蓋率可知修改后的IP核是可以使用的,可用于實現CAN總線控制器。
3) CAN收發器:為了實現電氣隔離并提高板卡集成度,決定采用CAN隔離收發器,常見的例如ZLG公司的CTM1051和AD公司的ADM3053,為了進一步節約成本,最終選用國產芯片CTM1051來作為CAN收發器。
固件部分主要是實現PCI總線接口和CAN總線接口并完成兩者之間的連接,其在SOPC Builder中的連接如圖3所示。

圖3 固件連接框圖
1) 時鐘:該模塊使用33 MHz和16 MHz兩個時鐘,其中33 MHz來自機箱背板,提供給PCI總線和Avalon總線使用;16 MHz時鐘來自外部晶振,提供給CAN總線IP核使用。
2) PCI總線IP核:采用的是SOPC Builder中自帶的PCI總線IP核。在調用PCI總線IP核之前,需要正確設置該IP核的相關屬性。
3) CAN總線IP核:采用OpenCores開源平臺提供的CAN IP核來實現CAN控制器。為了解決IP核中存在的一些問題,其源代碼已經經過了修改。
4) 中斷處理:功能是把來自于四路CAN總線的中斷信號統一連接到本地Avalon總線的中斷線上。
為了實現四通道CAN總線通訊功能,需要在硬件設計的基礎上進行相應的軟件設計。首先,使用NI-VISA提供的工具VISA Driver Development Wizard來生成設備驅動程序,這個過程包括填寫廠家代碼和模塊序列號、生成中斷程序等操作。接下來介紹在Windows操作系統下利用LabWindows/CVI進行儀器驅動程序和應用程序設計的過程。
根據VPP儀器驅動程序內部設計模型的要求,設計得到了該模塊的函數樹,如圖4所示。在參考文獻[12]中提到的容錯冗余就可以通過圖4中所示的儀器驅動程序來實現。

圖4 函數樹
本文主要介紹使用儀器驅動程序設計的用于CAN總線通訊的3個主要程序。
1) CAN通道初始化程序:通過配置CAN控制器的相關寄存器為后續數據傳輸做準備,流程圖如圖5所示。首先設置模式寄存器為復位模式,隨后依次對CAN控制器中的多個寄存器進行配置,分別完成時鐘分頻器、濾波模式、驗證和屏蔽碼、中斷使能以及波特率等屬性的設置,最后進入工作模式并注冊開啟中斷[13]。通過以上步驟實現CAN通道初始化后,即可等待進行報文接收或發送操作。

圖5 通道初始化程序流程圖
2) CAN報文發送程序:CAN報文發送程序負責把報文發送到CAN總線上。報文發送之前得先讀取CAN狀態寄存器的值,只有在滿足總線空閑、上一次報文發送完成和CPU可以向發送緩沖器寫數據的條件下,才能將CAN報文結構體里設置的信息寫到發送緩沖區并發送,發送每幀報文后,發送緩沖區都會自動清空,以備下一個要發送的報文。其流程圖如圖6所示。

圖6 報文發送程序流程圖
3) CAN報文接收程序:CAN報文接收程序采用中斷方式實現,負責接收總線上其他CAN節點發來的數據,流程圖如圖7所示。CAN控制器完成數據接收后會產生相應中斷并跳轉到中斷服務程序,在中斷服務程序中首先關閉中斷,然后訪問中斷狀態寄存器判斷當前中斷類型,如果不是接收中斷則需執行其他中斷處理;否則讀取接收緩沖區中緩存的CAN總線報文,讀取完成后釋放緩沖區用于下一次數據接收,最后重新開啟中斷并退出中斷服務程序[13]。

圖7 報文接收程序流程圖
實際應用中,由于數據量大,在數據傳輸的過程中經常會出現數據丟失。為了盡量避免這種情況發生,就需要進行數據緩存。常用的方法有兩種:
1) 使用片上存儲器:例如SRAM、DRAM等。通過編寫Verilog代碼將片上存儲器變成FIFO。讀取的數據直接存儲在FIFO中,然后主機通過CPCI接口從FIFO中讀取數據。這樣可以節省計算機的存儲資源,但是實現起來比較困難,并且不利于集成度的提高。
2) 使用計算機的存儲器:在主機中,一部分物理內存可以通過C語言代碼實現位FIFO。讀取的數據首先通過CPCI接口存儲在FIFO中,然后顯示在軟面板上。這種方式實現起來比較容易,但是會消耗一部分計算機內存資源。
由于使用的CPCI機箱的嵌入式控制器具有足夠的內存資源,為了縮短開發周期并提高集成度,最終采用第二種方式來進行數據緩存,實際設計的緩存大小為130 000幀。
軟面板主要通過調用模塊的儀器驅動程序來實現UI功能,例如初始化、消息發送和消息接收等。除此之外,為了便于人機交互,還設計了數據的實時顯示和數據保存功能。設計的軟面板如圖8所示。

圖8 軟面板
測試的目的是為了驗證模塊各項功能的正確性。為此,搭建了如圖9所示的測試平臺。在測試平臺中,設計的四通道CAN總線通訊模塊作為一個外圍模塊插在CPCI機箱中,采用ZLG公司的CAN總線分析儀CANScope[14-16]和配套的模擬信號測試擴展板CANStressZ對該模塊進行相關測試。CANScope和計算機之間通過USB連接,在計算機中安裝配套軟件CANScope來控制分析儀執行相關操作和測試。

圖9 測試平臺結構
在本次測試中,測試了該模塊的一些重要性能指標。除此之外,還測試了模塊在一些誤操作或人為干擾等條件下的工作情況,本文將主要介紹采樣點測試、位寬容忍度測試、短路測試和開路測試。
信號位采樣點是指CAN節點識別一個電平邏輯的位置。一般CAN節點都是采用一次采樣,也就是一個位采樣一次。由于CAN電平在變化的時候,都會出現抖動等“反射現象”,所以為了保證采樣準確,采樣點位置都在一個位的50%以后的區域,因為這是電平已經趨于靜態,采樣的邏輯值錯誤率也就比較低。
但采樣點的位置也不是越往后越好,當超過95%時,如果有通訊節點間有位寬偏差,就很容易發生錯誤。所以CANOPEN國際組織(CANOPEN International Agency,CIA)規定采樣點推薦值為87.5%。
在多節點通信中,如果采樣點適應范圍無交集,會導致CAN重同步失敗,通訊失敗率增加,所以測試每個節點的采樣點范圍,對于設備兼容性和系統穩定性有著重要意義。
根據CANScope的用戶手冊可得采樣點位置的評價標準,如表1所示。

表1 采樣點位置評價
通過CANScope軟件的采樣點測試功能,得到了該模塊的采樣點測試結果,如圖10所示,箭頭區域是采樣點的適用范圍。可以看出,該模塊的采樣點特征值為75%,采樣點適應范圍為70%~80%,也就是說,只有當其他節點的采樣點在此范圍內時,它們才能與該模塊通信。結合表1中的評價標準可知,該模塊具有較好的兼容性。

圖10 采樣點測試結果
波特率就是信號位的最小脈寬,是保證CAN總線正常通訊的基礎。波特率不匹配或者波特率存在偏差會導致CAN節點對總線信號的識別錯誤,造成總線通訊異常或者無法通訊。因此在對任何CAN節點進行測試標定時,第一步都需要進行信號的位寬度和波特率適應范圍的測試,標定出被測試節點的位寬度和波特率適應范圍,保證出廠后可以兼容所有的網絡。
在測量波特率適應范圍時,該模塊不主動發送數據,通過軟件的位寬容忍度測試功能來控制CANScope發送測試報文,得到該模塊在常用的1 000 kbps下的位寬容忍度測試結果如圖11所示。

圖11 容忍度測試結果
位寬度和波特率適應范圍的測試,體現了一個CAN節點波特率的準確性和適應性,描述了節點在溫度變化、網絡其他節點波特率偏差情況下的兼容能力。根據各大汽車廠商的標準,位寬容忍度范圍≥±3%即可認為該節點的位寬容忍度測試達標,因此,根據上述測試結果可知該模塊的位寬容忍度指標已經達標。
在CANScope軟件中,可以通過配置CANStressZ擴展板來讓CAN網絡處于短路狀態,然后讓被測模塊發送數據,示波器窗口顯示的波形如圖12所示。可以看到波形已經差到無法完成正常的數據通信。在短路狀態被解除后,可以得到正常數據傳輸時的波形如圖13所示。圖13是軟件CANWave窗口顯示的波形,包含了差分電平、邏輯電平以及對報文的解析。

圖12 短路測試結果

圖13 正常通信CANWave窗口波形
在CANScope軟件中,也可以通過配置CANStressZ擴展板來讓CAN網絡處于斷路狀態。然后,待測模塊發送數據,得到的波形如圖14所示。波形同樣已經無法完成正常的數據通信。在解除斷路狀態后,又可以恢復圖13中的正常數據傳輸時的波形。

圖14 斷路測試結果
除了上述測試外,為了測試模塊在長時間工作條件下的穩定性,還進行了相關實驗:采用擴展遠程幀,數據內容固定,幀ID逐幀遞增。被測模塊每50 ms發送一幀數據,與此同時,CANScope也每50 ms發送一幀數據,連續工作三小時。經過多次反復實驗,都沒有出現數據錯誤或丟失現象,表明了模塊具有長時間工作的能力。
所有的測試可以表明本文設計的四通道隔離CAN總線通訊模塊可以實現CAN 2.0B規范所規定的數據收發功能,并具有良好的性能指標和一定的錯誤處理能力。
本文從實際應用需求出發,針對單通道CAN總線通訊系統的不足完成了CPCI四通道隔離CAN總線通訊模塊的設計,并進行了相關的功能測試來驗證設計的正確性,測試結果表明本文設計的模塊滿足設計要求,具備良好的性能指標以及四通道CAN總線數據傳輸的能力。