三、CAN總線通信系統的原理和方案
1.系統原理
CAN總線和總線上的各個CAN節點在具備完整的通信協
議下,一起構成了CAN網絡。本系統設計兩個CAN節點進行互相通信,其中采用瑞典Kvaser公司的KvaserLeafProfessional———CAN總線分析儀作為總線的一個節點,負責與上位機通信,同時檢測總線狀況,包括總線負載、信號幀的收發數量以及錯誤幀情況;另一個是基于52單片機自主開發的CAN節點,可以實現對模擬信號的采集并轉化為CAN信號。該CAN節點能夠處理CAN總線上的數據,能夠對CAN2.0(A/B)協議進行解析,并由硬件完成一些CAN基本功能,比如為接收到的CAN報
文提供一定大小的接收緩沖區、按照一定規則對接收到的數據完成ID濾波以及執行CRC校驗等等。每個CAN節點包括以下三個部分[3]:①微控制器負責完成CAN控制器的初始化,進行與CAN控制器的數據傳遞,并按照預定的程序進行處理;②CAN控制器主要負責將數據以CAN報文的形式傳遞,并進行系統的診斷、測試以及處理CAN總線上的錯誤等;③CAN收發器是CAN控制器和CAN總線之間的接口,完成物理電平的轉換。
2.總體方案
較常見的CAN節點組成框圖如圖1所示。
圖1中方案1的一種經典配置就是“51系列微控制器+獨立的CAN控制器SJA1000+高速CAN收發器TJA1050”[4]。此方案的優點在于靈活性,設計者可以選用性價比最高、最適合實際用途的51系列微控制器。缺點就是硬件電路相對復雜,同下面的方案2相比,需要設計微控制器和CAN控制器之間的連接電路。
方案2采用的是“內嵌CAN控制器的微控制器+高速CAN收發器TJA1050”[4]。其中,STM8A是ST公司一款性能出眾的帶片內CAN控制器的微控制器。此方案的優點在于電路設計簡單,由于將CAN控制器集成在微控制器片內,這樣就減少了部分連接電路。此方案的缺點就是目前可供選擇的帶片內CAN控制器的微控制器相對較少,用戶選擇余地不大。
由于STM8A芯片有128個引腳,其內部的構造比51系列單片機復雜,同時也需要專用的編譯器和調試工具,而且價格昂貴,給編程者的開發增加了難度,因此本系統的一個節點采用第一種方案。
另外一個節點采用瑞典Kvaser公司的KvaserLeafProfession-al,它是超高性能的USB接口單通道CAN總線分析儀,支持CAN協議,其MagiSync技術是Kvaser的國際核心專利技術之一。它能夠把多個CAN總線分析儀連接到同一臺PC機上,并通過Kva-serMagiSync技術同步各個CAN總線分析儀的時間標簽,其靈活性特別適合多通道的應用項目。每個CAN消息均標有1μs精度的時間標簽(timestamp),每秒可以處理高達20000個幀。
系統軟件選擇了虛擬儀器軟件LabVIEW。通過設計,軟件實現的功能為:(1)能夠全程實時監控每個節點在總線上的通信情況,并能完整記錄、歷史回放。可設置總線波特率和發送各種數據幀,包括遠程幀、標準幀、擴展幀和錯誤幀。(2)具有判定、報警及統計功能,可根據檢測錯誤計數器來界定“錯誤激活”、“錯誤認可”和“總線關閉”等三種故障。
四、硬件設計
本系統自主設計的CAN節點,采用89C52作為節點的微控制器。在CAN總線通信接口中,CAN通信的控制器采用SJA1000,CAN的收發器采用TJA1050。
圖2 CAN節點電路原理圖
圖2為CAN節點的硬件電路原理圖。從圖中可以看出,電路主要由五個部分所構成:微控制器89C52、獨立CAN通信控
制器SJA1000、CAN總線收發器TJA1050、顯示電路和控制電路。微控制器89C52負責SJA1000的初始化,通過控制SJA1000實現數據的接收和發送等通信任務。SJA1000的AD0~AD7連接到89C52的P0口,CS連接到89C52的P2.0。P2.0為0時,CPU片外存儲器地址可選中SJA1000,CPU通過這些地址可對SJA1000執行相應的讀/寫操作。SJA1000的RD、WR、分別與89C52的對應引腳相連接,INT接89C52的INT0,89C52也可通過中斷方式訪問SJA1000。
TJA1050與CAN總線的接口部分采用了一定的安全和抗干擾措施。TJA1050的CAN-H和CAN-L引腳各自通過一個5Ψ的電阻與CAN總線相連,電阻可起到一定的限流作用,保護TJA1050免受過流的沖擊。CANH和CANL與地之間并聯了兩個30P的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射的能力。
顯示電路通過使用四個七段管,并使用74LS138和74LS373進行控制。控制電路主要由四個按鈕組成,分別對輸入信號、總線波特率、模式轉換和數據發送進行控制。
硬件電路設計的時候,需注意的地方有:
(1)SJA1000與AT89C52的復位電路是不同的,單片機的RST是高電平有效的,而SJA1000的RST是低電平有效的,而且不是用一個非門把單片機的RST反相就可以的[5]。有兩種解決方式:第一種是使用單片機的IO引腳來控制SJA的復位引腳,優點是單片機完全控制SJA的復位過程;第二種是使用微處理器電源監控芯片MAX708,它可以提供兩種復位信號,可以滿足需要。
(2)SJA1000的CLKOUT引腳可以提供時鐘輸出信號,但是如果該信號作為AT89C52的時鐘信號,則容易出現問題,建議分別使用晶振。
(3)CAN-H與CAN-L之間需接120歐姆電阻。
(4)電路板中使用兩個9針串口,為的是方便于構建一個CAN小網絡,并方便于接不同串口的CAN檢測儀。
五、 軟件設計
1. CAN節點的軟件部分設計
本節點的軟件編程主要包括單片機初始化、CAN控制器的初始化、CAN總線數據的發送和接收等幾個部分。初始化設置主要包括通信的波特率的設置、報文濾波器的設置和輸出模式的設置。主程序的流程圖如圖3所示
圖3 主程序流程圖
(1)數據發送 將待發送的數據打包成符合CAN協議的幀格式后,便可寫入SJA1000發送緩沖區,并自動發送。圖4為發送子程序流程圖。在寫發送緩沖區前必須查詢其狀態,數據只能寫入空閑的發送緩沖區。發送大量數據時,這一步顯得尤其重要,否則發送可靠性將不能保證啟動發送命令后,只能通過查詢或配置發送成功中斷判斷數據是否發送成功。發送程序分發送遠程幀和數據幀兩種,遠程幀無數據場。
圖4 發送子程序流程圖
(2)數據接收 接收數據可采用查詢方式或中斷方式。在某一段時間內,CAN總線并不是總是在活動,為了提高效率,可采用中斷方式在初始化程序中必須打開接收中斷。在中斷服務子程序中,判斷是否有接收中斷標志,有則讀取接收緩沖區數據。為了防止接收緩沖區數據溢出,可開辟一個循環接收數據隊列來暫時存儲數據,主程序則通過查詢該隊列來獲得總線數據。
2. 上位機程序設計
本系統的PC機端的軟件采用美國NI公司的圖形化編程語言LabVIEW平臺,該平臺是測控領域優秀軟件,被譽為工程師的語言,可以加快產品開發速度。在該套測試系統中,采用順序結構,并使用瑞典Kvaser公司提供的僅適用于Kvaser硬件的多個子VI,利用這些子VI建立控制模塊,并通過一定的邏輯關系聯系起來,完成對硬件的驅動、測量參數設定以及數據的采集和保存。
前面板一共有三部分:第一部分是CAN總線系統的相關參數配置,如圖5所示,其中包括連接在PC機上的通道選擇;總線通道的類型(單一、擴展和虛擬通道)還包括總線的波特率以及總線狀態。第二部分為數據發送窗口,主要用于對所要發送的數據進行定義以及顯示總線是否有錯誤,如圖6所示,其中包括CAN數據幀的ID、數據長度控制字DLC、八個字節的數據以及幀類型的選擇:遠程幀、標準幀、擴展幀和錯誤幀。另外還可以顯示總線錯誤和錯誤源。該窗口負責總線上數據的傳輸,是整個程序中的核心部分。最后一部分是數據接收窗口,主要負責接收整個總線上的數據,當點擊“GoBuson”之后,就可以自動接收數據,同時可以檢測接收錯誤。如圖7所示,其中包括了對數據的接收時間(以系統初始化為0時開始計時)、數據幀的ID、數據長度控制字以及8個字節的數據,用戶可以通過此窗口檢測總線狀況。
圖5 總線參數配置窗口 圖6數據發送窗口
圖7 數據接收窗口
后面板的程序流程圖主要是由瑞典Kvaser公司提供的大約四十二個針對本公司產品的CAN子VI程序,其中包括四類:
(1)CAN總線參數設置子VI:這些VI主要用于對CAN通道進行參數設置,其中包括CAN總線的初始化、CAN協議版本的選擇、波特率以及總線的幀類型選擇等等,還包括了Kvaser分析儀在LabVIEW下運行的驅動程序。
(2)CAN總線數據寫入子VI:這些VI主要用于將CAN通道需要送出的數據打包成符合CAN協議的信息并發送到SJA1000的輸入緩存器。
(3)CAN總線數據讀出子VI:這些VI可以讀出CAN口緩存中的數據。其中還包括錯誤計數器、同步讀數據和定時器等。
(4)CAN總線關閉子VI:這些VI用于將打開的CAN口關閉。調用CAN子程序并按照CAN2.0的通信標準,利用G語言,完成通過LabVIEW軟件平臺進行收發數據,圖8為程序流程圖。
六、總結
本系統實現了將傳感器輸出的電壓信號轉化為CAN總線信號,并使用其中的一個字節表示其變化過程。將先進的現場總線技術(CANBUS)應用于智能的測量與通信系統,可以大大提高系統的可靠性。自主開發了符合國際標準的基于單片機的智能CAN節點,不僅大量節約了資金,而且可以根據不同的需要連接不同的傳感器,實現基于CAN總線的智能測量節點。基于LabVIEW的上位機提供了良好的人機界面,使操作更加方便、直觀。
評論