在无感永磁同步电机(PMSM)控制领域,低速和零速状态下的转子位置检测一直是个棘手问题。传统滑模观测器在200RPM以下基本失效,而高频注入法通过向电机注入特定高频信号并解调响应,实现了全速域范围内的稳定观测。我们基于STM32F4开发的这套方案,成功解决了堵转力矩波动、低速反转等业界常见痛点。
这套系统的核心优势体现在三个维度:
关键提示:高频注入方案对电机参数敏感性较高,建议先通过Matlab仿真确定电感参数,实测表明电感误差超过20%时观测精度会急剧下降。
三相下桥臂电阻采样方案采用0.005Ω/2W的锰铜分流电阻,配合TI的INA240电流检测放大器。这个型号的共模抑制比(CMRR)达到110dB@100kHz,特别适合高频PWM环境。
运放输出端的RC滤波网络采用双0.1μF陶瓷电容并联设计:
实测数据对比:
| 滤波方案 | 信噪比(dB) | 相位延迟(°) |
|---|---|---|
| 单电容 | 42.5 | 8.2 |
| 双电容 | 51.3 | 5.7 |
MOSFET选用Infineon的IPD90N04S4,特别增加了:
实测开关波形对比:
bash复制# 无米勒钳位时的振铃
Vds_ring = 28V (峰峰值)
trise = 32ns
# 添加钳位后
Vds_ring = 5V
trise = 38ns
在PWM载波中断(20kHz)中实现的正交信号注入:
c复制#define HF_FREQ 2500 // 2.5kHz注入频率
#define HF_AMPLITUDE (Vbus*0.12) // 12%母线电压
void HF_Injection(float theta_e) {
static float hf_angle = 0;
hf_angle += _2PI * HF_FREQ * PWM_PERIOD;
// Park逆变换注入
Vd = Vd_ref;
Vq = Vq_ref;
Valpha = Vd*cosf(theta_e) - Vq*sinf(theta_e) + HF_AMPLITUDE*sinf(hf_angle);
Vbeta = Vd*sinf(theta_e) + Vq*cosf(theta_e) + HF_AMPLITUDE*cosf(hf_angle);
}
注入参数选择依据:
位置解调算法采用正交相干检测:
c复制void PLL_Update(float i_alpha, float i_beta) {
// 带通滤波(2kHz-3kHz)
i_alpha_hf = BPF_Filter(i_alpha);
i_beta_hf = BPF_Filter(i_beta);
// 正交解调
float err = i_beta_hf*cosf(hf_angle) - i_alpha_hf*sinf(hf_angle);
// 自适应增益
float gain = (fabsf(Est_Speed)<50) ? 2.0*HF_GAIN : HF_GAIN;
// 锁相环更新
Est_Speed += gain * err * DT;
Est_Angle += Est_Speed * DT;
}
实测性能对比:
| 转速(RPM) | 传统滑模(°) | 高频注入(°) |
|---|---|---|
| 0 | N/A | ±1.5 |
| 100 | ±15 | ±2.0 |
| 500 | ±5 | ±1.0 |
堵转判断逻辑采用双重条件:
c复制#define STALL_THRESHOLD (I_rated*1.5)
#define SPEED_THRESHOLD 10 // RPM
if((fabsf(Iq_Ref) > STALL_THRESHOLD) &&
(fabsf(Est_Speed) < SPEED_THRESHOLD)) {
Stall_Counter++;
if(Stall_Counter > 50) {
// 分级降频
PWM_Freq = (PWM_Freq > 10kHz) ? PWM_Freq/2 : 10kHz;
Current_Limit *= 0.7;
}
}
降频操作必须同步调整:
在降频同时启动温度补偿:
math复制I_{max} = I_{rated} \times \sqrt{\frac{T_{jmax} - T_{case}}{R_{thJC} \times P_{loss}}}
其中:
在motor_para.h中设置相位补偿:
c复制#define HF_PHASE_SHIFT 15 // 针对特定电机的补偿角度
调试步骤:
速度相关增益调整曲线:
| 转速区间(RPM) | 比例系数Kp | 积分系数Ki |
|---|---|---|
| 0-50 | 2.0*Kp0 | 3.0*Ki0 |
| 50-200 | 1.5*Kp0 | 2.0*Ki0 |
| >200 | Kp0 | Ki0 |
基准值建议:
math复制Kp0 = \frac{R_s}{L_d}, \quad Ki0 = \frac{R_s}{L_q}
在400W/24V的PMSM上测试结果:
| 测试项目 | 指标 |
|---|---|
| 最低稳定转速 | 2RPM (带载) |
| 堵转转矩波动 | ±2.8% |
| 零速位置误差 | ±1.2° |
| 动态响应时间 | 0-300RPM仅80ms |
| 电流环带宽 | 1.2kHz (-3dB) |
波形实测截图:

源码包目录结构:
code复制├── Core
│ ├── Src
│ │ ├── hfi.c # 高频注入核心算法
│ │ └── pll_obs.c # 改进型观测器
├── Drivers
│ ├── pwm_driver.c # 带降频功能的PWM驱动
├── Matlab
│ ├── HFI_Model.slx # 含磁饱和特性的仿真模型
关键参数修改位置:
在移植到其他平台时需要注意: