You dont have javascript enabled! Please enable it!

CAN总线

翁德沃彭:

  • 介绍
  • 一辆车多个网络
  • CAN 网络与节点
  • 不同类型的 CAN 速度
  • CAN总线信号
  • 速度和电压水平
  • (标准)11 位标识符的 CAN 总线消息的结构
  • (扩展)28 位标识符的 CAN 总线消息的结构
  • 使用 Bitstuffing 以及 CRC 和 ACK 定界符进行错误识别
  • 双绞线接线
  • 终端电阻
  • 网关
  • CAN 总线上的测量

内嵌:
现代车辆都装有电子设备。 控制单元收集并处理来自传感器和控制执行器的数据。 不同的ECU经常使用相同的数据:d加速踏板位置传感器记录加速踏板的位置。 该信号通过接线直接发送至发动机 ECU。 发动机 ECU 不是唯一使用该信号的 ECU:

  • 发动机 ECU 使用来自油门踏板位置传感器的信号来控制节气门,加速时通过延长喷油器的启动时间来实现加速加浓,并在必要时调整点火正时。 控制涡轮的废气旁通阀或VGT调节;
  • 自动变速器的ECU使用油门踏板位置来确定自动变速器中离合器的换档时间。 如果轻踩油门踏板,自动变速箱将以比半踩油门踏板时更低的速度升档。 突然快速踩下油门踏板,就会出现“降档”,换到较低的档位,使发动机转速更高;
  • 弯道加速程度可能是 ESP-ECU 通过降低发动机功率进行 ESP 干预的原因,如有必要, 对旋转的车轮施加制动。

在 ESP 干预期间,通过(部分)关闭节气门并喷射较少的燃油来降低发动机功率。 仪表板上的指示灯也会亮起或闪烁,提醒驾驶员 ESP 正在运行。

上面清楚地展示了不同ECU之间的协作。 CAN 总线确保 ECU 相互通信,因此可以相互交换数据。 CAN 是控制器局域网络的缩写。 

发动机ECU
发动机舱内置发动机ECU

80世纪XNUMX年代,汽车收到越来越多的配件,制造商开始安装控制装置。 每个功能都有一条单独的电线。 这导致电线厚度和插头连接数量急剧增加。
粗线束的缺点是很难将其隐藏在内饰后面,并且故障风险大大增加。

通过 CAN 总线,ECU 仅与两根线进行通信:CAN-high 和 CAN-low。 ECU 之间的所有通信均通过这两条线提供。 我接下来的两张图片清楚地表明,使用 CAN 总线时,一扇门上的电线数量已经显着减少。

CAN总线上的两条CAN总线线上可以连接数十个控制设备。 所有连接的控制设备都可以相互交换数据。

 

下图显示了一辆带有十一个控制设备(由红色块表示)的车辆。 这些控制设备都是用两根线相互连接的; 一根橙色线和一根绿色线。 这些线代表 CAN-high 和 CAN-low。 每个控制单元都有自己的功能,可以通过CAN总线与网络中的任何其他控制单元进行通信。 有关控制设备的更多实质性信息可以在页面上找到 控制装置.

1. 拖杆安装控制单元
2. 门控单元 RA
3.门控单元RV
4。 网关
5.舒适控制装置
6.报警系统控制单元
7. 仪表板
8. 转向柱电子控制单元
9. 门控单元 LV
10.门控单元LA
11. 停车距离控制控制单元

随着CAN总线的到来,这也成为可能 EOBD 更全面。 EOBD 代表欧洲车载诊断。 EOBD 与排放有关。 发动机和排气装置中的各种传感器将信息传输至 ECU。 如果数值不正确(例如由于燃烧不良),MIL(发动机指示灯)将会亮起。 这是一个迹象,表明汽车需要被读出。 然后必须将诊断测试仪连接到 OBD 插头才能读出错误。 根据故障,ECU存储了一个十六进制错误代码,该代码由诊断测试仪显示为P代码或带有文本的故障(后者更具品牌特定性)。 单击此处了解有关 OBD1、OBD II 和 EOBD 的更多信息.

