为什么CAN总线的负载率需要控制在30%以内

CAN采用基于消息优先级的非破坏性仲裁(Non-Destructive Arbitration)。
在总线负载较高时,低优先级帧可能会长时间无法传输,导致实时性问题。
此外,高负载可能导致总线上的冲突增多,进而引发通信错误。
在实时控制系统(如汽车电子系统)中,各种信号的传输具有严格的时间要求。
如果负载率过高,系统可能无法按时发送关键数据,导致任务失败或控制异常。
因此控制总线的负载率尤为重要,将CAN总线负载率控制在30%以内是一种经验值,也是工程实践中经过验证的标准。
它的核心目的在于平衡实时性、可靠性与容错能力,适用于汽车电子、工业控制等需要高安全性和高稳定性的领域。
在这里插入图片描述
尽管30%的限制可能导致资源利用率降低,但在涉及生命安全和系统稳定性时,这种保守设计是必要的。

CAN总线负载率的原理计算

CAN总线的负载率(Bus Load)是指总线上有效传输的数据时间占总传输时间的百分比,计算公式为:
在这里插入图片描述
其中,有效传输时间包括帧的仲裁、数据字段、校验字段、应答和帧间隔时间等。

简单来讲,总线负载率可以用 1s实际数据传输位数与1s理想(能力)数据传输位数之比。

举个例子,比如CAN总线理想传输能力为:1s传输1000bit数据 ,目前设计要求1s最大可传输500bit数据,则该总线负载率最大为 500/1000=50%。

CAN通信总线负载率计算基本概念
CAN通信总线负载率计算首先要明确以下几点:CAN报文类型(扩展帧、标准帧)、每个CAN报文周期、每种类型的CAN报文条数、总线波特率、帧间隔;
根据CAN标识符的位数不同,可以有标准数据帧和扩展数据帧两种。
在这里插入图片描述
CAN报文类型

数据段: 具有0-8个字节长度,由DLC确定,包含CAN数据帧发送的内容,最大是8位,可以发不满。

两者差别在仲裁段,标准格式的仲裁段有12bit,而扩展格式的仲裁段有32bit。

因此,在不考虑位填充的情况下:
标准格式的数据帧有108 bit,即SOF(1bit)、仲裁段(12bit)、控制段(6bit)、数据段(64bit)、CRC段(16bit)、ACK段(2bit)和EOF(7bit);
扩展格式的数据帧有128 bit,即SOF(1bit)、仲裁段(32bit)、控制段(6bit)、数据段(64bit)、CRC段(16bit)、ACK段(2bit)和EOF(7bit)。

数据帧和遥控帧之间还有3个位的帧间隔用以将两者分开
这样在实际传输一个真正的有意义的帧时,理想情况下的总位数是: 标准帧:108+3=111bit 扩展帧:128+3=131bit
在这里插入图片描述
帧间隔

假设CAN总线波特率是常用的500kbps,该总线有10ms发送周期的标准数据帧报文20条。那么标准帧的负载率就是:
在这里插入图片描述
(1s=1000ms, 10ms发送20条报文,则1s发送报文数=1000ms/10ms x 20)

CAN FD通信总线负载率计算
CAN FD的情况有些特殊,它在帧结构和通信速率上都与CAN的通信有些区别。
CAN FD的帧结构如下:
在这里插入图片描述
从上面的图中可以看到CAN FD在数据段,CRC段及一些控制位上与CAN存在较大不同。
其中当数据段字节超过16时,CRC长度也就扩展到21位。

此外CAN FD还存在低速传输速率传输部分(黄色区)和高速传输区(蓝色区)。

因此CAN FD的总线负载率计算需要按速度分区结构来分别计算如下表所示。

消息类型 最优与最差 低速区位数 高速区位数(N<16) 高速区位数(N>=16)
标准数据帧 最优 29 8N+27 8N+31
标准数据帧 最差 36 10N+34 12N+40

假设现在低速区波特率为500kps,高速区为1Mbps。
所有报文都是非扩展帧。
其中8字节有10ms周期的报文有5条,16字节50ms报文有3条,8字节100ms消息有2条。

则按上面的方法分别计算得到:
总的低速区最好情况下位数为:14500
(29x5x100)+1740(29x3x20)+580(29x2x10)=16820

总的高速区最好情况下位数为:45500
(91x5x100)+9540(159x3x20)+1820(91x2x10)=56860

所以总的最优情况下的总线负载率为:16820/500000+56860/1000000=9.05%
同理可计算得到最差情况的总线负载率:11.496%

将负载率限制在30%的原因

实时性要求是指在规定的时间内完成数据传输。
在负载率较高时,总线的平均响应时间会增加,且可能出现优先级较低的报文被长时间延迟的情况,影响系统的实时性。
根据经验与测试,30%以内的负载率通常可以确保低延迟和较高的实时性。

CAN总线在复杂电磁环境中工作,可能会受到干扰而导致重传。
如果总线负载率过高(如超过50%),一旦发生重传,系统可能出现数据积压,甚至总线拥堵(Bus Saturation)。
保持30%以内的负载率为潜在干扰留出缓冲。

当负载率接近100%时,总线上没有足够的时间间隙供后续报文发送,这会导致总线进入“饱和”状态,系统出现拥堵,甚至导致通信瘫痪。
预留带宽不仅为报文重传提供余地,也为可能的新需求(如软件更新、功能扩展)提供灵活性。

优点与控制30%的意义

高可靠性:负载率控制在30%以内能够大幅降低传输冲突和重传的概率,提升通信的稳定性。实时性保障:保证关键控制信号(如车辆制动、转向)能够按时到达接收端。扩展性强:为系统未来的功能升级或突发数据流量(如故障信息)提供足够的带宽空间。适应电磁干扰环境:即使受到外部干扰,系统仍有较高的容错能力,不至于因瞬时高负载导致崩溃。限制负载率的实际意义:在汽车、工业控制等领域,控制30%负载率是以系统安全为优先。即使某些情况下通信性能稍有浪费,但它能在极端条件下(如节点故障或环境干扰)仍然确保系统的稳定运行。

缺点与挑战

通信带宽利用率低:将负载率限制在30%以内可能导致通信资源的浪费,尤其是低流量应用中,总线的潜在带宽未被充分利用。设计复杂性增加:系统设计时需要更精确地规划报文周期、数据优先级和时间窗口,以确保所有关键数据在有限带宽下传输。硬件成本增加:为了满足30%负载率限制,可能需要更多总线(分担流量)或更高带宽的CAN FD(Flexible Data-Rate)设备,导致硬件成本上升。

实际应用中的调整与优化

在某些应用中,可以根据系统实际运行状态动态调整负载率。
例如,非实时性要求的报文可以延后发送,释放带宽。
对于带宽需求较高的场景,CAN FD提供更高的传输速率(达8 Mbps),可以适当提高总线负载率限制。
通过增加CAN总线分支(多总线架构)或对不同优先级的报文进行合理分配,可以降低单条总线的负载率。


本文转自------ 美男子玩编程 微信公众号/ 莫凡不凡 微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值