DeviceNet現場總線的波特率自動檢測
DeviceNet網絡允許的波特率共有三種:500K、250K、125K。在設備聯入網絡之前,需要用戶根據當前網絡的要求選擇一種工作波特率。為了滿足設備熱插拔的要求,很多接入設備除了提供波特率的人工設置之外,還必須具備波特率自動檢測的功能。
1 波特率自動檢測的前提條件
根據CAN總線的特點,每一個網絡上的節點對接收到的報文都具有自動應答機制,根據接收到的信息正確與否發出應答信息和出錯信息。在設備聯入CAN網絡后,根據網絡通信安全的要求,在沒有得到波特率的正確設置前,不允許發送任何的信息,也就是說,接入節點必須具有“只聽”功能。DeviceNet是基于CAN總線的協議規范,要實現接入設備的波特率自動檢測,也必須使通訊接口在波特率沒有確認前處于“只聽”模式。
很多DeviceNet通訊接口在設計上都是采用CAN協議芯片或者內嵌式的CAN接口,為了實現其“只聽”功能,可以在其發送接口與總線驅動芯片之間加上一級或門,如圖1所示。82C251是CAN總線驅動芯片,Gate就是“只聽”模式的門控信號,Tx是發送引腳,Rx是接收引腳。Gate、Tx以及CAN信號的狀態表如表1所示。在上電復位或者進行波特率自動檢測前,先將Gate設成1,這樣就可以封鎖Tx引腳,這樣,CAN接口的任何錯誤幀和應答信息都不會被廣播出去。當正確的波特率被選擇后,將Gate置0,就可以實現CAN信息的正常發送了。

也有一些CAN協議芯片內部具有“只聽”功能,例如Philip的CAN控制芯片SJA1000,在其擴展CAN功能中就有對應的模式寄存器,可以在不增加其他外部電路的情況下完成“只聽”模式的設置,其模式寄存器的位定義如下所示。

可見,只要將ModeControlReg的D1位設成1,就可以實現“只聽”模式。
2.波特率檢測的時機
波特率的自動檢測,是通過對網絡信息的偵聽來實現的,也就是說,網絡上首先要具有正確傳輸的報文信息,接入設備才有可能識別出網絡的波特率信息。
首先,需要保證接入設備在網絡上電前已經加入網絡。這時,當上電時,根據DeviceNet網絡協議,每一個從站節點都會有自檢和應答信息,這給自動波特率檢測提供了較好的時機。
根據這一結論,還可以假想出波特率自動檢測的比較極端的情況,那就是“孤立節點”的情況,網絡上只有接入設備本身這一個節點,這時候網絡上沒有傳輸信息,也就無法偵聽和識別波特率,這種情況下只有等待,直到有另一節點加入或者主站設備主動發送有效信息。
3.總線定時器值的計算與設定
CAN總線是位仲裁機制,對于位定時有著嚴格的要求,而波特率的設置是通過對總線定時器的設置來實現的。位定時的要求主要體現在對于每一位的位時間的各個組成部分以及采樣次數的確定上。位時間的大小跟波特率有關,設位時間為T,波特率為B,則由式(1)確定。

每一位時間由固定數目的小時間份額組成,小時間份額的長度值是由芯片的晶振頻率和波特率的預分頻值決定的。設晶振頻率是Fosc, 小時間份額的長度為Ts,預分頻值為Brp,則:
Brp=Ts×Fosc -1 (2)
位時間可劃分為幾個互不重疊的時間段,這些時間段的定義如圖2所示。

同步段和傳播段各為1個時間份額,其余的是相位緩沖段1和相位緩沖段2,而采樣點就在這兩個緩沖段之間。 DeviceNet是高速CAN網絡,采樣點的采樣次數為1次。根據圖2所示,位時間的小時間份額的數目確定了位時間的大小,從而確定了波特率的大小。設小時間份額為Ts,相位緩沖段1的時間份額為N1,相位緩沖段2的時間份額為N2,總的時間份額為N,則可以得出公式(3)。
N=1+1+N1+N2=T/Ts (3)
總線定時參數確定之后,可以根據晶振的誤差算出最大允許傳播延遲時間:

上式(1+N1)表示從同步點到采樣點的時間份額數。
N的值在應用中一般設置成晶振頻率的整除數,而N1和N2的大小決定了采樣點的位置,具有一定的實驗數據支持,根據ODVA公布的參數,當采樣點位于位時間的80%處時,采樣準確性最大。以16M±1%晶振下,波特率為500K,N為16,則:
T=1/500000=2 uS
Ts=T/N=0.125 uS
根據采樣點位于80%的分配比例,
N1=16×80%=12 (取整數)
N2=N-2-N1=2
波特率的預分頻值根據式(2),有:
Brp=(0.125×16)-1=1
最大允許傳播延時

根據CAN2.0A規范,這個延遲時間是滿足要求的。在對于DeviceNet接口三種不同波特率的設置,只要改變預分頻值便可達到目的,其他參數可以參考上面的計算。
4.波特率自動檢測的軟件實現
以SJA1000為例來說明波特率自動檢測的軟件流程。SJA1000在PeliCAN 模式下才支持“只聽”模式,所以,在波特率檢測時,應該將SJA1000設置成PeliCAN 模式。
軟件檢測的思想是根據DeviceNet網絡的特點確定的。對于 Devicenet網絡,只允許3種波特率:125K, 250K, 500K,采用“窮舉法”不會花費太多流程。節點可以預先配置成這三種波特率中的一個,當波特率正確時,就會產生接收中斷,那么,預置的波特率就是正確的網絡波特率;如果產生總線錯誤中斷,則可以認為,波特率設置錯誤,更換波特率設置重新偵聽。在啟動時,先將節點波特率設置成125K模式,同時允許接收和錯誤中斷。如果在CAN總線上產生錯誤,軟件就將波特率設成較高的波特率。為了可靠確認,在連續2條信息的成功地接收后,就認為當前預設波特率是正確的,從而轉向正常工作模式。
流程圖如下:

波特率自動檢測是通過對于總線錯誤或者正確接收的仲裁實現的,在調試過程中,需要開放接收中斷和總線錯誤中斷。值得注意的是,在總線預設波特率不對的情況下,總線錯誤中斷相當頻繁,如果處理不當,就難于設置正確的波特率。通過調試,得出以下兩點體會:
1.切換波特率的依據是總線錯誤中斷,但是一般總線錯誤中斷標志有可能和接收中斷一起接收到,這個時候,不能立即切換波特率,而是再觀察一幀信息,然后再確定是否找到波特率;如果單純總線錯誤,則立即切換波特率。
2.隨著波特率的提高,總線錯誤中斷會更加頻繁,所以中斷的響應要迅速,處理代碼要短,不然就會影響其他的程序流程。特別是500K波特率時,自動波特率檢測的時序要特別注意,有可能會造成SJA1000復位的情況,這時候有可能損失用于檢測波特率的信息。
5.結論
DeviceNet現場總線波特率的自動檢測方案可以推廣到其他基于CAN總線的網絡接入中,只要待接入的網絡上具有有效傳輸的數據報文,另外波特率值在一定的預選值范圍內,這個方案都是可行有效的。在實際應用中,該波特率自動檢測技術得到較為成功的驗證。
評論