汽车内的多个网络:
汽车中可以有多个网络。 下图显示了 BMW 3 系 E90 多个网络中控制单元的概览(图例)。

上图中的 K-CAN、PT-CAN 和 F-CAN 网络属于 CAN 总线。 区别在于速度、电压水平和应用。 虽然PowerTrain-CAN和F-CAN具有相同的高速速度和电压水平,但不同之处在于PT-CAN用于发动机和变速箱控制,而F-CAN包含底盘控制单元。

CAN网络与控制设备
CAN总线网络由配备有接收、处理和发送消息的硬件和软件的控制设备组成。 一根 CAN 高线和一根 CAN 低线用于数据传输。 在下图中,CAN-High 为红色,CAN-Low 为蓝色。
控制设备(也称为控制单元或节点)连接到这些电线。 所有控制设备都可以发送和接收信息。 网络的一个例子是汽车内部的 CAN 总线系统; 在这里,各种控制设备可以连接到一个总线系统。

我们以改装后的倒车摄像头(节点5)为例。 该摄像机安装在车牌支架或手柄附近。 CAN 线路连接在内部的任何位置。 条件是相机节点包含正确的标识符(由制造商预先编程),因为其他控制设备必须识别它。 如果相机已在支持的无线电上注册,则图像立即可见。
对软件进行编程后,收音机会从变速箱接收到已选择倒档的信号。 这时收音机切换到倒车摄像头的图像。 选择第一档(前进)时,图像再次关闭。 这一切都得益于CAN总线系统的数据传输。

不受支持的设备(例如,标识符不正确)可能会导致问题。 如果它发送的消息不能被其他控制设备识别,则会生成错误消息。 此类设备还可以确保点火开关关闭后 CAN 总线保持活动状态。 然后汽车将不会进入“睡眠模式”,这会导致电池快速耗尽。 然后有一个 秘密消费者。

CAN总线信号:
CAN总线系统采用广播原理; 发送器将消息发送到 CAN 总线上。 同一总线上的每个节点都会接收该消息。 然而,发送方在消息中指示该消息针对哪些节点。 所有节点都会收到消息并提供反馈(稍后会详细介绍)。 消息不针对的节点认识到这一点并忽略它。

CAN 总线信号由 CAN 高电压和 CAN 低电压组成。 下图显示了 CAN-high 红色和 CAN-low 蓝色。 高信号和低信号相同,但彼此镜像。 当总线成为主导时,CAN-high 电压从 2,5 伏增加到 3,5 伏,CAN-low 电压从 2,5 伏减少到 1,5 伏。 在隐性状态(静止时),两个电压均为 2,5 伏。

上图显示了使用示波器进行测量的示例。 可以清楚地看到,两个电压彼此相同,只是呈镜像。 最终,活动(主导)区域的电压差为 2 伏。 这是指 1,5 伏和 3,5 伏之间的差异。 2 伏的差异被视为 0(显性),0 伏的差异被视为 1(隐性)。

如果(发送)节点想要发送二进制代码“0 0 1 0 1 1 0 1”,它将向 CAN-High 和 CAN-Low 应用上述电压(参见上面的示例)。 接收节点将再次将这些电压视为二进制代码,然后将它们转换为十六进制代码。 所述二进制代码将从十六进制转换为二维。

要将二进制转换为十六进制,很容易绘制一个由 8 个框组成的表格,中间有一条粗线。 将右侧的方框命名为 1、2、4 和 8(参见图中的红色数字)。 然后在左侧也这样做。 写下上面的二进制代码中带 1 的数字。 左边只有 2,右边有 8、4 和 1。将右边的所有内容加在一起 ​​(13),对左边做同样的事情 (2)。 十六进制从 10 变为 A、11 = B、12 = C、13 = D。最终形成 2D。

有关从二进制转换为(十六进制)十进制以及反之亦然的更多信息,请参阅页面 二进制、十进制和十六进制。 这里详细描述了清晰的示例。

