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