时间:2026-03-24 09:45
人气:
作者:admin
大家好,最近我开源了一个针对达妙电机的高速控制项目 ——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
为了让系统能够正常识别 USB2FDCAN 模块,我们需要先安装 udev 规则文件,这一步是硬件正常工作的前提:
git clone https://gitee.com/ding-lab/USB2FDCAN-Demo-DM.git
cd USB2FDCAN-Demo-DM/can
sudo cp usb_can.rules /etc/udev/rules.d/
sudo udevadm trigger
完成这一步后,插入 USB2FDCAN 模块,系统就可以正常识别到设备了。
这一步是最容易踩坑的环节,必须提前完成电机的配置,否则项目无法正常运行:
为了避免多电机的反馈报文冲突,本项目约定了电机 CAN ID 与反馈 Master ID 的对应关系:
CAN ID 为0x01的电机,Master ID 设置为0x11
CAN ID 为0x02的电机,Master ID 设置为0x22
CAN ID 为0x03的电机,Master ID 设置为0x33
后续添加电机以此类推
你需要使用达妙官方的上位机,提前给每台电机设置好对应的 ID,确保和程序中的约定一致。
波特率修改:本项目使用 5M 的 CAN 波特率,你需要提前将所有电机的 CAN 波特率修改为 5M,修改方法可以参考项目内达妙电机资料文件夹下的教程视频。
固件更新:请将电机的驱动固件更新到项目达妙电机资料文件夹下的对应版本,或者直接更新到最新版本,保证兼容性。
达妙电机的 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 台电机,只需要在代码中添加对应的设备配置即可。
我们对项目做了详细的带宽测试,结果如下:
单电机控制命令间隔 104us 时,有效带宽可达 9247.57Hz,丢包率仅 3.3%
单电机控制命令间隔 143.22us 时,开始出现丢包,对应频率为 7150Hz
本项目默认的 2000Hz 控制频率。
本项目默认的两个 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,也欢迎大家一起贡献代码,让这个项目变得更完善!