站内搜索
发作品签到
MPS 关节电机全栈解决方案(基于STM32G431 FOC)
专业版

MPS 关节电机全栈解决方案(基于STM32G431 FOC)

简介

使用MPS电源/电机驱动/位置传感器等全套芯片,基于STM32G431CBT6 一款关节电机驱动板开源项目。荣获2025 MPS“智驱未来”机器人芯动力设计挑战赛一等奖。持续180W带载,三环闭环控制

简介:使用MPS电源/电机驱动/位置传感器等全套芯片,基于STM32G431CBT6 一款关节电机驱动板开源项目。荣获2025 MPS“智驱未来”机器人芯动力设计挑战赛一等奖。持续180W带载,三环闭环控制

开源协议

GPL 3.0

创建时间:2026-03-27 19:44:22更新时间:2026-04-30 13:59:29

描述

MPS-FOC关节电机

使用MPS电源/电机驱动/位置传感器等全套芯片,基于STM32G431CBT6 一款关节电机驱动板开源项目。荣获2025 MPS“智驱未来”机器人芯动力设计挑战赛一等奖。完整通过了48V宽压输入、持续180W带载,丝滑启停、三环闭环控制。

开源无刷电机 FOC 控制工程 | Open-Source PMSM / BLDC FOC Project

image.png

目录


1. 项目简介

1.1 项目定位

本项目基于 STM32G431CBT6,面向 PMSM / BLDC 的三相 FOC 控制。仓库目标是提供一套可直接落到板级 bring-up 的开源实现。

适用场景:

  • 板子已经打样完成,需要尽快确认“代码怎么烧录、上电后怎么先转起来”。
  • 正在做自研 FOC 控制板,需要参考一套完整的“采样 -> 快环 -> 慢环 -> telemetry -> 调参”工程结构。

1.2 当前工程状态

当前仓库已经具备完整主链路,不是只有框架:

1.3 适配电机型号

本项目当前默认机械与电机参数按 GIM6010-48 级别关节电机配置。以下关键值摘自 docs/GIM6010-48电机必要参数表.xlsx

必要参数参考值单位本项目中的用途 / 需要同步的位置
额定电压48V对应当前 48V 母线平台与测试条件
电压范围12~48V上电和带载测试需保证工作在该范围内
额定功率158.4W用于估算连续输出能力与热设计边界
额定扭矩26.2N.m用于评估减速后输出能力与负载目标
额定电流3.3A长时连续电流参考,不等同于当前调试用 iq_limit 上限
相间电阻0.443Ω电流环对象参数,换电机后应重新核对 current_kp/current_ki
相间电感0.222mH影响电流环带宽和 PI 设计,需与 program_init() 同步
转速常数1.98rpm/V用于核对空载速度与反电势等级
扭矩常数4.7N.m/A用于估算输出扭矩与限流策略
极对数14对应 program/App/motor_params.h 中的 MOTOR_POLE_PAIRS
减速比8当前关节总成按 8:1 配置,对应 MOTOR_GEAR_RATIO

适配其他电机前,至少需要同步检查 program/App/motor_params.h 中的 MOTOR_POLE_PAIRSMOTOR_GEAR_RATIOMOTOR_ENCODER_ON_OUTPUT_SHAFTMOTOR_ENCODER_DIRECTION_SIGN;如果 R/L/Kt 与上表不同,还需要重新核对 program/App/program.c 里的电流环 PI 和 iq_limit


2. MPS大学计划

2.1 申请说明

本项目基于MPS的比赛2025 MPS“智驱未来”机器人芯动力设计挑战赛,详细见:2025 MPS“智驱未来”机器人芯动力设计挑战赛

工程复刻福利
想快速复刻本关节电机工程?特联合MPS为开发者提供免费样品申领福利,工程同款芯片直接送,帮你零成本启动项目开发!可通过下方二维码或点击链接直接申领https://app-u.jingsocial.com/surl/JNH9Kul

(附下方申请流程图)

2.2 二维码入口

mps大学计划.png


3. 硬件说明

3.1 硬件实物图

poster_done.png
hardware_double.png

3.2 硬件核心配置

本节仅保留核心器件与板级功能分工;具体引脚、方向和信号关系统一放到第 6 章“接口说明”。

