首页 / 机器人控制

开源电机控制器全景:ODrive / VESC / SimpleFOC / Moteus

OpenArm 篇里达妙 QDD 电机走 CAN-FD 1kHz——那是"电机 + 驱动器"集成模组。这一篇讲控制器这一层更底层、也更自由的选择:开源电机控制器。ODrive 把伺服性能做到机器人级、VESC 把功率做到 50kW 级、SimpleFOC 把 FOC 做成"一行初始化"、Moteus 把 MIT 猎豹同源的控制能力开源到电路板。本文梳理四大项目的架构、规格、开源程度与选型路线,配选型助手演示与可编译最小闭环代码——它们的控制内核,就是本站驱动算法板块讲的 Clarke/Park 变换、SVPWM 与三闭环。

1. 开源电机控制器是什么:伺服驱动开源到电路板级

工业伺服驱动器一套几千到几万,内部是"电流环 + 速度环 + 位置环"三闭环,控制内核就是本站反复讲的 FOC(磁场定向控制)。开源电机控制器把这三层全部摊开:硬件(PCB 设计、功率级器件选型)、固件(FOC 算法、控制环、通信协议)、工具链(配置 GUI、命令行、Python 库)至少有一层开源,任你读源码、改参数、甚至改板子。

层次开源控制器里有什么对应本站内容
硬件功率板原理图/PCB:三相桥、栅极驱动、电流采样、电源管理、编码器接口SVPWM 篇Clarke/Park 篇
固件FOC 电流环、速度环、位置环、轨迹规划、自整定、通信协议栈三闭环整定篇扰动观测篇
工具链配置 GUI / Web 界面 / Python 与 ROS 库 / 调试命令行本站交互工具的工程化版本

它和 OpenArm 篇的达妙电机模组是两种路线:达妙把"驱动器 + 电机 + 编码器"焊成一个关节单元,省心但不可拆解;开源控制器让你自选电机(普通 BLDC / PMSM / 无人机电机),自己焊功率级、自己刷固件——适合做研究、定制关节和吃透 FOC 工程实现。

2. 四大主流项目:一张表先看全

项目背景定位开源程度典型价格
ODriveOskar Weigl 发起(GitHub: madcowswe),2016 年起源于个人项目高性能伺服:扭矩/速度/位置/轨迹四模式早期 v3.x 硬件+固件全开源;新一代(Pro/S1/Micro)固件闭源(NDA)Micro 约 $30 起;S1 约 $100;Pro 约 $200+
VESCBenjamin Vedder,2011 年起源于电动滑板 ESC大功率电动交通 + 通用 FOC 驱动固件开源(VESC Tool 生态);经典硬件开源,商用产品线部分闭源约 $100–500
SimpleFOC社区驱动,Arduino 生态发源极简 FOC 库:学习、快速原型、教学库与示例全开源;配套小板开源库免费;板约 $10–30
Moteusmjbots(Josh Pieper),MIT Mini Cheetah 控制器同功能等级模块化伺服关节:集成磁编码器 + CAN-FD固件 + PCB 全部 Apache 2.0 开源c1 约 $69;r4 约 $94;n1 开发者套件
⚠️ "开源"是会变化的:ODrive 的教训

ODrive 官网曾写"硬件软件全部开源,欢迎任何人加入"。但 2022 年后,Pro/S1/Micro 的固件源码不再公开,只有旧款 v3.x(已 NRND 停产)固件保持开源。选型前务必核实目标型号当前的开源状态——"开源项目"不等于"永远开源"。

3. 硬件架构:一块开源控制器里有什么

不管哪家,开源控制器的硬件骨架几乎相同,和站内 SVPWM/Clarke-Park 理论一一对应:

