关键概念
差分信号 (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 ⇒ 收发器把总线差分电平回读给控制器(用于仲裁监听)
| 收发器型号 | 标准 | 最高速率 | 特色功能 | 典型场景 |
| TJA1050 | ISO 11898-2 | 1Mbps | 基础高速收发 | 通用高速 CAN |
| TJA1042 | ISO 11898-2 | 1Mbps | 待机/唤醒、总线故障保护 | 需低功耗的 ECU |
| MCP2551 | ISO 11898-2 | 1Mbps | 斜率控制降 EMI | Microchip 生态 |
| TJA1044 | ISO 11898-2 | 5Mbps | CAN FD 就绪 | CAN FD 网络 |
| TJA1055 | ISO 11898-3 | 125kbps | 单线容错 | 车身低速容错 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,速率越低可越长。