模块当前实现说明
主控 MCUSTM32G431CBT6170 MHz,带高级定时器,适合 FOC 快环
位置反馈MA600A16-bit 绝对值编码器,用于机械角度反馈
功率级预驱MP6539B三相半桥预驱,负责功率级栅极驱动
主母线电源MP4583宽输入 DCDC,支持当前 48V 母线平台
栅极驱动隔离供电MIE1W0505为预驱动提供隔离电源
3.3V POLMPM3632S为 MCU 和编码器供电
备份供电MP20051为待机与辅助部分供电

3.3 编码器与机构默认配置

电机额定参数、极对数与减速比以 1.3 节为准;本节只保留与安装和方向相关、装配后最常需要核对的默认配置。当前参数位于 program/App/motor_params.h

参数当前值说明
编码器方向-1MOTOR_ENCODER_DIRECTION_SIGN
编码器安装位置转子侧MOTOR_ENCODER_ON_OUTPUT_SHAFT = 0

4. 验收测试与视频

本节将仓库内已经公开的验收项、测试视频与现有数据集中整理,便于开源发布时快速核对。当前能够直接在仓库中举证的量化结果包括:

  • 48V ±15% 宽输入电压
  • 速度环、位置环基础控制效果
  • 180W 对拖带载与温升热测结果

4.1 验收测试总表

测试视频可以再github仓库查看,也可以在B站直接查看:STM32-MPS-FOC电机全流程测试_哔哩哔哩_bilibili

#验收项目参考验收标准测试数据数据来源
1电源输入范围测试48V ±15% 宽输入电压40V-56V宽输入运行视频:Test1 Power Supply Input Voltage Range Test.mp4
2启停性能测试空载测试,目测电机启动是否丝滑无振动见视频运行结果视频:Test2 StartStop Performance.MP4
3速度控制精度测试目标转速100RPM、200RPM, 通过MA600A寄存器读对应速度值测试报告记录:电机减速箱后出轴端 100 rpm下扰动3rpm、输出轴 200 rpm 下,8rpm视频:Test3 Speed Control Accuracy.MP4
4位置控制精度测试目标角度90°、180°, 通过MA600A寄存器读对应角度值几乎无误差视频:Test4 Position Control Accuracy
5负载输出能力测试带载持续运行,可结合实际情况选择验证方式
1.通过10cm力臂实际带载2kg,验证可支持≥6A相电流
2. R+L模型模拟: 负载星型连接,每相取3Ω+200μH
HSA=L, LSA=H;HSC=L, LSC=H
HSB=20khz PWM 62% 占空比,LSB 与其互补;
测量该条件下IOUTB或48V母线侧电流大小
当该项目等效功率60W等级。本仓库对于60W等级和180W等级分别进行了测试,详情可见下面说明。视频:LoadTEST.MP4
6负载输出能力补充测试10cm力臂,2kg负载,48Vbus 265rpm下连续运行30分钟,测量电机NTC热敏电阻(10K 3950)对应阻值同上视频:LoadTEST.MP4

4.2 测试平台

为验证持续带载能力,本项目搭建了双电机对拖测试平台:左侧电机作为驱动,右侧电机作为发电机,经过整流后接入电子负载或实验台架。右图中的测试设备只用到了Load与DC source。

测试平台总览实验台架与测量设备
测试平台1.jpg测试平台2.png
图 4-1. 双电机对拖测试平台,标出了驱动电机、发电机与整流链路。图 4-2. 实验台架与测量设备,包含整流器、负载、示波器及交直流电源。

4.3 单项测试数据

4.3.1 电源输入测试

详见视频

4.3.2 启停性能测试

详见视频

4.3.3 速度控制精度测试

speed-control-accuracy.png

如上图所示,为速度控制时的精度与扰动情况;图中数据为电机输出轴之前的机械转速 RPM。

4.3.4 位置控制精度

position-control-accuracy.png
如图所示,位置阶跃响应基本无静差,可作为位置控制精度验证结果。

4.3.5 负载输出能力与热测量

负载输出测试可参考 LoadTEST.MP4。仓库中给出了 180W 持续带载运行示例,高于赛题要求的功率等级,可作为硬件热设计与连续输出能力的参考,赛题要求的功率等级测试视频可以参考:30mins 流体负载测试 更科学_哔哩哔哩_bilibili

