从"能动"到"稳定":OpenArm 开源机械臂 CAN 通信链路整改指南
版权说明:转载/引用本文内容请注明出处(鲲弘电子文档中心),并保留原文链接。 原链接:https://docs.kunhong-elec.com/zh/applications/robotics/openarm-link-optimization.html
在开源机器人领域,OpenArm 可以说是一个非常成功的项目。从教学、科研到个人开发,OpenArm 都具有非常高的参考价值。
但如果从工程产品的角度来看,一个系统从"能够运行(Works)"到"稳定可靠(Reliable)",往往还需要经历细致的工程化打磨。
在对 OpenArm 进行测试和调试的过程中,我们发现其 CAN 总线物理链路仍然存在几处明显需要优化的地方。这些问题在日常使用场景下可能不明显,但在一些更严格的通信环境中可能会带来潜在风险。
问题汇总速览
表面上看,官方提供的整机表现上没什么问题,但用户在进行调试时又经常遇到各种问题。 在进一步对 CAN 总线进行检查后,我们发现其中存在一些典型但容易被忽视的问题: 
- CAN 终端电阻布置错误(开源文档没有任何关于终端电阻设置的提示)
- 电源线缆多余的CAN线产生 60cm 长的 CAN 悬空分支
- 电机CAN_GND未和CAN适配器直接连接
原始开源设计下测试的CAN通讯波形
从示波器测量出的波形(配合德国PEAK PCAN-USB FD PRO),可以发现:
- 波形存在严重的信号变形
- 波形反射和振铃严重
- 存在大量的错误帧(导致BUS OFF掉线错误)
本文将对以上问题进行具体的分析,并给出改进建议。另外还会对整机现在的通讯状态进行分析。
一、CAN 总线拓扑分析
1. 主干结构基本合理
首先值得肯定的是:OpenArm 主臂部分的 CAN 连接方式整体是合理的。
其结构基本遵循 CAN 总线推荐的 Daisy Chain(手拉手)拓扑:

J1、J2 两个电机虽然属于分支结构,但分支不长(小于 30cm),符合 CAN 总线的推荐规范。

2. 过长的悬空分支
整机布线存在一个比较典型的问题:电源线缆多余的CAN线产生 60cm 长的 CAN 悬空分支。 

- 电源线包含了CAN信号线,但在电源适配器端是没有连接任何CAN节点的
- 产生了从HUB接线板到电源接头的60cm 长的 CAN 悬空分支
- 与电源线并行
在 CAN 网络中,长分支是最常见的稳定性杀手之一。
它会导致:
- 阻抗不连续:信号遇到阻抗突变产生反射,分支越长越明显
- 信号振铃:反射信号叠加导致振铃现象
因此,这条 60 cm 的悬空分支明显不符合工程规范。
二、终端电阻:隐藏的"60Ω 陷阱"
另一个容易被忽视的问题是终端电阻配置。
很多人在调试 CAN 网络时都知道使用万用表测量 CANH 与 CANL 之间的电阻。
理论上:
- 两端各有一个 120Ω 终端电阻
- 因此:测量结果为 60Ω 通常被认为是"正常"
但在 OpenArm 中,测量结果却具有一定的误导性。
实际情况
在实际检查 OpenArm CAN 总线结构后发现:机械臂末端并没有独立的终端电阻。
在机械臂上测量得到的 60Ω 来自于:
- CAN 收发器端自带的 120Ω(CAN适配器出厂默认开启了内置终端电阻)
- DB9转接板板载 120Ω 电阻
- 两个电阻实际都在适配器端,一个在内部,一个在外部DB9转接板上