速度和电压水平:
在车辆中,我们会遇到不同速度的 CAN 总线网络:

  • 高速:与驱动相关的ECU,包括发动机电子、变速箱、ABS/ESP、EBS(商用车);
  • 中速或低速:仪表板、收音机、气候控制、驻车制动器、牵引杆等内部电子设备。

下面两张图显示了高速 CAN 总线的 CAN-high 和 CAN-low 信号。 静止时,两个信号的电压均为 2,5 伏。 为了发送消息,CAN 高电压从 2,5 伏增加到 3,5 伏,CAN 低电压从 2,5 伏降低到 1,5 伏。

CAN高速 (1)

下面您可以再次看到来自 CAN 高速的信号,该信号现已放大(每格 50 微秒),其中上述信号的范围设置为每格 200 微秒。

CAN高速 (2)

在舒适电子产品中,高速通信不太重要。 中低速CAN总线的特点,静止时和生成报文时的电压电平如下:

  • CAN-high 静止时为 5 伏,降至 1 伏;
  • CAN-low 静止时为 0 伏,升至 4 伏。

在将A通道和B通道的零线设置在同一高度的测量过程中,可以看到电压已经“相互滑入”。 这使得读取 CAN 高信号和低信号的纯度变得困难。

CAN低速 (1)

为了评估消息的纯度,建议移动零线。 在下图中,通道 A 的零线已向下移动,通道 B 的零线已向上移动。 这意味着所描绘的信号已被分离并且可以看到更清晰的电压变化。

CAN低速 (2)

(标准)11 位标识符的 CAN 总线消息的结构:
CAN 总线消息的结构始终基于下图。 结构上有差异; 例如,11位标识和29位标识的ARB和CTRL字段不同。 以下信息与 11 位标识符相关。 供您参考,29 位标识符比 11 位有更多空间容纳更多数据。 稍后会详细介绍这一点。

现在简单总结一下消息的结构,稍后详细介绍:

特种作战部队:
每个 CAN 消息都以 SOF(帧开始)开始。 当节点想要发送消息时,将在总线上放置一个显性位。 CAN 总线在静止时始终为隐性(1,因此 CAN-高电平和 CAN-低电平均为 2 伏)。 显性位(0)指示其他节点应等待发送消息,直到整个消息发布完毕。 只有在 IFS(帧间空间)之后,下一个节点才被允许发送其消息。 即使这是一条重要的消息,也不能错过。
当 2 个节点想要同时发送一条消息(它们彼此不知道)并因此通过放置 0 共同使总线占主导地位时,ARB(仲裁)将确定哪个消息优先。

从现在开始,所讨论的 CAN 总线消息的每个部分都会将该部分添加到该灰色图像中。 这样我就会尝试保持概览。 该消息是从特种部队开始的。

ARB:
11位标识符的仲裁字段由2部分组成; 标识符和 RTR 位。
识别:
假设 2 个节点同时使 CAN 总线占主导地位,那么具有最不重要消息的节点将等待,直到重要消息被发布(直到 IFS 之后)。 消息的标识符包含一系列 0 和 1。 这些数字是程序员故意分配给消息的。 消息中带有 0 的标识符(显性)比消息中带有 1 的标识符(隐性)具有更高的优先级。 带有 XNUMX 的消息将继续,带有 XNUMX 的消息将不得不等待。

两个标识符都开始发布 11 位消息。 通过 SOF 放置显性位。 那么两个标识符的前 5 位相等 (0 1 1 0 1)。 第 6 位是 2 表示标识符号 0,1 表示第一个标识符。主导占主导地位,因此标识符 2 创建最终的 CAN 消息。
标识符 1 在第 6 位放置 1,当总线上另一个节点放置 0 时,发送该标识符的节点仅识别出有 2 个节点同时发送消息。 此时,标识符 1 停止发送,现在充当接收器。 虽然以 0 1 1 0 1 开头的消息最初是该节点想要发送的消息,但现在它会将其视为已接收的消息。 然后,该节点侦听整个消息并确定是否对其执行任何操作。

SOF的灰度图像现在用ARB进行扩展,它由2部分组成,即标识符和RTR位:

