前言
为了实现精确的控制周期,需要将 FOC 算法(读取角度、计算速度、PID 运算、SVPWM 输出)移入硬件定时器中断中执行。本文记录了在 TIM3 中断调试过程中遇到的时序冲突、参数配置错误以及对电机物理极限的验证过程。
一、中断频率与 I2C 时序的冲突
将控制逻辑移入 TIM3 后,最初将中断周期配置为 1ms(1kHz)。在实际运行中,系统频繁死机,电机发生严重震荡。
原因分析:在 1ms 的中断周期内,需要执行阻塞式的 I2C 读取(约 300μs),还需完成浮点运算和 SVPWM 计算。一旦 I2C 读取稍有延迟或系统中断被拉长,单次中断的执行时间将超过 1ms。这导致了严重的中断重入,堆栈溢出,系统彻底崩溃。
调整方案:将 TIM3 的定时周期延长至 2ms 甚至更长,为 I2C 通信和算法运算留出充足的余量。对于无电流环的速度环控制,500Hz 的控制频率足以满足基本的平滑性要求。同时,在中断入口处加入首次运行保护(忽略第一次中断的无效速度差值),防止上电瞬间电机飞车。
二、极对数配置错误引发的扭矩下降
在速度闭环稳定后,尝试提高目标转速,但电机始终在 140 rad/s 左右停滞,无法继续加速。
排查过程:检查 SVPWM 的输出限幅,确认未达到饱和;核对电流与电源状态,排除了供电不足的嫌疑。最终将排查重点放在电角度换算上。
原代码中极对数设定为 7(elec_angle = mech * 7.0f)。查阅电机规格书后确认,该 220KV 电机实际极对数为 11。
问题定位:极对数错误导致电角度计算偏差。SVPWM 产生的定子磁场与转子磁场未能精准对齐,产生了较大的反向扭矩分量,严重削弱了电机的有效输出,导致转速无法提升。修改为正确的极对数后,系统扭矩恢复正常。
三、物理极限的理论计算与验证
在修正所有软件问题后,电机依然无法达到较高的目标转速(如 200 rad/s)。结合硬件参数进行理论计算:
电机常数:220 KV(每伏特电压对应的空载转速)。
供电电压:12 V。
理论最高空载转速:220 × 12 = 2640 RPM(约 276 rad/s)。
软件与硬件损耗:占空比限幅至 90%(乘以 0.9),MOS 管压降与死区损耗约扣除 1~2V,SVPWM 调制会造成相电压损失。
综合折损后,系统的实际物理极限转速约为 150 ~ 180 rad/s。
叠加轴承摩擦力与风阻,电机在 140 rad/s 左右达到真实的稳态极值。
结论:当目标转速设定超过物理极值时,PID 积分项会因无法消除的误差而持续累积,最终导致系统在限幅边缘震荡。明确系统的物理边界后,将目标速度调整回安全区间(如 100 rad/s),系统恢复稳定运行。
总结
通过完整的开环与闭环调试,明确了无电流环 FOC 系统的控制边界:
高频控制循环中严禁使用阻塞式 I2C 通信。
定时器中断频率需与通信耗时匹配,避免中断重入。
电机极对数直接影响磁场对齐与输出扭矩。
PID 无法超越硬件的物理极限,必须根据实际的供电电压与电机参数合理设定目标值。