CAN总线负载率
概念
CAN总线负载率是指在CAN总线上单位时间内实际传送的位数和可以传送的位数之比。
负载率计算
假设报文以定周期发送,总线上的报文只有数据帧一种类型,不存在远程帧、错误帧和过载帧这三种类型。因此每帧报文包括:帧起始(1bit)、仲裁域(29bit)、控制域(6bit)、数据域(8×8bit)、循环冗余码域(15bit)、应答域(2bit)和帧结尾(7bit),共124位。
假设每秒发送的数据帧数为185帧:
对
于
高
速
C
A
N
总
线
(
500
k
b
p
s
)
的
负
载
率
=
185
∗
124
500
∗
1000
∗
100
%
=
4.58
%
对于高速CAN总线(500kbps)的负载率 = \frac{185*124}{500*1000}*100\% = 4.58\%
对
于
高
速
C
A
N
总
线
(
5
0
0
k
b
p
s
)
的
负
载
率
=
5
0
0
∗
1
0
0
0
1
8
5
∗
1
2
4
∗
1
0
0
%
=
4
.
5
8
%
对
于
低
速
C
A
N
总
线
(
250
k
b
p
s
)
的
负
载
率
=
185
∗
124
250
∗
1000
∗
100
%
=
9.16
%
对于低速CAN总线(250kbps)的负载率 = \frac{185*124}{250*1000}*100\% = 9.16\%
对
于
低
速
C
A
N
总
线
(
2
5
0
k
b
p
s
)
的
负
载
率
=
2
5
0
∗
1
0
0
0
1
8
5
∗
1
2
4
∗
1
0
0
%
=
9
.
1
6
%
负载率宜控制在30%以内
业界普遍认为30%为CAN总线负载率的高压线,相关解释可参考知乎上的回答
link
.
该回答中提到:
CAN总线本质上是一种串口通讯,靠在时间线上对每一位的电压值进行调制来搭载不同的信号。因为各节点共用总线介质,对总线的使用权界定就至关重要。先说结论:只有在总线空闲时,发送节点才能向总线上发送帧起始及后续帧ID,只有在帧ID赢得仲裁时,发送节点拥有总线控制权进而向总线发送报文剩余部分,在仲裁中失败的节点让出总线控制权等待下次总线空闲时继续尝试发送。我们可以看到如果某一个节点需要发送一帧报文,它需要同时满足两个条件:1、总线是空闲的,即目前没有任何节点在发送报文,在总线上表示为节点监测到11个连续的隐性位;2、所需发送的报文赢得ID仲裁,即报文优先级较高。
一个报文在试图发送时,必须满足上述两个条件才能完成发送。这里的问题就是:如果一个优先级相对较低的节点向外发报文时,会因为不断地在仲裁中失败而导致发送延迟。如果延迟过大会引起通讯失败。
负载率越高,代表需要发送的数据越多,相对来说低优先级节点发生通讯延迟的概率越大。
所以500kbps的高速CAN按照之前负载率计算的假设,每秒发送的帧数宜控制在:
500
∗
1000
∗
30
%
124
=
1209
帧
\frac{500*1000*30\%}{124} = 1209帧
1
2
4
5
0
0
∗
1
0
0
0
∗
3
0
%
=
1
2
0
9
帧