目录

Motor_Project — PMSM FOC 伺服驱动系统

基于 STM32G474 的永磁同步电机 (PMSM) 磁场定向控制 (FOC) 伺服驱动系统完整解决方案,涵盖固件驱动、Bootloader OTA 升级、上位机调试工具、仿真模型四大模块。


系统架构

┌──────────────────────────────────────────────────────────┐
│                     Motor_Studio                          │
│             上位机 (Python / PySide6 / Qt)                 │
│     参数配置 · 实时监控 · 参数辨识 · 模板 · OTA 升级        │
└───────────────────────────┬──────────────────────────────┘
                            │  CAN 总线 / 串口 (RS-232)
┌───────────────────────────▼──────────────────────────────┐
│                  Motor_Driver (固件)                       │
│          STM32G474 PMSM FOC 三环伺服驱动器                 │
│     位置环 → 速度环 → 电流环 (SVPWM) + 双编码器            │
│                                                           │
│   ┌───────────────────┐        ┌─────────────────────┐    │
│   │  Motor_Bootloader  │  ◄──►  │   Motor_Driver APP   │    │
│   │  (CAN 远程 OTA)    │        │   (FOC 控制)         │    │
│   └───────────────────┘        └─────────────────────┘    │
└───────────────────────────┬──────────────────────────────┘
                            │  算法对照验证
┌───────────────────────────▼──────────────────────────────┐
│                   Motor_Simulink                           │
│            FOC SVPWM 调制算法仿真模型 (Simulink)            │
└───────────────────────────────────────────────────────────┘

子模块

模块 说明 技术栈
Motor_Driver PMSM FOC 伺服驱动器固件(三环级联 + 双编码器 + CAN 协议) STM32G474 · Keil MDK · FreeRTOS
Motor_Bootloader 独立 Bootloader,CAN 远程 OTA 固件升级 STM32G474 · FDCAN
Motor_Studio 通用电机调试上位机(监控 / 控制 / 辨识 / 模板 / OTA) Python 3.11 · PySide6 · python-can
Motor_Simulink FOC SVPWM 调制算法仿真模型 MATLAB / Simulink

快速开始

1. 烧录固件

  1. 编译并烧录 Bootloader:在 Keil 打开 Motor_Bootloader/MDK-ARM/Motor_Bootloader.uvprojx → 烧录到 0x08000000
  2. 编译并烧录 APP:在 Keil 打开 Motor_Driver/MDK-ARM/Motor_Driver.uvprojx → 烧录到 0x08004000
  3. 上电后 Bootloader 校验通过自动跳转 APP(详见 Motor_Bootloader)

2. 连接上位机

cd Motor_Studio
pip install -e .
motorstudio
# 或直接: python -m motorstudio

通过 CAN / 串口连接驱动器,即可在线配置参数、实时监控波形、执行参数辨识或触发 OTA 升级(详见 Motor_Studio)。

3. 仿真验证

用 MATLAB / Simulink 打开 Motor_Simulink/foc.slx,验证 SVPWM 调制算法(详见 Motor_Simulink)。


目录结构

Motor_Project/
├── Motor_Driver/       # 固件 — PMSM FOC 三环伺服驱动器 (含 APP + Bootloader 源)
├── Motor_Bootloader/   # 独立 Bootloader 工程 (CAN OTA 升级)
├── Motor_Studio/       # 上位机 — 电机调试 / 监控 / 辨识工具
├── Motor_Simulink/     # FOC SVPWM 仿真模型
└── .gitmodules         # 子模块定义 (gitlink.org.cn)

子模块管理

本仓库通过 git submodule 管理四个子模块。总工程并不直接包含子模块的代码,只记录一个指针(指向子模块仓库的某个 commit):

总工程 (Motor_Project)           子模块仓库 (各自独立, gitlink.org.cn)
├── README.md        ← 真实文件   Motor_Driver     ← git 仓库
├── Motor_Driver     ← 指针 ────► Motor_Bootloader ← git 仓库
├── Motor_Bootloader ← 指针 ────► Motor_Studio     ← git 仓库
├── Motor_Studio     ← 指针 ────► Motor_Simulink   ← git 仓库
└── Motor_Simulink   ← 指针

克隆(含子模块)

git clone --recurse-submodules <仓库地址>

已克隆但缺少子模块时:

git submodule update --init --recursive

修改子模块后提交(两步,缺一不可)

# 第一步:在子模块内提交并推送
cd Motor_Studio
git add .
git commit -m "feat: xxx"
git push origin master

# 第二步:回总工程更新指针并提交推送
cd ..
git add Motor_Studio                       # 把子模块的新 commit 记录为总工程指针
git commit -m "chore: 更新 Motor_Studio 子模块"
git push origin master

只 push 子模块而不更新总工程指针,别人克隆得到的仍是旧 commit。

拉取最新代码

git pull --recurse-submodules
# 或
git pull && git submodule update --init --recursive

注意事项

  • 子模块处于 detached HEAD 状态是正常现象——它被总工程指针固定在某个 commit,而非跟随分支。
  • 修改子模块前建议先 cd <子模块> && git checkout master,否则 commit 会挂在 detached HEAD 上。
  • 总工程指针必须与子模块远程已推送的 commit 一致,否则他人克隆会因找不到该 commit 而报错。

关键参数速览

项目 值
MCU STM32G474RBTx (Cortex-M4F, 170 MHz)
控制架构 位置环 / 速度环 / 电流环 三环级联 (FOC)
电流环频率 20 kHz (ISR, SVPWM)
速度 / 位置环 ~3.33 kHz (FreeRTOS 任务)
编码器 MT6701 × 2 (电机端 + 关节端, I2C)
通信 FDCAN1 (CAN-FD 兼容)
母线电压 24 V DC
关于
35.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号