互聯(lián)網(wǎng)優(yōu)化營銷深圳網(wǎng)站優(yōu)化推廣
can控制器只需要進行少量的設(shè)置就可以進行通信,就像RS232那樣。其中較難設(shè)置的部分就是通信波特率的計算。can總線能夠在一定范圍內(nèi)容忍總線上can節(jié)點的通信波特率的偏差,這種技能使得can總線有很強的容錯性,同時也降低了對每個節(jié)點的振蕩器精度。
實際上,can總線的波特率是一個范圍。假設(shè)定義的波特率是250KB/S,但是實際上根據(jù)對寄存器的設(shè)置,實際的波特率可能為200-300KB/S(具體取決于寄存器的設(shè)置)。
簡單介紹一下波特率的計算,在can的底層協(xié)議里將can數(shù)據(jù)的每一位時間(TBit)分為許多的時間段(Tscl),這些時間段包括:位同步時間Tsync,時間段1Tseg1,時間段2Tseg2.
其中位同步時間占用1個Tscl;,時間段1占用(Tseg1+1)個Tscl;時間段2占用Tseg2+1個Tscl,所以can控制器的位時間TBit就是:
TBit = Tseg1+Tseg2+Tsync=(Tseg1+Tseg2+3)*Tscl,那么can的波特率canbps就是1/TBit。
但是這樣計算出的值是一個理論值。在實際的網(wǎng)絡(luò)通信中由于存在傳輸?shù)难訒r,不同節(jié)點的晶體的誤差等因數(shù),使得網(wǎng)絡(luò)can的波特率的計算變得復(fù)雜起來。can在技術(shù)上引入了重同步的概念,以更好的解決這些問題。
這樣重同步帶來的結(jié)果就是要么時間段1(Tseg1)增加TSJW(同步跳轉(zhuǎn)寬度SJW+1),要么時間段減少TSJW,因此can的波特率實際上有一個范圍:
1/(TBit+TSJW) <= CANbps <= 1/(TBit-TSJW)
CAN波特率的值由以下幾個元素決定:
-
最小時間段Tscl
-
時間段1 Tseg1
-
時間段2 Tseg2
-
同步跳轉(zhuǎn)寬度 SJW
那么Tscl是怎么計算的呢?
這是總線時序寄存器中的預(yù)分頻寄存器BRP派上了用場,Tscl = (BRP+1)/FVBP,FVBP為微處理器的外設(shè)時鐘。
tscl = pclk。
Tseg1和Tseg2又是怎么劃分的呢?
Tseg1和Tseg2的長度決定了CAN數(shù)據(jù)的采樣點,這種方式允許寬范圍的數(shù)據(jù)傳輸延遲和晶體的誤差。其中Tseg1用來調(diào)整數(shù)據(jù)傳輸延遲時間造成的誤差,而Tseg2則用來調(diào)整不同點節(jié)點晶體頻率的誤差。
但是他們由于過于靈活,而使初次接觸CAN的人有點無所適從。TSEG1與TSEG2的是分大體遵循以下規(guī)則: Tseg2≥Tscl2,Tseg2≥2TSJW,Tseg1≥Tseg2
總的來說,對于CAN的波特率計算問題,把握一個大的方向就行了,其計算公式可了規(guī)結(jié)為: BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1)
最后,我們來說說如何計算波特率。
can總線有兩個總線時鐘寄存器BTR0、BTR1。
can系統(tǒng)時鐘公式:
tscl = 2tclk(32BRP.5 + 16BRP.4 + 8BRP.3 + 4BRP.2 + 2*BRP.1 +BRP.0 + 1)
其中tclk=1/晶振頻率=pclk。
同步跳轉(zhuǎn)寬度:
Tsjw = “tscl”(2SJW.1 + SJW.0 + 1)
位周期T
TBit = Tseg1+Tseg2+Tsync=(Tseg1+Tseg2+3)*Tscl
Tseg1 = tscl*(8TSEG1.3 + 4TSEG1.2 +2*TSEG1.1 + TSEG1.0 + 1)
Tseg2 = tscl*(4TSEG2.2 +2TSEG2.1 + TSEG2.0 + 1)
CAN波特率=APB總線頻率/BRP分頻器/(1+tBS1+tBS2)。
比如:
總線時鐘寄存器BTR0:0x2,;總線時鐘寄存器BTR1:0x14。
TBit = tscl(1+5+2)=8tscl
tscl = 2tclk*(3) = 6tclk
TBit =48tclk
tclk = 1/48000000
TBit = 1/1000000
即can的波特率canbps就是1/TBit=1MHz。