虽然测量值仍然是 60Ω,但终端位置其实并不在总线物理两端。这会导致总线末端阻抗不匹配,信号质量严重下降。
三、共地问题:被忽视的 CAN 稳定性因素
在检查 OpenArm 的 CAN 通信链路时,我们还发现了另一个容易被忽视的问题:CAN 线束中没有提供信号地(GND)。
在很多"能够运行"的系统中,是因为电机供电的负极通过电源适配器和CAN适配的USB GND间接连接。这种连接方式确实能够正常工作,但从工程规范角度来看,它存在一定风险。
CAN 接收器是通过 CANH 与 CANL 的电压差来判断逻辑状态,而不是单独看某一根线对地的电压。
但这里有一个容易被忽略的问题:每个 CAN 节点内部的收发器,仍然是以本地地(GND)作为电压参考的。
如果不同节点之间的地电位差超过这个范围,就可能导致:
- 接收器无法正确判断信号
- 信号边沿变形
- 通信错误增加
四、为什么系统依然能够正常通信?
OpenArm 开源至今,存在很多使用者反馈调试困难、通讯稳定性差等问题。
我们在测试中也发现:不同 CAN 适配器的表现差异非常明显。例如:使用经典 CAN 设备(PEAK CAN)时,系统总线完全无法进行通讯。而使用一些现代适配器,例如:KH-UCANFD、Pibiger 却能够正常通信。
原因其实很简单,许多现代 CAN 适配器在设计时进行了额外优化,例如:
- 更强的信号容错能力
- 更好的模拟滤波
- 更智能的错误恢复
这解释了为什么OpenArm团队测试了很多USB-CANFD适配器却只有少部分能够使用,且即使使用了容忍度更高的CAN适配器 OpenArm 底层物理链路的缺陷仍会导致丢帧或错误帧。
"能通信"不等于可靠和稳定,这种"能通信"是靠吃掉CAN总线可靠性余量换来的。产生的后果是整个系统无法在工业场景或复杂工况稳定运行,又或者时常出现莫名其妙的意外问题 - 如很多用户遇到的手臂异常抽动、动作不连贯。
五、实际整改过程
针对上述问题,我们对 OpenArm 的 CAN 总线进行了简单整改。整改过程主要包括三个步骤。
1. 优化布线
- 将原有 60 cm 悬空 CAN 线直接移除
- 避免 CAN 线与电源线长距离并行

②为原本的线路,①为优化后的布局(去掉悬空分支、接入地线)。
2. 规范终端电阻
重新确认 CAN 网络终端电阻配置:
- 总线两端各一个 120Ω
- 中间节点不包含多余电阻

- 移除CAN适配器端多余的终端电阻(关闭适配器内部软控电阻或取下DB9转接板的跳线帽)
- 在末端电机(夹抓电机J8空余的XT30接口)上添加120欧姆终端电阻。
3. 添加共地线
可参考以下示意,在CAN通信线端子的电源负极处接出一根地线到CAN适配器的CAN_GND。
- 由于DM电机没有设计单独的CAN_GND, 这样的电机只能使用电源地作为CAN_GND

六、整改后的测试结果
我们将 OpenArm 的其中一条手臂进行了整改,另外一条机械臂进行对比测试。
测试结果非常明显,整改后的机械臂:
- 使用经典 CAN 设备,也不再出现通讯异常情况 提升了整个系统的兼容性
- 示波器观测到的波形明显改善:
- 信号反射明显减少
- 振铃基本消失
- 边沿更加干净稳定
- 总线错误消失
整改前波形:

整改后波形(配合KUNHONG KH-UCANFDX4):

七、结语
OpenArm 作为一个开源项目,本身已经做得非常优秀。而类似通信链路结构问题,其实在很多开源硬件项目中都很常见。通过一些简单的工程整改,就可以大幅提升系统稳定性。作为从业者更应该不断为开源项目贡献改进和优化的力量,改进并完善开源项目,而不是一味的将开源资料奉为“原版”“官方”而不敢或不愿意去改进。
从某种意义上说:开源项目的真正价值,不只是提供一个能够运行的系统,更是通过社区不断迭代,让它变得越来越完善和具有工程化的价值。