CAN设备在高波特率下无法通信或不匹配

更新 Apr 18, 2024

适用于

其他

CAN工业通信设备

问题详述

我的CAN设备可以在低波特率下正常通信,但是当我增加波特率时,它只会间歇性地通信或者完全无法通信。

我收到CAN错误:Form错误, CRC错误, Bit错误或者Stuff错误。

解决方案

这些错误可能是由于CAN终端电阻选择不当造成的。

这篇知识库讨论了在不同类型的CAN通信模式下如何选择正确的终端电阻。

相关信息

CAN总线ISO 11898协议规定,CAN总线必须在网络的两端,通常是网络主控制器和网络最远端的节点之间安装合适的总线终端电阻(在位于DB-9接口的第2和第7引脚的CAN_H和 CAN_L信号线之间安装一个120欧姆的电阻)。详细请参考相关链接部分“在NI-CAN硬件上配置合适的终端电阻”,更为详细地了解如何为NI-CAN网络安装终端电阻。 在没有安装合适的终端电阻的情况下,通信可能会出现下面非预期的行为:
    • 在低波特率的情况下能够正确通信,但是在波特率较高时会出错(具体出错的波特率的值取决于一系列因素,包括CAN网络长度、数据帧上携带的数据----它能够改变具体传输的最高频率以及网络附近的电磁干扰等等)。下表中的测试总结详细描述了这种情况:
       
      CAN波特率 - 终端电阻测试
      波特率线缆是否安装合适的终端电阻?端口间传输正确?
      1M
      1M
      125K
      125K有时
      40K
      40K

      值得注意的是,在安装了合适的终端电阻的情况下,通信总是正常的。但是在40K较低的波特率下,即使没有使用终端电阻,通信仍然是正常的,因此这点是不符合CAN ISO 11898规范的地方。
    • CAN错误 - Form错误、CRC错误、Bit错误、Stuff错误和其他由于不合适终端电阻所导致的错误。如果出现这些错误,则请按照附件中的知识库文章来检验是否安装了合适的终端电阻。更多关于CAN错误的信息,请参考相关链接一栏中的NI-CAN硬件和软件用户手册(附录B包含了一个CAN标准的总结,并包含一个叫“CAN错误检测与约束”,该章节详细描述了CAN错误)。
    Stuff错误就是一个可以用没有合适的终端电阻来解释的CAN错误(这个错误在CAN ISO 11898规范中进行了定义)。 当总线上连续出现6位相同的数据时,就会发生Stuff错误。当发送器件检测到连续5位相同的数据时,就会自动在数据流后面插入一个完成停止位,这个位会被所有的接收器件检测到并自动去除掉。

    这个填充位的策略能够保证数据流中有足够的信号沿,从而保证同一个数据帧中的数据同步。如果接收器件检测到连续6位相同的数据位,那么一定是由于同步丢失,导致接收到的数据与发送的数据不相同。而在没有合适的终端电阻的情况下,就会发生这样的事情,数据帧中的某些数据能够正确地接收和发送,而在接收的CAN接口处,整个帧(或者数据帧的完整性)没有正确的保持和被接收。

    出现这种情况的原因是,一般来说CAN网络定义传输线,根据传输线理论,如果在接收端没有合适的终端电阻,那么足够高频率的信号在执行长度的传输线上是不能正确被传输的。这里的终端电阻一般指网络匹配,该负载一般选择使传输功率最大,并且其值等于网络端口阻抗共轭值(这里指的是接收端的CAN接口,实际上,考虑到噪声和其他影响,许多应用中常使用不一样的终端电阻)。 

    值得庆幸的是,在CAN ISO 11898规范中,已经将整个CAN网络的终端电阻简化为在网络两端安装两个120欧姆的电阻(就如同第一部分描述的一样,这完全符合CAN标准)。