第2章:CAN物理层——差分信号、CAN_H与CAN_L、终端电阻、总线拓扑结构
大家好,欢迎来到第二讲。
上一章我们聊了CAN总线的基本概念,知道它为什么能在汽车里站稳脚跟。今天咱们深入一层,看看CAN总线在物理层面是怎么工作的。
说白了,物理层就是信号怎么在线上跑。你想想看,发动机舱里那么大的电磁干扰,要是信号不够强壮,数据早就被冲散了。CAN总线能扛住,靠的就是差分信号这个绝活。
2.1 差分信号:为什么CAN总线不怕干扰?
我刚开始接触CAN总线时,有个问题一直想不通:明明两根线就能传数据,为什么非得用两根?后来在实验室里用示波器一看,才明白其中的门道。
CAN总线用的是差分信号传输。什么意思呢?就是逻辑1和逻辑0不是靠一根线的电压高低来判断,而是看两根线之间的电压差。
- 显性电平(逻辑0):CAN_H比CAN_L高,典型压差约2V
- 隐性电平(逻辑1):CAN_H和CAN_L电压几乎相等,压差接近0V
为什么会这样设计?你想想看,外部电磁干扰通常是同时作用在两根线上的,这叫共模干扰。差分信号只关心两根线的差值,共模干扰就被抵消掉了。我在做某款商用车仪表盘时,发动机启动瞬间电源波动很大,但CAN通信纹丝不动,差分信号的功劳功不可没。
核心要点:差分信号是CAN总线抗干扰的基石。两根线受到的干扰相同,但差值不变,数据就不会丢。
2.2 CAN_H与CAN_L:一对“冤家”
CAN_H和CAN_L,名字就告诉你了它们的角色。H代表High,L代表Low。在总线上,它们是一对互补的信号线。
我习惯用万用表先测一下CAN_H和CAN_L的对地电压。正常情况下,总线空闲时,CAN_H约2.5V,CAN_L约2.5V,两者相等。当有节点发送显性位时,CAN_H被拉高到约3.5V,CAN_L被拉低到约1.5V,压差2V左右。
这里有个小技巧:如果你用示波器看波形,CAN_H和CAN_L的波形是镜像对称的。一个上升,另一个就下降。我曾经遇到过一次奇怪的通信故障,波形看起来不对称,后来发现是CAN收发器坏了,输出驱动能力不足。
经验之谈:测量CAN_H和CAN_L的静态电压,是排查总线物理故障的第一步。正常值应该在2.5V附近,偏差超过0.3V就要警惕了。
2.3 终端电阻:为什么必须加?
终端电阻,这是很多新手容易忽略的地方。我记得有一次帮朋友调试一个CAN网络,通信时好时坏,波形上能看到明显的振铃。查了半天,发现总线两端各缺了一个120欧姆的电阻。
终端电阻的作用有两个:
- 阻抗匹配:防止信号在总线末端反射,产生振铃
- 提供偏置:在隐性状态时,让CAN_H和CAN_L电压稳定在2.5V
标准CAN总线要求两端各接一个120Ω电阻。为什么是120Ω?因为CAN总线双绞线的特性阻抗大约是120Ω,匹配了才能把反射降到最低。
你想想看,如果总线只有一端有终端电阻,或者电阻值不对,信号反射就会导致误码。我见过一个案例,某款车在低温环境下CAN通信偶尔中断,排查后发现是终端电阻焊接不良,温度变化导致接触电阻增大。
注意:终端电阻必须接在总线的最远端。如果接在中间,反而会破坏阻抗匹配。我曾经见过有人把电阻焊在节点板上,结果总线拓扑变了,电阻位置不对,通信就出问题了。
2.4 总线拓扑结构:怎么连才靠谱?
CAN总线的拓扑结构,说白了就是节点怎么挂在线上。最推荐的是直线型(也叫干线-支线型)。
我个人的习惯是:
- 干线:用一根双绞线贯穿所有节点,两端接终端电阻
- 支线:每个节点通过短支线连接到干线,支线长度尽量短
为什么支线要短?因为支线相当于一个短截线,会产生信号反射。支线越长,反射越严重。CAN协议规定,在1Mbps速率下,支线长度不应超过0.3米。实际项目中,我一般控制在0.1米以内。
还有一种拓扑是星型,但我不推荐。星型拓扑会在中心点产生多个反射点,信号质量很难保证。除非你用CAN中继器或者集线器,否则老老实实用直线型。
| 拓扑类型 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| 直线型 | 信号质量好,布线简单 | 支线长度受限 | 绝大多数场景 |
| 星型 | 布线灵活 | 信号反射严重 | 需加中继器 |
| 环型 | 冗余性好 | 故障诊断复杂 | 极少使用 |
嗯,这里要注意一点:总线长度和通信速率是成反比的。速率越高,总线允许的最大长度就越短。比如125kbps时,总线可以到500米;但到了1Mbps,就只能到40米了。这个关系在ISO 11898标准里有详细说明。
避坑指南:我曾经在一个项目中,为了布线方便,把CAN总线走成了环形。结果通信时好时坏,波形乱七八糟。后来改成直线型,问题立刻解决。所以,别在拓扑结构上耍小聪明,直线型最靠谱。
小结
这一章我们聊了CAN物理层的几个关键点:差分信号让CAN不怕干扰,CAN_H和CAN_L是一对互补的信号线,终端电阻必须接在总线两端,拓扑结构推荐直线型。
下一章,我们会进入CAN的数据链路层,看看报文是怎么组织的。到时候你会明白,为什么CAN总线能那么高效地处理优先级和仲裁。
好,今天就到这里。有什么问题,欢迎在评论区交流。