中国电子技术网

设为首页 网站地图 加入收藏

 
 

CAN总线的特点、帧类型以及应用中的注意事项

关键词:CAN总线 通信

时间:2020-12-10 13:51:49      来源:网络

跟我们常用的 RS485 只有一个主机,从机只能等待主机的轮询不同,在 CAN 总线中,当任意一个节点监测到总线空闲时,就可以立即启动信息的发送,也就是每一个节点都可以当主机。当然,这马上会引起我们的担心。如同一个家庭每个人都当家做主,那还不乱了套吗?不急,我们来看一下。这个问题是如何被巧妙地解决的。

1980 年,Bosch 的工程师开始研究汽车上高速串行通信的问题,并在 1986 年发布了 CAN(Controller Area Network)总线。CAN 以其多主,高速(最高 1Mbps),抗干扰的特性被广泛应用汽车及各种工业环境。在此我们主要介绍一下 CAN 总线的特点,帧类型,以及应用中的注意事项。
 
1.CAN 总线特点

1.1 多主控制

跟我们常用的 RS485 只有一个主机,从机只能等待主机的轮询不同,在 CAN 总线中,当任意一个节点监测到总线空闲时,就可以立即启动信息的发送,也就是每一个节点都可以当主机。当然,这马上会引起我们的担心。如同一个家庭每个人都当家做主,那还不乱了套吗?不急,我们来看一下。这个问题是如何被巧妙地解决的。
 
物理层,CAN 采用差分总线。单片机引脚的逻辑电平 0,被 CAN 收发器(PHY)转换为显性电平(Dominant),逻辑电平 1 被转换为隐性电平(Reccesive)。总线上执行的是“线与”逻辑,只要有一个节点输出显性电平,那么总线上就是显性电平。

仲裁(Arbitration),CAN 的发送总是以 SOF(Start Of Frame)起始,紧跟器后是 ID。在发送 ID 的同时,节点监听总线上的显隐状态,当监听到的状态与自己发送的不一致时,此节点将停止发送,进入只收模式。如下图所示,每一帧消息所具有的 ID 决定了此消息的优先级,发送最高优先级消息的节点获得总线最后的控制权,得以最终完整的发送自己的消息。

接收滤波(Filter)。一个挂在总线上的节点可以监听到所有的消息(Message),但通常我们只对其中某些消息感兴趣,这时怎么办呢?CAN 模块一般会提供接收滤波功能(Filter)。通过设置滤波寄存器,我们可以达到接收消息时,比对 ID 所有位,也可以只比对 ID 某些位,从而达到只接收 ID 与自己完全相同的消息,或接收 ID 与自己部分相同的消息的目的。利用这种机制可以给节点编组,给组成员群发消息。
 
1.2 速度快,距离远

CAN 总线可以达到 1Mbps 的速率。总线速度随着传输距离增加而下降,下面是一些典型速率。在一个数据帧内可以传送 8 个字节的数据。
 
1000kbps 40m
500kbps  130m
100kbps  620m
50kbps   1300m
5kbps    10000m
 
2012 年,Bosch 又发布了 CANFD(CAN with Flexible Data-rate),最高速率可以达到 10Mbps,在一个数据帧内可以传送 64 字节的数据。2015 年 ,国际标准化组织(ISO)正式发布支持 CAN FD 的 11898-1 协议。
 
2.帧类型

CAN 协议很简洁,只包含 4 种帧类型。
 
数据帧(Data Frame),用来把数据从发送节点传送至接收节点。
 
远程帧(Remote Frame),一个节点用来请求其它节点发送数据。一个节点发送远程帧时会把 Arbitration Filed 最后一位 RTR(置 1),具有相同 ID 的节点会把数据发送到总线上。
 
错误帧(Error Frame),当一个节点检测到错误时会向总线发出错误帧,以通知其它节点。
 
过载帧(Overload Frame),用来在数据帧或远程帧之间插入延时。
 
帧间隔(Interframe Space),不是一种帧类型。它是帧之间的间隙,由多个连续的隐性电平构成。
 