模块典型器件职责
主控 MCUSTM32G4 / STM32F4 / ESP32跑 FOC 算法与通信协议;G4 系带硬件浮点与高分辨率定时器
栅极驱动DRV8301/8302、TMC 系列、自举半桥把 MCU 的 PWM 逻辑信号放大成功率管栅极驱动
三相全桥MOSFET(如 IRFS7530)/ 智能功率模块把母线直流斩成三相正弦(SVPWM),直接决定电流能力
电流采样低侧采样电阻 / 相位采样 + 运放把相电流送进 ADC,构成 FOC 电流环反馈(本站 Clarke/Park 的输入)
编码器接口SPI 磁编码器 / 增量 ABZ / 霍尔 / 无感反电动势转子位置与速度反馈,决定 FOC 能否闭环
通信USB / UART / CAN / CAN-FD / RS485与上位机交换指令与状态(对齐站内 CANopen/EtherCAT 专题)
电源管理DC-DC 降压(3.3V/5V/12V 逻辑轨)、制动电阻宽压输入(如 12–58V),再生制动泄放

读一块开源控制器的原理图,等于把本站 FOC 理论课从公式落到实物:Clarke/Park 变换要电流采样和编码器角度,SVPWM 要三相桥和栅极驱动,三闭环要电流环带宽设计——开源硬件是最好的"拆解标本"。

4. 规格对比:选型先看这四张表

型号电压范围连续电流峰值电流通信亮点
ODrive Micro≤ 28V3.5A7AUSB / UART入门最便宜,单轴
ODrive S112–48V(50.5V 最大)40A(加散热片)80AUSB / UART / STEP-DIR / 模拟 / PWM / CAN隔离 IO,位置/速度/扭矩/轨迹全模式
ODrive Pro15–58V70A120ACAN-FD(隔离)/ USB / UART3000W 连续 / 5kW 峰值,板载绝对磁编码器,再生制动
VESC Classic+ 100V12–100V(22S)300A400AUSB-C / CAN / UART相位侧电流采样,30–50kHz PWM
VESC Maxim 150V最高 150V250A400AUSB-C / CAN / Wi-Fi/BT(ESP32)30kW,板载 IMU 与 1GB 存储,灌封防水
Moteus c110–51V5A / 14ACAN-FD / UART / I2C$69,集成绝对磁编码器,STM32G4 170MHz
Moteus r4 / n18–44V / 最高 44V12A(约 38V 400W)1000W(n1)CAN-FD / UART模块化伺服,15–30kHz 控制环

SimpleFOC 不是一块板,而是一个库 + 硬件生态:官方推荐搭配 Arduino/STM32/ESP32 任意主控 + 任意开源驱动板(SimpleFOC Mini、MicroDriver 等),代码层控制闭环,功率层自由组合——学习性价比最高(驱动板约 $10–50)。

5. 固件与控制环:开源固件里的 FOC 工程

四个项目的固件代表了 FOC 工程实现的四种风格:

项目控制环结构特色固件状态
ODrive电流环 + 速度环 + 位置环 + 轨迹规划模型前馈(model-based feedforward)、自动整定、自整定堵转/开环标定v3.x 固件 0.5.x 开源(不再维护);Pro/S1/Micro 闭源
VESCFOC 电流环 + 速度/位置环无感 FOC(反电动势观测)、参数整定向导、遥测与日志固件开源,VESC Tool 生态活跃
SimpleFOC电流环 + 速度环 + 位置环(库级 API)三行初始化出闭环,跨 BLDC/步进、多编码器/驱动组合库与示例全开源,中文资料完善
Moteus15–30kHz 电流环 + 位置/速度/扭矩 + 限速限加速轨迹CAN-FD 5Mbps 协议,集成磁编码器即插即用固件 + PCB 全部 Apache 2.0
ℹ️ 读固件的正确姿势

想学 FOC 工程实现:先读 SimpleFOC(代码最短、分层清晰:Motor / Inverter / Encoder / Sensor);想要高性能参考:读 ODrive v3.x 固件 0.5.x(经典三闭环 + 前馈,社区资料最多)或 Moteus(STM32G4 + CAN-FD,现代架构)。VESC 固件适合研究无感 FOC 与工程化鲁棒性。

6. 交互演示:开源控制器选型助手

