在使用PEAK硬體自帶的PCAN VIEW連接時,一般都是使用軟體自帶的波特率設置。但是其實它還可以自定義波特率。之所以需要自定義波特率,是因為即使波特率的數值一樣,如果決定波特率的一些其他參數不同,也會影響通信的質量。現在我們就通過PCAN VIEW的自定義波特率來簡單地講下波特率的計算方法。
PCAN VIEW自定義波特率的方法
1.在連接的界面選擇向右的箭頭,選擇Manage Bit Rate。
2.只要在這個界面點擊左下角的Add就可以添加自定義的波特率了。
CAN的波特率可以用以下四個變量可以算出:
A.最小時間段 Tscl;
B.時間段1 TSEG1;
C.時間段2 TSEG2;
D.同步跳轉寬度 SJW。
其中最小時間段由CAN控制器的時鐘頻率以及分頻決定。
PCAN VIEW提供的變量計算波特率的公式如下:
以PCAN VIEW預定義的1MBit/s波特率為例,計算方法為24MHz÷3÷(5+2+1)=1MBit/s。
CAN協議關於位時間的定義
上個例子,如果把TSEG1和TSEG2改成4和3,波特率的數值是不變的,但是可以看出,採樣點的數值變成了62.5%。所以如果想要自定義波特率,我們也需要知道這些變量的含義,在CAN協議對位時間的定義中可以找到它們。
1個位時間包含4個功能段,分別是同步段,傳播段,相位緩衝段1,相位緩衝段2。為了便於編程,有些時候會把傳播段和相位緩衝段1合併成一個時間段。位時間的數值相當於1/波特率,就是一位在CAN總線上傳遞的時間。這一位的值(1或0)由採樣點的電平決定。
Prescaler:分頻很容易理解,控制器的時鐘頻率進行分頻後會得到CAN的時鐘,CAN時鐘的一個時間周期就是之前提到的最小時間段tscl,也稱作時間份額,代表的是CAN控制器工作時的最小時間單位。
SYNC_SEG:同步段用於同步總線上各個節點,固定長度為1個tscl。其中應該有一個跳變沿。
PROP_SEG:傳播段用於補償信號通過網絡和節點傳播的物理延遲,長度應能保證2倍的信號在總線的延遲,長度為1到8個tscl。
PHASE_SEG:相位緩衝段用於補償跳變沿的相位誤差,相位緩衝段1的結尾是採樣點位置。相位緩衝段1和2長度均為1到8個tscl。
TSEG1 = PROP_SEG + PHASE_SEG1。
TSEG2 = PHASE_SEG2。
位時間 = SYNC_SEG + TSEG1 + TSEG2,長度為8到25個tscl。
採樣點 = (SYNC_SEG + TSEG1)÷位時間。
SJW:同步跳轉寬度定義了在重新同步時可以縮短或延長的最大時鐘周期數。因為重新同步時,相位緩衝段1會延長或是相位緩衝段2縮短。同步跳轉寬度取值為1到4,同時必須不大於PHASE_SEG1的時間份額數。
BTR0和BTR1的含義
CAN控制器中的總線定時寄存器(BTR)用於儲存上述數據,同時在PCAN VIEW中也可以直接輸入BTR數值給出波特率。BTR0和BTR1各8位,代表含義如下。
BTR0
tscl = 2 * tCLK * (32 * BRP.5 + 16 * BRP.4 + 8 * BRP.3 + 4 * BRP.2 + 2 * BRP.1 + BRP.0 + 1)
tSJW = tscl * (2 * SJW.1 + SJW.0 + 1)
BTR1
tSYNCSEG = 1 * tscl
tTSEG1 = tscl * (8 * TSEG1.3 + 4 * TSEG1.2 + 2 * TSEG1.1 + TSEG1.0 + 1)
tTSEG2 = tscl ´ (4 * TSEG2.2 + 2 * TSEG2.1 + TSEG2.0 + 1)
SAM=1表示採樣三次,SAM=0表示採樣一次。