永磁同步电机(PMSM)的无传感器控制一直是电机驱动领域的热点研究方向。传统FOC控制依赖编码器获取转子位置,但在高温、高湿、强振动等恶劣环境下,机械式编码器可靠性大幅降低。我们团队基于STM32F405设计的HFI(高频方波注入)方案,成功实现了零速至中速范围内的稳定无感控制。
这个项目的难点在于:高频信号注入会引入额外损耗和噪声,而STM32F405的运算能力有限(168MHz主频,单精度FPU)。我们通过优化注入策略和位置观测器结构,在保证控制精度的同时将CPU占用率控制在65%以下。实测显示,在1000rpm转速下位置估算误差小于2度,电流THD控制在5%以内。
STM32F405RG是我们的最终选择,关键因素包括:
注意:使用TIM1产生PWM时,务必配置BDTR寄存器的MOE位使能主输出,否则无法驱动MOSFET!
采用分立器件搭建的三相逆变桥方案:
关键参数计算示例:
栅极驱动电阻Rg = Qg/(ΔV×Δt)
其中Qg=23nC(MOSFET栅极电荷)
ΔV=12V(驱动电压)
Δt=50ns(目标上升时间)
得出Rg≈38Ω,实际选用33Ω电阻
在d轴注入幅值20V、频率1kHz的方波电压信号:
code复制Ud = Udc/3 * sign(sin(2πfht))
Uq = 0
通过检测q轴电流响应中的高频分量,解调出转子位置信息。具体实现步骤:
传统PLL在低速时存在收敛问题,我们改进的方案:
c复制typedef struct {
float theta_est; // 估算角度
float speed_est; // 估算转速
float Kp; // 比例增益
float Ki; // 积分增益
} PLL_Observer;
void UpdatePLL(PLL_Observer* obs, float Iq_hf) {
float err = Iq_hf * cos(2*obs->theta_est);
obs->speed_est += obs->Ki * err;
obs->theta_est += obs->Kp * err + obs->speed_est;
}
通过引入转速前馈补偿,将收敛时间从200ms缩短至80ms。
必须确保ADC采样与PWM同步:
code复制TIM1_UP_IRQn // PWM周期中断(优先级0)
ADC_IRQn // 电流采样中断(优先级1)
USART2_IRQn // 调试接口(优先级2)
采用双采样双更新策略提升控制频率:
PID参数整定经验公式:
code复制Kp = Ls * 2π * BW
Ki = Rs * 2π * BW
其中Ls=1.2mH(电机电感)
Rs=0.5Ω(电机电阻)
BW=500Hz(目标带宽)
使用阶跃负载测试(空载→5Nm):
通过调整速度环PID参数,最终将恢复时间优化至80ms。
问题现象:高频啸叫伴随转矩波动
排查过程:
最终发现是INA240的基准电压不稳导致,更换为TL431基准后问题解决。
对于需要更高性能的场景,建议尝试:
我们在后续版本中实现了基于模型参考自适应(MRAS)的混合算法,将工作范围扩展到零速至额定转速全区间,位置误差控制在1.5度以内。