2 min 温升热像8 min 温升热像
load-test-thermal-2min.jpgload-test-thermal-8min.png
图 4-3. 连续带载 2 min 时的热成像,中心温度约 35.4 °C,最高温度约 61.8 °C图 4-4. 连续带载 8 min 时的热成像,壳温约 74.6 °C,最高热点约 82.6 °C

运行 8 min 后,系统热点约提升至 82.6 °C,可作为当前 180W 工况下的温升参考。


5. 软件架构

5.1 软件结构图

Software Architecture

5.2 控制流程图

Control Flow

5.3 代码组织

📁 目录 / 文件🧠 职责
program/Core/HAL 初始化、IRQ、CubeMX 生成外设配置
program/App/program.c当前真实控制主链路、快慢环调度、保护、telemetry
program/App/foc_core.cClarke / Park / 反 Park / SVPWM
program/App/ma600a.cMA600A 绝对值编码器驱动
program/App/filter.c一阶低通滤波器
program/App/cli_uart.cVOFA / DMA 串口发送
program/App/drv_pid.c通用 Q15 PI 组件,当前不在 10 kHz 热路径主链里
program/App/motor_state.c状态对象与保留状态机逻辑
docs/补充说明、调试文档、图像资源

6. 接口说明

6.1 板级硬件接口

  • 如下图所示为电源与UVW(ABC)三相出线端接口,请注意,如果上电你的电机无法正常运转,此处有一个很重要的问题可能是你的编码器正方向和三相电相序不符。这时候,可以将代码里面的MOTOR_ENCODER_DIRECTION_SIGN进行反相,或者对调某两根相线。

  • 如下图所示为通讯接口,按照板子上自带的丝印进行链接即可。

本节只说明板级接口和引脚映射;器件选型与供电分工见 3.2 节。

接口类别MCU / 外设引脚方向当前约定
三相 PWM 驱动TIM1_CH1/2/3 + CH1N/2N/3NPA8/PA9/PA10 + PC13/PB0/PB1输出六路互补 PWM,接入 MP6539B 预驱
三相电流采样ADC1_IN1 / IN3 / IN4PA0 / PA2 / PA3输入IA / IB / IC 注入组同步采样
母线电压采样ADC2_IN12PB2输入VBUS,由 ADC2 + DMA 周期采样
NTC 温度采样ADC2_IN14PB11输入电机或板级热敏电阻输入
编码器接口SPI1 + ENC_CSPA5 / PA6 / PA7 + PA4双向对接 MA600A 绝对值编码器
功率级使能N_SLEEPPB14输出1 = 使能0 = 关断
驱动故障输入N_FAULTPB15输入上拉输入,0 = 故障有效
调试串口USART1PB6 / PB7TX / RX默认 115200 8N1,当前主要用于上位机调试
预留通信口FDCAN1PA11 / PA12RX / TX预留通信口,当前仅完成 CubeMX 初始化,未接入上层协议

6.2 通信与调试接口

接口默认配置当前用途
SPI1主机模式、16-bitCPOL=1CPHA=2EDGE、软 NSS、分频 8专用于 MA600A 角度读取,不建议与其他器件混挂
USART11152008N1、无流控、TX DMA当前输出 VOFA JustFloat 调试数据;RX 引脚已预留,但仓库暂未实现上位机命令协议
FDCAN1PA11 / PA12,当前保留 CubeMX 默认初始化参数预留通信口;当前仅执行 MX_FDCAN1_Init(),未作为稳定外部接口开放
TIM6 + ADC2 DMA1 kHz 慢任务节拍后台采样 VBUS / NTC 并驱动调试刷新

当前对外稳定的程序访问入口主要有两个:

motor_state_t *program_get_motor(void);
const volatile program_telemetry_t *program_get_telemetry(void);

其中 program_get_motor() 适合调试阶段直接改写控制命令,program_get_telemetry() 适合统一读取观测量。

6.3 软件写入接口

当前项目没有另外封装一层命令协议,调试和 bring-up 默认直接通过 g_motorprogram_get_motor() 写入控制量。常用写入项如下:

