3、CAN总线拓扑:节点、终端电阻、总线长度与波特率的关系、星型与线型拓扑

大家好,我是老张。今天咱们聊聊CAN总线的物理连接。

说实话,很多新手一上来就写代码、调报文,结果板子一接上,通信就是不通。我见过太多这种情况了。问题出在哪?十有八九是拓扑结构没搞对。

这一节,我把CAN总线的物理层掰开揉碎了讲。你想想看,信号在线上怎么跑,节点怎么挂,电阻怎么配,这些搞明白了,后面调通信就是水到渠成的事。

3.1 节点:谁在说话?

CAN总线上的每个设备,都叫一个节点。节点可以是ECU、传感器、执行器,甚至是一个简单的数据记录仪。

每个节点内部,核心是CAN控制器+CAN收发器。控制器负责协议处理,收发器负责把逻辑电平变成差分信号,往总线上怼。

我个人习惯,在设计节点时,会特别注意收发器的共模电压范围。有一次在项目现场,总线距离长了,地电位漂移,结果收发器直接罢工。后来换了带隔离的收发器,问题才解决。

节点数量限制:

  • 标准CAN(ISO 11898-2):最多110个节点
  • CAN FD:同样支持110个节点
  • 实际项目中,我建议不超过64个。节点多了,总线负载重,容错性下降

3.2 终端电阻:为什么必须加?

终端电阻,说白了就是总线两端的120欧姆电阻。没有它,信号会在总线末端反射,波形乱七八糟,通信直接挂掉。

为什么会这样?因为CAN总线是差分传输,信号在线上跑,到了末端如果没电阻吸收能量,就会反弹回来,跟后面的信号叠加,形成振铃。你想想看,接收器看到这种波形,能正确解码才怪。

我的经验:

终端电阻必须放在总线的物理两端。如果总线是直线,就在最左和最右。如果总线是环形?嗯,CAN总线不允许环形拓扑,记住这一点。

电阻值:120Ω ± 1%。我习惯用0603封装的贴片电阻,功率1/4W就够。

注意:

有些节点内部已经集成了120Ω电阻,比如某些USB-CAN分析仪。这时候你再外接一个,两个电阻并联就变成60Ω了,总线信号幅度会减半。我曾经被这个坑过,排查了一整天。

3.3 总线长度与波特率的关系

这是CAN总线物理层最核心的约束。波特率越高,总线长度越短。为什么?因为信号在线上传输需要时间,波特率高了,位时间短了,信号还没跑到末端,下一个位就来了,冲突就发生了。

波特率 最大总线长度 典型应用场景
1 Mbps 40 m 车内动力系统、高速控制
500 kbps 100 m 车身控制、诊断系统
250 kbps 250 m 工业自动化、楼宇控制
125 kbps 500 m 远程IO、分布式系统
50 kbps 1000 m 长距离传感器网络
10 kbps 5000 m 特殊长距离应用

这个表格怎么用?我举个例子。你在做一个工厂设备监控,节点分布在200米范围内。查表,250 kbps能跑250米,够用。但如果你非要跑1 Mbps,那总线长度只能40米,肯定不行。

我记得有一次,客户非要1 Mbps跑100米,怎么调都不行。后来我给他画了个图,解释了信号传播延迟和位采样点的关系,他才明白。嗯,物理规律是绕不过去的。

3.4 线型拓扑 vs 星型拓扑

CAN总线标准推荐的是线型拓扑。就是一根主干线,所有节点用短支线挂上去。主干线两端各一个120Ω终端电阻。

线型拓扑规则:

  • 主干线:推荐用双绞线,CAN_H和CAN_L一对
  • 支线长度:1 Mbps时不超过0.3米,500 kbps时不超过1米
  • 支线越短越好,我一般控制在10厘米以内

那星型拓扑呢?说白了,就是所有节点从一个中心点辐射出去。这种拓扑在CAN总线里不推荐。为什么?因为信号反射问题。星型中心点会有多个阻抗不连续点,反射叠加,波形惨不忍睹。

但现实项目中,有时候不得不做星型。比如一个控制柜里,多个设备集中在一个位置。这时候怎么办?我分享一个实战技巧:

  • 在星型中心点,不要接终端电阻
  • 在每个分支的末端,各接一个120Ω电阻
  • 分支长度尽量短,最好小于0.5米
  • 如果分支超过3个,建议用CAN中继器或集线器

避坑指南:

我曾经在一个项目里,客户把CAN总线接成了环形。结果通信时好时坏,报文偶尔丢帧。我查了半天,发现总线首尾相连,形成了环路。信号在环里来回反射,根本没法稳定工作。记住:CAN总线必须是线型,不能闭环。

3.5 知识体系总览

下面这张图,我把这一节的核心逻辑画出来了。你看一眼,就能明白CAN总线拓扑的全貌。

CAN总线拓扑知识体系 CAN总线拓扑 节点:控制器+收发器 终端电阻:120Ω 长度与波特率关系 拓扑类型 线型拓扑(推荐) 星型拓扑(不推荐) 主干线+短支线 两端各一个120Ω 中心辐射,反射严重 必须加中继器/集线器 核心原则:线型为主,星型慎用,电阻必加,长度匹配波特率

3.6 实战建议

说了这么多,我总结几条实战中一定要记住的:

  1. 先画拓扑图:别急着焊板子。拿张纸,画出总线走向,标出节点位置,算好总线长度,再选波特率。
  2. 终端电阻用可插拔的:我习惯在PCB上预留120Ω电阻的焊盘,用跳线帽控制是否接入。调试时方便切换。
  3. 支线越短越好:支线就是节点到主干线的距离。能直接焊在主干线上就别用接插件,能省1厘米是1厘米。
  4. 用示波器看波形:调试时,用示波器看CAN_H和CAN_L的差分波形。正常波形应该是方波,边沿干净,没有振铃。如果看到毛刺,先检查终端电阻和支线长度。

一个小技巧:

如果你不确定总线长度和波特率是否匹配,可以用CAN分析仪发一个标准帧,然后看接收端的错误帧计数。如果错误帧很多,大概率是物理层有问题。先降波特率试试,能通就说明是长度问题。

好了,这一节的内容就这些。拓扑结构是CAN总线的地基,地基不稳,上层协议再牛也白搭。下一节咱们聊CAN的报文格式,那才是真正开始玩协议了。


公众号:蓝海资料掘金营,微信deep3321