第1章:多节点网络拓扑——CAN FD的物理基础

做CAN FD开发这么多年,我最大的感触是:很多人把精力都花在协议解析上,却忽略了最基础的物理层。说白了,网络拓扑没搭好,上层协议再牛也白搭。今天咱们就从物理层面聊聊多节点网络该怎么搭。

1.1 CAN FD总线拓扑结构

CAN FD沿用了CAN的差分总线结构。两根线——CAN_H和CAN_L,所有节点都挂在这两根线上。我习惯把这种结构叫做「共享单车模式」:谁想骑谁骑,但一次只能一个人骑。

为什么用差分信号?抗干扰能力强啊。我在一个电机驱动项目里遇到过,普通单端信号线被电机噪声干扰得没法看,换成差分对后,波形干净得像教科书上的图。

核心要点:CAN FD总线本质上是「多主从」结构,任何节点都可以发起通信。但同一时刻只能有一个节点发送数据,否则就会冲突。

总线上的每个节点都有一个收发器(Transceiver)和一个控制器(Controller)。收发器负责把逻辑电平转换成差分信号,控制器负责协议处理。嗯,这里要注意:CAN FD的收发器和普通CAN不太一样,它要支持更高的速率(最高8Mbps甚至更高)。

1.2 终端电阻配置

终端电阻这事儿,我见过太多人栽跟头了。说白了,它的作用就是吸收信号反射,防止波形畸变。

标准配置是两个120Ω电阻,分别放在总线的两端。为什么是120Ω?因为CAN总线电缆的特性阻抗大约是120Ω。阻抗匹配了,信号才能好好传输。

配置方式 电阻值 适用场景
标准两端配置 各120Ω 大多数CAN FD网络
单端配置 60Ω 短距离、节点少
无终端电阻 仅用于测试,不推荐

警告:千万不要在总线的中间节点上加终端电阻!我曾经见过一个工程师在每个节点上都焊了120Ω电阻,结果总线阻抗变成了20Ω,信号完全没法看。

终端电阻怎么放?我个人的习惯是:在总线的最远端各放一个。如果总线是直线拓扑,那就简单了——两头各一个。如果是星型拓扑,那就得仔细算算了。

1.3 节点数量与总线长度关系

这个问题很实际:到底能挂多少个节点?总线能拉多长?

答案取决于速率。CAN FD的速率越高,总线长度就越短。为什么?因为信号在电缆里传输需要时间,速率高了,位时间就短了,信号反射的影响就大了。

我整理了一个经验数据表,供大家参考:

速率 最大总线长度 最大节点数
125 kbps 500 m 64
500 kbps 100 m 32
1 Mbps 40 m 16
5 Mbps 10 m 8
8 Mbps 5 m 4

注意,这只是经验值。实际项目中还要考虑线缆质量、连接器类型、环境噪声等因素。我在一个工厂自动化项目里,用500kbps的速率,总线长度只有80米,但挂了28个节点,信号质量就已经开始下降了。

小技巧:如果节点数超过建议值,可以考虑用CAN中继器或者CAN网桥。但要注意,中继器会增加延迟,对实时性要求高的场景要慎重。

1.4 星型与菊花链拓扑对比

这两种拓扑在实际项目中都很常见。咱们来对比一下:

菊花链拓扑

说白了就是一根线串到底。节点A连节点B,节点B连节点C,以此类推。这种结构最简单,也最常用。

优点:

  • 布线简单,成本低
  • 终端电阻配置容易
  • 信号传输路径清晰

缺点:

  • 一个节点故障,后面的节点全断
  • 总线长度受限
  • 调试不方便

星型拓扑

所有节点都连到一个中心集线器上。这种结构在工业现场很常见。

优点:

  • 单个节点故障不影响其他节点
  • 布线灵活
  • 便于集中管理

缺点:

  • 中心集线器是单点故障
  • 终端电阻配置复杂
  • 信号反射问题更严重

我的建议:能用菊花链就别用星型。除非你有特殊需求(比如节点分布在不同的房间或楼层),否则菊花链是最稳妥的选择。我在一个车载项目中试过星型拓扑,结果信号反射搞得我头大,最后还是改回了菊花链。

你想想看,星型拓扑最大的问题是什么?是分支长度。每个分支的长度如果不一致,信号到达时间就不一样,这就容易造成位同步问题。CAN FD的速率越高,这个问题越明显。

如果非要用星型拓扑,我建议:

  1. 所有分支长度尽量相等
  2. 分支长度不超过30cm(对于高速CAN FD)
  3. 在每个分支末端加终端电阻
  4. 中心集线器用有源集线器,别用无源的

嗯,说到这儿,我想起一个项目。当时客户非要在一个机柜里用星型拓扑,说是方便维护。我算了半天,最后建议他们用有源集线器,每个分支控制在20cm以内,终端电阻用120Ω。测试下来,信号质量还不错,误码率低于10^-7。

好了,这一章的内容就这些。记住一句话:物理层是基础,基础不牢,地动山摇。下一章咱们聊聊CAN FD的仲裁机制,看看多节点同时发送时,到底谁说了算。