CAN 波特率及采樣點


CAN采用的是NRZ編碼,數據流中是不含有時鍾信息的,因此,報文接收設備要使用發射設備的時鍾進行同步操作,從而獲取數據。

CAN的標稱位時(Nominal bit timing)可以分為四個段:

同步段(sync_seg

傳播時間段(prop_seg

相位緩沖段1(phase_Seg1

相位緩沖段2(phase_Seg2

 首先,通過對這些字段的配置,可以確定CAN的波特率,例如我們常見的250kbps,500kbps等。

例如我們的CAN時鍾頻率是30MHz,要配置成250kbps的波特率,則應該是30*1000/250=120,也就是120個時間片(Time Quantum,以下簡稱tq)

所以我們要把位時的和湊成120,也就是sync_seg + prop_seg + phase_seg1 + phase_seg2=120

請注意,還有一個概念是同步跳轉寬度SJW(synchronization jump width),這個是用來限定延長phase_seg1 或者縮短phase_seg2的最大寬度,不計入該位時的。

這四個時段,並不是隨便取值就可以,每一個都有一定的范圍和要求。

同步段是固定一個tq,所以sync_seg=1tq;其次,prop_seg + phase_seg1有些設備中是合在一起設定,phase_seg2單獨設定。

還有如下要求:

prop_seg + phase_seg1>phase_seg2

phase_seg2>SJW

但是,即使是已知上面的這些信息,仍有很多種組合方式, 還不足以確定選用什么樣的組合能取得較好的效果,這個時候就要引入采樣點說明了。

定義是:(sync_seg + prop_seg + phase_seg1)/(sync_seg + prop_seg + phase_seg1 + phase_seg2)×100%

根據CiA(CAN in Automation)的建議是:

(1)一般配置在75-80%的位置
(2)選擇采樣點位置在85%左右為佳
(3)波特率 > 800K:75%  波特率 > 500K:80%  波特率 <= 500K:87.5%

因此,我們繼續以上面的為例,由於波特率為250kbps,因此,選擇采樣點為靠近87.5%為目標。

120tq*87.5%=105tq

因此,很容易算出phase_seg2=15tq

sync_seg + prop_seg + phase_seg1=1+prop_seg + phase_seg1=105 tq,因此prop_seg + phase_seg1=104 tq

當然,有些設備的位時控制取值可能沒有這么大的范圍,例如MCP2515,prop_seg 取值范圍是1~8 tq,phase_seg1是1~8 tq,phase_seg2是2~8 tq;而LPC54608控制器的CAN外設,prop_seg + phase_seg1的取值在0~ 255 tq,phase_seg2是0~ 127 tq。顯然,可選擇的范圍越大,能夠調控的采樣點也就越 精細。

所以就有可能采樣點配置不到恰好87.5%的位置,但是這個要求是盡可能滿足,是在滿足不了就在75%到80%之間就行了。

為了保證有效的通信,對於一個只有兩個節點的CAN網絡,其兩邊距離不超過最大的傳輸延遲和每個節點的時鍾容差能夠正確地接收和解碼每個傳輸的消息,這需要每個節點都能對每個位正確采樣。CAN總線的每一幀可以看作一連串的電平信號。大多數設備使用單點采樣,也就是在一個位時間內從采樣點的位置讀取一個電平信號,以此確定這個“位”的顯隱性。在CAN網絡中,當每個節點的采樣點位置不一樣時,由於總線過長引起的通信延遲或現場對總線的干擾,就容易發生讀取的電平不一致現象,產生CRC錯誤報文。為了提高CAN網絡的通信成功率,各節點的采樣點應設置一致。

對於一些帶CAN外設的微控制器,例如STM32或者LPC系列的某些產品,還帶有CAN預分頻功能,就是把CAN的輸入時鍾進行分頻,分頻可以降低頻率,可以簡單理解為增大tq,將上述的四個時間段配置好以后,需要修改波特率,可以調整分頻數,如果配置500kbps的時候沒有使用預分頻(分頻寄存器內容為0,分頻數為1),接下來只要將分頻數分別配置為2或者5,就可以獲得250kbps或者100kbps的波特率了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM