<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > DeviceNet現(xiàn)場(chǎng)總線的波特率自動(dòng)檢測(cè)

          DeviceNet現(xiàn)場(chǎng)總線的波特率自動(dòng)檢測(cè)

          作者: 時(shí)間:2016-12-12 來源:網(wǎng)絡(luò) 收藏
            隨著現(xiàn)代化工業(yè)的不斷前進(jìn),人們對(duì)生產(chǎn)過程的控制提出了更高的要求。智能化、網(wǎng)絡(luò)化、微型化、分散化代表當(dāng)代自動(dòng)化控制技術(shù)發(fā)展的主流方向,而現(xiàn)場(chǎng)總線技術(shù)正是促使自動(dòng)化系統(tǒng)順應(yīng)這一發(fā)展要求的先進(jìn)技術(shù)。DeviceNet是基于CAN總線的一種開放式現(xiàn)場(chǎng)總線技術(shù),在世界各大供應(yīng)商的共同努力下,已經(jīng)成為普及率比較高的現(xiàn)場(chǎng)總線技術(shù)之一,在國(guó)內(nèi)外得到較大范圍的推廣和應(yīng)用。

            DeviceNet網(wǎng)絡(luò)允許的波特率共有三種:500K、250K、125K。在設(shè)備聯(lián)入網(wǎng)絡(luò)之前,需要用戶根據(jù)當(dāng)前網(wǎng)絡(luò)的要求選擇一種工作波特率。為了滿足設(shè)備熱插拔的要求,很多接入設(shè)備除了提供波特率的人工設(shè)置之外,還必須具備波特率自動(dòng)檢測(cè)的功能。

          1 波特率自動(dòng)檢測(cè)的前提條件

            根據(jù)CAN總線的特點(diǎn),每一個(gè)網(wǎng)絡(luò)上的節(jié)點(diǎn)對(duì)接收到的報(bào)文都具有自動(dòng)應(yīng)答機(jī)制,根據(jù)接收到的信息正確與否發(fā)出應(yīng)答信息和出錯(cuò)信息。在設(shè)備聯(lián)入CAN網(wǎng)絡(luò)后,根據(jù)網(wǎng)絡(luò)通信安全的要求,在沒有得到波特率的正確設(shè)置前,不允許發(fā)送任何的信息,也就是說,接入節(jié)點(diǎn)必須具有“只聽”功能。DeviceNet是基于CAN總線的協(xié)議規(guī)范,要實(shí)現(xiàn)接入設(shè)備的波特率自動(dòng)檢測(cè),也必須使通訊接口在波特率沒有確認(rèn)前處于“只聽”模式。
            很多DeviceNet通訊接口在設(shè)計(jì)上都是采用CAN協(xié)議芯片或者內(nèi)嵌式的CAN接口,為了實(shí)現(xiàn)其“只聽”功能,可以在其發(fā)送接口與總線驅(qū)動(dòng)芯片之間加上一級(jí)或門,如圖1所示。82C251是CAN總線驅(qū)動(dòng)芯片,Gate就是“只聽”模式的門控信號(hào),Tx是發(fā)送引腳,Rx是接收引腳。Gate、Tx以及CAN信號(hào)的狀態(tài)表如表1所示。在上電復(fù)位或者進(jìn)行波特率自動(dòng)檢測(cè)前,先將Gate設(shè)成1,這樣就可以封鎖Tx引腳,這樣,CAN接口的任何錯(cuò)誤幀和應(yīng)答信息都不會(huì)被廣播出去。當(dāng)正確的波特率被選擇后,將Gate置0,就可以實(shí)現(xiàn)CAN信息的正常發(fā)送了。

          本文引用地址:http://www.ex-cimer.com/article/201612/328673.htm

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

          可見,只要將ModeControlReg的D1位設(shè)成1,就可以實(shí)現(xiàn)“只聽”模式。
          2.波特率檢測(cè)的時(shí)機(jī)
            波特率的自動(dòng)檢測(cè),是通過對(duì)網(wǎng)絡(luò)信息的偵聽來實(shí)現(xiàn)的,也就是說,網(wǎng)絡(luò)上首先要具有正確傳輸?shù)膱?bào)文信息,接入設(shè)備才有可能識(shí)別出網(wǎng)絡(luò)的波特率信息。
            首先,需要保證接入設(shè)備在網(wǎng)絡(luò)上電前已經(jīng)加入網(wǎng)絡(luò)。這時(shí),當(dāng)上電時(shí),根據(jù)DeviceNet網(wǎng)絡(luò)協(xié)議,每一個(gè)從站節(jié)點(diǎn)都會(huì)有自檢和應(yīng)答信息,這給自動(dòng)波特率檢測(cè)提供了較好的時(shí)機(jī)。
            根據(jù)這一結(jié)論,還可以假想出波特率自動(dòng)檢測(cè)的比較極端的情況,那就是“孤立節(jié)點(diǎn)”的情況,網(wǎng)絡(luò)上只有接入設(shè)備本身這一個(gè)節(jié)點(diǎn),這時(shí)候網(wǎng)絡(luò)上沒有傳輸信息,也就無法偵聽和識(shí)別波特率,這種情況下只有等待,直到有另一節(jié)點(diǎn)加入或者主站設(shè)備主動(dòng)發(fā)送有效信息。

          3.總線定時(shí)器值的計(jì)算與設(shè)定

            CAN總線是位仲裁機(jī)制,對(duì)于位定時(shí)有著嚴(yán)格的要求,而波特率的設(shè)置是通過對(duì)總線定時(shí)器的設(shè)置來實(shí)現(xiàn)的。位定時(shí)的要求主要體現(xiàn)在對(duì)于每一位的位時(shí)間的各個(gè)組成部分以及采樣次數(shù)的確定上。位時(shí)間的大小跟波特率有關(guān),設(shè)位時(shí)間為T,波特率為B,則由式(1)確定。

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

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

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

          根據(jù)CAN2.0A規(guī)范,這個(gè)延遲時(shí)間是滿足要求的。在對(duì)于DeviceNet接口三種不同波特率的設(shè)置,只要改變預(yù)分頻值便可達(dá)到目的,其他參數(shù)可以參考上面的計(jì)算。

          4.波特率自動(dòng)檢測(cè)的軟件實(shí)現(xiàn)

            以SJA1000為例來說明波特率自動(dòng)檢測(cè)的軟件流程。SJA1000在PeliCAN 模式下才支持“只聽”模式,所以,在波特率檢測(cè)時(shí),應(yīng)該將SJA1000設(shè)置成PeliCAN 模式。
            軟件檢測(cè)的思想是根據(jù)DeviceNet網(wǎng)絡(luò)的特點(diǎn)確定的。對(duì)于 Devicenet網(wǎng)絡(luò),只允許3種波特率:125K, 250K, 500K,采用“窮舉法”不會(huì)花費(fèi)太多流程。節(jié)點(diǎn)可以預(yù)先配置成這三種波特率中的一個(gè),當(dāng)波特率正確時(shí),就會(huì)產(chǎn)生接收中斷,那么,預(yù)置的波特率就是正確的網(wǎng)絡(luò)波特率;如果產(chǎn)生總線錯(cuò)誤中斷,則可以認(rèn)為,波特率設(shè)置錯(cuò)誤,更換波特率設(shè)置重新偵聽。在啟動(dòng)時(shí),先將節(jié)點(diǎn)波特率設(shè)置成125K模式,同時(shí)允許接收和錯(cuò)誤中斷。如果在CAN總線上產(chǎn)生錯(cuò)誤,軟件就將波特率設(shè)成較高的波特率。為了可靠確認(rèn),在連續(xù)2條信息的成功地接收后,就認(rèn)為當(dāng)前預(yù)設(shè)波特率是正確的,從而轉(zhuǎn)向正常工作模式。
          流程圖如下:

          波特率自動(dòng)檢測(cè)是通過對(duì)于總線錯(cuò)誤或者正確接收的仲裁實(shí)現(xiàn)的,在調(diào)試過程中,需要開放接收中斷和總線錯(cuò)誤中斷。值得注意的是,在總線預(yù)設(shè)波特率不對(duì)的情況下,總線錯(cuò)誤中斷相當(dāng)頻繁,如果處理不當(dāng),就難于設(shè)置正確的波特率。通過調(diào)試,得出以下兩點(diǎn)體會(huì):
            1.切換波特率的依據(jù)是總線錯(cuò)誤中斷,但是一般總線錯(cuò)誤中斷標(biāo)志有可能和接收中斷一起接收到,這個(gè)時(shí)候,不能立即切換波特率,而是再觀察一幀信息,然后再確定是否找到波特率;如果單純總線錯(cuò)誤,則立即切換波特率。
            2.隨著波特率的提高,總線錯(cuò)誤中斷會(huì)更加頻繁,所以中斷的響應(yīng)要迅速,處理代碼要短,不然就會(huì)影響其他的程序流程。特別是500K波特率時(shí),自動(dòng)波特率檢測(cè)的時(shí)序要特別注意,有可能會(huì)造成SJA1000復(fù)位的情況,這時(shí)候有可能損失用于檢測(cè)波特率的信息。

          5.結(jié)論
            DeviceNet現(xiàn)場(chǎng)總線波特率的自動(dòng)檢測(cè)方案可以推廣到其他基于CAN總線的網(wǎng)絡(luò)接入中,只要待接入的網(wǎng)絡(luò)上具有有效傳輸?shù)臄?shù)據(jù)報(bào)文,另外波特率值在一定的預(yù)選值范圍內(nèi),這個(gè)方案都是可行有效的。在實(shí)際應(yīng)用中,該波特率自動(dòng)檢測(cè)技術(shù)得到較為成功的驗(yàn)證。


          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();