第2章 CAN总线物理层:差分信号原理、CAN_H与CAN_L电平定义、总线拓扑结构、终端电阻的作用与计算

各位同学,欢迎来到第二章。上一章我们聊了CAN总线能干什么,这一章咱们得扎进物理层,看看它到底是怎么在线上跑信号的。

物理层,说白了就是最底层的硬件规矩。你想想看,如果连信号怎么表示、线怎么接都搞不清楚,上层协议再牛也白搭。我刚开始接触CAN的时候,就吃过这个亏——以为只要把CAN_H和CAN_L两根线接上就能通,结果信号乱得一塌糊涂。嗯,咱们今天就把这些坑一个个填上。

2.1 差分信号原理

为什么CAN总线要用两根线?一根线传信号不行吗?

传统的单端信号,比如UART,一根TX线对地传数据。问题来了——如果车上有大功率电机启动,地电位瞬间跳变,你的信号就跟着飘了。这就是共模干扰。

CAN总线用了差分信号。两根线,CAN_H和CAN_L,信号不是看某根线对地的电压,而是看两根线之间的电压差。

核心公式:

差分电压 V_diff = V(CAN_H) - V(CAN_L)

总线状态由 V_diff 决定,与地电位无关。

我举个例子。假设地电位突然抬高了2V,单端信号就完蛋了。但差分信号呢?CAN_H和CAN_L同时被抬高了2V,差值不变。这就是差分信号的抗干扰能力——说白了,共模噪声被抵消了。

我在项目中遇到过一辆电动车,CAN通信在电机加速时偶尔丢帧。查了半天,发现是地线回路设计不合理。换成差分传输后,问题直接消失。你想想看,这就是物理层的威力。

2.2 CAN_H与CAN_L电平定义

CAN总线定义了两种逻辑状态:显性(Dominant)隐性(Recessive)

咱们直接看电平值。标准CAN(ISO 11898-2)的定义如下:

状态 CAN_H电压 CAN_L电压 差分电压
隐性(逻辑1) 2.5V 2.5V 0V
显性(逻辑0) 3.5V 1.5V 2V

注意看,隐性时两根线都是2.5V,差值为0。显性时CAN_H拉到3.5V,CAN_L拉到1.5V,差值2V。

这里有个关键点:显性位会覆盖隐性位。什么意思?如果总线上同时有节点发显性、有节点发隐性,最终总线呈现显性。这就是CAN总线仲裁的基础——谁先发0,谁就赢。

我的经验:测量CAN总线波形时,示波器探头要接CAN_H和CAN_L,用差分模式。别用单端对地测,那样你看到的全是共模噪声,根本看不出真正的信号。

我曾经调试一个ECU,发现总线波形不对。用单端模式看,CAN_H和CAN_L都在2.5V附近抖动,以为没信号。换成差分模式一看,清清楚楚的2V跳变。嗯,工具要用对。

2.3 总线拓扑结构

CAN总线最常见的拓扑是线性总线,也叫干线-支线结构。

2.3.1 线性拓扑

一根主干线,所有节点通过短支线挂上去。主干线两端各接一个120Ω终端电阻。

为什么是线性?因为CAN协议设计时就假设信号在一条线上传播,反射最小。你想想看,如果搞成星型,信号从中心往各个方向走,反射会乱成一锅粥。

避坑指南:支线长度不能太长。ISO 11898建议支线不超过0.3米,最长不超过1米。我曾经见过一个设计,支线拉了3米,结果高速通信时全是误码。后来把支线剪短,问题解决。

2.3.2 星型拓扑

说实话,CAN总线不太适合星型拓扑。但实际项目中,有时候不得不这么干——比如多个分布式模块需要汇聚到一个中央控制器。

如果非要用星型,我建议加一个CAN中继器或集线器。每个分支单独驱动,避免信号反射。我在一个商用车项目中用过这种方式,效果还行,但成本上去了。

我个人习惯:能用线性就别用星型。实在没办法,每个分支长度要严格控制,而且终端电阻的配置要重新算。

2.4 终端电阻的作用与计算

终端电阻,就是挂在总线两端的电阻。标准值是120Ω。

为什么需要它?

信号在线上跑,遇到阻抗不连续的地方就会反射。反射回来的信号叠加在原信号上,波形就畸变了。终端电阻的作用就是吸收信号能量,消除反射

CAN总线的特性阻抗大约是120Ω。所以两端各挂一个120Ω,并联后就是60Ω。这个60Ω就是总线看到的等效负载。

计算公式:

R_term = Z0(特性阻抗)

标准CAN:Z0 ≈ 120Ω,所以 R_term = 120Ω

两端并联:R_total = 120Ω // 120Ω = 60Ω

如果电阻值不对会怎样?

  • 电阻太大:反射严重,信号过冲,可能损坏收发器。
  • 电阻太小:总线负载过重,差分电压幅值降低,通信距离缩短。
  • 少了一个电阻:只有一端有终端,反射无法完全消除,信号质量下降。

我遇到过最典型的问题:一个节点内部已经集成了120Ω终端电阻,设计者又在外部加了一个,结果并联后变成60Ω。总线负载太重,通信距离从500米缩到不到100米。拆掉一个,恢复正常。

我的建议:设计时明确终端电阻的位置。通常放在总线物理距离最远的两端。如果节点数量少,也可以放在第一个和最后一个节点内部。但一定要确保只有两个终端电阻,不多不少。

嗯,这一章的内容就这些。物理层是基础,基础不牢,地动山摇。下一章咱们进入数据链路层,看看CAN帧到底长什么样。