科普:了解 CAN 总线的综合指南
原创 2024-02-04 13:39 Mulan 来源:AGVCAN 总线诞生于上世纪 80 年代,有助于在车辆内进行可靠的电子通信。本文将深入探讨 CAN 总线的基本原理、架构、协议、应用和局限性。
简介
控制器局域网(CAN)总线由博世于 20 世纪 80 年代开发,是工业和汽车应用中常用的通信协议。它的开发旨在改善电子控制单元(ECU)之间的数据交换,从而提高汽车系统的效率。1993 年,CAN 被纳入国际标准通信系统 ISO 11898,应用于工业和汽车领域。
它是一种基于报文的协议,最初设计用于汽车内的多路复用电气布线,以节省铜缆,但也用于许多其他场合。对于业余爱好者来说,CAN 总线可能看起来令人困惑或复杂,但其核心原理却是简单明了的。
从汽车音响到防抱死制动系统,CAN 总线是一种允许汽车系统和设备相互通信的通信方法。CAN 总线是在对等 ECU 和其他设备之间交换指令的媒介。
CAN 总线的基本原理
控制器局域网(CAN)总线的运行原理是分散式联网,即网络上的所有节点(或设备)在传输数据的能力上都是平等的。这有别于由中央主设备控制通信的传统网络模式。
CAN 总线数据传输
在 CAN 网络中,任何节点都可以在总线空闲时传输数据。数据以帧的形式发送,其中包含传输的信息以及用于错误检查和识别的附加数据。
CAN 总线按照 "广播 "原则运行 ,即所有节点都能接收到所有传输信息。然后,每个节点根据 CAN 帧中的标识符决定是忽略数据还是接受数据。该标识符不是源地址或目的地址,而是表示报文内容的标签。这意味着同一报文可由多个节点接收和处理,这在汽车应用中尤其有用,因为在汽车应用中,多个系统可能需要相同的数据。这也意味着,特定节点无法根据地址向特定节点发送信息。
CAN 总线系统中的数据传输基于差分双线接口(取代了复杂的线束和连接器),从而增强了在汽车电气噪声环境中的抗噪能力。CAN-High (CANH) 和 CAN-Low (CANL) 两根线传输互补信号。当节点传输显性(0)信号时,CAN-High 的电压电平高于 CAN-Low。反之,当传输隐性(1)信号时,CAN-High 和 CAN-Low 处于同一电压电平。
数据以帧为单位传输,帧由多个字段组成。其中最重要的是标识符字段和数据字段。标识符字段包含报文的标识符,接收节点用它来决定是否接受报文。数据字段包含实际传输的数据,在标准 CAN 中最多为 8 字节,在 CAN FD(灵活数据速率)中最多为 64 字节。
数据帧中各个字段的意义如下:
CAN 总线中的数据传输受带冲突检测的载波侦听多路访问 (CSMA/CD)原理的控制。这意味着每个节点都会监视总线(载波侦听)并在总线空闲时进行传输(多路访问)。如果两个节点同时传输(冲突),则标识符值较低的节点继续传输,而另一个节点停止传输。这是因为显性位会覆盖总线上的隐性位,并且较低的标识符(较低的数值)在 CAN 帧的开头具有更多的显性位。这种机制确保首先传输最高优先级的消息(具有较低标识符的消息)。
错误检测和处理
CAN 总线系统的主要特点之一是其高效的错误检测和处理能力。该系统包含五种错误检测方法,每种方法都旨在确保数据传输的完整性,具体讨论如下:
比特监控:CAN 网络系统中的每个传输节点在传输过程中都会监控总线的状态。如果总线状态与预期状态不符,节点就会知道发生了错误。
帧校验序列(FCS):该字段包含一个循环冗余校验(CRC)值,该值根据帧中的数据计算得出。每个接收节点计算自己的 CRC 值,并与接收到的 FCS 进行比较。如果两个值不匹配,节点就会知道发生了错误。
确认检查:每个帧都包含一个 ACK 时隙,所有其他节点都要在这个时隙中发送一个显性比特,以确认收到该帧。如果发送节点在 ACK 时隙中没有检测到主位,它就知道发生了错误。
帧格式检查:每个帧都有特定的格式,包括预期显性位和隐性位的特定位置。如果节点检测到违反此格式的情况,就知道发生了错误。
错误帧:当节点使用上述任何一种方法检测到错误时,它会传输一个特殊的错误帧,提醒所有其他节点注意该错误。这会导致所有节点丢弃当前帧,等待重新传输正确的帧。
检测到错误时,检测到错误的节点会自动重新传输帧。这种情况一直持续到无错传输帧为止。如果节点检测到太多错误,它就会进入错误被动状态,此时它只监听总线而不传输。如果错误继续发生,节点将进入总线关闭状态,与总线断开连接。这种机制可确保故障节点不会中断总线上的通信。
CAN 总线结构
CAN 总线系统的结构 [6] 设计用于促进多个节点之间的高效通信。最基本的 CAN 总线系统由两条线路组成,即 CAN-高(或 CANH)和 CAN-低(或 CANL),连接到系统中的所有节点。这两条线路传输代表传输数据的差分信号。
图 2.CAN 总线结构
系统中的每个节点都有一个收发器(或 CAN 收发器)和一个控制器(或 CAN 控制器),前者负责与总线线路连接,后者负责处理数据成帧和错误检查。CAN 收发器负责将 CAN 控制器的数字信号转换为总线上的差分信号,反之亦然。控制器则负责创建包含待传输数据的帧,并检查接收到的帧是否有误。
节点
在 CAN 总线系统中,节点指的是与总线相连并能发送和接收报文的任何设备。每个节点都有自己的控制器和收发器,以便与总线连接。节点可以是任何设备,从简单的传感器或执行器到复杂的设备,如发动机控制单元(ECU)。
只要总线空闲,CAN 总线系统中的每个节点都会传输数据。数据以帧的形式发送,帧中包含数据以及表示信息内容的标识符。总线上的所有其他节点都会收到该帧,并根据标识符值决定是否接受该帧。
CAN 总线系统中的节点还负责错误检测。每个节点都会使用多种方法检查接收到的帧是否存在错误,包括位监控和帧检查序列。如果一个节点检测到错误,它就会传输一个错误帧,提醒所有其他节点注意该错误。
总线线路
在 CAN 总线系统中,总线线路是节点之间传输数据的物理介质。有两条总线线路,即 CAN-High 和 CAN-Low,它们携带互补信号。这些总线通常被绞合在一起,形成一对双绞线,这有助于减少电磁干扰和提高信号完整性。
CAN 总线系统中使用的差分信号具有以下几个优点:
共模噪声:确保总线线路接收到的任何噪声对两条线路的影响相同,从而提高抗噪声能力。由于接收节点只关心两条线路上的电压差,因此这种共模噪声被有效抵消。
减少磁场:互补信号的使用意味着一条线路上的电流与另一条线路上的电流相等且相反。这就减少了电流产生的净磁场,进一步降低了电磁干扰。
总线线路的两端使用电阻器(通常为 120 欧姆)进行端接,以匹配线路的特性阻抗。这种端接对于防止信号反射至关重要,信号反射会导致数据传输错误。在某些情况下,还可使用称为偏置电阻器的附加电阻器,以确保总线线路在无节点传输时处于已知状态。
总线线路的长度和与之相连的节点数量会影响 CAN 总线系统的性能。较长的总线线路和较多的节点会导致电容增加,从而减慢信号的上升和下降时间。这反过来又会限制总线上可实现的最大数据传输速率。为缓解这一问题,CAN 总线规范定义了不同的数据传输速率和最大总线长度,使系统设计人员能够根据具体应用选择合适的组合。
CAN 协议
CAN 总线是公认的数据通信国际标准。CAN 总线通信系统使用多种协议 [7],每种协议都有自己的特点和功能。这些协议定义了数据传输规则,包括帧格式、数据速率和错误处理。要为特定应用选择合适的协议,了解这些协议之间的差异至关重要。
使用最广泛的 CAN 总线协议是 CAN 2.0A、CAN 2.0B(也称为传统 CAN)和 CAN FD(灵活数据速率)。这些协议都建立在 CAN 总线系统的基本原理之上,并增加了新的特性和功能,以满足汽车和工业应用不断发展的需求。
CAN 协议 2.0A 和 2.0B
经典 CAN(即 CAN 2.0A 和 CAN 2.0B)是两个密切相关的协议,主要区别在于其标识符字段的长度。CAN 2.0A 也称为标准 CAN,使用 11 位标识符,而 CAN 2.0B 或扩展 CAN 使用 29 位标识符。标识符长度上的这种差异(如图 1 所示)对数据传输有若干影响。下面我们来谈谈几个基本影响:
适用于复杂系统:CAN 2.0B 中较长的标识符允许使用更多的唯一报文标识符,这在具有许多节点和数据类型的复杂系统中非常有用。不过,较长的标识符也会增加帧的长度,从而降低总线上可实现的最大数据传输速率。
更精细的优先级:CAN 2.0B 中更长的标识符为报文的优先级排序提供了更多机会。由于较低的标识符值在 CAN 总线系统中具有最高的优先级,CAN 2.0B 标识符中的额外位允许对报文优先级进行更精细的控制。
灵活性:在 CAN 2.0A 和 CAN 2.0B 中使用不同长度的标识符会影响设备之间的兼容性。虽然 CAN 2.0B 设备通常可以与 CAN 2.0A 设备进行通信,但情况并非总是如此。这是因为 CAN 2.0B 帧中较长的标识符可能会导致设计上不适合处理这些标识符的 CAN 2.0A 设备出错。
图 3.CAN FD 数据框图
CAN FD(灵活数据速率)是 CAN 总线协议系列(2012 年)的最新成员,旨在解决 CAN 2.0A 和 CAN 2.0B 的一些局限性。CAN FD 的主要优点是能够支持更高的数据传输速率和更大的数据有效载荷,因此非常适合需要更快通信速度和更大数据吞吐量的现代汽车和工业应用。
CAN FD 通过对 CAN 总线协议引入两个关键变化来实现这些改进:
可变数据速率:它允许在单帧传输过程中采用可变数据速率。这意味着,在节点争夺总线访问权的仲裁阶段,可以采用较低的数据传输速率,以确保通信的稳健性,而数据有效载荷则以较高的数据传输速率传输,以提高吞吐量。这在电噪声环境中尤其有用,因为较低的数据传输速率可以提供更好的抗噪能力。
灵活的数据字段大小:CAN FD 将帧中数据字段的最大大小从 CAN 2.0 的 8 字节增加到 64 字节。更大的数据有效载荷可以提高数据传输效率,因为传输相同数量的信息所需的帧数更少。这对于需要快速传输大量数据(如高分辨率传感器数据或软件更新)的应用尤其有利。
向后兼容性:尽管有这些改进,CAN FD 仍保持了与 CAN 2.0A 和 CAN 2.0B 设备的向后兼容性。这是通过使用与 CAN 2.0B 相同的帧格式实现的,但增加了一个新的控制字段,用于指示该帧是 CAN FD 帧还是标准 CAN 2.0B 帧。这样,CAN FD 设备就可以与 CAN 2.0A 和 CAN 2.0B 设备在同一总线上共存,但 CAN FD 的更高数据传输速率和更大数据有效载荷只有在与其他 CAN FD 设备通信时才能使用。
CAN 总线变体
CAN 总线的物理层和数据链路层功能与 RS-485 类似。必须认识到,有两种广泛使用的 CAN 总线规格。一听到 "CAN 总线 "一词,几乎每个人都会立即想到 ISO 11898-2 标准,也称为高速 CAN。CAN 协议有两种变体,即高速 CAN 和低速 CAN,每种变体都是为了满足特定的通信要求而设计的。
高速 CAN 适用于需要实时和快速数据交换的用途。最大数据传输速率可达 1 Mbps。高速 CAN 的典型电压值确保了通信的可靠性,隐性状态下的电压值为 2.5V,显性状态下的电压值为 3.5V。这一点在嘈杂的工业和汽车环境中尤为重要。
图 4.高速 CAN 总线
相反,CAN 总线标准的容错和低速变体是 ISO 11898-3 或低速 CAN。它适用于对数据传输速率要求较低的系统,最高可达 125 Kbps。低速 CAN 采用与高速 CAN 相同的电压电平,即隐性状态约为 2.5V,显性状态约为 3.5V。与高速 CAN 不同的是,这里的电阻分散在每个节点上,而不是在总线的起点和终点使用两个终端电阻。
此外,低速容错 CAN 可以有多种不同的设计方式,例如星形总线、类似高速 CAN 的线性总线或由线性总线连接的多个星形总线。
图 5.低速 CAN 总线
CAN 总线在汽车中的应用
CAN 总线以其高效性和灵活性成为现代汽车工业不可或缺的一部分。它用于促进汽车内各种电子控制单元(ECU)和传感器之间的通信,实现众多子系统的无缝集成。CAN 总线在汽车系统中的一些主要应用包括发动机控制、安全系统、车身控制和信息娱乐系统。通过使用通用通信协议,CAN 总线简化了布线,降低了汽车电子结构的复杂性,从而减轻了重量,降低了制造成本,并使诊断更加容易。
发动机控制
CAN 总线在汽车系统中的主要应用之一是发动机控制。发动机控制模块(ECM)负责管理发动机运行的各个方面,如燃油喷射、点火正时和排放控制。为了执行这些任务,ECM 需要接收来自节气门位置传感器、氧传感器和曲轴位置传感器等各种传感器的数据,并向喷油器和点火线圈等执行器发送指令。
CAN 总线在促进 ECM 与其他设备之间的通信方面发挥着至关重要的作用。通过使用单一总线在 ECM 与各种传感器和执行器之间传输数据,CAN 总线简化了布线并减少了所需连接的数量。这不仅减轻了发动机控制系统的重量和复杂性,还提高了其可靠性和可维护性。
此外,CAN 总线的使用允许对发动机的运行进行实时监控。这使得 ECM 能够根据从传感器接收到的数据对发动机参数进行快速调整,从而确保最佳的性能、燃油效率和排放控制。此外,CAN 总线通信可实现先进的诊断功能,使技术人员能够快速识别和解决发动机控制系统的问题。
安全系统
CAN 总线通信在车辆安全系统的各种操作中发挥着至关重要的作用。这些系统依靠传感器、执行器和控制模块之间有效的数据交换来确保车内人员和其他道路使用者的安全。使用 CAN 总线的一些关键安全系统包括防抱死制动系统 (ABS)、电子稳定性控制系统 (ESC) 和高级驾驶员辅助系统 (ADAS)。
防抱死制动系统 (ABS) 的设计目的是防止在重制动时车轮抱死,否则会导致侧滑和失控。防抱死制动系统控制模块从车轮速度传感器接收数据,并利用这些信息调节施加到每个车轮上的制动力。通过 CAN 总线传输这些数据,ABS 控制模块可以快速、准确地调节制动力,确保最佳的制动性能和车辆稳定性。
电子稳定性控制系统(ESC)是另一个依靠 CAN 总线进行通信的安全系统。ESC 的设计目的是通过选择性制动和调整发动机扭矩来检测和纠正牵引力损失或车辆侧滑。ESC 控制模块从转向角传感器、偏航率传感器和车轮速度传感器等各种传感器接收数据,并利用这些信息确定适当的纠正措施。CAN 总线实现了 ESC 控制模块与其他设备之间的快速通信,使系统能够对不断变化的条件做出快速反应,并保持车辆稳定性。
高级驾驶员辅助系统(ADAS)包括自适应巡航控制、车道偏离警告和防碰撞系统等多种安全功能。这些系统依靠摄像头、雷达和激光雷达等各种传感器的数据来监控车辆周围的环境,并为驾驶员提供帮助。CAN 总线对于在 ADAS 控制模块和其他设备之间传输这些数据至关重要,可实现车辆安全系统的实时决策和控制。
通过促进这些系统之间的有效通信,CAN 总线有助于提高车辆的整体安全性,降低事故发生的可能性。
CAN 总线在工业领域的应用
CAN 总线除了在汽车系统中得到广泛应用外,在各种工业环境中也有应用。它的坚固性、可靠性和灵活性使其成为工业自动化和控制系统中设备间通信的理想选择。CAN 总线的一些主要工业应用包括机器控制、传感器网络和分布式控制系统。
机器控制
机器控制是工业自动化的一个重要方面,它需要电机、执行器和传感器等各种设备之间的精确协调,以确保高效准确的运行。CAN 总线可实现设备间的实时通信,并允许执行复杂的控制算法,因此非常适合实现这一目的。
在典型的机器控制应用中,中央控制模块(通常称为可编程逻辑控制器 (PLC))负责协调各种设备的运行。PLC 接收来自位置传感器、温度传感器和压力传感器等传感器的数据,并利用这些信息确定电机、阀门和电磁阀等执行器的适当操作。
CAN 总线促进了 PLC 与各种设备之间的通信,从而实现了快速数据交换和实时控制。通过使用单一总线进行通信,CAN 总线简化了布线,降低了机器控制系统的复杂性,从而降低了安装和维护成本。此外,CAN 总线精确的错误检测和处理能力确保了可靠的通信,即使在电气噪声较大的工业环境中也是如此。
在机器控制应用中使用 CAN 总线还能实现分布式控制和远程监控等高级功能。分布式控制实现了控制任务的分散化,系统中的每个设备都能根据本地数据做出决策。这可以提高系统的整体性能和灵活性,并减轻中央控制模块的负担。另一方面,远程监控使操作员能够从远程位置监控系统,提高效率并减少停机时间。
传感器网络
传感器网络是许多工业应用的重要组成部分,可提供温度、压力、流速和位置等各种参数的实时数据。这些网络通常由分布在设施各处的多个传感器组成,每个传感器负责监测一个特定参数。这些传感器收集的数据随后被传输到中央控制系统,该系统利用这些信息做出决策并控制各种流程。
CAN 总线是传感器网络的理想通信介质,因为与传统的点对点布线相比,它具有多种优势。
首先,使用单一总线进行通信简化了布线,降低了网络的复杂性,从而降低了安装和维护成本。这一点在大规模工业应用中尤为重要,因为在这些应用中,传感器的数量和它们之间的距离都可能非常大。
其次,CAN 总线强大的错误检测和处理能力确保了传感器与控制系统之间的可靠通信。这一点在工业环境中至关重要,因为电气噪声和干扰会导致数据传输出错。CAN 总线采用差分信号和错误检查机制,有助于最大限度地减少这些问题的影响,确保准确可靠的数据传输。
最后,在传感器网络中使用 CAN 总线可实现分布式处理和远程监控等高级功能。分布式处理使网络中的每个传感器都能进行本地数据处理和决策,从而减轻中央控制系统的负担,提高网络的整体性能。另一方面,远程监控使操作员能够从远程位置监控传感器的状态及其收集的数据,从而提高效率并减少停机时间。
总之,CAN 总线是一种功能强大、用途广泛的通信介质,非常适合用于工业应用中的传感器网络。其坚固性、高效性和灵活性使其成为在这些苛刻环境中确保可靠、准确数据传输的理想选择。
CAN 总线的挑战和局限性
尽管 CAN 总线在汽车和工业应用中具有众多优势,但它也并非没有挑战和局限性。实施 CAN 总线系统时需要考虑的一些关键问题包括数据传输速率限制、网络规模限制和电磁兼容性。
数据传输速率:CAN 总线的主要限制之一是其数据传输速率。虽然与 CAN 2.0A 和 CAN 2.0B 相比,CAN FD 的数据传输速率有所提高,但对于某些高带宽应用(如高分辨率视频流或大规模数据采集)来说,它可能仍然不够用。在这种情况下,以太网或 FlexRay 等其他通信协议可能更为合适。
容量有限:CAN 总线面临的另一个挑战是网络规模的限制。总线的最大长度和可连接的节点数量受到信号传播延迟、电容和总线线路电气特性等因素的限制。随着节点数量和总线长度的增加,系统性能可能会下降,导致数据传输速率降低和延迟增加。为解决这一问题,系统设计人员可能需要考虑使用多条相互连接的 CAN 总线或其他通信架构。
电磁兼容性(EMC):电磁兼容性是实施 CAN 总线系统时的另一个重要考虑因素。环境中其他设备产生的电气噪声会干扰总线上的通信,导致错误和性能降低。为缓解这一问题,必须遵循 EMC 设计的最佳实践,如使用双绞线布线、正确接地和屏蔽总线线路。此外,在 CAN 总线中使用差分信号,有助于抵消共模噪声,从而提高抗噪声能力。
尽管存在这些挑战和限制,CAN 总线因其可靠性和灵活性,仍然是各种工业应用中通信的热门选择。
结论
CAN 总线是一种功能强大、用途广泛的通信协议,已成为现代汽车和工业系统不可或缺的一部分。它的稳健性、高效性和灵活性使其成为促进各种设备和子系统之间通信的理想选择。通过了解 CAN 总线的基本原理、架构和协议,以及它在汽车和工业环境中的应用,工程师和系统设计师可以有效地实施和优化 CAN 总线系统,以满足其特定应用的要求。
常见问题
(1)什么是 CAN 总线?
CAN 总线(控制器局域网)是一种强大的车辆总线标准,旨在允许微控制器和设备在没有主机的情况下相互通信。它广泛应用于汽车和工业领域,用于各种电子控制单元(ECU)和传感器之间的通信。
(2)CAN 2.0A 和 CAN 2.0B 的主要区别是什么?
CAN 2.0A(标准 CAN)和 CAN 2.0B(扩展 CAN)的主要区别在于其标识符字段的长度。CAN 2.0A 使用 11 位标识符,而 CAN 2.0B 使用 29 位标识符。这种差异会影响唯一报文标识符的数量、报文优先级以及设备之间的兼容性。
(3)什么是 CAN FD?
CAN FD(灵活数据速率)是 CAN 总线协议家族的最新成员,旨在支持更高的数据速率和更大的数据有效载荷。它通过在单帧传输过程中引入可变数据速率和增加帧中数据字段的最大尺寸来实现这些改进。
(4)CAN 总线如何处理错误?
CAN 总线采用了多种错误检测和处理机制,包括位监控、帧检查序列、确认检查、帧格式检查和错误帧。这些机制可确保数据传输的完整性并保持系统可靠性。
(5)什么是 LIN 总线?
控制器局域网(CAN)和本地互连网(LIN)协议都是为汽车行业开发的。后来又增加了 LIN,作为高可靠性、高速 CAN 协议(最高 1 Mbit/s)的低成本、简单替代方案,该协议专为汽车电气总线的恶劣环境而设计。