feat: 电流环带宽自动整定 + S7RTT 拆分 + POSITION_SYNC 合并 + README 更新
- FOC_AutoTuneBandwidth(): 根据实测 R/L 自动计算电流环带宽 (ω_c = R/L, Nyquist 约束)
- FOC_Current_Limit(): 新增硬钳位, clamp Id/Iq 到 current_limit
- FOC_UpdatePWM(): 保存 duty 和端电压 V_ph 到 feedback 结构体
- Flash: 持久化 bandwidth/current_limit/PID_d_Kp/PID_d_Ki/PID_q_Kp/PID_q_Ki
- S7RTT: 单头文件拆分为 S7RTT.h (声明) + S7RTT.c (实现)
- 清理: Ialphas_func_val 等电感标定变量移出 FOC_Controller 结构体
- 清理: htim3 硬编码 → motor_foc.pwm_timer
- 合并: CONTROL_MODE_POSITION_SYNC → CONTROL_MODE_POSITION (switch 语句保留)
- 合并: Iabc 和 Duty/Vph 到单条 UART_PRINTF
- README: 补充自动整定、电流保护、S7RTT 文档
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