4. 物理层测试:差分电压与共模电压范围
做CAN总线测试这么多年,我始终觉得物理层是门槛最低、坑却最多的一环。很多刚入行的工程师以为只要信号能通就行,结果在一致性测试上一测一个不准——尤其是差分电压和共模电压这两项,几乎是必踩的雷区。
这一章咱们就把这两个参数彻底讲透。我会把标准里的“冷门细节”和你实际测试时会碰到的“热乎问题”都掰开来说。
4.1 差分电压——CAN总线的“语言”
CAN总线靠两条线传输数据:CAN_H和CAN_L。它不是看单根线的电平,而是看两线之间的电压差——这就是差分电压(Vdiff)。
标准ISO 11898-2定义了两种逻辑状态:
- 显性(Dominant): Vdiff ≥ 0.9 V,对应逻辑“0”。此时CAN_H比CAN_L高至少0.9V。
- 隐性(Recessive): Vdiff ≤ 0.5 V,对应逻辑“1”。两线电压几乎相等,一般接近2.5V(共模电压)。
但光记住这两个阈值还不够。一致性测试里要求测的是收发器在负载条件下的实际输出差分电压。我记得第一次带团队做测试时,拿着示波器看波形,显性差分电压才0.85V——标准下限是0.9V!查了半天发现是终端电阻匹配不当,导致总线负载过重。
关键指标速查:
- 显性差分电压:0.9 V ~ 5 V(带负载)
- 隐性差分电压:-0.5 V ~ +0.05 V(理想为0V,实际允许微小偏差)
- 共模电压范围:1.5 V ~ 3.5 V(对应位时间内的直流分量)
4.2 共模电压——隐藏的“大地参考”
共模电压(Vcm)是CAN_H和CAN_L电压的平均值。说白了,就是两条线相对于本地地的“直流偏置”。标准要求Vcm在1.5V~3.5V之间。为什么是这范围?因为收发器的输入共模范围通常就是1.5V~3.5V,超出这个区间,接收器的差分判断可能出错。
实际项目中,共模电压偏移最常出现在车用网络里——接地点电位不一致、线束过长、或者隔壁大功率电机干扰都会让Vcm跑偏。我曾经遇到一个案例:某款ECU在实验室测试全过,装车后偶发总线错误。我带着便携示波器去现场,发现CAN_H对地电压在电机启动瞬间飙到4.2V,共模电压直接超了标准上限。后来加了共模扼流圈才搞定。
我的测试习惯:
测共模电压时,别只看平均值,还得看动态波动。用示波器的平均模式看均值,再用峰值检测看最大最小值。只要最大或最小值超出1.5V~3.5V范围,哪怕持续时间很短,都可能引发接收错误。
4.3 差分电压与共模电压的测试方法
一致性测试标准里,物理层测试分两步:静态测试(不上总线通信)和动态测试(总线正常通信)。静态主要测收发器在特定负载下的直流特性,动态测数据帧期间的波形参数。
常用的测试布置:
- 断开DUT的CAN总线连接,接入专用的测试负载(如60Ω差分电阻 + 分压网络)。
- 向DUT发送显性/隐性控制指令,用差分探头测量CAN_H和CAN_L之间的电压。
- 记录Vdiff和Vcm,与标准限值比较。
以下是我整理的对照表,方便你在测试报告里快速定位:
| 测试项 | 标准要求 | 典型测试条件 |
|---|---|---|
| 显性差分电压(Vdiff_dom) | 0.9 V ≤ Vdiff ≤ 5.0 V | RL=60Ω,显性位发送 |
| 隐性差分电压(Vdiff_rec) | -0.5 V ≤ Vdiff ≤ 0.05 V | RL=60Ω,隐性位发送 |
| 共模电压(Vcm) | 1.5 V ≤ Vcm ≤ 3.5 V | 显性和隐性状态下均满足 |
| 共模电压波动 | ΔVcm ≤ 0.3 V(位时间内) | 发送显性→隐性跳变时 |
⚠ 避坑提醒:
我曾经见过有人直接用单端探头测CAN_H对地电压,然后拿这个值减去CAN_L对地电压算差分——这种做法极不可靠。共模噪声会同时叠加在两线上,单端探头把共模噪声也读了进去,算出来的差分值会偏差很大。一定要用差分探头或者示波器的数学通道(CH1 - CH2)。
4.4 典型波形与参数关系
下面这张SVG图可以帮你直观理解显性/隐性电压、差分电压和共模电压在总线上的关系。这是我平时培训时必画的图。
4.5 实测中的常见问题与处理
根据我这些年做一致性测试的经验,差分电压和共模电压出问题,无外乎下面几种情况:
- 终端电阻偏了:标准要求120Ω,但实际PCB上电阻精度不够,或者焊接后阻值漂移——显性电压会掉到0.8xV。用精密电阻替换就能解决。
- 线束太长/太细:总线电容增加,波形上升沿变缓,导致差分电压在采样点处不够。建议总线长度控制在40米以内(1Mbps时)。
- 地电位差大:两个节点之间地电位差超过±7V时,共模电压会偏移。加隔离CAN收发器(如ISO1042)可以隔离地环路。
- 电源纹波耦合:如果收发器供电的LDO噪声大,共模电压上会叠加100mV以上的纹波。可以用LDO后级加π型滤波器解决。
我的故障排查流:
- 先示波器看CAN_H和CAN_L对地波形,确认不是电源或地问题。
- 再用差分探头测Vdiff,看显性幅度是否达标。
- 如果Vdiff偏低,断开DUT单独测量收发器输出(无负载),排除负载影响。
- 如果共模电压异常,检查DUT本地地与电池负极之间的压差。
最后唠叨一句:物理层测试虽然基础,但它决定了整个CAN网络能不能稳定工作。差分电压和共模电压这两个指标,你花半小时测准了,后面协议层调试就能省出三天时间。嗯,这真的是我摔过很多次后的真心话。