2. CAN总线基础

要做好CAN总线的故障定位与波形诊断,必须先回到最基础的物理层与协议层认知:CAN并不是“两根线随便传数据”,而是一套由差分信号、位仲裁、标准帧格式和拓扑约束共同构成的可靠通信体系。只有理解显性位与隐性位如何在差分对上表现、终端电阻如何影响信号完整性、总线拓扑如何决定反射与支线长度,后续用示波器、CAN分析仪抓到的波形才有解释依据。

一、CAN协议的起源与设计目标

CAN(Controller Area Network,控制器局域网)最早由德国Bosch公司在20世纪80年代提出,用于解决汽车内部日益增多的电子控制单元(ECU)之间的通信问题。传统点对点线束在功能增加时会迅速膨胀,重量、成本和故障率都难以控制。CAN采用多主、广播式串行总线,让多个节点共享一对差分线,在保证实时性和可靠性的前提下大幅减少线束。

其核心设计目标包括:

  • 多主仲裁:任何节点都可在总线空闲时发起发送,通过标识符逐位仲裁决定优先级,避免冲突破坏数据。
  • 非破坏性仲裁:优先级高的报文继续发送,低优先级节点自动退让并等待下一次空闲,不浪费带宽。
  • 错误检测与隔离:通过CRC、位填充、帧格式检查、应答检查等机制发现错误,并能区分暂时性干扰与永久性故障。
  • 差分传输:使用CAN_H与CAN_L两根线,以电压差表示逻辑,共模干扰被大幅抑制。

二、ISO 11898标准体系与分层

CAN的标准化由ISO 11898系列完成,常见部分包括:

  • ISO 11898-1:数据链路层与物理信令,定义帧格式、仲裁、错误处理等。
  • ISO 11898-2:高速CAN物理层,速率通常为125 kbit/s~1 Mbit/s,采用线性总线与两端终端电阻。
  • ISO 11898-3:低速容错CAN,速率一般不超过125 kbit/s,支持单线故障下的降级运行。

在诊断中,最常接触的是ISO 11898-2高速CAN。它规定了差分电压范围、终端电阻、共模电压、总线长度与速率的关系。例如,1 Mbit/s时总线长度通常不超过40 m,125 kbit/s时可延长至约500 m。这些参数直接决定波形诊断时的边沿、振铃和幅值判断标准。

关键认知:ISO 11898-2不是“建议”,而是物理层判据。若CAN_H与CAN_L的差分电压、终端电阻或共模范围偏离标准,通信可能时好时坏,但用万用表静态测量未必能发现。

三、差分信号原理与显性/隐性电平

CAN总线使用差分信号:接收端关注的是CAN_H与CAN_L之间的电压差V_diff = V_CAN_H − V_CAN_L,而不是单根线对地的绝对电压。这样,当外界电磁干扰同时耦合到两根线上时,共模部分被抵消,差分部分保留,通信更可靠。

在高速CAN中,逻辑位分为显性位(Dominant,逻辑0)和隐性位(Recessive,逻辑1):

  • 显性位:CAN_H约3.5 V,CAN_L约1.5 V,V_diff约2 V。显性位具有“压倒”隐性位的特性,只要有一个节点发送显性位,总线就呈现显性。
  • 隐性位:CAN_H与CAN_L都约2.5 V,V_diff约0 V。总线空闲时通常为隐性状态。

仲裁正是利用“显性覆盖隐性”的规则:节点发送标识符时,若自己发隐性却检测到显性,说明有更高优先级节点在发送,于是退出仲裁。因此,标识符数值越小,优先级越高。

CAN差分信号与总线拓扑核心关系 显性位 / 隐性位差分电平 显性位(逻辑0) CAN_H ≈ 3.5 V CAN_L ≈ 1.5 V V_diff ≈ 2 V 隐性位(逻辑1) CAN_H ≈ CAN_L ≈ 2.5 V,V_diff ≈ 0 V 线性总线拓扑与终端电阻 CAN_H CAN_L 120Ω 120Ω ECU1 ECU2 ECU3 支线尽量短 非破坏性仲裁:显性覆盖隐性 节点A(ID小,优先级高) 0 0 1 0 节点B(ID大,优先级低) 0 0 1 1 仲裁结果 第4位:A发0,B发1 显性覆盖隐性 B退出,A继续发送 诊断要点 • 空闲时V_diff≈0,显性时V_diff≈2 V • 终端电阻应为60Ω(两120Ω并联) • 支线过长会引起反射与振铃

四、总线拓扑结构与终端电阻

ISO 11898-2高速CAN采用线性总线拓扑:所有节点并联在CAN_H与CAN_L之间,总线两端各接一个120 Ω终端电阻,等效直流电阻约60 Ω。终端电阻的作用是吸收信号反射,使差分信号边沿干净、幅值稳定。若缺少终端电阻、阻值错误或只在一端安装,示波器上常能看到明显的振铃、过冲或边沿变缓。

拓扑诊断中要特别关注:

  • 支线长度:节点到主干的支线应尽量短,1 Mbit/s时通常建议不超过0.3 m,否则会引入反射。
  • 节点数量:过多节点会增加总线电容,导致上升/下降时间变长,眼图变差。
  • 接地与共模:各节点地电位差过大时,共模电压可能超出收发器范围,出现随机错误帧。

五、典型场景与诊断参数对照

假设一辆车上的CAN总线偶发通信中断,用示波器测量CAN_H与CAN_L。若发现隐性位时差分电压不为0 V,而是约1 V,说明某节点或线路存在对电源/对地短路倾向;若显性位幅值只有1 V左右,可能是终端电阻缺失或总线负载异常。下表给出常见测量项与判断方向:

测量项 正常参考 异常表现 可能原因
静态电阻(断电) CAN_H-CAN_L约60 Ω 约120 Ω或无穷大 缺少一端终端电阻、线束断开
隐性位差分电压 约0 V 明显偏离0 V 短路、收发器损坏、共模偏移
显性位差分电压 约2 V 偏低或偏高 终端电阻异常、负载过多、供电异常
波形边沿 干净、无明显振铃 振铃、过冲、台阶 支线过长、阻抗不连续、终端缺失
总线空闲电平 CAN_H≈CAN_L≈2.5 V 偏离2.5 V 对地/对电源短路、收发器故障

六、常见误区与复盘

误区1:用万用表测CAN_H和CAN_L对地电压,看到2.5 V左右就认为总线正常。实际上,隐性位时两根线都接近2.5 V,但显性位和差分幅值必须用示波器或差分探头观察。

误区2:只测一端终端电阻为120 Ω就认为正常。高速CAN要求两端各120 Ω,断电时从总线任意一点测量应接近60 Ω。

误区3:忽略支线长度,认为“能通信就行”。支线过长在低速时可能勉强工作,但速率提高或温度变化后会出现偶发错误帧,波形上表现为振铃和边沿畸变。

复盘时建议按以下顺序建立基线:先确认拓扑与终端电阻,再测量静态差分电阻,然后上电观察隐性/显性电平,最后用示波器查看位时间、边沿和振铃。只有把协议起源、ISO 11898标准、差分信号、显性/隐性电平与拓扑结构串成一条链,后续的故障定位才能从“猜”变成“测”。