Chapter 02 · CAN 总线 / 汽车电子

物理层

一对拧在一起的铜线,如何在发动机舱的强电磁干扰中稳定传输数据?本章讲透 CAN 的差分信号、显性隐性电平、120Ω 终端电阻与收发器芯片。

课程进度13%

关键概念

差分信号 (Differential Signaling)
用两根线 CAN_H 与 CAN_L 的电压差而非单根线对地电压来表示数据。CAN 的逻辑值由 Vdiff = VCAN_H − VCAN_L 决定。差分传输的最大好处是共模抗扰:外界干扰会同等地叠加到两根线上,相减后被抵消,因此 CAN 能在电磁噪声极强的汽车环境里可靠工作。
显性电平 (Dominant, 逻辑 0)
收发器驱动 CAN_H≈3.5V、CAN_L≈1.5V,差分电压 Vdiff≈2V(>0.9V 判为显性)。此时收发器主动"拉开"两根线的电压。多个节点同时发送时,只要有一个发显性,总线就是显性——这就是仲裁得以工作的物理"线与"特性。
隐性电平 (Recessive, 逻辑 1)
收发器不驱动总线,CAN_H 与 CAN_L 都被偏置到约 2.5V,差分电压 Vdiff≈0V(<0.5V 判为隐性)。隐性是总线的"默认松弛"状态,靠终端电阻把两线拉到同一电位。只有所有节点都发隐性时,总线才呈隐性。
双绞线 (Twisted Pair)
CAN_H 与 CAN_L 两根线相互缠绕。缠绕使两线在空间上紧密平行,外界磁场对两线感应出几乎相同的干扰(共模),差分接收时被抵消;同时也减小信号线自身向外辐射的噪声。汽车 CAN 通常用非屏蔽双绞线(UTP)即可,高干扰场合用屏蔽双绞线(STP)。
终端电阻 (Termination Resistor, 120Ω)
接在总线两端的电阻,阻值等于电缆特性阻抗(约 120Ω)。作用是吸收信号反射——高速信号到达线缆末端若无匹配电阻会反弹回来,叠加成畸变导致误码。CAN 要求总线两端各一个 120Ω,二者并联后总线呈现约 60Ω 负载。这是 CAN 布线最容易出错、也最常导致"通信时好时坏"的地方。
CAN 收发器 (Transceiver)
位于 CAN 控制器(如 STM32 bxCAN)与物理总线之间的接口芯片,把控制器的单端 TTL 电平(TXD/RXD)转换成总线上的差分电平,反之亦然。典型型号 TJA1050(高速)、TJA1042(带待机唤醒)、MCP2551。它还提供总线保护、共模范围扩展和过温保护。
高速 CAN vs 低速容错 CAN
高速 CAN(ISO 11898-2):速率最高 1Mbps,双线差分,需两端 120Ω 终端,用于动力/底盘。低速容错 CAN(ISO 11898-3):速率 ≤125kbps,即使一根线断路/短路仍能单线降级工作(fault tolerant),用于车身舒适系统,终端电阻方案不同(每节点分布式电阻)。
共模电压范围 (Common-Mode Range)
不同 ECU 的地电位可能因大电流负载而漂移,导致两节点看到的总线绝对电压不同。收发器允许 CAN_H/CAN_L 的绝对电压在一定范围内浮动(如 TJA1050 约 −12V~+12V)仍能正确解码差分值。共模范围越宽,网络对地偏移和干扰越鲁棒。

差分电平:显性与隐性的波形

下图对比同一段位流在 CAN_H、CAN_L 及差分电压上的表现。注意隐性时两线合拢到 2.5V,显性时被拉开到 3.5V/1.5V。

高速 CAN 差分电平(ISO 11898-2) ════════════════════════════════════════════════════ 逻辑值: 隐1 显0 显0 隐1 显0 隐1 ┌────┐ ┌────┐ ┌────┐ 电压 3.5V ..........┌────────┐..............┌────┐........ CAN_H 2.5V ━━━━━━│ │━━━━━━━━━│ │━━━━ (偏置基线) 1.5V ..........└────────┘..............└────┘........ CAN_L V_diff: 2.0V ┌────────┐ ┌────┐ 0.9V ─ ─ ─ ─ ┤ 显性阈值 ├─ ─ ─ ─ ─ ─┤ ├─ ─ ─ 0.0V ━━━━━━━┘ └━━━━━━━━━━┘ └━━━ 隐性≈0V 显性≈2V 隐性≈0V 显性 隐性 判定: V_diff > 0.9V ⇒ 显性(0) V_diff < 0.5V ⇒ 隐性(1)
为什么显性是 0、隐性是 1

命名源于仲裁语义:"显性"位主动驱动总线、会压倒"隐性"位,就像逻辑与(AND)中 0 会压倒 1。定义显性=0 使得 ID 越小(0 越多)优先级越高,与仲裁规则一致。物理上显性是"主动拉开电压",隐性是"松手让电阻拉平"——所以隐性也叫总线的空闲/默认态。

总线拓扑与终端电阻

CAN 必须是线形总线:一条主干,节点通过尽量短的支线(stub)挂接。两端各一个 120Ω 终端电阻。星形连接和过长支线会引入反射,是高速 CAN 布线的大忌。

