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