USB2FDCAN|USB转两路FDCAN|Linux FDCAN|达妙电机|达妙电机控制程序|MIT电机控制
大家好,最近我开源了一个针对达妙电机的高速控制项目 ——USB2FDCAN-Demo-DM,相信很多做四足机器人开发的朋友,都会遇到多电机高速控制的难题:CAN 总线带宽不足、多电机控制频率上不去、硬件拓展繁琐…
这个项目正好解决了这些痛点,它可以通过两个 USB2FDCAN 模块,让你的 Linux 系统电脑轻松拓展出 4 路 CAN 总线,实现对 12 台达妙电机的 2000Hz 高速控制,非常适合作为四足机器人的控制底层。今天就来手把手带大家上手这个开源仓库,从硬件准备到项目运行,一步到位。
项目开源地址:https://gitee.com/ding-lab/USB2FDCAN-Demo-DM.git
一、项目简介
本项目使用 C++ 在 Linux 环境开发,核心功能如下:
-
通过 2 个 USB2FDCAN 模块拓展 4 路独立 CAN 总线
-
单条总线可挂载 3 台达妙电机,总计支持 12 台电机同步控制
-
实现 2000Hz 的超高控制频率,满足四足机器人的实时控制需求
-
封装了完整的电机控制接口,开箱即用,无需重复造轮子
二、硬件准备
在开始使用项目之前,你需要提前准备好对应的硬件:
-
USB2FDCAN 模块:本项目需要搭配肥猫机器人公司的 USB2FDCAN 模块使用,注意不要错买成普通的 USB2CAN 模块,本项目使用的是支持 FDCAN 高速传输的版本。
模块购买地址:https://e.tb.cn/h.TBC18sl6EZKXUjL?tk=C5g5eLgyMf6HU071
模块说明书与 SDK 下载:https://pan.baidu.com/s/1EwYDNQ0jMKyTSvJEEcj6aw?pwd=10ob -
达妙电机:本项目默认适配达妙 DM-J10010L-2EC 电机,如果你使用其他型号的达妙电机,只需要修改对应参数即可兼容。
电机购买地址:https://e.tb.cn/h.64misbVFgC99Sp6?tk=eKKrex5NSR0CZ193
三、前期环境配置
3.1 安装 USB 设备规则
为了让系统能够正常识别 USB2FDCAN 模块,我们需要先安装 udev 规则文件,这一步是硬件正常工作的前提:
- 首先克隆项目到本地(或者直接使用项目内的规则文件):
git clone https://gitee.com/ding-lab/USB2FDCAN-Demo-DM.git
- 进入项目的 can 目录:
cd USB2FDCAN-Demo-DM/can
- 复制规则文件到系统规则目录:
sudo cp usb_can.rules /etc/udev/rules.d/
- 重启 udev 服务让规则生效:
sudo udevadm trigger
完成这一步后,插入 USB2FDCAN 模块,系统就可以正常识别到设备了。
四、达妙电机的提前配置
这一步是最容易踩坑的环节,必须提前完成电机的配置,否则项目无法正常运行:
4.1 电机 ID 配置
为了避免多电机的反馈报文冲突,本项目约定了电机 CAN ID 与反馈 Master ID 的对应关系:
-
CAN ID 为
0x01的电机,Master ID 设置为0x11 -
CAN ID 为
0x02的电机,Master ID 设置为0x22 -
CAN ID 为
0x03的电机,Master ID 设置为0x33 -
后续添加电机以此类推
你需要使用达妙官方的上位机,提前给每台电机设置好对应的 ID,确保和程序中的约定一致。
4.2 波特率与固件更新
-
波特率修改:本项目使用 5M 的 CAN 波特率,你需要提前将所有电机的 CAN 波特率修改为 5M,修改方法可以参考项目内
达妙电机资料文件夹下的教程视频。 -
固件更新:请将电机的驱动固件更新到项目
达妙电机资料文件夹下的对应版本,或者直接更新到最新版本,保证兼容性。
4.3 接线注意事项
-
达妙电机的 CAN 口与 USB2FDCAN 模块的 CAN 口线序是相反的,接线的时候请使用反序的 CAN 线。
-
请务必开启达妙电机的 120 欧终端电阻,否则 CAN 总线无法正常通信。
五、项目的编译与运行
完成了硬件和电机的配置后,我们就可以编译运行项目了:
- 进入项目根目录:
cd USB2FDCAN-Demo-DM
- 创建编译目录并编译项目:
mkdir build
cd build
cmake ..
make
- 运行编译好的程序:
./can_code
如果一切正常,程序就会启动,开始和电机建立通信,你就可以看到电机的状态数据打印在终端里了。
六、项目自定义与拓展
本项目做了非常完善的封装,你可以很方便地根据自己的需求修改代码:
-
自定义控制逻辑:项目的核心控制函数在
src/Tangair_usb2can.cpp的CAN_TX_test_thread()函数中,这里包含了电机初始参数设置、实时控制指令发送、数据打印等逻辑,你可以直接在这里添加自己的自定义控制代码。 -
电机参数修改:如果你使用的不是默认的 DM-J10010L-2EC 电机,你可以修改
include/Tangair_usb2can.h中的电机参数,适配你的电机型号。 -
硬件拓展:如果你需要控制更多的电机,你可以拓展更多的 USB2FDCAN 模块,单台电脑最多可以拓展 4 个模块,也就是 8 路 CAN 总线,对应 24 台电机,只需要在代码中添加对应的设备配置即可。
七、性能与注意事项
7.1 项目性能测试
我们对项目做了详细的带宽测试,结果如下:
-
单电机控制命令间隔 104us 时,有效带宽可达 9247.57Hz,丢包率仅 3.3%
-
单电机控制命令间隔 143.22us 时,开始出现丢包,对应频率为 7150Hz
-
本项目默认的 2000Hz 控制频率。
7.2 使用注意事项
-
本项目默认的两个 USB2FDCAN 模块,设备名分别为
USB2CAN0、USB2CAN1,如果你的模块名称不同,请修改代码中的对应配置。 -
同一条 CAN 总线上的控制命令发送间隔不应小于 160us,你可以交错发送不同总线上的命令来提升效率。
-
项目封装了电机数据结构体,你只需要给结构体赋值后调用发送函数即可控制电机,数值范围请参考达妙电机的官方说明书。
八、相关配套项目
如果你想要基于本项目开发完整的四足机器人,你可以配合以下开源项目一起使用:
-
Isaac Sim 强化学习训练代码:https://github.com/fan-ziqi/robot_lab
-
仿真与实物部署代码:https://github.com/fan-ziqi/rl_sar
九、开源协议与引用说明
本项目采用 Apache-2.0 开源协议,你可以自由使用、修改和分发本项目的代码。如果你在研究中使用了本项目的代码,欢迎引用说明:
@software{tangair2026USB2FDCAN-Demo-DM,
author = {tangair},
title = {{USB2FDCAN-Demo-DM: An project based on USB2CAN and DM motor.}},
url = {https://github.com/SOULDE-Studio/USB2FDCAN-Demo-DM.git},
year = {2026}
}
如果大家在使用过程中遇到问题,欢迎在 Gitee 仓库提 Issue,也欢迎大家一起贡献代码,让这个项目变得更完善!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)