CAN總線位定時(shí)和同步的研究與設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
控制器局域網(wǎng)CAN是一種用于連接汽車和工業(yè)場(chǎng)合中電子控制模塊、傳感器和執(zhí)行器的串行、多主通信規(guī)范。由于CAN總線具有很強(qiáng)的糾錯(cuò)能力、支持差分收發(fā)、傳輸距離遠(yuǎn)等特點(diǎn),因此CAN總線用途非常廣泛,現(xiàn)已成為工業(yè)數(shù)據(jù)通信領(lǐng)域的主流技術(shù)、基礎(chǔ)技術(shù),目前比較流行的 TTCan,DeviceNet,CANopen,SAE J1939等規(guī)范均是以CAN為基礎(chǔ)的,因此對(duì)CAN總線的深入研究是十分必要的。在CAN規(guī)范中,位定時(shí)和同步機(jī)制是既重要又難于理解的環(huán)節(jié)之一,它不僅關(guān)系到對(duì)波特率、總線長(zhǎng)度等相關(guān)內(nèi)容的理解,甚至對(duì)節(jié)點(diǎn)開(kāi)發(fā)的成功與否產(chǎn)生直接的影響。然而,目前相關(guān)文獻(xiàn)均缺乏針對(duì)CAN總線位定時(shí)和同步機(jī)制的詳細(xì)分析和探討。在此以CAN技術(shù)規(guī)范為基礎(chǔ),深入分析CAN總線的位定時(shí)和同步機(jī)制,給出硬同步和重同步的定義,并給出相應(yīng)的圖解解釋方式,對(duì)位時(shí)間的組成與結(jié)構(gòu)、同步的發(fā)生時(shí)刻、同步是如何進(jìn)行的等關(guān)鍵內(nèi)容給出了明確而又具體的分析。這里的工作對(duì)理解位定時(shí)和同步機(jī)制的本質(zhì)、指導(dǎo)位時(shí)間參數(shù)的設(shè)置均具有較高的參考價(jià)值。
1 位定時(shí)
1.1 位時(shí)間的組成
位時(shí)間(位周期)tB即1位的持續(xù)時(shí)間。正常位時(shí)間tNBT是正常位速率fNBT(在非重同步的情況下,借助理想發(fā)送器每秒發(fā)送的位數(shù))的倒數(shù),即 tNBT=1/fNBT。正常位時(shí)間可劃分為幾個(gè)互不重疊的時(shí)間段,這些時(shí)間段包括:同步段(SYNC-SEG)、傳播時(shí)間段(PROP-SEG)、相位緩沖器段1(PHASE-SEG1)、相位緩沖器段2(PHASE-SEG2)。每個(gè)時(shí)間段由整數(shù)個(gè)被稱為時(shí)間份額tQ的基本時(shí)間單位組成。tQ是由振蕩器周期tCLK派生出的一個(gè)固定時(shí)間單元。一個(gè)時(shí)間份額的持續(xù)時(shí)間通常便是CAN的一個(gè)系統(tǒng)時(shí)鐘周期tSCL。tSCL可通過(guò)可編程的預(yù)引比例因子進(jìn)行調(diào)整。每個(gè)位時(shí)間必須由8~25個(gè)時(shí)間份額組成。位時(shí)間的組成如圖1所示。
位時(shí)間的各個(gè)時(shí)間段均有其特定的用途:
(1)同步段用于使總線上的各個(gè)節(jié)點(diǎn)同步,要求有1個(gè)跳變沿位于此段內(nèi),該段長(zhǎng)度為1個(gè)時(shí)間份額;
(2)傳播時(shí)間段用于補(bǔ)償網(wǎng)絡(luò)內(nèi)的物理延時(shí),它是信號(hào)在總線上傳播時(shí)間、輸入比較器延時(shí)和輸出驅(qū)動(dòng)器延時(shí)之和的2倍,該段長(zhǎng)度為1~8個(gè)時(shí)間份額;
(3)相位緩沖器段1和相位緩沖器段2用于補(bǔ)償沿的相位誤差,通過(guò)重同步,相位緩沖器段1可被延長(zhǎng)或相位緩沖器段2可被縮短。
這些時(shí)間段的長(zhǎng)度均是可編程的。在常用的通信控制器(SJA1000)或PAC82C200中,合并傳播時(shí)間段和相位緩沖器段1,稱為時(shí)間段1(TSEGl),相位緩沖器段2稱為時(shí)間段2(TSEG2),如圖1所示。
采樣點(diǎn)是這樣一個(gè)時(shí)刻:在此時(shí)刻上,總線電平被讀取并被理解為其自身的數(shù)值。它位于相位緩沖器段1的終點(diǎn)。在重同步期間,采樣點(diǎn)的位置被移動(dòng)整數(shù)個(gè)時(shí)間份額,該時(shí)間份額被允許的最大值稱為重同步跳轉(zhuǎn)寬度(SJW),它可被編程為1~4個(gè)時(shí)間份額。值得注意的是,重同步跳轉(zhuǎn)寬度并不是位時(shí)間的組成部分。
1.2 位定時(shí)的作用
位定時(shí)是由節(jié)點(diǎn)自身完成的(可編程),節(jié)點(diǎn)進(jìn)行位定時(shí)的作用為:
(1)確定位時(shí)間,以便確定波特率(位速率),從而確定總線的網(wǎng)絡(luò)速度;或在給定總線的網(wǎng)絡(luò)速度的情況下確定位時(shí)間;
(2)確定1位的各個(gè)組成部分——同步段、傳播時(shí)間段、相位緩沖器段1和相位緩沖器段2的時(shí)間長(zhǎng)度,其中同步段用于硬同步,位于相位緩沖器段1終點(diǎn)的采樣點(diǎn)用于保證正確地讀取總線電平;
(3)確定重同步跳轉(zhuǎn)寬度以用于重同步。
2 CAN總線同步機(jī)制分析
CAN規(guī)范定義了自己獨(dú)有的同步方式:硬同步和重同步。同步與位定時(shí)密切相關(guān)。同步是由節(jié)點(diǎn)自身完成的,節(jié)點(diǎn)將檢測(cè)到來(lái)自總線的沿與其自身的位定時(shí)相比較,并通過(guò)硬同步或重同步適配(調(diào)整)位定時(shí)。在一般情況下,引起硬同步和重同步發(fā)生的、來(lái)自總線的沿如圖2所示。
2.1 硬同步
CAN技術(shù)規(guī)范給出了硬同步和重同步的結(jié)果,但沒(méi)有給出硬同步和重同步的定義。這里首先給出硬同步和重同步的定義,然后對(duì)其進(jìn)行分析。所謂硬同步,就是由節(jié)點(diǎn)檢測(cè)到的,來(lái)自總線的沿強(qiáng)迫節(jié)點(diǎn)立即確定出其內(nèi)部位時(shí)間的起始位置(同步段的起始時(shí)刻)。硬同步的結(jié)果是,沿到來(lái)時(shí)刻的前一時(shí)刻(以時(shí)間份額 tQ量度),即成為節(jié)點(diǎn)內(nèi)部位時(shí)間同步段的起始時(shí)刻,并使內(nèi)部位時(shí)間從同步段重新開(kāi)始。這就是規(guī)范中所說(shuō)的“硬同步強(qiáng)迫引起硬同步的沿處于重新開(kāi)始的位時(shí)間同步段之內(nèi)”。硬同步一般用于幀的開(kāi)始,即總線上的各個(gè)節(jié)點(diǎn)的內(nèi)部位時(shí)間的起始位置(同步段)是由來(lái)自總線的一個(gè)報(bào)文幀的幀起始的前沿決定的。同步段的時(shí)間長(zhǎng)度為1個(gè)時(shí)間份額。如圖3所示.來(lái)自總線的引起硬同步的沿在t1時(shí)刻到來(lái),則節(jié)點(diǎn)檢測(cè)到該沿。將t1時(shí)刻的前一時(shí)刻t0(以tQ為周期)作為內(nèi)部位時(shí)間同步段的起始時(shí)刻。
2.2 重同步
所謂重同步,就是節(jié)點(diǎn)根據(jù)沿相位誤差的大小調(diào)整其內(nèi)部位時(shí)間,以使節(jié)點(diǎn)內(nèi)部位時(shí)間與來(lái)自總線的報(bào)文位流的位時(shí)間接近或相等。作為重同步的結(jié)果,PHASE-SEG1可被延長(zhǎng)或PHASE-SEG2可被縮短,從而使節(jié)點(diǎn)能夠正確地接收?qǐng)?bào)文。重同步一般用于幀的位流發(fā)送期間,以補(bǔ)償各個(gè)節(jié)點(diǎn)振蕩器頻率的不一致。這里涉及到沿相位誤差的概念。沿相位誤差由沿相對(duì)于節(jié)點(diǎn)內(nèi)部位時(shí)間同步段的位置給定,以時(shí)間份額量度,沿相位誤差的符號(hào)為e,其定義如下:
(1)若沿處于SYNC~SEG之內(nèi),則e=0;
(2)若沿處于采樣點(diǎn)之前(TSEG1內(nèi)),則e>0;
(3)若沿處于前一位的采樣點(diǎn)之后(TSEG2內(nèi)),則e<0。
CAN技術(shù)規(guī)范中也給出了重同步跳轉(zhuǎn)寬度,重同步策略與同步規(guī)則,但比較抽象、不易理解。為深入理解節(jié)點(diǎn)是如何進(jìn)行重同步的,圖4給出了重同步的圖解。在圖4中,SY,PR,PS1和PS2分別表示同步段、傳播段、相位緩沖段1和相位緩沖段2。假定總線位流的第一位(幀起始,為“0”)起始于t1時(shí)刻、終止于t2時(shí)刻,總線位流的第2位為“1”;從第2位開(kāi)始,總線位流的“隱性”(“1”)至“顯性”(“0”)和“顯性”(“0”)至“隱性” (“1”)的跳變沿均用于重同步。在t1時(shí)刻,節(jié)點(diǎn)檢測(cè)到總線的跳變沿,便進(jìn)行硬同步,使t1時(shí)刻的跳變沿處于節(jié)點(diǎn)內(nèi)部第1位位時(shí)間的同步段內(nèi)。節(jié)點(diǎn)從第 1位的同步段開(kāi)始啟動(dòng)內(nèi)部位定時(shí),即根據(jù)系統(tǒng)要求的波特率給出內(nèi)部位時(shí)間。現(xiàn)假定由于各節(jié)點(diǎn)振蕩器頻率的不一致,在t2時(shí)刻的跳變沿未處于節(jié)點(diǎn)第2位位時(shí)間的同步段SY內(nèi),而是處于PS1內(nèi),即有e>0。這表明節(jié)點(diǎn)內(nèi)部的位時(shí)間小于總線位流的位時(shí)間。為了使節(jié)點(diǎn)能從總線上通過(guò)采樣得到正確的位數(shù)值,需使節(jié)點(diǎn)內(nèi)部的位時(shí)間延長(zhǎng),以使節(jié)點(diǎn)內(nèi)部位時(shí)間與總線位流位時(shí)間接近或相等。因此,在這種情況下節(jié)點(diǎn)應(yīng)采取的重同步策略為:使PS1延長(zhǎng)一定寬度(圖4中 PS1延長(zhǎng)2個(gè)時(shí)間份額,即同步跳轉(zhuǎn)寬度為大于等于2個(gè)時(shí)間份額,如為3個(gè)時(shí)間份額)。e<0的情況與之類似,只是PS2會(huì)相應(yīng)地縮短一定寬度。這與CAN技術(shù)規(guī)范中的重同步策略是一致的。[!--empirenews.page--]
這里需要注意的是,相位緩沖段只在當(dāng)前的位時(shí)間內(nèi)被延長(zhǎng)或縮短,在接下來(lái)的位時(shí)間內(nèi),只要沒(méi)有重同步,各時(shí)間段將恢復(fù)編程預(yù)設(shè)值。
3 控制器中位定時(shí)參數(shù)設(shè)置的一般方法
在典型的獨(dú)立CAN控制器(SJA1000或PCA82C200)中,負(fù)責(zé)位定時(shí)的寄存器為總線定時(shí)寄存器0(BTR0)和總線定時(shí)寄存器1(BTR1),其結(jié)構(gòu)如圖5所示。
這些參數(shù)的范圍在CAN中有較嚴(yán)格的規(guī)定。
在有些情況中.為了優(yōu)化網(wǎng)絡(luò)性能,這些參數(shù)的設(shè)置往往需要考慮傳輸延遲、時(shí)鐘偏頻等因素。然而,對(duì)于一般的開(kāi)發(fā)或工程實(shí)際,完全可以根據(jù)經(jīng)驗(yàn)對(duì)其進(jìn)行計(jì)算和設(shè)置。這里以一個(gè)時(shí)鐘頻率為20 MHz、通信波特率為250 Kb/s(位時(shí)間為4μs)的系統(tǒng)為例,介紹與位定位有關(guān)的各參數(shù)的計(jì)算方法和步驟。
(1) 確定時(shí)間份額。
(3)確定同步跳轉(zhuǎn)寬度和采樣次數(shù)。
為完成位定時(shí)參數(shù)的設(shè)置,最后還要確定同步跳轉(zhuǎn)寬度和采樣次數(shù)。同步跳轉(zhuǎn)寬度的一般設(shè)置原則是在允許的范圍內(nèi)應(yīng)盡可能的大一些,這樣更有利于在重同步時(shí)對(duì)沿相位誤差的補(bǔ)償,在這里可將該參數(shù)設(shè)置為3。采樣次數(shù)的設(shè)置比較容易和直接,對(duì)于高速總線,建議將SAM置為“0”,此時(shí)總線被采樣1次;而對(duì)于低/中速總線,建議將SAM置為“1”,此時(shí)總線被采樣3次。250 Kb/s屬于高速總線,所以在這里SAM應(yīng)置為0。通過(guò)以上方法和步驟所確定的各參數(shù)值,再結(jié)合式(2)、式(3)、式(5)、式(6)可直接得出寄存器 BTR0和BTR1的設(shè)置值。
4 結(jié) 語(yǔ)
(1)結(jié)合圖解的方式對(duì)CAN總線位定時(shí)、硬同步和重同步等關(guān)鍵技術(shù)的深入探討和分析,反映了CAN總線位定時(shí)和同步機(jī)制的本質(zhì)、清晰地表明了它們?cè)贑AN技術(shù)規(guī)范中的地位與作用。
(2)在CAN總線中,通信波特率(位時(shí)間)、每個(gè)位時(shí)間的采樣位置及個(gè)數(shù)、同步跳轉(zhuǎn)寬度等都可以自行設(shè)定。然而,位定時(shí)參數(shù)如果設(shè)置不當(dāng)就會(huì)檢測(cè)到錯(cuò)誤并進(jìn)行錯(cuò)誤處理,導(dǎo)致總線性能下降甚至無(wú)法工作。因此要分析、解決這樣的問(wèn)題就需要對(duì)CAN總線位定時(shí)和同步機(jī)制有較深入的理解,從而保證正確地設(shè)置位定時(shí)參數(shù)。
(3)這里所研究的內(nèi)容,是深入理解和學(xué)習(xí)CAN總線技術(shù)的前提和保證,也是進(jìn)行后續(xù)開(kāi)發(fā)和研究的基礎(chǔ)和關(guān)鍵。