RTR位:
11位标识符的最后一位称为RTR; 这是远程发送请求位。 该RTR位指示它是数据帧还是远程帧。
0 = 数据帧
1 = 远程帧

数据帧包含转发到需要该信息的节点的数据。 节点也可以请求信息; 例如,某个时间的冷却液温度是多少。 然后,节点会将 RTR 位设置为 1,因为它正在请求数据。

控制:
控制字段由IDE(标识符扩展)、R 位和DLC 组成。 IDE位指示它是标准(11位)还是扩展(29位)标识符:
0 = 标准标识符(11 位)
1 = 扩展标识符(29 位)

R 位是为将来保留的,现在始终为隐性。

然后是 DLC:CAN 总线网络最多可以发送 8 个字节。 1个字节有8位,所以按照标准协议总共可以发送64位。 控制字段指示正在发送的数据量。 发送一条带有所有空数据字段的确认位(1 表示打开或 0 表示关闭)的大消息是没有意义的。 字节数在相应的 DLC(数据长度代码)中说明。 DLC是编程软件中的一个功能,因此是程序员预先确定的值。
假设DLC中声明了1个字节,则发送8个比特。 对于简短的确认消息,这已经足够了。
对于非常广泛的消息,DLC 将包含最多 8 个数据字节的值。

该示例已再次扩展。 添加了 IDE、R 和 DLC。

数据:
最终需要发送的数据放在数据字段中。 大小取决于 DLC(数据长度代码)的值。 已经指出DLC最大为8字节。 每个字节由 8 位组成,因此数据字段总共可以由 64 位组成。

CRC:
循环冗余检查由数学计算组成,该计算与消息一起发送。 发送节点计算到目前为止总共的CAN报文; SOF、ARB、CTRL 和 DATA。 所以CRC就是计算。 当接收节点收到包含 CRC 的消息时,它将执行 DATA 之前的数学计算,并将其与 CRC 中的计算结果进行比较。 如果不匹配(由于坏位/故障),则不接受消息,并请求再次发送消息(具有一定的最大尝试次数)。 该示例已扩展为包含 CRC。

确认:
确认字段用于确认接收。 当发送方将消息发送到 CRC 时,会插入一种暂停; 发送器使总线隐性(0)并等待,直到一个或多个节点使总线显性(1)。 一个或多个节点是否收到该消息并不重要,因为如果一个节点收到该消息,则该消息发送成功。 当总线变为 1 后,消息传输将恢复。

法国电力公司:
帧结束由 7 个隐性位 (1 1 1 1 1 1 1) 组成。 对于所有控制单元来说,这是消息已结束的标志。

国际金融中心:
为了防止中断,在 EDF 之后始终使用帧间空间。 IFS 由 11 个隐性位组成。 所有节点在发送消息之前都会等待这 11 个隐性位通过。 例如,在这 11 个隐性位之后,2 个节点可以同时发送消息。 然后再次查看 ARB(仲裁)以确定哪个消息具有最高优先级。 然后整个循环再次开始。

(扩展)28 位标识符的 CAN 总线消息的结构:
11 位标识符是在汽车还没有那么多控制设备(节点)的时候设计的。 程序员很快发现 11 位标识符对他们来说还不够。 这只有 (2^11) = 2048 种可能性。 其中,保留了 2032 个唯一的二进制代码组合。 由于扩展的 28 位标识符,现代汽车现在使用更多的代码。 这称为扩展标识符。
这意味着可能的组合不少于 (2^29) = 536870912 种。 这对未来来说已经足够了。
CAN 总线消息中的许多内容都会发生变化。 两个标识符(标准标识符和扩展标识符)可以互换使用。 因此,CAN 消息表明它涉及哪个物种,后面跟着一个长消息。
11位标识符的基础,也是读取前的准备; 现在仅指示当消息是 29 位标识符时消息所经历的变化。
SOF(帧起始)保持不变。 发送节点在开始发送消息时使其成为主导。
接下来是 ARB 和 CTRL,这就是差异所在。