写入变量单位 / 取值作用
g_motor.run_request0 / 1总运行使能;置 1 后状态机才允许对齐、使能功率级并开始发波
g_motor.current_loop_enable0 / 10 为开环电压模式,1 为电流环模式
g_motor.speed_loop_enable0 / 11 时速度环接管转矩给定
g_motor.position_loop_enable0 / 11 时位置环输出速度参考,需同时开启速度环
g_motor.control_angle_open_loop_enable0 / 11 时改为开环生成电角度,不使用 MA600A 闭环角度
g_motor.ud_ref / g_motor.uq_refV开环电压模式直接给定 d/q 轴电压
g_motor.speed_ref_mech_rpmrpm速度环目标机械转速
g_motor.position_ref_mech_degdeg位置环目标机械角度;推荐作为唯一外部位置指令入口
g_motor.iq_limitA电流 / 转矩限幅
g_motor.speed_kp / g_motor.speed_ki-速度环参数
g_motor.position_kp-位置环比例参数

6.4 软件观测接口

推荐统一从 g_program_telemetry 读取观测量,而不是在多个模块之间分散查找临时变量。常用观测量如下:

观测类别典型字段用途
原始采样ia_raw ib_raw ic_raw vbus_raw ntc_raw检查 ADC 量程、零偏和采样链路
电流与角度ia ib ic id iq theta_elec检查 FOC 变换与电流闭环状态
速度与位置speed_meas_mech_rpm position_meas_mech_deg position_meas_mech_rad检查测速、位置环与编码器方向
控制命令镜像speed_ref_mech_rpm position_ref_mech_deg iq_limit_a核对外部给定是否正确进入控制链
运行状态control_state power_stage_enabled driver_fault_active fast_loop_overrun判断状态机、功率级和实时性是否正常

6.5 使用注意事项

  • g_motor.position_ref_mech_deg 是当前项目建议的外部位置指令入口;position_ref_mech_rad 更适合看作程序内部换算后的只读镜像。
  • N_FAULT 为低有效,驱动器报错时会直接进入故障处理并拉低功率级使能。
  • run_request 建议最后置位;在修改模式位和参考值后再启动,可以减少上电瞬间的误动作。
  • 当前仓库默认 iq_limit = 12 A 是比赛带载验证时的调试上限,不代表 GIM6010-8 的长期额定连续电流。
  • 更换电机、减速比、编码器安装位置或方向后,除了改 program/App/motor_params.h,还应重新核对 program/App/program.c 的环路参数和限幅设置。

7. 控制实现说明

7.1 控制流程说明:从 ADC 采样到 PWM 输出

当前工程的实际控制链路如下:

  1. TIM1 输出中心对齐 PWM,并通过 TRGO2 = UPDATE 触发 ADC1 injected
  2. ADC1 一次完成 IA / IB / IC 三路电流采样。
  3. HAL_ADCEx_InjectedConvCpltCallback() 中读取三相原始值。
  4. 启动阶段累计 1024 个样本,得到每相零偏。
  5. 同步调度 MA600A 读角,更新机械角、电角度和测速窗口。
  6. 原始电流码值转换为安培值,并做一阶低通。
  7. 执行 Clarke / Park,得到 id / iq
  8. 位置环按 200 Hz 分频运行,输出机械速度参考。
  9. 速度环按测速窗口更新运行,输出 iq_refuq_ref
  10. 电流环按 10 kHz 运行,输出 ud_ref / uq_ref
  11. Park 后进入 SVPWM
  12. duty_a / duty_b / duty_c 写入 TIM1->CCR1/2/3

7.2 中断结构 / 控制周期

快环入口调用链:

ADC1_2_IRQHandler
  -> HAL_ADC_IRQHandler(&hadc1)
    -> HAL_ADCEx_InjectedConvCpltCallback()
      -> program_adc_injected_conv_cplt_callback()

慢环入口调用链:

TIM6_DAC_IRQHandler
  -> HAL_TIM_IRQHandler(&htim6)
    -> HAL_TIM_PeriodElapsedCallback()

当前工程对应的运行频率:

⏱️ 项目当前值触发源 / 说明
PWM 载波20 kHzTIM1 center-aligned + ARR=4249 + RCR=3
电流环10 kHzADC1 injected 完成回调
位置环200 Hz快环分频
速度测速窗口20 个快环样本PROGRAM_SPEED_OBSERVER_WINDOW_SAMPLES
速度环有效更新率名义 500 Hz由测速窗口更新驱动
慢任务节拍1 kHzTIM6 中断 + TIM6 TRGO -> ADC2

