第2章:CAN物理层——差分信号原理、CAN_H与CAN_L电平特性、总线拓扑结构、终端电阻的作用与选型

大家好,我是你们的飞控系统讲师。今天咱们来聊聊CAN总线的物理层。说实话,很多做飞控的工程师,软件写得飞起,但一碰到硬件就头疼。尤其是CAN物理层,看着简单,坑却不少。我当年第一次调飞控,就是因为在CAN_H和CAN_L上少了个终端电阻,结果飞机在地上抖得像筛子,差点把桨叶打飞。嗯,从那以后,我再也不敢小看物理层了。

2.1 差分信号原理:为什么CAN总线这么抗造?

咱们先搞清楚一个核心问题:为什么无人机这种强干扰环境,偏偏要用CAN总线?

答案就是差分信号。说白了,就是两根线(CAN_H和CAN_L)一起传信号,而不是像UART那样一根线对地传。

你想想看,无人机电机转动时,会产生巨大的电磁干扰。如果用的是单端信号,比如TTL电平,干扰信号叠加在信号线上,接收端根本分不清哪个是信号、哪个是噪声。但差分信号就不一样了——它传的是两根线之间的电压差。

举个例子:

  • 显性电平(逻辑0):CAN_H比CAN_L高2V左右
  • 隐性电平(逻辑1):CAN_H和CAN_L电压相等(约2.5V)

外部干扰来了,它会同时作用在CAN_H和CAN_L上。因为两根线绞在一起,受到的干扰几乎一样。接收端只看差值,干扰就被抵消掉了。这就是所谓的共模抑制。

核心要点:差分信号不是看绝对电压,而是看CAN_H与CAN_L的电压差。这个差值决定了总线是显性还是隐性。

我个人习惯在画原理图时,把CAN_H和CAN_L的走线尽量靠近、等长。这不是玄学,是实打实的经验。走线不等长,两根线上的延迟就不一样,高速通信时容易出位错误。

2.2 CAN_H与CAN_L电平特性:到底多少伏才算正常?

很多新手拿到飞控板,用万用表一量CAN_H和CAN_L,发现电压不是5V也不是3.3V,就慌了。其实这是正常的。

咱们以最常见的5V供电CAN收发器(比如TJA1050)为例:

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

看到了吗?隐性时两根线都是2.5V,显性时CAN_H升到3.5V,CAN_L降到1.5V。这个2V的压差,就是接收器判断的依据。

实战技巧:用示波器看CAN_H和CAN_L波形时,记得用差分探头,或者用两个通道做数学减法。直接看单端波形,你可能会被共模噪声骗了。

我曾经遇到过一个问题:飞控在地面测试一切正常,但一上天就丢包。查了半天,发现是CAN收发器的电源纹波太大,导致隐性电平漂到了2.7V。虽然差分电压还是0V,但接收器的共模输入范围被突破了。嗯,从那以后,我设计电路时都会在CAN收发器的电源脚上加一个10μF的电解电容。

2.3 总线拓扑结构:线性还是星型?

CAN总线标准推荐的是线性拓扑,也叫总线型。就是一根主干线,所有节点都挂在这根线上,每个节点用很短的支线连接。

为什么非得是线性?

因为CAN总线是靠信号反射来工作的。如果搞成星型,信号从中心节点出发,走到不同长度的支线上,反射回来的时间不一样,就会在中心节点处叠加出乱七八糟的波形。轻则误码,重则整个总线瘫痪。

我见过一个惨痛的案例:某团队做农业无人机,为了布线方便,把四个电调用星型方式连到飞控上。结果一推油门,CAN总线直接死掉。后来改成线性拓扑,问题就解决了。

重要警告:飞控CAN总线绝对不要用星型拓扑!如果实在避不开(比如某些传感器必须星型连接),那就在每个分支末端加中继器或CAN隔离器。

当然,也有例外。比如有些高端飞控会用CAN-FD,配合有源星型集线器。但那玩意儿贵,而且需要专门配置,一般消费级无人机用不上。

2.4 终端电阻的作用与选型:为什么必须是120Ω?

终端电阻,说白了就是防止信号反射的。CAN总线两端各需要接一个120Ω的电阻,匹配传输线的特性阻抗。

为什么是120Ω?

因为CAN总线用的双绞线,特性阻抗大约是120Ω。如果不接终端电阻,信号传到总线末端,遇到开路就会反射回来,跟后面的信号叠加,产生振铃。振铃严重时,接收器会把一个位误判成两个位。

我刚开始做飞控时,觉得终端电阻可有可无。有一次在实验室调机,总线长度只有30厘米,就没接电阻。结果通信时好时坏,用示波器一看,波形上全是毛刺。接上120Ω电阻后,波形干净得像教科书一样。

选型建议:

  • 标准CAN(1Mbps以下):用120Ω/0.25W贴片电阻,精度1%
  • CAN-FD(5Mbps以上):用120Ω/0.5W,因为高速时电阻发热更大
  • 如果总线很短(<1米),可以只接一个终端电阻,但我不建议这么做

还有一个常见问题:终端电阻是接在飞控板上,还是接在电调上?

答案是:接在总线物理位置的两端。如果飞控在总线一端,最后一个电调在另一端,那就飞控板上接一个,最后一个电调上接一个。千万别把两个电阻都放在飞控板上,那样中间节点会看到反射波。

避坑指南:我曾经在批量生产时,发现一批飞控的CAN通信不稳定。排查到最后,发现是贴片电阻的封装焊反了——120Ω电阻被焊成了12Ω。所以,生产环节一定要加ICT测试,测一下CAN_H和CAN_L之间的电阻值,正常应该是60Ω(两个120Ω并联)。

2.5 本章知识体系图

下面我用一张SVG图,把本章的核心逻辑串起来。你可以把它当作一个快速复习的思维导图。

CAN物理层核心知识体系 差分信号原理 核心:电压差传信号 显性:CAN_H - CAN_L = 2V 隐性:CAN_H - CAN_L = 0V 优势:抗共模干扰 注意:走线等长 CAN_H/L电平特性 5V收发器典型值 隐性:2.5V / 2.5V 显性:3.5V / 1.5V 共模范围:1~4V 注意:电源纹波 总线拓扑结构 推荐:线性拓扑 主干线 + 短支线 禁止:星型拓扑 原因:信号反射 例外:有源集线器 终端电阻 阻值:120Ω 位置:总线两端 作用:消除反射 功率:0.25W/0.5W 注意:精度1% 总结:物理层是CAN通信的基石,差分信号决定抗干扰能力,终端电阻决定信号质量 常见故障排查 故障1:总线无通信 故障2:通信时断时续 故障3:误码率高 检查:终端电阻是否开路 检查:CAN_H/L是否短路 检查:共模电压是否超限

好了,这一章的内容就到这里。物理层的东西,看着简单,但往往是飞控系统稳定性的关键。下次如果你遇到CAN通信问题,先别急着改软件,拿示波器看看CAN_H和CAN_L的波形,八成能找到答案。