轉:CAN總線學習筆記(5)- CAN通信的位定時與同步

轉自:https://blog.csdn.net/weixin_40528417/article/details/79936476

依照瑞薩公司的《CAN入門書》的組織思路來學習CAN通信的相關知識,並結合網上相關資料以及學習過程中的領悟整理成筆記。好記性不如爛筆頭,加油!

1 位定時

1.1 比特率和波特率

1) . 位速率:又叫做比特率(bit rata)信息傳輸率,表示的是單位時間內,總線上傳輸的信息量,即每秒能夠傳輸的二進制位的數量,單位是bit per second。
2)波特率:又叫做傳碼率信號傳輸率,表示的是單位時間內傳輸的碼元的數量,當兩相調製時,一個碼元用一個二進制位表示,此時波特率在數值上和比特率是一樣的,CAN總線正是兩項調製這種情況。

Tips: 比特率波特率並不是一回事兒,這一定一定要牢記。

1.2 位時間

1.2.1 位時間的概念

位時間:表示的是一個二進制位在總線上傳輸時所需要的時間。
所以:

=1位速率=1位時間

首先了解以下CAN總線系統中的兩個時鐘:晶振時鐘週期CAN時鐘週期

  • 晶振時鐘週期:是由單片機振盪器的晶振頻率決定的,指的是振盪器每震盪一次所消耗的時間長度,也是整個系統中最小的時間單位。
  • CAN時鐘週期:CAN時鐘是由系統時鐘分頻而來的一個時間長度值,實際上就是一個時間份額Tq。可以按照下面的公式計算:
    CAN=2××BRPCAN時鐘週期=2×晶振時鐘週期×BRP

    其中BRP叫做波特率預分頻值(baudrate prescaler)。
    位時間

1.2.2 位時間的分段

如上文所述,在CAN的位定時中,一個CAN時鐘週期稱爲一個時間量子Tq
如下圖所示:位時間分爲四個段:同步段、傳播段、相位緩衝段1、相位緩衝段2,總共8~25個時間量子(Tq)。
位時間

1)同步段(Synchronization Segment):

  • 長度固定,1個時間量子Tq;
  • 一個位的傳輸從同步段開始;
  • 同步段用於同步總線上的各個節點,一個位的跳邊沿在此時間段內。

2)傳播段(Propagation Segment):

  • 傳播段用於補償報文在總線和節點上傳輸時所產生的時間延遲;
  • 傳播段時長 ≥ 2 × 報文在總線和節點上傳輸時產生的時間延遲 ;
  • 傳播段時長可編程(1~8個時間量子Tq)。

3)相位緩衝段1(Phase Buffer Segment1):

  • 用於補償節點間的晶振誤差;
  • 允許通過重同步對該段加長;
  • 在這個時間段的末端進行總線狀態的採樣;
  • 長度可編程(1~8個時間量子Tq)

4)相位緩衝段2(Phase Buffer Segment2):

  • 用於補償節點間的晶振誤差;
  • 允許通過重同步對該段縮短;
  • 長度可編程(1~8個時間量子Tq)

於是

tBit=tSS+tPS+tPBS1+tPBS2tBit=tSS+tPS+tPBS1+tPBS2

tBit:位時間
tSS:同步段時間
tPS:傳播段時間
tPBS1:時間段1
tPBS2:時間段2

2 CAN的同步機制

在CAN通信中,有兩種同步機制:硬同步重同步

2.1 同步的規則

一個位時間內只允許一種同步方式,要麼硬同步要麼重同步;
☆ 任何一個從“隱性”到“顯性”的下降沿 都可以用於同步;
硬同步發生在報文的SOF位,所有接收節點調整各自當前位的同步段,使其位於發送的SOF位內;
重同步發生在一個報文SOF位之外的其它段,當下降沿落在了同步段之外時發生重同步;
☆ 在SOF到仲裁場發送的時間段內,如果有多個節點同時發送報文,那麼這些發送節點對跳變沿不進行重同步

2.2 硬同步

硬同步發生在SOF位,所有接收節點調整各自當前位的同步段調整寬度不限
硬同步
(1)發送節點Node_A在發送SOF位時,SOF位的下降沿在SS段;
(2)這個時候接收節點Node_B發現自己當前位的SS段和發送節點SOF位的SS段不同步。也就是說當Node_A產生SOF位SS段時,Node_B的當前位的SS段已經在5個Tq之前產生了;
(3)於是接收節點Node_B強行將自己當前位的SS段拉到與SOF位的SS段同步。