慢环主要处理:

  • ADC2 + DMA 采集 VBUS / NTC
  • program_task()while(1) 中按 TIM6 节拍执行后台任务和遥测输出

8. 快速开始

此处重点关注 g_motor 控制参数结构体。更详细的 bring-up 与三环调试说明见 docs/quick-start.md;如果是更换电机、减速器或编码器安装方式,请同时参考 docs/适配新电机的标准流程.docx

8.1 开发环境

8.2 程序上电后自动完成的内容

  • ADC1 / ADC2 校准
  • TIM1 PWM 启动并保持 50% 占空比
  • 三相电流零偏累计
  • ADC2 DMA 开始采集 VBUS / NTC
  • MA600A 首次读角

8.3 第一次跑起来的推荐配置

建议第一次出力先不要直接上速度环,而是先做开环电压测试:

g_motor.current_loop_enable = 0;
g_motor.speed_loop_enable = 0;
g_motor.position_loop_enable = 0;
g_motor.ud_ref = 0.0f;
g_motor.uq_ref = 0.5f;   /* 从小值开始 */
g_motor.run_request = 1;   /*  最核心的启动信号,启动这个才开始运行发波 */

程序会先自动做对齐,再进入基于编码器角度的手动电压模式。

8.4 固定占空比 PWM 发波测试(不接电机)

当需要单独验证 TIM1 + MP6539B 的三相发波链路时,可以直接在调试器里写 g_program_debug_pwm_test,不依赖 run_request、编码器闭环或正常 FOC 输出。

推荐操作顺序:

g_program_debug_pwm_test.duty_a = 0.30f;
g_program_debug_pwm_test.duty_b = 0.40f;
g_program_debug_pwm_test.duty_c = 0.60f;
g_program_debug_pwm_test.enable = 1U;

测试完成后请恢复:

g_program_debug_pwm_test.enable = 0U;

注意事项:

  • 该模式只用于示波器观察三相 PWM,占空比范围为 0.0~1.0
  • 进入测试模式前请断开电机或确保功率级不带机械负载,避免误转动。
  • 该模式在快环中直接下发 TIM1->CCR1/2/3,正常电流环 / 速度环 / 位置环输出会被旁路。
  • N_FAULT 有效,程序仍会关闭功率级,不会继续维持固定占空比输出。

8.5 模式控制说明

模式变量的完整定义见 6.3 软件写入接口。这里仅保留首次调试最常用的组合方式:

  • 开环电压测试:current_loop_enable = 0speed_loop_enable = 0position_loop_enable = 0
  • 电流环调试:current_loop_enable = 1speed_loop_enable = 0position_loop_enable = 0
  • 速度环调试:current_loop_enable = 1speed_loop_enable = 1position_loop_enable = 0
  • 位置环调试:current_loop_enable = 1speed_loop_enable = 1position_loop_enable = 1

位置外部给定建议直接写 g_motor.position_ref_mech_deg

8.6 首次需要看的变量

👀 变量正常现象
current_offset_ready上电后置位
ia / ib / ic_meas静止时接近 0
i_abc_sum接近 0
ma600a_angle_rad手动转动时连续变化
driver_fault_active0
fast_loop_overrun0

8.7 三环由内到外的闭环调试顺序

不要跳步,建议严格按“由内到外”执行:

阶段🎯 目标🔧 推荐配置👀 重点观察
Stage 0静态链路确认run_request = 0ia/ib/ic vbus ma600a_angle_rad
Stage 1验证出力方向关速度环、关位置环uq_ref theta_elec
Stage 2调电流环开电流环,关外环id iq ud_ref_cmd uq_ref_cmd
Stage 3调速度环开速度环,位置环保持关闭speed_ref_mech_rpm speed_meas_mech_rpm
Stage 4调位置环最后再开位置环position_ref_mech_deg position_meas_mech_deg

8.8 当前运行默认参数

以下为当前主路径实际生效的默认参数,来源于 program/App/program.c

电流环带宽计算,可以看代码注释,当前电流环带宽为1Khz。

🧪 参数当前值
current_kp2.5761
current_ki4555.31
speed_kp0.0015
speed_ki0.015
position_kp3.0
position_ki0.0
iq_limit12.0 A

更详细的 bring-up 和三环调试步骤见 docs/quick-start.md


9. 新电机适配流程

