AVR單片機的CAN總線分析儀設計
圖3 液晶顯示接口
2.3 鍵盤輸入接口
圖4所示為鍵盤輸入接口的硬件原理圖。鍵盤輸入采用了廣州周立功單片機發展有限公司的數碼管顯示驅動及鍵盤掃描管理芯片ZLG7289B,它可以掃描管理多達64只按鍵。ZLG7289B采用SPI 串行總線與微控制器接口,僅占用少數幾根I/O接口線。為了使鍵盤掃描得以正常進行,下拉電阻R1~R8和位選電阻R9、R10 是必需的。下拉電阻取值范圍是10~100 kΩ,位選電阻取值范圍1~10 kΩ。如果需要增加或減少按鍵,建議按列增加或裁減鍵盤,即增加或省略相應列的電阻。應注意裁減鍵盤時下拉電阻一個都不能省去。
圖4 鍵盤輸入接口
3 CAN分析儀的軟件設計
本系統的軟件設計通過AVR單片機的開發工具AVRICC用C語言編制,并依據各項功能進行了模塊化設計,主要包括:自適應波特率模塊、定時器模塊、報文接收模塊、狀態顯示模塊、CAN中斷處理模塊、控制器初始化模塊和總線狀態計算模塊等。其中自適應波特率、報文接收和總線狀態計算是核心與關鍵。限于篇幅,僅介紹這幾種功能模塊。
3.1 軟件的主程序框架
分析儀的主要功能是監測現場狀況。首先要使其接入總線,能夠正常接收總線報文。因為總線上的波特率未知,需要對總線的波特率進行自識別,找到正確的波特率并初始化CAN控制器,進入CAN總線正常工作狀態,接收總線上的各種報文。CAN總線不是按地址來進行報文傳送的,可以設置分析儀接收總線上的一切報文,也可以通過鍵盤輸入需要接收的報文。CAN總線上一旦出現錯誤,出現錯誤的節點就會向總線發送標示錯誤的錯誤幀。利用這個特性,接收錯誤幀,并將它顯示出來用于分析總線的各種錯誤。與此同時,通過定時器來確定每單位時間的正確報文數和錯誤報文數,用于分析總線的狀態是否正常、利用是否充分等。程序總體框架如圖5所示。
圖5 程序總體框圖
3.2 自適應波特率
自適應波特率是在未知總線波特率的情況下自動檢測CAN總線波特率,并且不影響總線的正常運行。已往的自適應波特率檢測主要是向總線發出報文,若接入節點(分析儀)假設的波特率與網絡實際波特率相沖突,則該節點自身的CAN控制器將產生錯誤幀,這是對檢測到的總線錯誤的正常反應。如果允許該錯誤幀發送到總線上,將導致網絡上其他節點也收到該錯誤幀,從而產生網絡堵塞。這種方法嚴重影響了總線的正常運行,輕則使總線在檢測階段不能正常工作,重則影響總線的整個調度算法,使總線發生紊亂甚至關閉。
本系統所選用的CAN控制器SJA1000具有獨特的只聽模式。在該模式下,CAN控制器進入錯誤認可狀態,即無論接收信息成功與否,都不能向總線發送任何信息,只能接收報文。這樣就不影響總線的正常運行,其他功能都如同在正常操作模式下一樣使用。
自適應波特率需要在網絡中至少有1個節點在發送報文,而且需要預先設定1張包含所有可能波特率的表格。在建表時考慮到表的長度越長,檢測所需要的時間和報文數就越多,所以只取了CiA(CAN in Automation)協會推薦的幾種標準通信波特率和工業現場常用的波特率。
CAN控制器首先進入復位模式。接著設置初始波特率,波特率的初始值可以通過撥碼開關設置從最高波特率開始,或從最低波特率開始,從而減少自適應時間。最后使能接收中斷進入只聽模式。當未接收到總線報文時,即沒有產生接收中斷,進入復位模式選擇下一個波特率;當產生1個接收中斷時,表示檢測到正確的波特率,這時軟件就可以切換到正常操作模式,CAN分析儀即可參與總線通信。圖6為自適應波特率的流程。
評論