作者:Steven Keeping
控制器局域网 (CAN) 是一种成熟稳健的通信标准,广泛应用于工业自动化和汽车等领域。该技术有两个版本:CAN2.0 和最新版本 CAN-Flexible Data (FD)。传统的 CAN2.0 系统可通过添加 CAN-FD 节点来实现增强,CAN-FD 节点可提供更高的有效载荷吞吐量,以支持关键通信事件。
这两种技术通常是相互兼容的,但随着系统复杂性和总线长度的增加,混合系统中 CAN-FD 的较高速度会造成同步问题,从而造成传输失败。
对于简单的系统来说,CAN 系统测试中包含连接两个控制器/收发器对的单一短总线可能会令人满意。然而,对于更复杂的且组合了 CAN2.0 和 CAN-FD 器件的多节点系统,这种测试往往无法检测出其中可能出现的问题。使用生产系统的孪生系统对所有潜在的使用案例进行专门测试,可以发现现场可能出现的所有问题。
本文将简要介绍 CAN2.0 和 CAN-FD,并解释传输方面的挑战。然后介绍测试技术,以确保使用这些网络的系统尽量减少现场故障。本文将以 Analog Devices 包含故障检测和报告功能的器件为例,并展示使用此类器件如何加快已部署系统的测试阶段和故障排除。此外,还将重点介绍了相关的评估板。
什么是 CAN2.0 和 CAN-FD?
CAN 是一种内置了故障处理功能的分布式通信标准。ISO-118981 标准规定了物理层 (PHY) 和数据链路层 (DLL)。
CAN 的功能包括:
· 允许总线上有多个主机
· 信息的固有优先级
· 按报文优先级进行总线仲裁
· 多级错误检测和恢复
· 在具有独立时钟源的节点间同步数据计时
CAN 采用差分电压数据传输方案,具有两种总线电压状态:“隐性”状态(驱动器输出为高阻抗)和“显性”状态,阈值如表 1 所示。
表 1:与 RS-485 相比,CAN 的隐性和显性电压电平。请注意,显性(较高)电压的对应逻辑“0”。(图片来源:Analog Devices)
节点传输逻辑“0”的显性状态(在此状态下,一条总线 (CANH) 为高电平,另一条 (CANL) 为低电平)和逻辑“1”的隐性状态。通过在标准帧或错误帧结束后检测到多个隐性位,可将空闲 CAN 总线与处于隐性位传输模式的 CAN 总线区分开来(图 1)。
图 1:CAN 传输方案。空闲模式由多个隐性位标识。(图片来源:Analog Devices)
CAN 收发器在 DLL、CAN 控制器(通常嵌入在微控制器等其他器件中)和 CAN 总线的物理布线之间提供差分 PHY 接口。图 2 所示为实施 CAN 应用所需的各种元件,以及它们与开放系统互连 (OSI) 层的关系和由每个项目实现的功能。
图 2:CAN 收发器构成 CAN 控制器和 CAN 总线之间的差分 PHY 接口。(图片来源:Analog Devices)
CAN2.0 于 1991 年推出,标称吞吐量为 500 Kbits/s。由于这种数据传输速率有时无法满足关键通信事件的需要,因此在 2012 年推出了 CAN-FD。CAN-FD 在正常工作条件下的标称吞吐量高达 2 Mbits/s,而在用于诊断或编程时则高达 5 Mbits/s。请注意,较高的通信速度只适用于报文有效载荷;如 11 位标识符、循环冗余校验 (CRC) 和确认 (ACK) 等报文的其他元素都以 500 Kbits/s 的 CAN2.0 速率发送。
CAN2.0 和 CAN-FD 的另一个区别在于标准数据帧有效载荷,CAN2.0 的有效载荷为 8 B,而 CAN-FD 的有效载荷则达到 64 B。有效载荷的增加提高了开销/数据比,从而使 CAN-FD 通信更加高效。此外,以前由于 CAN2.0 的 8 B 有效载荷限制而不得不拆分的报文,现在可以通过 CAN-FD 合并为一条报文。而且,由于 CAN-FD 报文的数据传输率更高,有效载荷更大,因此可以通过加密来提高安全性。
由于 CAN-FD 控制器同时支持 CAN2.0 和 CAN-FD 协议,因此在同一网络中混合使用 CAN2.0 和 CAN-FD 节点是很常见的。混合节点之所以流行,是因为它允许传统网络在较长时间内迁移到速度更快的协议。混合系统的一个缺点是增加了成本和复杂性,这是因为收发器必须能够支持 CAN2.0 节点上的 CAN-FD 滤波方法,以确保在 CAN-FD 通信过程中不会产生错误帧。
CAN 的仲裁和错误机制
任何已连接的 CAN 节点都可以向总线传输数据。为避免通信冲突,节点会对总线的使用进行仲裁,以便根据优先级逐条传输报文。CAN 采用无损和透明的仲裁方式;仲裁成功的节点会继续传输其优先级更高的报文,而其他节点不会干扰或破坏报文。这种仲裁是可能的,因为显性位传输会覆盖隐性总线状态。
标准数据帧包括一个报文标识符和多个标志位。这些信息被称为“仲裁字段”。这决定了仲裁,因此也决定了报文优先级。ID 值较低的报文(较多的初始“0”)具有较高优先级(图 3)。
图 3:CAN 标准数据帧包括报文标识符以及 RTR 和 IDE 标志位。该仲裁字段规定了仲裁和报文优先级。(图片来源:Analog Devices)
即使有仲裁计划,也可能出错。为了解决这些问题,CAN 协议具有支持错误校验和处理的机制。这些机制包括:
· 传输位验证
· CRC 校验
· 固定格式位域校验
· 强制报文 ACK
错误会通过以下机制进行处理:
· 错误帧
· 错误计数器
· 节点错误状态
任何 CAN 控制器都能检测错误,并通过触发错误帧和错误节点计数器做出反应。错误帧通过使用六个连续的显性或隐性位来区分。这种序列与正常传输规则不符,因此会被其他节点检测到。发送错误帧的节点随后会发送隐性位,直到检测到总线处于隐性状态。再传输 7 个隐性位后,节点就可以尝试传输常规的 CAN 帧(图 4)。
图 4:在这一错误传输示例中(由于额外位 [1]导致 CRC 位错误),最右边显示的是六个连续的位错误帧。(图片来源:Analog Devices)
除了错误帧传输外,每个 CAN 节点都发送和接收错误计数器。错误增加时,计数器会增加一个,而成功发送或接收信息时,计数器会减少一个。根据错误计数器,节点可能处于“主动错误”、“被动错误”或“总线切断”状态。在主动错误状态下,节点可以在总线上通信,并在检测到错误时发送主动错误标志。当计数器超过 127 时,即进入被动错误状态;在此状态下,节点只能发送被动错误标志。一旦计数器低于 127,节点就会重新变为主动错误状态。如果计数器超过 256,节点将进入总线切断状态,进而无法在总线上通信。节点计数器在接收到 128 个具有 11 个连续隐位的序列后,可重置为 0。
全面检测的重要性
CAN 的仲裁和错误机制有助于在发生故障时保持系统的现场运行。不过,通过设计限制发射和接收故障的系统,就能达到更高的运行效率。在几种运行情况下测试拟议系统,是在部署前发现和校正缺陷的一种方法。
一种常见的技术是使用函数发生器向收发器的 TxD 引脚传输典型的运行标准数据帧,以检验所选的 CAN 收发器是否发生错误。虽然这是对单节点的合理测试,但并不能很好地反映具有长总线的多节点系统在现场的性能。例如,复杂系统可能出现的问题包括高频运行时电路存根产生的反射和其他伪影。这些都会带来位之间的相移。
CAN 的仲裁机制只有在位同步的情况下才能工作。如果位与位之间的相移超过单个位传输时间的二分之一,则同步失败,无法进行仲裁。
在以 500 Kbits/s 至 1 Mbit/s 速率运行的 CAN2.0 传统系统中,单个位传输时间足够长,因此很少会诱发相移问题。然而,由于 CAN-FD 具有更高的吞吐速度,因此位传输时间缩短,相位偏移很快就会变得很大。
要克服这些挑战,就不能仅仅测试单个节点,而是要通过复制完整的终端系统并在各种不同的工作条件下进行测试来验证设计。虽然这比基本测试更费时费力,但比处理现场故障和客户不满要节省得多。
实例
要了解相移测试在实际中的工作原理,可以考虑使用入围供应商提供的 CAN 收发器和 CAN 控制器设计一个系统。该节点与一条 20 m 总线连接,该总线还支持许多其他节点,包括 CAN2.0 和 CAN-FD 组件。为了便于测试,节点的传输速率为 13.3 Mbits/s,相当于 75 ns 的位宽。出于同步和仲裁目的,控制器以 80% 的 TxD 位宽进行采样,因此它需要的最小 RxD 位宽为 0.8 x 75 = 60 ns,其中包含上升时间、下降时间和环路延迟。测试组件产生的 TxD 位宽为 48 ns,从而导致系统失效。
对 Analog Devices 的 MAX33012EASA+ CAN 收发器进行了同样的测试。在该测试中,测得 TxD 的位宽为 75 ns,RxD 的位宽为 72 ns。72 ns 的位宽超过了 60 ns 的 80% 采样时间要求,因此系统同步和仲裁运行是令人满意的。13.3 Mbits/s 的吞吐量比系统在目标应用中使用时的速度还要快,这表明它足以在所有预期运行条件下正常运行(图 5)。
图 5:在 20 米总线上以 13.3 Mbits/s 的速度(75 ns TxD 位宽)运行 MAX33012EASA+ CAN 收发器的测试结果。RxD 位宽为 72 ns,足以确保满足控制器 80% 的采样时间 (60 ns) 并实现同步。(图片来源:Analog Devices)
内置故障排除功能
通过使用包含故障检测和报告功能的组件,可以使测试过程更轻松,成本更低。MAX33012EASA+ CAN 收发器等器件不仅能快速发现原型和试生产 CAN 电路中存在的问题,还能用于对实时控制系统部署来说,快速故障排除是重要功能的应用。
MAX33012EASA+ 是一款 +5 V CAN 收发器,可解决过流、过压和传输故障等常见故障。该器件的故障保护电压高达 ±65 V,适合需要过压保护的应用。共模电压范围为 ±25 V,可在如重型机械等嘈杂环境中进行通信。CANH 和 CANL 输出具有短路限流功能,并通过热关断电路防止功率耗散过大,这种电路将驱动器输出置于高阻抗状态。
MAX33012EASA+ 的工作频率高达 5 Mbits/s,并具有将压摆率减慢至 8 V/μs 的选项,从而最大限度地减少电磁干扰 (EMI) 并允许使用非屏蔽双绞线或并行电缆(图 6)。
图 6:所示为多模系统中的 MAX33012EASA+ 应用电路。在本例中,微控制器包括一个嵌入式 CAN 控制器。(图片来源:Analog Devices)
CAN 收发器的故障检测在上电时通过 100 次 TxD 低电平到高电平的转换来启用(通常是一个或两个标准数据帧,具体取决于所使用的协议)。故障检测启用后,如果检测到故障,则需要在 TxD 上再进行 16 次低电平到高电平的转换,以传输故障代码。最后,还需要 10 个脉冲才能清除故障。
启用故障检测后,如果 RxD 上的信号连续 10 个周期与 TxD 不匹配,就会触发传输故障检测功能。例如,当两个终端电阻都缺失,或者 CANH 与地或 CANL 与 VDD 之间存在短路而导致差分信号不符合规范时,就会出现这种情况。
Analog Devices 提供的 CANbus 接口 Arduino 平台 评估板 MAX33012E 可用于演示 MAX33012E 的功能。虽然该器件采用 Arduino 盾板外形,但也能单独用作评估板。
结语
为确保多模 CAN2.0 和 CAN-FD 混合系统在现场可靠运行,必须对整个设计进行全面测试。然而,简单的单节点测试不足以检测出故障。然后,由于同步问题可能会破坏该技术的仲裁机制,这些未检测出的故障又会导致现场故障。通过选择具有内置故障检测和报告功能的 CAN 收发器,可以简化混合多节点 CAN 系统的初始测试和后期现场故障排除工作。