CAN总线负载率的计算

大家开车看导航时最烦心的恐怕就是前方路段上的红色标记了。它表示前道路车辆比较多,有可能堵车。而总线负载率bus load就是表征在CAN总线上通信数据量的一个参数。总线负载率与通信速率的关系为:
总线负载率=每秒中总收发位数/总线波特率
工程上平均负载率一般不超过30%, 那么这个总线负载率该如何计算呢。要解决这个问题,首先就要看看CAN通信的帧定义。

经典CAN通信总线负载率计算

CAN 通信数据位计算

根据CAN 标识符的位数不同,可以有标准数据帧和扩展数据帧两种。
对于标准数据帧,它的帧结构为:
标准数据帧结构图上的N代表数据段传输数据的字节数。此外,除了过载帧和错误帧之外,帧与帧之间需要有3个1表示的帧空间,也就是上图中的IFS。这样在实际传输一个真正有意义的帧时,理想情况下的总位数就是:
理想情况下传输一帧的总位数= 44+8N+3=47+8N

注意这是说的理想状态下,实际通信时,这种情况无异于买彩票中大奖。这个原因就是,CAN通信规定当发送方连续发出5个一样的位时,必须在第5个位后插入一个不同的位,这就是CAN通信的位填充机制。这种位填充机制在上图黄色部分有效。因此实际CAN通信时,需要考虑这个位填充带来的CAN数据位数量的变化。这里还有一种买彩票中大奖的情况,就是最恶劣情况。这个最恶劣情况下相当于CAN帧上从帧起始开始出现连续5个0,而后位插入了一个1,不巧后面4个要传输的位都是1,于是后面发送完4个原定要发送的数据1后又要填充0 ,而后原定要发送的数据又偏巧都是0,于是再填充1;如此每4个原定发送位都必须再填充一位。这就是最恶劣情况下的CAN传输。它的总位数为:

最恶劣情况下传输一帧的总位数=理想情况下传输一帧的总位数+位填充数量。
位填充数量=(位填充区长度-5)/4+1=(44-10-5+8N)/4+1=(29+8N)/4+1
所以
最恶劣情况下传输一帧的总位数=47+8N+(29+8N)/4+1=48+8N+(29+8N)/4

因此标准数据帧的总位数介于以下两个值之间:
最优情况:47+8N
最差情况:48+8N+(29+8N)/4

对于扩展数据帧CAN而言,帧结构如下:
扩展帧结构

按上面的计算方法可以计算出最优和最差两种情况的数据位数:
最优情况:67+8N
最差情况:68+8N+(49+8N)/4

1.2 计算实例

设:标准数据帧,500kbps波特率,所有报文发送的数据长度为N=8,其中共有5条周期为10mS的消息,3条周期为50mS的消息,2条100mS的消息。按上面的方法计算。

消息类型1秒内此类消息最小位长1秒内此类消息最大位长
10ms5550067500
50ms66608100
100ms22202700
总计6438078300

因此,最优情况下负载率为=64380/(500x1000)=12.876%
最差情况下负载率为=78300/(500x1000)=15.66%
以上只是理论计算,下面用实际测试一下。使用IG模块模拟上述CAN通信。为了简便期间,各个消息Data内容全部填充0,以模拟较差情况下的CAN总线情况。结果如下:
最恶劣情况可以看到Busload一项下的当前值为14.52%。
为了模拟较好的通信情况,各个消息数据位按最大可能避免数据段种出现位填充的方式,将各个数据内容按0x55(二进制:0101 0101 可避免在数据段种出现位填充)填写。结果为:13.13%
最差情况由于上述实例只是控制了数据段的位填充,所以实际测试结果都应在理论计算的最优和最差结果之间。实际测试确实如此,因此理论计算验证通过,可以作为评估总线负载率的方法。

2 CAN FD通信总线负载率计算

CAN FD的情况有些特殊,它在帧结构和通信速率上都与CAN的通信有些区别。CAN FD的帧结构如下:
CAN FD Frame(图片来源:Vector https://cdn.vector.com/cms/content/know-how/can/Slides/CAN_FD_Introduction_EN.pdf )

从上面的图中可以看到CAN FD在数据段,CRC段及一些控制位上与CAN存在较大不同。其中当数据段字节超过16时,CRC长度也就扩展到21位。此外CAN FD还存在低速传输速率传输部分(黄色区)和高速传输区(蓝色区)。因此CAN FD的总线负载率计算需要按速度分区结构来分别计算如下表所示

消息类型最优与最差低速区位数高速区位数(N<16)高速区位数(N>=16)
标准数据帧最优298N+278N+31
标准数据帧最差3610N+3412N+40
扩展数据帧最优488N+278N+31
扩展数据帧最差6010N+3412N+40

而后分别各种消息计算低速区和高速区在1秒内的总位数而后分别除以不同段的波特率即可得到CAN FD的总线负载率。
例如
设:低速区波特率为500kps,高速区为1Mbps。所有报文都是非扩展帧。其中8字节有10mS周期的报文有5条,16字节50ms报文有3条,8字节100ms消息由2条。则按上面的方法分别计算得到
总的低速区最好情况下位数为:1450+1740+580=16820
总的高速区最差情况下位数为:45500+9540+1820=56860
所以总的最优情况下的总线负载率为:
16820/500000+56860/1000000=9.05%

同理可计算得到最差情况的总线负载率:11.496%

后记

本文于2024.2.4 日首发于“车灯电子扫地僧”。 如果你喜欢我的文章,也可以“车灯电子扫地僧”搜索微信订阅号。更多文章等待您的发掘.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值