在前面6篇文章:CAN通讯系列3-CAN通讯如何传递信号 CAN通讯系列4- CAN数据帧及其仲裁 CAN通讯系列5- CAN总线定义 CAN通讯系列6- 波特率是什么? CAN通讯系列7- 如何准确接收数据? CAN通讯系列8- 揭开波特率的神秘面纱 我们已经解决了一个控制器的多个信号通过怎样的形式传递给另一个控制器,即通过CAN数据帧,包含报文ID,数据长度和数据等信息,并在物理层面以怎样的电压形式进行传递。也解决了一个控制器的CAN报文数据以多快的速度传递给另一个控制器。而在实际开发过程,针对CAN报文传递通常还需要考虑一个问题:负载率。 通俗地讲,就好比一条报文就是CAN总线上一辆辆飞驰的汽车,如果发送的报文太快太频繁,可能会出现拥挤,而导致传输阻塞,信息延迟或丢失等问题,因此,在设计一条CAN总线有多少报文,报文多快频率发送时,就用负载率来衡量。在给定时间内,CAN总线所采用的通信参数与总线容量之比,大白话就是CAN总线具备1s传递1000bit数据的能力,而目前设计如果要求1s传递500 bit数据,那么负载率就是50%,如果要求1s传递1000bit数据,那么负载率就是100%。接下来就开始负载率的计算:1 负载率的计算
针对负载率如何计算,首先要明确目标的CAN总线波特率是多少;然后明确该总线有哪些CAN帧,每种类型的CAN帧有多少条,发送周期是多少;再考虑帧间隔;最后根据前面的信息计算负载率。假设有一条CAN总线的波特率是500Kbps,该总线有10ms发送周期的标准数据帧报文20条,20ms发送周期的扩展数据帧报文20条,那么总线的负载率大概是多少?1 )CAN总线波特率为500Kbps,则意味着1s能传递500,000bit数据。2) CAN帧的位数,这里只考虑数据帧,包括其标准格式和扩展格式。 对于标准格式的数据帧和扩展格式的数据帧,其帧结构都由7个段组成,如下所示: 两者差别在仲裁段,标准格式的仲裁段有12bit,而扩展格式的仲裁段有32bit。因此,在不考虑位填充的情况下:3) 帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。CAN总线正常的发送过程中,帧间隔有3个隐性位。 4)负载率计算。因此考虑到帧间隔的3bit后,标准格式的数据帧有111 bit,扩展格式的数据帧有131 bit,那么发送一条数据帧,负载率是多少,如下所示: Source: 【精选】【图解CAN总线】-8-CANFD总线网络“负载率”计算这里计算的CAN总线有10ms发送周期的标准数据帧报文20条,20ms发送周期的扩展数据帧报文20条,那么有: 条数 | 报文ID | 发送周期 | 数据帧 格式 | 数据长度/ 字节 | 每条帧的负载率 | 1 | Ox110 | 10 | 标准 | 8 | (1000ms/10ms)*0.0222% = 2.22% | … | … | … | … | … | … | 20 | 0x129 | 10 | 标准 | 8 | (1000ms/10ms)*0.0222% = 2.22% | 21 | 0x600 | 20 | 扩展 | 8 | (1000ms/20ms)*0.0216% = 1.31% | … | … | … | … | … | … | 40 | 0x619 | 20 | 扩展 | 8 | (1000ms/20ms)*0.0216% = 1.31% | 负载率= 20*2.22% + 20*1.31% = 70.6% |
Ok! 以上就是一个例子粗略地计算了一个CAN总线的负载率的示例。 2 负载率多少合理
对于上面这个例子,我们计算得到CAN总线负载率大于了70%,这在我目前工作的所有公司都不允许的,我见过的CAN总线负载率通常都不超过50%,具体的数值需要通过计算和实验来确定。如果CAN总线负载率过高,将可能导致系统性能下降,增加错误率并导致总线冲突 因此在CAN总线的设计过程中,必须精确计算CAN总线的负载率,也通过一些措施来降低负载率。比如:针对CAN报文的设计,尽可能提高CAN报文数据段的利用率,尽可能精准报文发送周期,能用更长周期就不用更短周期发送; 针对报文传输,可以通过使用定时器中断进行数据传输。在这种情况下,设备可以在空余的时间间隔中进行数据传输。 针对数据长度,可数据长度无法一帧报文发送,在这种情况下,可对对数据进行分帧传输,以避免超过CAN总线的限制。
3 小结
本文就计算了一个经典CAN总线的负载率,以此为例,触类旁通,不难计算更多报文类型的CAN总线负载率,比如CAN FD。 更多例子可参考: CANFD总线网络“负载率”计算。
|