2. CAN物理层:差分信号原理、CAN_H与CAN_L电平定义、总线终端电阻的作用、总线拓扑结构
各位同学,咱们今天聊聊CAN总线的物理层。说实话,很多做嵌入式开发的工程师,对CAN协议栈背得滚瓜烂熟,但一碰到物理层的问题就抓瞎。我见过不少项目,软件调通了,硬件一上总线就丢帧,最后查出来是终端电阻焊错了位置。所以这一章,咱们把物理层的底裤扒干净。
2.1 差分信号原理——为什么CAN要用两根线?
你想想看,汽车里电磁环境多恶劣?发动机点火、电机启停、继电器吸合,到处都是噪声。如果像UART那样用单端信号(一根信号线对地),噪声直接叠加在信号上,数据就全乱了。
CAN总线用了差分信号。说白了,就是一对绞在一起的线——CAN_H和CAN_L。发送端在两根线上同时输出相反的电压,接收端只看两根线的电压差。噪声同时耦合到两根线上,差值不变,信号就保住了。
核心公式:Vdiff = VCAN_H - VCAN_L
接收器只关心这个差值,不关心对地绝对电压。
我在一个商用车项目中遇到过,线束长达40米,地电位漂移了将近2V。单端信号早就废了,但CAN总线照样跑得稳稳的。这就是差分信号的好处——共模抑制。
2.2 CAN_H与CAN_L电平定义——显性与隐性
CAN总线只有两种逻辑状态:显性(Dominant)和隐性(Recessive)。这个设计很有意思,它不像普通总线用0和1,而是用“谁更强”来决定总线状态。
| 状态 | CAN_H电压 | CAN_L电压 | 差分电压 | 逻辑值 |
|---|---|---|---|---|
| 隐性 | 2.5V | 2.5V | 0V | 1(逻辑高) |
| 显性 | 3.5V | 1.5V | 2V | 0(逻辑低) |
注意看,隐性时两根线都是2.5V,差分电压为0。显性时CAN_H拉到3.5V,CAN_L拉到1.5V,差分电压2V。这里有个关键点:显性位会覆盖隐性位。也就是说,只要有一个节点发送显性位,总线就是显性状态。这个特性是CAN总线仲裁机制的基础,后面章节会细讲。
我的经验:测量CAN总线波形时,示波器探头一定要用差分探头,或者用两个通道做数学减法。直接用单端探头对地测,看到的波形全是噪声。我曾经吃过这个亏,查了三天才发现是测量方法不对。
2.3 总线终端电阻的作用——为什么必须加?
这个问题我面试时经常问。很多人回答“防止信号反射”,但再问一句“反射会造成什么后果”,就答不上来了。
终端电阻有两个核心作用:
- 消除信号反射:CAN总线是传输线,信号在末端如果不匹配阻抗,就会反射回来,和原始信号叠加,造成波形畸变。
- 提供隐性电平:没有终端电阻时,总线处于高阻态,电平不确定。加上120Ω电阻后,CAN_H和CAN_L通过电阻连接,隐性时稳定在2.5V。
标准CAN总线特性阻抗是120Ω,所以终端电阻也取120Ω。一般放在总线两端,中间节点不加。
避坑指南:我曾经在一个项目中,终端电阻放在了总线中间,两端反而没加。结果总线长度超过50米后,通信完全乱套。记住:终端电阻必须放在物理拓扑的最远端,不是随便找个位置焊上去就行。
2.4 总线拓扑结构——直线型才是王道
CAN总线推荐直线型(总线型)拓扑。所有节点都挂在一条主干线上,每个节点通过短支线(stub)连接。
拓扑参数要求:
- 主干线长度:取决于波特率。1Mbps时最长约40米,125kbps时最长约500米。
- 支线长度:越短越好。1Mbps时支线不超过0.3米,低速时可以放宽到几米。
- 节点间距:没有严格限制,但支线越短越好。
为什么不能用星型或环型?星型拓扑会在中心点产生多路反射,环型拓扑会形成信号环路,都破坏总线阻抗匹配。我见过有人把CAN总线接成菊花链,结果信号反射得一塌糊涂。
2.5 实际项目中的物理层设计要点
讲完理论,说点实在的。我在车身稳定系统项目中,物理层设计一般按这个流程走:
- 确定波特率:车身稳定系统通常用250kbps或500kbps。太高了抗干扰差,太低了实时性不够。
- 计算总线长度:根据整车线束布局,估算主干线长度,反推最大允许波特率。
- 选择收发器:常用TJA1050、SN65HVD230等。注意工作电压范围,有些收发器支持3.3V,有些必须5V。
- 终端电阻布局:确认总线两端节点,在PCB上预留120Ω电阻位置。我习惯用0603封装,方便后期更换。
- 共模扼流圈:在CAN_H和CAN_L上串一个共模扼流圈,能有效抑制共模干扰。这个在车身稳定系统中特别重要,因为靠近电机和电磁阀。
关键参数速查表:
| 波特率 | 最大总线长度 | 最大支线长度 | 典型应用 |
|---|---|---|---|
| 1 Mbps | 40 m | 0.3 m | 动力系统 |
| 500 kbps | 100 m | 1.0 m | 车身稳定系统 |
| 250 kbps | 250 m | 3.0 m | 舒适系统 |
| 125 kbps | 500 m | 6.0 m | 诊断系统 |