1. 程式人生 > >STM32中CAN波特率的計算

STM32中CAN波特率的計算

車輛使用的250K 的波特率,使用STM32製作的控制板中的CAN波特率的計算

波特率=APB1Clock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler

(PS:CAN_SJW表示重新同步跳躍寬度,不參與波特率的計算,其值可以程式設計為1到4個時間單元,表示該匯流排對波特率範圍的容差度。公式中1表示同步段固定為一個單位時間。)

APB1Clock=36Mhz,CAN_BS1=3,CAN_BS2=5,CAN_Prescaler=16

     36000k/9/16=250k/s

另外,儘可能地把取樣點設定為CiA推薦的值:

CiA 波特率
75% >800K
80% >500K
87.5% <=500K

CiA計算方式:(1+CAN_BS1)/(1+CAN_BS1+CAN_BS2)

取樣點設定的影響:取樣點設定的符合表格中的範圍,CAN通訊會更穩定。

CAN位時間組成 取決於配置的“原子”時間單位稱為時間量子(tq) - 這些時間量子的倍數。時間量程長度來自位元率預分頻器和使用的振盪器頻率。
CAN位時間邏輯上分為四個段。同步段總是長度為1 tq。後面的傳播段和相位段1對於使用者是不可區分的。它被配置為一個值。第四部分是相位段2.在兩個相位段之間,定位取樣點。如果位定時設定將取樣點移動到位的結尾,則傳播段被放大,以便可以實現更長的網路。如果取樣點在另一個方向配置,則重新同步功能會增加。
所有連線的CAN節點的取樣點應該相同。然而,在實踐中,如果取樣點區別不大就足夠了。汽車行業為SAE J2284系列中的位定時設定指定了一些建議。對於CANopen網路,應使用CiA 301中給出的建議。取樣點應為位時間的87.5%。對於大多數指定的位元率,允許85%至90%的範圍。當然,公差範圍越大,網路的最大可能長度越短。