第1章:CAN总线物理层基础
各位同行,今天咱们聊聊CAN总线物理层。说实话,很多通信丢失故障,根子就在物理层。我处理过的案例里,至少六成是物理层问题。你想想看,物理层都不稳,上层协议再完美也没用。
1.1 CAN_H与CAN_L的电平逻辑
CAN总线用两根线传输数据:CAN_H和CAN_L。它们不是简单的0和1,而是靠差分电压来传递信号。
什么叫差分电压?说白了,就是CAN_H减去CAN_L的差值。这个差值决定了总线状态:
- 显性电平(Dominant):CAN_H比CAN_L高2V左右。此时总线被拉低,逻辑上代表"0"。
- 隐性电平(Recessive):CAN_H和CAN_L电压几乎相等(约2.5V)。此时总线处于空闲,逻辑上代表"1"。
我刚开始接触CAN时,总觉得这设计有点绕。后来才明白,差分信号抗干扰能力极强。你想想,外界噪声同时作用在两根线上,差值基本不变。这就是为什么CAN能在发动机舱这种恶劣环境里稳定工作。
关键参数速查表
| 参数 | 显性电平 | 隐性电平 |
|---|---|---|
| CAN_H电压 | 3.5V | 2.5V |
| CAN_L电压 | 1.5V | 2.5V |
| 差分电压 | 2.0V | 0V |
| 逻辑值 | 0 | 1 |
嗯,这里要注意:显性电平会覆盖隐性电平。也就是说,只要有一个节点发送显性位,总线就是显性状态。这是CAN总线仲裁机制的基础。
1.2 终端电阻的作用
终端电阻,每个CAN工程师都绕不开的东西。它的标准值是120Ω,安装在总线两端。
为什么需要它?我打个比方:信号在总线里传输,遇到阻抗突变就会反射。反射回来的信号会干扰原始信号,导致误码。终端电阻的作用就是吸收信号能量,消除反射。
我记得有一次,某车型批量出现间歇性通信丢失。排查了三天,最后发现是终端电阻虚焊。你想想,一个120Ω的电阻,成本不到一毛钱,却让整车厂赔了几十万。
我的经验:测量终端电阻时,一定要在ECU断电状态下测。带电测量会引入其他路径的阻抗,读数不准。我习惯用万用表直接量CAN_H和CAN_L之间的电阻,正常应该在60Ω左右(两个120Ω并联)。
终端电阻还有两个隐藏作用:
- 提供偏置电压:隐性电平时,电阻将总线电压稳定在2.5V。
- 限制电流:防止短路时电流过大烧毁收发器。
避坑指南:我曾经遇到一个案例,工程师把终端电阻装在了同一个节点上。结果总线两端没有匹配,信号反射严重,通信距离从40米直接缩到5米。记住:终端电阻必须装在总线物理位置的两端,不是ECU的两端。
1.3 总线拓扑结构
CAN总线是典型的"多主"总线。什么意思?就是所有节点地位平等,谁都可以发起通信。这跟传统的"主从"架构完全不同。
常见的拓扑结构有三种:
- 直线型(最推荐):所有节点挂在一条主干线上。这是最标准、最稳定的拓扑。
- 星型:节点通过集线器连接。我不建议用这种,因为集线器会成为单点故障。
- 树型:主干分出分支。分支长度必须严格控制,否则反射严重。
我个人习惯用直线型。你想想,CAN总线设计初衷就是直线拓扑。非要搞花活,迟早要还的。
关于分支长度,有个经验公式:分支长度(米)≤ 波特率(kbps)/ 10。比如500kbps的波特率,分支不能超过50米。实际上,我建议分支越短越好,最好控制在30cm以内。
拓扑设计黄金法则
- 主干线两端必须安装120Ω终端电阻
- 分支长度尽量短(<30cm为佳)
- 节点间距尽量均匀
- 避免T型分支过长
嗯,这里还要提一下总线长度。CAN总线的最大长度取决于波特率:
| 波特率 | 最大总线长度 |
|---|---|
| 1 Mbps | 40 m |
| 500 kbps | 100 m |
| 250 kbps | 250 m |
| 125 kbps | 500 m |
| 50 kbps | 1000 m |
这个表我建议你存下来。实际项目中,我一般留20%的余量。比如需要100米通信,我会选125kbps的波特率,而不是500kbps。
最后说一句:物理层是CAN通信的基石。你花80%的精力把物理层搞扎实,剩下20%处理协议问题就够了。反过来,物理层有隐患,你花再多时间调软件也是白搭。
下一章,咱们聊聊CAN收发器的选型与常见故障。到时候我会分享一个让我印象深刻的案例——收发器电源纹波导致的通信丢失,排查过程相当曲折。