本节是对 docs/适配新电机的标准流程.docx 的 README 版精简,专门按当前工程的真实落点整理。建议和 docs/quick-start.md 配合使用:前者解决“换电机时哪些参数必须重设”,后者解决“代码怎么一步步 bring-up”。

9.1 先确认基础参数

在改代码前,至少先确认以下信息:

  • 极对数 pole pairs
  • 是否带减速器,以及实际减速比 gear ratio
  • 编码器装在电机轴还是输出轴
  • 电机正转时,编码器读数是增大还是减小
  • 相电阻 R、相电感 L、扭矩常数 Kt
  • 电机额定/峰值电流,以及推荐母线电压范围

这些信息不清楚时,不要直接进速度环或位置环。对本工程来说,极对数、减速比、编码器安装侧和方向任一项填错,都可能把负反馈接成正反馈,表现为对齐失败、抖动、发热、无力或闭环发散。

9.2 先改哪两个文件

文件关键宏 / 参数在本项目中的作用
program/App/motor_params.hMOTOR_POLE_PAIRS MOTOR_GEAR_RATIO MOTOR_ENCODER_ON_OUTPUT_SHAFT MOTOR_ENCODER_DIRECTION_SIGN决定机械角/速度到转子侧、电角度与输出轴量的换算关系,是最先要改的几何与方向参数
program/App/program.cPROGRAM_DEFAULT_IQ_LIMIT_A PROGRAM_CURRENT_LOOP_EQ_RESISTANCE_OHM PROGRAM_CURRENT_LOOP_EQ_INDUCTANCE_H PROGRAM_DEFAULT_CURRENT_LOOP_BANDWIDTH_HZ PROGRAM_ALIGN_UD_V PROGRAM_ALIGN_HOLD_TICKS决定首次 bring-up 的限流、电流环 PI 初值以及编码器对齐强度,换电机后通常都要重新核对

当前代码默认值分别是:

  • motor_params.h14 极对、8:1 减速比、编码器在转子侧、方向符号 -1
  • program.ciq_limit = 12 AR_eq = 0.725 ΩL_eq = 0.410 mH、默认电流环带宽 1 kHz、对齐电压 1.8 V、对齐保持 8000 个快环节拍

要特别注意,program.c 里的 R_eq / L_eq 是当前板级电流环在 10 kHz 快环下用于 PI 计算的等效对象参数,不一定等于电机数据手册里的原始相间电阻/电感。换电机时可以先用新电机的 R/L 估初值,但不要机械照搬。

9.3 电流环和限流怎么起步

本工程已经按带宽生成电流环 PI:

  • Kp = 2π × f_bw × L_eq
  • Ki = 2π × f_bw × R_eq

首次适配建议这样起步:

  1. 用新电机的 R/L 先估 R_eq / L_eq
  2. 把电流环带宽先放在较保守的 300 ~ 800 Hz
  3. 先把 iq_limit 压到理论安全值的 20% ~ 30%
  4. 系统安静、iq 跟随正常后,再逐步把带宽抬到 800 ~ 1200 Hz

如果出现以下现象,可优先这样处理:

  • 电流振荡、啸叫、明显抖动:先降带宽,或回退 R_eq / L_eq 对应的 Kp/Ki
  • 跟随很慢、扭矩发软:再小步提高带宽
  • 低速正常但高速容易乱:先查编码器方向、零位对齐、母线电压裕量和电压限幅,不要只盯 PI

iq_limit 也不要直接照着电机峰值电流填。更稳妥的上限应同时受驱动板能力、电机峰值电流和目标输出扭矩约束,必要时还要结合 Kt、减速比和传动效率重新估算。

9.4 推荐 bring-up 顺序

适配新电机时,建议严格按下面顺序推进:

  1. 静态检查:先保持 run_request = 0,确认 VBUS、三相电流零偏、MA600A 通讯和手动转动时的角度/速度方向都正常。
  2. 低风险对齐:先用较低母线电压和较小 iq_limit 做编码器对齐;若对齐锁不住,再增加 PROGRAM_ALIGN_UD_VPROGRAM_ALIGN_HOLD_TICKS,若冲击太大则反向调整。
  3. 只开电流环:保持 speed_loop_enable = 0position_loop_enable = 0,在小 iq_ref 下观察 iq 跟随、dq 电压是否长期打满,以及是否存在高频啸叫。
  4. 再开速度环:只有电流环稳定后,才进入速度环调试;否则外环只会放大底层问题。
  5. 最后开位置环:本工程的位置环工作在输出轴量纲下,对减速比、编码器安装侧和方向最敏感,这些参数有误时通常会在这里第一时间暴露。

