DeviceNet現(xiàn)場總線的波特率自動檢測
DeviceNet網(wǎng)絡(luò)允許的波特率共有三種:500K、250K、125K。在設(shè)備聯(lián)入網(wǎng)絡(luò)之前,需要用戶根據(jù)當(dāng)前網(wǎng)絡(luò)的要求選擇一種工作波特率。為了滿足設(shè)備熱插拔的要求,很多接入設(shè)備除了提供波特率的人工設(shè)置之外,還必須具備波特率自動檢測的功能。
1 波特率自動檢測的前提條件
根據(jù)CAN總線的特點,每一個網(wǎng)絡(luò)上的節(jié)點對接收到的報文都具有自動應(yīng)答機制,根據(jù)接收到的信息正確與否發(fā)出應(yīng)答信息和出錯信息。在設(shè)備聯(lián)入CAN網(wǎng)絡(luò)后,根據(jù)網(wǎng)絡(luò)通信安全的要求,在沒有得到波特率的正確設(shè)置前,不允許發(fā)送任何的信息,也就是說,接入節(jié)點必須具有“只聽”功能。DeviceNet是基于CAN總線的協(xié)議規(guī)范,要實現(xiàn)接入設(shè)備的波特率自動檢測,也必須使通訊接口在波特率沒有確認(rèn)前處于“只聽”模式。
很多DeviceNet通訊接口在設(shè)計上都是采用CAN協(xié)議芯片或者內(nèi)嵌式的CAN接口,為了實現(xiàn)其“只聽”功能,可以在其發(fā)送接口與總線驅(qū)動芯片之間加上一級或門,如圖1所示。82C251是CAN總線驅(qū)動芯片,Gate就是“只聽”模式的門控信號,Tx是發(fā)送引腳,Rx是接收引腳。Gate、Tx以及CAN信號的狀態(tài)表如表1所示。在上電復(fù)位或者進行波特率自動檢測前,先將Gate設(shè)成1,這樣就可以封鎖Tx引腳,這樣,CAN接口的任何錯誤幀和應(yīng)答信息都不會被廣播出去。當(dāng)正確的波特率被選擇后,將Gate置0,就可以實現(xiàn)CAN信息的正常發(fā)送了。
也有一些CAN協(xié)議芯片內(nèi)部具有“只聽”功能,例如Philip的CAN控制芯片SJA1000,在其擴展CAN功能中就有對應(yīng)的模式寄存器,可以在不增加其他外部電路的情況下完成“只聽”模式的設(shè)置,其模式寄存器的位定義如下所示。
可見,只要將ModeControlReg的D1位設(shè)成1,就可以實現(xiàn)“只聽”模式。
2.波特率檢測的時機
波特率的自動檢測,是通過對網(wǎng)絡(luò)信息的偵聽來實現(xiàn)的,也就是說,網(wǎng)絡(luò)上首先要具有正確傳輸?shù)膱笪男畔?,接入設(shè)備才有可能識別出網(wǎng)絡(luò)的波特率信息。
首先,需要保證接入設(shè)備在網(wǎng)絡(luò)上電前已經(jīng)加入網(wǎng)絡(luò)。這時,當(dāng)上電時,根據(jù)DeviceNet網(wǎng)絡(luò)協(xié)議,每一個從站節(jié)點都會有自檢和應(yīng)答信息,這給自動波特率檢測提供了較好的時機。
根據(jù)這一結(jié)論,還可以假想出波特率自動檢測的比較極端的情況,那就是“孤立節(jié)點”的情況,網(wǎng)絡(luò)上只有接入設(shè)備本身這一個節(jié)點,這時候網(wǎng)絡(luò)上沒有傳輸信息,也就無法偵聽和識別波特率,這種情況下只有等待,直到有另一節(jié)點加入或者主站設(shè)備主動發(fā)送有效信息。
3.總線定時器值的計算與設(shè)定
CAN總線是位仲裁機制,對于位定時有著嚴(yán)格的要求,而波特率的設(shè)置是通過對總線定時器的設(shè)置來實現(xiàn)的。位定時的要求主要體現(xiàn)在對于每一位的位時間的各個組成部分以及采樣次數(shù)的確定上。位時間的大小跟波特率有關(guān),設(shè)位時間為T,波特率為B,則由式(1)確定。
每一位時間由固定數(shù)目的小時間份額組成,小時間份額的長度值是由芯片的晶振頻率和波特率的預(yù)分頻值決定的。設(shè)晶振頻率是Fosc, 小時間份額的長度為Ts,預(yù)分頻值為Brp,則:
Brp=Ts×Fosc -1 (2)
位時間可劃分為幾個互不重疊的時間段,這些時間段的定義如圖2所示。
同步段和傳播段各為1個時間份額,其余的是相位緩沖段1和相位緩沖段2,而采樣點就在這兩個緩沖段之間?! eviceNet是高速CAN網(wǎng)絡(luò),采樣點的采樣次數(shù)為1次。根據(jù)圖2所示,位時間的小時間份額的數(shù)目確定了位時間的大小,從而確定了波特率的大小。設(shè)小時間份額為Ts,相位緩沖段1的時間份額為N1,相位緩沖段2的時間份額為N2,總的時間份額為N,則可以得出公式(3)。
N=1+1+N1+N2=T/Ts (3)
總線定時參數(shù)確定之后,可以根據(jù)晶振的誤差算出最大允許傳播延遲時間:
上式(1+N1)表示從同步點到采樣點的時間份額數(shù)。
N的值在應(yīng)用中一般設(shè)置成晶振頻率的整除數(shù),而N1和N2的大小決定了采樣點的位置,具有一定的實驗數(shù)據(jù)支持,根據(jù)ODVA公布的參數(shù),當(dāng)采樣點位于位時間的80%處時,采樣準(zhǔn)確性最大。以16M±1%晶振下,波特率為500K,N為16,則:
T=1/500000=2 uS
Ts=T/N=0.125 uS
根據(jù)采樣點位于80%的分配比例,
N1=16×80%=12 (取整數(shù))
N2=N-2-N1=2
波特率的預(yù)分頻值根據(jù)式(2),有:
Brp=(0.125×16)-1=1
最大允許傳播延時
根據(jù)CAN2.0A規(guī)范,這個延遲時間是滿足要求的。在對于DeviceNet接口三種不同波特率的設(shè)置,只要改變預(yù)分頻值便可達到目的,其他參數(shù)可以參考上面的計算。
4.波特率自動檢測的軟件實現(xiàn)
以SJA1000為例來說明波特率自動檢測的軟件流程。SJA1000在PeliCAN 模式下才支持“只聽”模式,所以,在波特率檢測時,應(yīng)該將SJA1000設(shè)置成PeliCAN 模式。
軟件檢測的思想是根據(jù)DeviceNet網(wǎng)絡(luò)的特點確定的。對于 Devicenet網(wǎng)絡(luò),只允許3種波特率:125K, 250K, 500K,采用“窮舉法”不會花費太多流程。節(jié)點可以預(yù)先配置成這三種波特率中的一個,當(dāng)波特率正確時,就會產(chǎn)生接收中斷,那么,預(yù)置的波特率就是正確的網(wǎng)絡(luò)波特率;如果產(chǎn)生總線錯誤中斷,則可以認(rèn)為,波特率設(shè)置錯誤,更換波特率設(shè)置重新偵聽。在啟動時,先將節(jié)點波特率設(shè)置成125K模式,同時允許接收和錯誤中斷。如果在CAN總線上產(chǎn)生錯誤,軟件就將波特率設(shè)成較高的波特率。為了可靠確認(rèn),在連續(xù)2條信息的成功地接收后,就認(rèn)為當(dāng)前預(yù)設(shè)波特率是正確的,從而轉(zhuǎn)向正常工作模式。
流程圖如下:
波特率自動檢測是通過對于總線錯誤或者正確接收的仲裁實現(xiàn)的,在調(diào)試過程中,需要開放接收中斷和總線錯誤中斷。值得注意的是,在總線預(yù)設(shè)波特率不對的情況下,總線錯誤中斷相當(dāng)頻繁,如果處理不當(dāng),就難于設(shè)置正確的波特率。通過調(diào)試,得出以下兩點體會:
1.切換波特率的依據(jù)是總線錯誤中斷,但是一般總線錯誤中斷標(biāo)志有可能和接收中斷一起接收到,這個時候,不能立即切換波特率,而是再觀察一幀信息,然后再確定是否找到波特率;如果單純總線錯誤,則立即切換波特率。
2.隨著波特率的提高,總線錯誤中斷會更加頻繁,所以中斷的響應(yīng)要迅速,處理代碼要短,不然就會影響其他的程序流程。特別是500K波特率時,自動波特率檢測的時序要特別注意,有可能會造成SJA1000復(fù)位的情況,這時候有可能損失用于檢測波特率的信息。
5.結(jié)論
DeviceNet現(xiàn)場總線波特率的自動檢測方案可以推廣到其他基于CAN總線的網(wǎng)絡(luò)接入中,只要待接入的網(wǎng)絡(luò)上具有有效傳輸?shù)臄?shù)據(jù)報文,另外波特率值在一定的預(yù)選值范圍內(nèi),這個方案都是可行有效的。在實際應(yīng)用中,該波特率自動檢測技術(shù)得到較為成功的驗證。
評論