CAN總線(xiàn)采用的是異步串行通信,也就是沒(méi)有單獨的時(shí)鐘線(xiàn)來(lái)保證各個(gè)收發(fā)器之間時(shí)鐘的一致,每個(gè)收發(fā)器是按事先設置的波特率來(lái)對總線(xiàn)上的電平進(jìn)行分位。因此波特率設置準確對CAN總線(xiàn)的穩定通信來(lái)說(shuō)非常重要。
CAN總線(xiàn)里我們可以通過(guò)對CAN 節點(diǎn)里的位定時(shí)寄存器的控制來(lái)實(shí)現不同波特率的通信。CAN協(xié)議里將一個(gè)位時(shí)間分為同步段、傳播段、相位緩沖段1和相位緩沖段2。每個(gè)段的時(shí)間長(cháng)度都可以用一個(gè)整數的基本時(shí)間單位表示,該基本時(shí)間單位由系統的時(shí)鐘振蕩器分頻得到。
同步段位于一個(gè)位的起始位置,CAN-bus規定跳變沿為同步信號,但是發(fā)送節點(diǎn)發(fā)送一個(gè)位跟接收節點(diǎn)接收到這個(gè)位之間存在網(wǎng)絡(luò )傳播延遲,傳播段則是為了補償這段傳播延遲,由于采樣點(diǎn)位置在相位緩沖段1跟相位緩沖段2之間,通過(guò)設置相位緩沖段1和相位緩沖段2的值,可以調整采樣點(diǎn)位置,保證每個(gè)位采樣點(diǎn)一致。緩沖段的長(cháng)度調節范圍則是由同步跳轉寬度(SJW)決定。

圖 1 CAN位時(shí)間結構圖
簡(jiǎn)單的了解了CAN總線(xiàn)位時(shí)間的分段后,我們來(lái)看看一個(gè)節點(diǎn)的波特率到底要如何設置。如圖2是某ARM內核的CAN位時(shí)間特性寄存器 (CAN_BTR)。

圖 2 某ARM內核位時(shí)間特性寄存器結構圖
SILM(靜默模式)跟LBKM(回環(huán)模式)用于調試;
SJW:同步跳轉寬度;
TS2/TS1:位時(shí)間里兩個(gè)時(shí)間段的分配;
BRP:波特率分頻器,該區域定義了基本時(shí)間單元的長(cháng)度;
例如某著(zhù)名車(chē)廠(chǎng)CAN通信標準里規定,通信速率為125 kbps時(shí),應該采用單次采樣,采樣點(diǎn)位置設置在70%~77%之間。其位定時(shí)參數取值可見(jiàn)表1與表2。

表 1 LS_CAN通信速率與采樣點(diǎn)參數

表 2 LS_CAN可選時(shí)間份額與同步跳轉帶寬
采樣點(diǎn):采樣點(diǎn)不能太靠前也不能太靠后,否則如果剛好處于一個(gè)位的上升沿或者下降沿區間,會(huì )造成識別錯誤,所以根據CIA105的規范,采樣點(diǎn)在87.5%左右比較合適。但是一般我們可根據實(shí)際情況選取75%~85%之間;
同步跳轉寬度(SJW):SJW的值直接影響到重同步時(shí)相位緩沖段的可調節的范圍,SJW的值可以在1~4之間選擇,我們選擇3、4可以使總線(xiàn)獲得更寬的波特率容忍度;
采樣次數:分為單次采樣跟三次采樣,三次采樣在設計之初雖然是為了過(guò)濾掉總線(xiàn)上毛刺,但是采用三次采樣經(jīng)常會(huì )影響SJW的跳轉,所以實(shí)際應用中我們一般都會(huì )采用單次采樣。
了解設置波特率的原則后,我們采用ZLG的波特率計算軟件,對25kbps波特率的設置參數進(jìn)行計算,計算結果如圖3。

圖 3 25kbps波特率計算參數
根據上面提到的原則,我們選取采樣點(diǎn)為75%,SJW為4,時(shí)間份額為14的一組參數,采用ZLG的CAN卡做驗證。
l自動(dòng)波特率識別:采用CANScope自動(dòng)偵測波特率的功能,對CAN卡的波特率進(jìn)行識別,識別結果為25kbps;

圖 4 自動(dòng)偵測波特率
l采樣點(diǎn)測試:采用CANScope對當前波特率下CAN卡的采樣點(diǎn)進(jìn)行測試,測試結果為75%;

圖 5 采樣點(diǎn)測試
l位寬容忍度測試:采用CANScope對當前波特率下CAN卡進(jìn)行位寬容忍度測試,測試其對波特率的容忍度情況,測試結果為24kbps~26kbps,容忍度情況較好;

圖 6 位寬容忍度測試
l位時(shí)間測試:用CANScope的眼圖功能對當前波特率下CAN卡進(jìn)行位時(shí)間測試,位時(shí)間為40us,與25kbps波特率的位時(shí)間相符。

圖 7 眼圖測試位時(shí)間
通過(guò)對波特率計算器計算出來(lái)的波特率寄存器設置參數進(jìn)行驗證,發(fā)現測試結果跟我們的預期結果一致,因此在使用特殊波特率時(shí),我們可以借助波特率計算器來(lái)快速計算出位定時(shí)寄存器的參數值。下面我們給出一些可參考的特殊波特率的參數:

|