正确的线形拓扑 + 双端 120Ω 终端 120Ω 120Ω ┌─R─┐ ══════ 主干 (backbone) ══════════════ ┌─R─┐ │ ├──╤═══════╤═══════╤═══════╤═══════╤═══════┤ │ └───┘ │ │ │ │ │ └───┘ 短支线 │ │ │ │ ┌───┴─┐ ┌───┴─┐ ┌───┴─┐ ┌───┴─┐ ┌───┴─┐ │节点1│ │节点2│ │节点3│ │节点4│ │节点5│ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ R = 120Ω,两端各一个,并联后总线呈约 60Ω ✗ 错误做法: · 只装一个终端电阻 ⇒ 反射,误码率升高 · 装了 3 个以上或阻值错误 ⇒ 差分幅值不足 · 支线(stub)过长 ⇒ 分支反射 · 星形/树形连接 ⇒ 多点反射,高速下几乎必挂
现场排障:先量总线电阻

CAN 通信异常时,第一步断电后用万用表量 CAN_H 与 CAN_L 之间的电阻:正常应约 60Ω(两个 120Ω 并联)。若量到 120Ω,说明只有一个终端电阻(另一个缺失或断线);若量到接近 0Ω,说明总线短路;若量到无穷大,说明没有终端电阻或线路断开。这个"量 60Ω"的技巧能快速定位大量物理层故障。

收发器:控制器与总线之间的桥梁

MCU 里的 CAN 控制器只输出单端逻辑电平 TXD/RXD,需要收发器把它转成差分总线信号。收发器的 TXD 引脚为 0 时驱动显性,为 1 时释放为隐性。

CAN 节点信号链路 ┌──────────────┐ TXD ┌──────────────┐ CAN_H │ MCU 内 │ ────▶ │ ├────────▶ ══╤══ 总线 │ CAN 控制器 │ │ CAN 收发器 │ CAN_L 120Ω │ (bxCAN) │ ◀──── │ (TJA1050) ├────────▶ ══╧══ └──────────────┘ RXD └──────────────┘ TXD=0 ⇒ 收发器驱动显性(CAN_H高/CAN_L低) TXD=1 ⇒ 收发器释放,总线呈隐性 RXD ⇒ 收发器把总线差分电平回读给控制器(用于仲裁监听)
收发器型号标准最高速率特色功能典型场景
TJA1050ISO 11898-21Mbps基础高速收发通用高速 CAN
TJA1042ISO 11898-21Mbps待机/唤醒、总线故障保护需低功耗的 ECU
MCP2551ISO 11898-21Mbps斜率控制降 EMIMicrochip 生态
TJA1044ISO 11898-25MbpsCAN FD 就绪CAN FD 网络
TJA1055ISO 11898-3125kbps单线容错车身低速容错 CAN

高速 CAN vs 低速容错 CAN

高速 CAN (ISO 11898-2)

  • 速率 125kbps ~ 1Mbps
  • 两端各一个 120Ω 终端
  • 显性 CAN_H≈3.5V / CAN_L≈1.5V
  • 断线即失效,无冗余
  • 动力总成、底盘、诊断骨干

低速容错 CAN (ISO 11898-3)

  • 速率 ≤125kbps
  • 分布式终端(每节点带电阻)
  • 显性电压摆幅更大(约 5V/0V)
  • 单线断/短仍可降级单线工作
  • 车身舒适系统(门、灯、座椅)
线缆长度与速率的权衡

CAN 总线的最大长度受速率限制:仲裁要求信号能在一个位时间内往返全网传播,速率越高、位时间越短、允许的总线越短。经验值:1Mbps ≤ 40m,500kbps ≤ 100m,125kbps ≤ 500m,10kbps 可达数公里。这也是为什么长距离场合(如工程机械 J1939)常用 250kbps 而非 1Mbps。支线长度也须限制(高速下每条 < 0.3m,总支线长度受限)。

本章小结

CAN 物理层用 CAN_H 与 CAN_L 两根双绞线的差分电压传输数据,靠共模抵消在汽车强干扰环境中可靠工作。显性位(逻辑 0)由收发器主动驱动,CAN_H≈3.5V、CAN_L≈1.5V,差分约 2V;隐性位(逻辑 1)是不驱动的默认态,两线合拢到 2.5V、差分约 0V;显性压倒隐性形成"线与",是仲裁的物理基础。总线必须是线形拓扑,两端各接一个 120Ω 终端电阻吸收反射,正常测量 CAN_H-CAN_L 间应为 60Ω(两个并联),这是现场排障第一招。收发器(TJA1050/TJA1042/MCP2551 等)把 MCU 的 TXD/RXD 单端信号转成差分总线信号:TXD=0 驱动显性、TXD=1 释放隐性,同时通过 RXD 回读用于仲裁监听。高速 CAN(ISO 11898-2,≤1Mbps)无冗余,低速容错 CAN(ISO 11898-3,≤125kbps)支持单线降级。总线最大长度与速率成反比,1Mbps 约 40m,速率越低可越长。

⚒️ 配套开发者工具箱 · JSON / 正则 / 时间戳 / Cron 等 17 款免费在线工具