chore: 添加 Keil 工程文件与 .gitignore, 清理死代码
- 新增 MDK-ARM 工程文件 (software.uvprojx / software.uvoptx)
- 新增 .gitignore 排除编译产物与用户界面布局文件
- Field_Oriented_Control.c: 移除注释掉的复位死代码
Co-Authored-By: Claude noreply@anthropic.com
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
R30 手指关节 FOC 电机驱动器
基于 STM32G431 + DRV8316 的微型手指关节伺服驱动器,采用磁场定向控制 (FOC) 实现高精度位置/速度/转矩三环控制。
硬件平台
目录结构
控制架构
三环级联控制
FreeRTOS 任务分布
ISR 状态分发 (ODrive 风格)
ADC 注入中断 (20kHz) 根据
motor_foc.state分发控制逻辑:LOCKIN_SPINFOC_OpenLoopVoltageControlCLOSED_LOOP_CONTROLFOC_CurrentLoopControlMOTOR_CALIBRATION+ calib_mode=0FOC_OpenLoopVoltageControlMOTOR_CALIBRATION+ calib_mode=1FOC_CurrentLoopControlMOTOR_CALIBRATION+ calib_mode=2FOC_OpenLoopVoltageControl状态机与启动流程
参考 ODrive 的
AXIS_STATE_*状态机, 使用任务链模式串行执行启动标定:AXIS_STATE_IDLE+Motor_Disable()FOC_AutoTuneBandwidth): ω_c = R/L, 受 Nyquist 约束 (≤ 2π·f_pwm/10)save_para()持久化到 Flash, 下次上电跳过标定电机型号配置
通过 Pmsm_Ctrl.h 中的
MOTOR_TYPE宏切换整机参数:关键宏:
MOTOR_TYPE 22— 当前激活的电机型号SELF_DEBUG 0— 设为 1 时跳过 Flash 读取, 使用代码中硬编码的 PID 参数ENCODER_COUNT 2— 1=仅 MT6701, 2=双编码器 (MT6701 + KTH5701)配置启动行为 (config.h):
通信协议
关键参数
电流保护
两级保护机制确保电机安全运行:
FOC_Current_Limit()直接 clamp I_d/I_qmotor_foc.motor.current_limit编译与调试
MDK-ARM/software.uvprojxsoftware.ioc修改外设配置UART_PRINTF宏用于 printf 调试代码风格参考
AXIS_STATE_*(ODrive 风格)MotorParams,ControlTarget,MotorFeedback(ODrive 风格)TaskChain_LoadCalibration → TaskChain_Run → TaskChain_ExecuteStep