按你的场景、电压、电流与开源要求,快速得到推荐(规则基于上文规格表,示意性质):

开源电机控制器选型助手(选择条件 → 点推荐)
选择四个条件后点击"开始推荐",这里会给出建议项目、理由与备选。

7. 可编译最小闭环代码(SimpleFOC)

下面是 SimpleFOC 的最小 FOC 闭环:Arduino/STM32/ESP32 皆可,配套任意开源 BLDC 驱动板 + 磁编码器(如 AS5600)。装好 SimpleFOC 库(Arduino 库管理器搜索 "SimpleFOC")即可直接编译——这是站内 FOC 理论从公式到 30 行代码的最短路径:

/* simplefoc_mini.ino —— SimpleFOC 最小 FOC 速度闭环 * 硬件:Arduino UNO/ESP32 + BLDC 驱动板(如 SimpleFOC Mini / L6234)+ AS5600 磁编码器 * 库:Arduino 库管理器安装 "SimpleFOC" * 接线:PWM 9/10/11 → 驱动板 U/V/W 相;INH 8 → 驱动板使能;AS5600 SPI CS 接 10 */ #include <SimpleFOC.h> BLDCMotor motor = BLDCMotor(7); // 7 对极 BLDC BLDCDriver3PWM driver = BLDCDriver3PWM(9, 10, 11, 8); // 三路 PWM + 使能引脚 MagneticSensorSPI sensor = MagneticSensorSPI(AS5600_SPI, 10); // SPI 磁编码器 void setup() { sensor.init(); motor.linkSensor(&sensor); driver.voltage_power_supply = 12; // 母线电压 12V(按实际改) driver.init(); motor.linkDriver(&driver); motor.controller = MotionControlType::velocity; // 速度闭环模式 motor.init(); motor.initFOC(); } void loop() { motor.loopFOC(); // FOC 电流环:采样相电流 + 编码器角度 → 电压矢量 motor.move(5); // 目标速度 5 rad/s }

配套的配置侧示例(ODrive 命令行风格,用 odrivetool 或 Python 库同样可完成):

# ODrive 闭环使能与速度指令(odrivetool / Python) odrv0.axis0.requested_state = AXIS_STATE_CLOSED_LOOP_CONTROL odrv0.axis0.controller.config.control_mode = CONTROL_MODE_VELOCITY_CONTROL odrv0.axis0.controller.input_vel = 10

8. 怎么选:决策流程与避坑

  1. 先定功率,再定项目:相电流 × 电压 = 功率需求。学习/小关节(<40A、<58V)在 ODrive、Moteus、SimpleFOC 里选;电动载具与高功率(100A+ 或 100V+)基本只剩 VESC 系。
  2. 再定开源底线:要改固件/复现研究 → Moteus(全开源)或 SimpleFOC + 自组硬件;只要功能 → ODrive Pro(性能强但固件闭源)。
  3. 编码器优先考虑集成方案:机器人关节强烈建议 Moteus / ODrive Pro 这类集成绝对磁编码器的控制器——上电即知绝对位置,省掉装编码器与找零位的麻烦(对齐站内磁编码器校准篇)。
  4. 留足散热余量:所有标称连续电流都依赖散热条件(如 ODrive S1 的 40A 需加散热片),实际降额 30–50% 设计。
⚠️ 三个最容易翻车的认知错误

1. 相电流 ≠ 母线电流:VESC 表里的"300A 连续"是相位电流,母线电流由调制深度决定(低转速高扭矩时母线电流可小于相电流)。选电源按母线电流算,别按相电流。
2. 大功率配小电感电机 → 电流纹波爆炸:母线电压越高,对电机相电感下限要求越高,否则电流环震荡甚至炸管。高电压平台优先选大电感电机或加外部电感。
3. 别拿实验室电源直接跑再生制动:再生电流会灌回电源(如 ODrive 会再生制动),普通开关电源扛不住,需接电池或制动电阻,否则"一刹车电源和驱动一起上天"。

9. 参考资源与站内衔接