ARB:
在仲裁过程中,首先显示标准的 11 位标识符(即 29 位的一部分)。 RTR 位被移动(与 11 位一样)到 ARB 的末尾。 RTR 现在被 SRR 取代:(替代远程请求)。 对于扩展标识符,该位始终为隐性 (1)。
SRR 位之后是 IDE 位,它位于 CTRL(控制字段)的 11 位标识符中。 现在,它已从控制字段中删除,并放置在扩展标识符中的 SRR 位后面。

为了清楚起见,下图显示了标准(11 位)和扩展(29 位)标识符。

标准 11 位标识符
扩展 29 位标识符

IDE 位代表标识符扩展。 IDE 位决定它是标准标识符还是扩展标识符。
IDE 0 = 标准(11 位 ID)
IDE 1 = 扩展(29 位 ID)

IDE 位之后是扩展标识符的其余部分。 11 和 18 位加起来就是 29。这些不能作为一个整体放在消息中,因为 CAN 协议不再正确。 基本上,IDE 位现在指示消息已被分成两部分。

控制:
因此,控制字段已针对扩展标识符进行了更改。 IDE 位已移至 ARB。
IDE 位被 R 位(备用)替代。 默认情况下,这是隐性的。 接下来是 R 位和 DLC(数据长度代码),它指示消息将包含多少字节。

再次显示 11 位和 29 位标识符的控制字段。

来自 11 位 IDE 的 CTRL
来自 29 位 IDE 的 CTRL

使用 Bitstuffing 和 CRC & ACK 定界符进行错误识别:
位填充:
为了保持发送和接收节点之间的最佳同步,应用了位填充。 位填充是指在 5 个相同的位之后添加一个相反的位。 最初发送的消息中的位值没有变化,但添加了一位。
接收者认识到这一点。 在 5 个相同的位之后,接收器将清除第 6 位(见下图)。

发送的原始消息只有 6,但发送方每 0 位添加一个 XNUMX。 由于零的存在,消息长度确实增加了(但该长度不计入 DLC(数据长度代码)。接收器过滤掉相反的位(零),然后仅使用 XNUMX 再次读取消息。

CRC 和 ACK 分隔符:
定界符放置在 CRC 字段和 ACK 字段之后。 对于发送方和接收方来说,这是一个具有已知值的位。 如果消息中出现错误,则该值将会有所不同。 然后,接收方收到与预期不同的位值,并将消息标记为错误。 发件人将重新发送该消息。

双绞线接线:
CAN 总线使用双绞线电缆。 然后将 CAN-High 和 CAN-Low 电缆绞合在一起,如图所示。 这样就避免了外界的干扰; 如果一根电缆中产生零点几伏的感应电压,那么另一根电缆中也会产生零点几伏的感应电压。 然而,CAN 高电平和低电平之间的电压差保持不变。 这样故障就解决了,ECU 也不会受到影响。

终端电阻:
每个高速 CAN 总线网络都使用终端电阻。 它们通常合并在 CAN 总线(线路)末端的节点或布线中。 这些电阻器的电阻均为 120Ω(欧姆)。 测量导线电阻时,测得更换电阻为60Ω。

这些终端电阻用于抑制干扰; 如果没有这些,就会发生反射。 电压信号通过CAN总线,到达末端并反弹回来。 后者被阻止。 电压记录在电阻器中。 反射可能会导致电压信号反弹,影响发送的消息,从而导致控制设备发生故障。

网关:
汽车配备了控制设备(节点)网络。 网关连接各种CAN总线网络(如内饰、发动机/变速箱和底盘)、MOST总线和LIN总线,允许所有网络相互通信。 所以它实际上是所有网络之间的连接点。 对于网关来说,速度差异并不重要。 点击此处进入网关操作及功能介绍页面.

CAN 总线上的测量:
人们经常被问到是否可以测量 CAN 总线。 这当然是可能的。 可以通过测量电线上的电压电平并检查示波器上的电压显示来进行诊断。 页面上描述了如何进行测量 在 CAN 总线系统上进行测量。

相关页面: