2. 物理层基础:差分信号原理、共模电压与差模电压、CAN总线电平逻辑(显性/隐性)

好,我们进入物理层基础。这部分内容,说白了就是CAN FD能跑起来的物理根基。很多刚接触CAN FD的工程师,往往只关注协议层,觉得物理层无非就是两根线。嗯,我当年也这么想过,直到在一次EMC测试中吃了大亏……从那以后,我再也不敢轻视物理层了。

2.1 差分信号原理:为什么CAN要用两根线?

先问一个问题:为什么CAN总线不采用单端信号,比如像UART那样一根TX一根RX对地传输?

答案很简单——抗干扰。单端信号依赖地平面作为参考,一旦地平面有噪声,信号就跟着抖。我曾在某款车载控制器上遇到过,地弹噪声直接把CAN收发器干趴了,总线一直报错。后来换成差分走线,问题迎刃而解。

差分信号的核心思想是:用两根线上的电压差来表示逻辑状态。这两根线,就是CAN_H和CAN_L。

  • 差分电压 V_diff = V(CAN_H) - V(CAN_L)
  • 外部干扰(共模噪声)同时叠加在两根线上,相减后抵消
  • 不需要依赖地作为参考,抗共模干扰能力极强

关键点:差分信号不是两根独立的线,而是一对耦合传输线。走线时必须等长、靠近,才能保证噪声耦合一致。

我个人习惯在PCB布局时,把CAN_H和CAN_L的走线间距控制在2倍线宽以内,并且避免跨分割。你想想看,如果差分对跨过了不同的参考平面,那共模噪声还能抵消吗?显然不能。

2.2 共模电压与差模电压:两个容易混淆的概念

很多新手分不清共模和差模。我换个说法:

  • 差模电压——两根线之间的差值,这是有用的信号
  • 共模电压——两根线相对于地的平均值,这是偏置或噪声

公式很简单:

V_diff = V(CAN_H) - V(CAN_L)
V_common = (V(CAN_H) + V(CAN_L)) / 2

在CAN FD中,收发器内部会处理共模电压。但作为硬件工程师,你必须关注共模电压的范围。为什么?

我曾经遇到一个案例:某款车用CAN收发器,在长距离通信时偶尔丢帧。排查了整整两天,最后发现是共模电压超出了收发器的输入范围(-2V到+7V)。原因是总线上的地电位偏移,导致共模电压漂到了8V以上。收发器内部的比较器饱和了,自然无法正确识别差分信号。

避坑指南:我曾经在设计中忽略了共模扼流圈的选型,结果高频共模噪声直接耦合到收发器内部,导致误判。记住:共模扼流圈不是摆设,它对共模抑制比(CMRR)至关重要。

这里我列一个典型CAN FD收发器的共模/差模参数,供你参考:

参数 最小值 典型值 最大值 单位
差模输入范围 -12 +12 V
共模输入范围 -2 +7 V
共模抑制比(CMRR) 60 dB

嗯,这里要注意:CMRR越高,说明收发器抑制共模干扰的能力越强。如果你的应用环境电磁干扰严重,建议选CMRR在70dB以上的器件。

2.3 CAN总线电平逻辑:显性与隐性

CAN总线的逻辑状态只有两种:显性(Dominant)隐性(Recessive)。这和普通的数字逻辑(0和1)不太一样。

  • 隐性状态:CAN_H和CAN_L电压相等(约2.5V),差分电压接近0V。此时总线呈现高阻抗,相当于逻辑“1”。
  • 显性状态:CAN_H被拉高(约3.5V),CAN_L被拉低(约1.5V),差分电压约2V。此时总线呈现低阻抗,相当于逻辑“0”。

为什么叫“显性”和“隐性”?因为总线采用线与(Wired-AND)机制:

  • 多个节点同时发送时,只要有一个节点输出显性,总线就是显性
  • 隐性状态只有在所有节点都输出隐性时才成立

说白了,显性状态“覆盖”隐性状态。这就是CAN总线仲裁的基础——谁先发显性位,谁就赢得总线控制权。

个人经验:我在调试CAN FD通信时,习惯先用示波器抓取CAN_H和CAN_L的波形。如果看到隐性电平偏离2.5V太多(比如漂到2.8V),说明终端电阻匹配有问题,或者收发器的共模偏置电路出了故障。

这里我画一个简化的电平关系图(用文字描述):

隐性状态(Recessive):
  CAN_H = 2.5V
  CAN_L = 2.5V
  V_diff = 0V  → 逻辑“1”

显性状态(Dominant):
  CAN_H = 3.5V
  CAN_L = 1.5V
  V_diff = 2.0V  → 逻辑“0”

你想想看,如果总线上的终端电阻不匹配,或者共模电压偏移,显性状态的差分电压可能达不到2V。我曾经遇到过一批劣质收发器,显性差分电压只有1.2V,结果在高温下通信误码率飙升。嗯,从那以后我选型时必看收发器的输出差分电压指标,低于1.5V的一律不用。

2.4 小结与避坑清单

这一节的内容,我总结几个必须记住的点:

  1. 差分信号靠的是“差”,不是“地”——走线要等长、靠近,避免跨分割
  2. 共模电压是隐形杀手——超出收发器范围,直接导致通信失败
  3. 显性/隐性不是简单的0和1——线与机制决定了仲裁逻辑
  4. 终端电阻影响电平质量——120Ω是标准值,但要根据总线长度和节点数微调

最后一句:物理层设计没有捷径。我见过太多工程师在协议层花大量精力优化,却因为一根走线没处理好导致整个项目返工。记住:信号完整性是设计出来的,不是测试出来的。