CAN 总线:DIY 机器人从舵机跨到无刷的那道门槛
一旦关节从舵机换成无刷的一体化电机,通信几乎必然落到 CAN 上。接线不难,难的是几件事必须同时成立——它们不会一起报错,只会一起沉默。
- 物理层
- 差分双绞线,两根信号线加共地
- 终端电阻
- 总线两端各 120Ω,缺一个就开始随机丢包
- 速率
- 经典 CAN 最高 1 Mbps;CAN FD 更高,但两端都要支持
- 主控要求
- 需要真正的 CAN 控制器,不是普通 GPIO 能模拟的
- 常见接法
- USB-CAN 适配器接主机,或多通道 CAN FD 适配器接多个总线
- 参数与实际口径
- CAN 的关键参数不是速率而是终端与拓扑:总线两端各 120Ω 终端电阻、所有节点共地、支线尽量短。少了终端电阻的症状极具误导性——不是「不通」,而是时通时不通、偶发丢包,看起来像软件问题。速率方面,CAN FD 能让两端都支持的设备传更多数据,但只要有一个节点只支持经典 CAN,整条总线就得按低的那一档跑。
- 价格带
- 入门成本很低:一个 USB-CAN 适配器就能开始,一体化电机自带 CAN 收发。真正要花钱的地方是主控侧——如果主控没有原生 CAN 控制器,就要加一块带 CAN 的板子或换主控。选主控时把「有没有 CAN 控制器」列进必查项,比事后加装省事。
- 怎么挑
- ①先确认主控有没有 CAN 控制器,这是最容易在买完之后才发现的一项;②按总线数量选适配器:一条总线挂了多个关节时,带宽与实时性要一起算,通道不够就得加;③准备万用表:上电前先量终端电阻,两条信号线之间的电阻应该接近 60Ω(两个 120Ω 并联),这一分钟能省掉一整天;④统一波特率:所有节点必须一致,不一致的表现同样是不报错、只不通。
- 已知的坑
- ①少终端电阻——偶发丢包最难查,因为现象不稳定;②共地没做:差分线看着抗干扰,但节点之间参考电位差大了照样出错;③用不支持 CAN 的主控硬接:有些主控只能用软件模拟,时序一忙就崩;④把 CAN FD 和经典 CAN 混在一条总线上:整条总线会被拉回低档,而这不报错。
- 我们核过什么
- 我们核过:①终端电阻与拓扑这两项硬要求 ②主控侧需要真正的 CAN 控制器(不能用 GPIO 模拟)③CAN FD 与经典 CAN 混用会降档这一行为。没核过:本站没有对具体适配器做过丢包率与延迟的对照测试,所以这里只写机制与方法,不给某款适配器的性能结论。
这个站怎么判
把它当成一道一次性门槛而不是长期麻烦:终端电阻、共地、波特率、主控的 CAN 控制器,四项一次做对,之后基本不会再碰。四项里最容易漏的是主控那一条,而它恰恰是唯一无法用接线补救的——选主控的时候就该定下来。
上电前的一分钟检查
- 量电阻:断电状态下量两条信号线之间的电阻,应接近 60Ω(两端 120Ω 并联)。差得远就先别上电。
- 查共地:所有节点要有一个共同的参考地,尤其是电源分开供电的时候。
- 对波特率:所有节点与适配器必须一致,任何一处不同都是「完全不通信」而不是「慢一点」。
- 认主控:确认主控有硬件 CAN 控制器,而不是靠软件模拟。
最难查的一类故障
「偶发丢包」在 CAN 上几乎总指向物理层:终端电阻、接地、支线过长。不要先去改软件超时和重试——那会把一个确定的问题变成两个不确定的问题。
来源
- CAN 总线物理层规范(终端电阻、拓扑与速率的公开标准说明)
- 开源机器人项目与电机厂商文档中的接线与调试记录
涉及的对象
最后核实 2026-09-28