2.3 重同步

重同步發生在一個報文SOF位之外的其它位場內,當接收節點Node_B當前位的下降沿落在了發送節點Node_A當前位的同步段之外時發生重同步。
重同步會導致相位緩衝段1的延長或者相位緩衝段2的縮短,從而保證採樣點的準確。

2.3.1 PBS1延長

發的晚(慢),收的早(塊),導致PBS1延長。
重同步
如上圖所示:
(1)發送節點Node_A比接收節點Node_B的時間慢了,也就是說Node_A當前位的ss段產生的時候,Node_B 當前位的ss段已經在2個Tq之前產生了;
(2)所以這個時候接收節點Node_B就將PBS1延長2個Tq的時間;
(3)於是這個時候Node_A當前位的採樣點就和Node_B的採樣點同步了。

2.3.2 PBS2縮短

發的早(快),收的晚(慢),導致PBS2縮短。
重同步2
如上圖所示:
(1)發送節點Node_A當前位的SS段誕生2Tq時長之後,接收節點Node_B的當前位才產生SS段;
(2)於是,接收節點Node_B當前位的PBS2段縮短,
(3)這樣就會導致接收節點Node_B的下一位能夠提前2個Tq,從而Node_B的下一位採樣點和Node_A下一位的採樣點能夠同步。

2.3.3 同步跳轉寬度

在重同步時,有個同步跳轉寬度(SJW,Synchro Jump Width)的概念,表示的是PBS1和PBS2重同步時允許跳轉的最大寬度
同步跳轉寬度必須滿足以下幾個條件:

  • SJW必須小於PBS1和PBS2的最小值
  • SJW最大值不能超過4

3 位定時參數的確定

位定時的參數主要涉及以下幾個:
(1)位速率:單位爲bps、Kbps、Mbps

1Mbps=1000Kbps=1000000bps1Mbps=1000Kbps=1000000bps

NBT 表示的是一個位時間tBit內包含Tq的個數。
(4)傳輸延遲時間tPTS
CAN報文在CAN總線上的傳輸時,物理延遲包含兩個部分:

  • 在CAN-BUS上傳輸造成的延遲
  • 在節點上傳輸造成延遲
    延遲時間
    按照CAN通信協議的規定,補償給傳播延遲的時間長度要至少等於實際實際傳播延遲時長的2被,即:
    tPTS2×tdel=2×(tdel+tBus)tPTS≥2×tdel=2×(tdel+tBus)

需要注意的是

Tips: 在CAN總線通信系統中是以時間量子Tq來度量時間的,所以如果延遲補償時間tPTS = 3.1Tq,那麼這個時候要取:tPTS = 4Tq。

(5)相位緩衝段
相位緩衝段的時間長度分爲兩種情況:

if (NBT-1-tPTS_Tq)/2==偶數
    PBS1_Tq = PBS2_Tq = (NBT-1-tPTS_Tq)/2
else
    PBS1_Tq = (NBT-1-tPTS_Tq)/2
    PBS2_Tq = PBS1_Tq + 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(6) 同步跳轉寬度

SJW=min(PBS1_Tq,4)SJW=min(PBS1_Tq,4)

(7) 驗證晶振誤差Df
CAN總線的晶振誤差必須同時滿足下面三個條件:

  • Df<=SJW(2×10×NBT)Df<=SJW(2×10×NBT)

4 例子

以下面的例子來講述位定時參數的確定方法:
MCU晶振16MHz,位速率1Mbps,總線長度20m,單位總線延遲5ns/m,物理接口的發送接收延遲150ns

(1)晶振時鐘週期:T=1s/16MHz = 62.5ns
(2)位時間 :tBit = 1/1Mbps = 1000ns
(3)BPR和NBT:考慮到 T = 125ns,tBit = 1000ns,所以BPR只能取值爲1,才能滿足NBT∈[8,25],於是預分頻數BPR=1;
(4)CAN時鐘週期Tq = 2 × 62.5 × 1 = 125ns
(5)NBT = 8
(6)傳輸延遲時間tPTS

tPTS=2×20×5+150=500nstPTS=2×(20×5+150)=500ns

(8)晶振誤差

  • Df<=SJW(2×10×NBT)=1(2×10×8)=0.00625Df<=SJW(2×10×NBT)=1(2×10×8)=0.00625
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章