在编程时我们直接用到的就是数据帧和远程帧。软件编程比较简单,需要注意的是一般需要设置寄存器中的初始化请求位(Initialization request),使模块进入初始化状态,才能开始进行 CAN 模块的各种配置,初始化完成后退出初始化状态,进入运行状态。
 
3.CAN 总线应用注意事项

3.1 终端匹配电阻

在 CAN 总线的两端要用 120 欧的电阻端接进行阻抗匹配,因为 CAN 总线长度一般会比较长,传输的信号速度快,特别是信号的边沿跳变部分频率很高。

传输线效应 平常我们总是认为电信号从一个引脚发出,通过导线,瞬间就会到达接收引脚,导线上的电压处处是相等的。但是当信号的频率很高,或者导线特别长,总之导线的长度接近传导信号波长的 1/10 后,我们就需要转变一下我们的观念,此时信号的传输主要受电缆特性阻抗的影响。
 
电缆特性阻抗 = 信号电场强度(伏特/米) / 磁场强度(安培/米)
 
电缆的特性阻抗与电缆的材质,粗细,线缆之间的距离有关,而与电缆的长度无关。电缆的特性阻抗还和信号的频率有关,但是当频率增加到一定数值时,特性阻抗不再变化。常用的带屏蔽双绞线的特性阻抗是 120 欧。
 
信号在阻抗不连续处会产生反射,所以要保持电缆阻抗的连续性,而且线缆终点需要用等于电缆特性阻抗的电阻进行端接,以消耗掉传输至端点的信号,否则信号会反射回去和后续发出的信号产生叠加,引起错误。
 
频率与波长对应关系
150K  2000m
500K   600m
1M     300m
10M     30m
 
端接电阻的另一个作用是可以使 CAN 总线从显性状态快速回到隐性状态。因为在显性状态下,两条线缆 CAN_H, CAN_L 之间的寄生电容会被充电,如果没有一个放电回路,总线不能快速回到隐性状态。
 
3.2 EMC 防护

CAN 常常工作在强干扰的工业环境中,采用屏蔽双绞线会极大的提升 EMC 防护性能。同时如果数字电路部分和 CAN 收发器之间用高速光耦隔离开,并且对两部分采用完全隔离的电源供电,那么可以把总线上的干扰最大限度地隔离在外部。

需要注意的是屏蔽层只能在一点接入大地。如果在多个点接地,那么通过大地会形成电流环路,反而会引入噪声。
 
3.3 时钟容差(Oscillator Tolerance)

总线的速度越高,需要的时钟精度越高。一般在低于 125kpbs 时可以用低成本的陶瓷震荡器(ceramic resonators),更高的速度下建议使用晶体振荡器(Quartz,or Crystal Oscilators)。
 
3.4 CAN 模块死机现象

CAN 模块内部有监控电路,总线上的异常,如短路等,会引起错误计数器增长。TEC(Transmit Error Counter), REC(Receive Error Counter)。当发送错误 TEC 计数超过 255 后,CAN 模块进入 BUS-OFF 模式,此节点不能发送也不能接收。这样做的好处是可以避免由个别模块的问题引起整个总线不能工作。
 
芯片一般会提供两种恢复机制:自动和手动模式。比如在 STM32 单片机中,如果 ABOM 位设置为 1,CAN 模块将不断尝试自动恢复。如果 ABOM=0,则需要程序进入 CAN 初始化模式,重新配置后,再退出初始化进入正常工作模式。
 
由于 CAN 总线非常可靠,不易出错,所以在测试阶段建议人为制造一些总线错误,比如短路,断路,强干扰之类,看程序是否能从异常状态下恢复。

  • 分享到:

 

猜你喜欢

  • 主 题:PIC®和AVR®单片机如何在常见应用中尽展所长
  • 时 间:2024.11.26
  • 公 司:DigiKey & Microchip

  • 主 题:高效能 • 小体积 • 新未来:电源设计的颠覆性技术解析
  • 时 间:2024.12.11
  • 公 司:Arrow&村田&ROHM

  • 主 题:盛思锐新型传感器发布:引领环境监测新纪元
  • 时 间:2024.12.12
  • 公 司:sensirion

  • 主 题:使用AI思维定义嵌入式系统
  • 时 间:2024.12.18
  • 公 司:瑞萨电子&新晔电子