9.5 适配完成的最低判定标准

满足以下条件后,再认为新电机完成了基本适配:

  • 编码器对齐成功,重复上电后零位结果稳定
  • 小电流闭环下无明显抖动、啸叫或振荡
  • iq 给定能跟随,dq 电压不长期饱和
  • 速度环在低中速区稳定
  • 位置环方向正确,输出轴角度/速度量纲正确
  • iq_limit、母线电流和温升都在安全范围内

10. 项目目录

当前仓库的主要交付物如下:

.
|-- README.md
|-- LICENSE
|-- 3dmodel/
|   `-- 3D_MPS-FOC_V1.2_2026-03-27.step      # 整机 3D 模型
|-- circurit/                                # 原理图、器件手册、开源广场导出文件(目录名沿用当前仓库拼写)
|   |-- SCH_MPS-FOC_V1.2_2026-03-27.pdf
|   |-- Gerber_MPS-FOC_V1.2_2026-03-18.zip
|   `-- *.pdf                               # 关键器件 datasheet
|-- manufacture/                            # 生产输出文件与下单说明
|-- docs/
|   |-- quick-start.md           # 快速开始与三环调试说明
|   |-- GIM6010-48电机必要参数表.xlsx
|   |-- GIM6010-8关节电机参数表.docx
|   |-- 适配新电机的标准流程.docx
|   |-- foc_runtime_audit_2026-03-25.md           # 历史运行时审查快照
|   |-- foc_current_spike_followup_2026-03-25.md  # 历史电流尖峰跟进记录
|   |-- foc_speed_loop_optimization_2026-03-25.md # 历史速度环优化快照
|   |-- figures/                 # 软件架构图、控制流程图
|   `-- images/                  # README 图片资源
|-- experiment/
|   |-- Test1 Power Supply  Input Voltage Range Test.mp4
|   |-- Test2 StartStop Performance.mp4
|   |-- Test3 Speed Control Accuracy.mp4
|   |-- Test4 Position Control Accuracy.mp4
|   `-- LoadTEST.mp4
`-- program/
    |-- STM32G431_FOC.ioc        # CubeMX 工程
    |-- Core/                    # HAL / IRQ / CubeMX 生成代码
    |-- App/                     # 控制算法与项目逻辑
    `-- MDK-ARM/                 # Keil 工程

11. 已知限制与后续计划

11.1 当前已确认的限制

  • MA600A角度反馈链路,应当存在一定问题,导致速度环目前有一个波动始终存在,且1/4倍于电机机械转速,也就是2倍于电机出轴端的转速。
  • 目前MA600A的反馈链路未做INL校准。

11.2 你可能会遇到的问题

  • 速度环控制时抖动剧烈:可能是FOC控制板安装问题,尽量让FOC控制板贴近电机安装。但是注意不要让背后的VIN开窗部分接触到电机导电器件,在这里可以用光固化胶等方式做绝缘。

  • 位置环在目标角度位置,来回小范围低频率抖动:这是由于电机减速箱的静摩擦力,和速度环的积分导致的,可以尝试增加位置环死区解决。

12. 相关文件


13. 许可证说明

本项目基于 GNU General Public License v3.0 (GPL 3.0) 开源许可协议发布。

详细内容请参阅本仓库根目录下的 LICENSE 文件。

概要

  • 允许:自由使用、修改、商业衍生
  • 要求:衍生作品必须同样以 GPL 3.0 发布,并保留源码
  • 禁止:不以任何方式提供源码

引用方式

MPS-FOC STM32G431
Copyright (C) 2026 MPS China University Program
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License.

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
1
3D_MPS-FOC_V1.2_2026-03-27.step
51

附件

序号文件名称下载次数
1
quick-start.md
37
2
适配新电机的标准流程.docx
40
3
GIM6010-48电机必要参数表.xlsx
43
4
GIM6010-8关节电机参数表.docx
40
克隆工程
添加到专辑
0
0
分享
Logo GIF0
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航