CAN匯流排波特率計算方法

2021-08-03 04:26:48 字數 2847 閱讀 1217

can控制器器只需要進行少量的設定就可以進行通訊,就可以像rs232/48那樣使用。

其中較難設定的部分就是通訊波特率的計算。can匯流排能夠在一定的範圍內容忍匯流排上can節點的通訊波特率的偏差,這種機能使得can匯流排有很強的容錯性,同時也降低了對每個節點的振盪器精度。

實際上,can匯流排的波特率是乙個範圍。假設定義的波特率是250kb/s,但是實際上根據對暫存器的設定,實際的波特率可能為200~300kb/s(具體值取決於暫存器的設定)。

簡單介紹乙個波特率的計算,在can的底層協議裡將can資料的每一位時間(tbit)分為許多的時間段(tscl),這些時間段包括:

a. 位同步時間(tsync)

b. 時間段1(tseg1)

c. 時間段2(tseg2)

其中位同步時間占用1個tscl;時間段2占用(tseg1+1)個tscl;時間段2占用(tseg2+1)個tscl,所以can控制器的位時間(tbit)就是:tbit=tseg1+tseg2+tsync=(tseg1+tseg2+3)*tscl,那麼can的波特率 (canbps)就是1/tbit。

但是這樣計算出的值是乙個理論值。在實際的網路通訊中由於存在傳輸的延時、不同節點的晶體的誤差等因素,使得網路can的波特率的計算變得複雜起來。can在技術上便引入了重同步的概念,以更好的解決這些問題。這樣重同步帶來的結果就是要麼時間段1(tseg1)增加tsjw(同步跳轉寬度sjw+1),要麼時間段減少tsjw,因此can的波特率實際上有乙個範圍:1/(tbit+tsjw) ≤canbps≤1/(tbit-tsjw)

can有波特率的值四以下幾個元素決定:

a. 最小時間段tscl;

b. 時間段1 tseg1;

c. 時間段2 tseg2;

d. 同步跳轉寬度 sjw

那麼tscl又是怎麼計算的呢?這是總匯流排時序暫存器中的預分頻暫存器brp派上了用場,tscl=(brp+1)/fvbp。fvbp為微處理器的外設時鐘。

而tseg1與tseg2又是怎麼劃分的呢?tseg1與tseg2的長度決定了can資料的取樣點,這種方式允許寬範圍的資料傳輸延遲和晶體的誤差。其中tseg1用來調整資料傳輸延遲時間造成的誤差,而tseg2則用來調整不同點節點晶體頻率的誤差。但是他們由於過於靈活,而使初次接觸can的人有點無所適從。tseg1與tseg2的是分大體遵循以下規則: tseg2≥tscl2,tseg2≥2tsjw,tseg1≥tseg2

總的來說,對於can的波特率計算問題,把握乙個大的方向就行了,其計算公式可了規結為: bitrate = fpclk/( (brp+1) * ((tseg1+1)+(tseg2+1)+1)

關於can的波特率的計算,在資料手冊上已經有很詳細的說明。在此,簡要的把計算方法給出來:

tcsc :bit位每一編碼的時間長度,每bit可以配置為8~25位編碼,常設為16 。

tcsc=1/波特率/編碼長度 ;按上計算 tcsc=1/1mhz/16=62.5ns (取63) 。

brp = (tcsc x mck) - 1=6.3-1 (可以取 5)

各種延遲(tprs :)

delay of the bus driver: 50 ns

delay of the receiver: 30ns

delay of the bus line (20m): 110ns

tprs = 2 * (50+30+110) ns = 380 ns

propag= 380 ns/ tcsc-1 =6.08tcsc-1 (可取 6)

tphs1 + tphs2 = bit time - tcsc - tprs = (16 - 1 - 7)tcsc= 8

常取 tphs1 = tphs2 ,所以 tphs1 = tphs2 =4 ;

tsjw = min(4 tcsc,tphs1) = 4 tcsc (from 1 to tphs1 )

sjw = tsjw/tcsc - 1 = 3 ;

現在can_br 中的各個引數就都有了(brp=5 ;sjw=3;propag=6;phase1=phase=4),填進去就應該ok了 。

假設我們先不考慮btr0中的sjw位和btr1中的sam位。那麼,btr0和btr1就是2個分頻係數暫存器;它們的乘積是乙個擴充套件的分頻係數。即:

btr0×btr1=f_base/fbps   (1)

其中:內部頻率基準源f_base = fclk/2,即外部晶振頻率fclk的2分頻。注意任何應用中,當利用外部晶振作為基準源的時候,都是先經過2分頻整形的。

(1)式中,當晶振為16m時,f_base=8000k

當晶振為12m時,f_base=6000k

fbps就是我們所希望得到的can匯流排頻率。單位為k。

設(1)式中btr0=m,btr1=n,外部晶振16m,則有:

n =8000/    fbps   (2)

這樣,當fbps取我們希望的值時,就會得到乙個m * n的組合值。當n選定,m值也唯一。

n值can規範中規定8~25。(也就是btr1的值)基本原則為:fbps值越高時,選取n(通過設定btr1)值越大。其原因不難理解。

我假定一般應用中選取n=10,也就是:

同步段+相位緩衝段1+相位緩衝段2 =1+5+4

則(2)式簡化為

m=800/fbps

m的最大設定值為64,sja1000最大分頻係數m*n=64x25=1600。因此標準演算法中通常以16m晶振為例。其實有了公式(1),任何晶振值(6m~24m)都很容易計算。

sam的確定:低頻時,選sam=1,即取樣3次。高頻100k以上時,取sam=0,即取樣1次。

sja重同步跳寬選取: 與數字鎖相環技術有關。n值選得大時,sja可以選得大,即一次可以修正多個脈衝份額tscl。n值小或頻率低時,選sja=1。即btr0.7和btr0.6都設為0。

檔案: 波特率計算.txt

can匯流排(二) 如何測量can匯流排的波特率

這兩天在研究車載can匯流排,因為對於車上的can匯流排的介面以及波特率沒有對應的資料可查 不同的車介面都不一樣,波特率也可能不同 做一想要從車上測出can匯流排上的資料還不太容易。於是我首先使用示波器 我使用的示波器型號是tds 220 來找出汽車上can匯流排的介面,然後測出can匯流排的波特率...

波特率 不同波特率CAN匯流排系統如何進行資料收發

產品型號 產品型號 usbcan iipro功能介紹 波特率自動識別 標準波特率識別 全範圍波特率識別 設定識別範圍 全面匹配 匯流排分析功能 可以直觀的幫使用者分析can匯流排干擾和測試can匯流排狀態。智慧型中繼功能 可作為can網橋使用,實現2路can通道的資料在相同或不同波特率下實時高速交換...

示波器CAN波特率

因為對於車上的can匯流排的介面以及波特率沒有對應的資料可查 不同的車介面都不一樣,波特率也可能不同 做一想要從車上測出can匯流排上的資料還不太容易。於是我首先使用示波器 我使用的示波器型號是tds 220 來找出汽車上can匯流排的介面,然後測出can匯流排的波特率,測量波特率的步驟如下 1 將...