第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的波形,八成能找到答案。