CAN(控制器局域网)简介

时间:2023-12-04
  控制器局域网 (CAN) 是一种串行通信总线,专为在恶劣环境中实现稳健且灵活的性能而设计,尤其适用于工业和汽车应用。

  CAN 初由博世发明,后来编入 ISO11898-1 标准,它定义了开放系统互连 (OSI) 模型的数据链路和物理层,为高速车载通信提供低级网络解决方案。特别是,CAN 的开发是为了减少电缆布线,因此车辆内的独立电子控制单元 (ECU) 只能与一对电线进行通信。图 1 显示了汽车中连接到 CAN 总线的 ECU。

  图 1. CAN 用于汽车中的 ECU 通信。图片由 Infosec Institute提供。
  车载诊断 (OBD) 是车辆的诊断和系统,允许您或技术人员通过诊断故障代码 (DTC) 排除问题。当“检查发动机”灯亮起时,技术人员通常会使用手持设备读取车辆的发动机代码。在层,该数据通过信令协议(大多数情况下是 CAN)传输。

  DeviceNet 是工业应用中使用的网络协议。它大大减少了控制系统和 I/O 设备之间所需的接线。设备可以通过四线连接器连接在一起并连接到 PLC 上的网络扫描仪,而不是将每个设备连接到 PLC I/O 模块上的单独输入/输出。在层,我们发现 CAN 在 DeviceNet 协议中发挥着其魔力。图 2 显示了 PLC 扫描通过 DeviceNet 进行通信的工业设备网络。

  图 2.连接到 DeviceNet 网络的 PLC,该网络使用 CAN 作为数据链路和物理层。
  CAN 消息帧
  那么 CAN 消息实际上是什么样子的呢?初的 ISO 标准制定了所谓的标准 CAN。标准CAN对不同的报文使用11位标识符,总共有2 11,即2048个不同的报文ID。CAN后来被修改;标识符扩展为 29 位,给出 2 29 个标识符。这称为扩展 CAN。CAN 使用多主总线,所有消息都在整个网络上广播。标识符提供仲裁的消息优先级。
  CAN 使用具有两种逻辑状态的差分信号,称为隐性和显性。隐性表示差分电压小于阈值电压。显性指示差分电压大于此阈值。有趣的是,显性状态是通过将逻辑“0”驱动到总线上来实现的,而隐性状态是通过逻辑“1”来实现的。这与大多数系统中使用的传统高和低相反。本文稍后将详细介绍这两种状态。重要的是,在仲裁过程中,主导国家优先于隐性国家。
  标准CAN

  标准 CAN 消息帧由许多位字段组成。这些如图 3 所示。

  图 3.标准 CAN 消息帧
  位是帧开始 (SOF)。该显性位代表 CAN 消息的开始。接下来是 11 位标识符,它确定 CAN 消息的优先级。标识符越小,消息的优先级越高。
  远程传输请求 (RTR) 位通常为显性位,但当一个节点向另一节点请求数据时,该位会变为隐性。当发送标准 CAN 帧而非扩展帧时,标识符扩展 (IDE) 位占主导地位。r0 位被保留,当前未使用。数据长度代码 (DLC) 半字节表示此消息中有多少个数据字节。
  接下来是数据本身,其字节数与 DLC 位中表示的字节数相同。循环冗余校验 (CRC) 是一个 16 位校验和,用于检测传输数据中的错误。如果消息被正确接收,接收节点将用显性位覆盖隐性确认位 (ACK)。ACK 还包含一个分隔符位以保持同步。帧结束 (EOF) 表示 CAN 消息的结束,为 7 位宽,用于检测位填充错误。CAN 消息的一部分是帧间空间 (IFS),用作时间延迟。该时间延迟正是 CAN 控制器将接收到的消息移至缓冲区以进行进一步处理所需的时间量。
  扩展CAN

  扩展 CAN 使用 29 位标识符以及一些附加位。扩展消息在 11 位标识符后面有一个替代远程请求 (SRR) 位,它充当占位符以保持与标准 CAN 相同的结构。这次标识符扩展(IDE)应该是隐性的,表示后面跟着扩展标识符。RTR 位位于 18 位 ID 之后,后面是第二个保留位 r1。消息的其余部分保持不变。

  图 4.扩展 CAN 消息帧
  CAN 消息类型
  现在您已经了解了 CAN 消息的样子,您可能想知道总线上传递的消息类型。CAN 允许四种不同的消息类型。它们是数据帧、远程帧、过载帧和错误帧。
  标准 CAN 数据帧使用标识符、数据和数据长度代码、循环冗余校验和确认位。RTR 和IDE 位在数据帧中均占主导地位。如果接收端的隐性确认位被显性位覆盖,则发送器和接收器都认为这是成功的传输。
  CAN 远程帧看起来与数据帧类似,只是它不包含任何数据。发送时RTR位处于隐性状态;这表明它是一个远程帧。远程帧用于从节点请求数据。
  当节点检测到 CAN 总线上的消息中存在错误时,它会发送错误帧。这会导致所有其他节点发送错误帧。此后,发生错误的节点重新传输该消息。过载帧的工作原理类似,但当节点接收帧的速度快于处理帧的速度时使用。该帧提供了时间缓冲区,以便节点可以赶上。
  总线仲裁和信令
  CAN 是一种 CSMA/CD 协议,这意味着总线上的每个节点都可以检测冲突并在尝试重新传输之前后退一定时间。这种冲突检测是通过基于消息标识符的优先级仲裁来实现的。在讨论仲裁之前,让我们仔细看看 CAN 总线上使用的显性位和隐性位。
  倒置逻辑

  CAN 总线的一个有趣的方面是它使用具有两种状态(显性状态和隐性状态)的反转逻辑形式。下面的图 5 显示了 CAN 收发器输出和输入的简化版本。“101”比特流来自/去往 CAN 控制器和/或微控制器。请注意,当控制器发送位流时,这些位流会被补充并放置在 CANH 线上。CANL 线始终是 CANH 的补充。为了使仲裁发挥作用,CAN 设备必须监视它正在发送的内容以及当前总线上的内容(即它正在接收的内容)。

  图 5. CAN 输出/输入
  图 6 同时显示了 CANH 和 CANL 信号,以便您可以看到 CAN 总线的运行情况。总线信号下方绘制的是与 CAN 信号的显性和隐性状态相对应的差分电压。时间上的前三个段 t1–t3 被绘制为与图 5 中所示的三个位相匹配。我们将从输出驱动器的角度来看待这一点。驱动器的输入初看到“1”,并将其补为零,然后将其放置在 CANH 上。CANL 看到 CANH 的补码并走高。这如图 6 中的 t1 所示。请注意,CANH 和 CANL 电压彼此偏移。在时间 t1 期间,CANH – CANL 非常接近于零,因为 CANH 和 CANL 的电压几乎相同。在此期间,驱动程序发送逻辑“1”

  发送的下一位是“0”。CANH 得到其补码,CANL 再次得到 CANH 的补码。请注意,这次 CANH 和 CANL 电压并不接近。因此,差分电压(VDIFF)较大。这是 CAN 主导状态。我们说逻辑是颠倒的,因为“1”使总线处于低电平,而“0”则使总线处于高电平。输入接收器以类似的方式工作。

  图 6.显示具有差分电压的 CAN 隐性和显性状态
  优先仲裁
  正如前面提到的,11 位标识符越小,消息的优先级就越高。节点传输的每一位都会受到监控。这就是节点检测总线上正在放置更高优先级消息的方式。当节点发送隐性位但在总线上检测到显性位时,它就会后退。这称为非破坏性仲裁,因为胜出的消息将继续传输,没有任何问题。请注意,隐性逻辑“1”输给了显性逻辑“0”。这是有道理的,因为较低的标识符值代表较高的优先级。为了更好地了解这意味着什么,请查看图 7,其中显示了 CAN 总线上尝试控制的三个节点。重要的是要记住,每次显示隐性位时,控制器都会发送“1”,
  节点 1-3 都在发送比特流。该位流代表消息标识符及其优先级。首先,所有三个节点均发送“1”,该值在 CAN 总线上表示为隐性位。接下来,每个节点发送“0”或显性位。总线上放置的第三位是另一个“1”,或隐性位。此时,没有一个节点检测到与总线上的另一个节点有任何冲突,因此它们继续传输。

  对于第四位,节点 1 发送“0”或显性位。节点 2 传输隐性位,但检测总线上的显性位。它立即后退,知道当前正在发送更高优先级的消息。节点 3 继续发送,因为它读回了与发送的相同的显性位。当第五位被放置在总线上时,节点 3 就会识别出它的优先级较低并停止传输。节点 2 和节点 3 都会等待一定时间,然后再次尝试。如图 7 的右半部分所示,节点 3 赢得了仲裁。正如您所看到的,与较低消息标识符相对应的逻辑“0”显性位允许进行仲裁。

  图 7.采用差分电压的 CAN 总线仲裁
上一篇:每个导体都是天线吗?
下一篇:软件定义无线电简介

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料