CAN 控制器的波特率问题
Can 控制器器只需要进行少量的设置就可以进行通信,就可以像 RS232/48 那样使用。
其中较难设置的部分就是通信波特率的计算。CAN 总线能够在一定的范围内容忍总线上
CAN 节点的通信波特率的偏差,这种机能使得 CAN 总线有很强的容错性,同时也降低了
对每个节点的振荡器精度。
实际上,CAN 总线的波特率是一个范围。假设定义的波特率是 250KB/S,但是实际上根据
对寄存器的设置,实际的波特率可能为 200~300KB/S(具体值取决于寄存器的设置)。
简单介绍一个波特率的计算,在 CAN 的底层协议里将 CAN 数据的每一位时间(
Bit
)分
为许多的时间段(
scl
),这些时间段包括:
A. 位同步时间(
sync
)
B. 时间段 1(
seg1
)
C. 时间段 2(
seg 2
)
其中位同步时间占用 1 个
scl
;时间段 2 占用(
seg1
+1)个
scl
;时间段 2 占用
(
seg 2
+1) 个
scl
, 所以 CAN 控制器的位时间(
Bit
) 就是:
Bit
=
seg1
+
seg 2
+
sync
=(
SEG1
+
SEG2
+3)*
scl
,那么 CAN 的波特率 (CANbps)
就是 1/
Bit
。
但是这样计算出的值是一个理论值。在实际的网络通信中由于存在传输的延时、不同节
点的晶体的误差等因素,使得网络 CAN 的波特率的计算变得复杂起来。CAN 在技术上便
引入了重同步的概念,以更好的解决这些问题。这样重同步带来的结果就是要么时间段
1(
seg1
)增加
SJW
(同步跳转宽度 SJW+1),要么时间段减少
SJW
,因此 CAN 的波特率
实际上有一个范围:
SJWBit
+
1
CANbps
SJWBit
−
1
CAN 有波特率的值四以下几个元素决定:
A. 最小时间段
scl
;
B. 时间段 1
SEG1
;
C. 时间段 2
SEG2
;