docs: 添加子模块说明并移除许可
基于 STM32G474 的永磁同步电机 (PMSM) 磁场定向控制 (FOC) 伺服驱动器,支持 位置 / 速度 / 转矩 三环级联控制,通过 CAN 总线 与上位机通信。
┌─────────────┐ ┌─────────────┐ ┌──────────────┐ │ 位置环 │ ──→ │ 速度环 │ ──→ │ 电流环 (ISR) │ ──→ SVPWM → TIM1 │ ~3.33 kHz │ │ ~3.33 kHz │ │ 20 kHz │ │ (FreeRTOS) │ │ (FreeRTOS) │ │ (ADC 注入中断) │ └─────────────┘ └─────────────┘ └──────────────┘ ↑ ↑ ↑ 位置 PID 速度 PID d/q 轴 PI 梯形轨迹 速度斜坡 零极点对消整定
Motor_Driver/ ├── Core/ # CubeMX 生成 (HAL 初始化) │ ├── Inc/ # main.h, FreeRTOSConfig.h, stm32g4xx_it.h ... │ └── Src/ # main.c, app_freertos.c, tim.c, adc.c ... ├── Drivers/ │ ├── Config/ # 编译期配置 │ │ ├── hardware_config.h # 启动标定、PWM/ADC 时序 │ │ └── motor_params.h # 电机参数 (R/L/极对数/限幅) │ ├── Hardware/ # 硬件驱动 (唯一可调 HAL 的层) │ │ ├── drv8301.c/h # DRV8301 栅极驱动 (SPI) │ │ ├── mt6701.c/h # MT6701 磁编码器 (I2C) │ │ ├── pwm.c/h # PWM 启动/停止/ADC 同步 │ │ ├── encoder.c/h # 编码器抽象层 (双编码器绑定) │ │ ├── flash_storage.c/h # Flash 参数持久化 (CRC 校验) │ │ └── i2c_recovery.c/h # I2C 总线锁死恢复 │ ├── FOC/ # 纯数学算法 (零 HAL 依赖) │ │ ├── foc.c/h # Clarke/Park/逆 Park/SVPWM │ │ ├── pid.c/h # PID 控制器 (微分滤波 + 抗饱和) │ │ ├── trap_traj.c/h # 梯形轨迹规划 │ │ └── gear_solver.c/h # 跨齿轮比多圈位置跟踪 │ ├── Axis/ # 轴应用层 (控制核心) │ │ ├── axis.c/h # 顶层聚合 (STORA_Drive) + 初始化/模式切换 │ │ ├── motor.c/h # 电机参数初始化 │ │ ├── current_loop.c/h # 电流环 ISR (20 kHz) │ │ ├── velocity_loop.c/h # 速度环任务 │ │ ├── position_loop.c/h # 位置环任务 │ │ ├── input_dispatch.c/h # 输入调度 (PASSTHROUGH/TRAP_TRAJ/VEL_RAMP) │ │ ├── axis_monitor.c/h # 系统监控 (温度/电压/错误/看门狗) │ │ ├── motor_protection.c/h # 电机保护 (过载/堵转检测) │ │ └── utils.c/h # 低通滤波器 (FILTER_FO) │ └── Communication/ # CAN 协议 │ ├── can_comm.c/h # FDCAN 自定义二进制协议 │ └── ota_trigger.c/h # OTA 升级触发 (ENTER_BL → 写控制块 → 复位) ├── Bootloader/ # 独立 Bootloader 工程 (OTA 升级) │ ├── Inc/bootloader_config.h # Flash 布局 / 协议 / 控制块共享定义 │ └── Src/ # bootloader_main.c / flash.c / can.c └── MDK-ARM/ # Keil uVision 工程 ├── Motor_Driver.uvprojx # APP 工程 (重定位 0x08004000) └── Bootloader.uvprojx # Bootloader 工程 (0x08000000)
层级调用规则: Axis → Communication / FOC / Hardware / Config → HAL (仅 Hardware 层可调 HAL)
基于 FDCAN1 的自定义二进制协议, 消息长度 3–8 字节不等 (取决于命令类型):
命令类型:
0x00
0x01
0x03
0x05
0x06
0x0A
docs/CAN_PROTOCOL.md
坐标约定: CAN 收发使用减速器末端 (关节端) 坐标; REDUCTION_RATIO (×8) 在内部自动转换
0x006579F3
上电后按 hardware_config.h 中的启动标志依次执行任务链:
hardware_config.h
1. 电机参数标定 (R/L 测量, 可选) 2. 编码器电气零位标定 (编码器偏移) 3. 编码器方向检测 4. 开环强拖 (可选) 5. 进入闭环控制
标定结果 (编码器偏移、电机参数、PID 增益) 保存在片上 Flash (带 CRC32 校验), 下次上电自动加载。
MDK-ARM/Motor_Driver.uvprojx
MDK-ARM/Bootloader.uvprojx
0x08000000 ─ 0x08003FFF (16 KB, Page 0–7) Bootloader 0x08004000 ─ 0x0801EFFF (108 KB, Page 8–61) APP (应用固件) 0x0801F000 ─ 0x0801F7FF (2 KB, Page 62) Bootloader 控制块 0x0801F800 ─ 0x0801FFFF (2 KB, Page 63) 参数存储区
0x08000000
0x08004000
之后即可通过上位机 Motor_Studio 走 CAN OTA 远程升级,无需再动 ST-Link。
参考 CLAUDE.md 获取完整规范。关键约定:
ModuleName_FunctionName()
snake_case()
PascalCase_t
PascalCase
<type>: <中文描述>
本仓库是总工程 Motor_Project 的一个 git submodule(目录 Motor_Driver/)。总工程只记录指向本仓库某个 commit 的指针,修改后需分两步提交,否则总工程不会指向新版本:
Motor_Driver/
# 第一步:本仓库内提交并推送 git checkout master # 避免在 detached HEAD 上提交 git add . git commit -m "feat: xxx" git push origin master # 第二步:回总工程更新指针并提交 cd .. git add Motor_Driver # 更新总工程记录的子模块 commit git commit -m "chore: 更新 Motor_Driver 子模块" git push origin master
⚠️ 只提交本仓库而不更新总工程指针,他人克隆总工程得到的仍是旧版本代码。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
STORA_Drive — PMSM FOC 双编码器伺服驱动器
基于 STM32G474 的永磁同步电机 (PMSM) 磁场定向控制 (FOC) 伺服驱动器,支持 位置 / 速度 / 转矩 三环级联控制,通过 CAN 总线 与上位机通信。
硬件规格
电机参数 (GIM6010-8)
控制架构
控制模式
输入模式 (setpoint 生成方式)
项目结构
层级调用规则: Axis → Communication / FOC / Hardware / Config → HAL (仅 Hardware 层可调 HAL)
CAN 协议
帧格式
基于 FDCAN1 的自定义二进制协议, 消息长度 3–8 字节不等 (取决于命令类型):
命令类型:
0x00— 网络管理 (心跳/同步)0x01— 写 (需返回确认, DLC≥6)0x03— 读 (需返回数据)0x05— 快写 (无返回, 立即生效, DLC≥6)0x06–0x0A— Bootloader 升级命令 (ENTER/ERASE/DATA/CRC/RESET), 详见docs/CAN_PROTOCOL.md§14寄存器表
实时数据 (只读 R)
电机参数 (只读 R)
控制命令 (读写 R/W)
限幅参数 (读写 R/W)
PID 增益 (读写 R/W)
系统配置 (读写 R/W)
0x006579F3持久化 PID 参数启动序列
上电后按
hardware_config.h中的启动标志依次执行任务链:标定结果 (编码器偏移、电机参数、PID 增益) 保存在片上 Flash (带 CRC32 校验), 下次上电自动加载。
保护功能
构建与烧录
环境
MDK-ARM/Motor_Driver.uvprojx(APP) +MDK-ARM/Bootloader.uvprojx(Bootloader)Flash 布局
首次烧录 (ST-Link)
MDK-ARM/Bootloader.uvprojx→ 烧录到0x08000000MDK-ARM/Motor_Driver.uvprojx→ 烧录到0x08004000步骤 (编译)
内存占用
RTOS 任务
0.3 ms (3.33 kHz)0.3 ms (3.33 kHz)PWM / 控制环时序
编码规范摘要
参考 CLAUDE.md 获取完整规范。关键约定:
ModuleName_FunctionName()(公开),snake_case()(私有)PascalCase_t(结构体),PascalCase(枚举)<type>: <中文描述>, 编译验证后立即提交子模块说明
本仓库是总工程 Motor_Project 的一个 git submodule(目录
Motor_Driver/)。总工程只记录指向本仓库某个 commit 的指针,修改后需分两步提交,否则总工程不会指向新版本: