1. 永磁电机无速度传感器控制概述
永磁同步电机(PMSM)的无速度传感器控制是当前电机控制领域的前沿技术之一。传统控制方法依赖编码器或旋转变压器获取转子位置,但这些机械传感器不仅增加系统成本和体积,还降低了可靠性。高频注入法通过向电机定子注入特定高频信号,利用电机自身的凸极效应实现转子位置估计,完美解决了零速和低速下的位置检测难题。
在实际工程应用中,我们主要面临三个技术挑战:
- 高频信号注入与解调算法的实时性要求极高,需要在50-100μs的控制周期内完成所有运算
- 初始位置辨识的准确性直接影响启动性能
- 动态工况下的参数变化会影响观测精度
2. 高频注入法原理与实现
2.1 高频旋转电压注入原理
高频注入法的核心思想是利用永磁电机转子磁路不对称(凸极效应)的特性。当注入的高频电压信号旋转时,由于d轴和q轴电感差异(Ld≠Lq),会在定子电流中产生包含位置信息的响应分量。
数学上可以表示为:
code复制i_h = [V_h/(ω_hL_avg)] * sin(ω_ht) - [V_hΔL/(2ω_hL_avg^2)] * sin(2θ-ω_ht)
其中第二项包含了转子位置信息θ,通过适当的信号处理即可提取。
2.2 软件实现关键代码
高频信号生成模块的优化实现:
c复制// 高频注入信号生成(优化版)
typedef struct {
float theta; // 当前相位角
float freq; // 注入频率(Hz)
float amp; // 注入幅值(V)
float Ts; // 控制周期(s)
} HFI_Generator;
void HFI_Update(HFI_Generator *hfi, float *u_alpha, float *u_beta)
{
// 相位累加(防止溢出)
hfi->theta += 2 * PI * hfi->freq * hfi->Ts;
if(hfi->theta > 2*PI) hfi->theta -= 2*PI;
// 幅值限幅保护
float amp = constrain(hfi->amp, 0, 0.1*Vdc);
// 生成正交信号
*u_alpha = amp * arm_cos_f32(hfi->theta);
*u_beta = amp * arm_sin_f32(hfi->theta);
}
关键技巧:使用ARM CMSIS-DSP库的优化三角函数计算比标准库函数快3-5倍,特别适合在STM32等Cortex-M系列MCU上运行。
2.3 位置信息解调技术
位置解调采用同步解调+锁相环的方案:
c复制// 位置解调处理
void Position_Estimation(float i_alpha, float i_beta, HFI_Generator *hfi, PLL_Obj *pll)
{
// 同步解调
float i_h = i_alpha * arm_cos_f32(hfi->theta) + i_beta * arm_sin_f32(hfi->theta);
// 带通滤波(二阶IIR)
static float bpf_state[4] = {0};
float i_filt = IIR_BPF_Filter(i_h, bpf_state); // 自定义带通滤波函数
// 锁相环更新
PLL_Update(pll, i_filt);
}
带通滤波器设计要点:
- 中心频率:等于注入频率(如2.5kHz)
- 带宽:200-500Hz(取决于转速范围)
- 建议使用二阶IIR滤波器,计算量小且相位延迟可控
3. 双闭环控制系统设计
3.1 电流环设计要点
电流环是内环,其响应速度直接影响系统性能:
c复制// 电流PI控制器参数整定
void CurrentLoop_Tuning(PI_Controller *pi, float L, float R, float Ts)
{
float bandwidth = 2*PI*1000; // 1kHz带宽
pi->Kp = bandwidth * L;
pi->Ki = bandwidth * R;
pi->OutputLimit = Vdc/sqrt(3); // 电压极限
}
实测经验:在20kHz PWM频率下,电流环带宽可达1-1.5kHz。但要注意:
- 采样延迟必须补偿(通常滞后1.5个控制周期)
- PWM死区时间需要前馈补偿
3.2 速度环特殊处理
无传感器控制的速度环需要特别注意:
c复制// 抗饱和速度PI控制器
typedef struct {
float Kp;
float Ki;
float Integral;
float Output;
float Limit;
float AntiWindupGain; // 抗饱和系数
} SpeedPI_Controller;
void SpeedPI_Update(SpeedPI_Controller *pi, float error)
{
float prop = pi->Kp * error;
pi->Integral += pi->Ki * error * Ts;
// 抗饱和处理
if(fabs(pi->Output) >= pi->Limit) {
pi->Integral -= pi->AntiWindupGain * (pi->Output - constrain(pi->Output, -pi->Limit, pi->Limit));
}
pi->Output = prop + pi->Integral;
pi->Output = constrain(pi->Output, -pi->Limit, pi->Limit);
}
参数整定经验公式:
- Kp = (2~3) * J / τ (J为转动惯量,τ为目标响应时间)
- Ki = (0.2~0.5) * Kp / τ
- 抗饱和系数一般取0.1~0.3
4. 工程实现关键问题
4.1 初始位置检测
初始位置辨识的改进方案:
c复制// 初始位置检测状态机
typedef enum {
INIT_IDLE,
HF_INJECTION,
POSITION_LOCK,
STARTUP
} InitState_t;
void InitialPosition_Detection(InitState_t *state, float *pos_est)
{
static uint32_t timer = 0;
switch(*state) {
case INIT_IDLE:
if(start_cmd) {
*state = HF_INJECTION;
timer = 0;
}
break;
case HF_INJECTION:
// 持续注入高频信号
Inject_HF_Signal();
if(++timer > 500) { // 约25ms
*pos_est = Get_Position_From_PLL();
*state = POSITION_LOCK;
timer = 0;
}
break;
case POSITION_LOCK:
if(Is_Position_Stable()) {
*state = STARTUP;
}
break;
}
}
4.2 低速稳定性增强
提高低速稳定性的关键技术:
- 高频信号幅值自适应调节:
c复制// 根据速度调整注入幅值
void HFI_Amplitude_Adaptive(HFI_Generator *hfi, float speed)
{
float min_amp = 0.05 * Vdc;
float max_amp = 0.1 * Vdc;
// 低速时大幅值,高速时小幅值
hfi->amp = max_amp - (max_amp-min_amp) * constrain(fabs(speed)/10.0, 0, 1);
}
- 混合观测器设计:
- 低速段(<5%额定转速):纯高频注入法
- 中高速段:高频注入+反电动势观测器融合
- 切换时需要平滑过渡,避免位置跳变
5. Simulink仿真验证
5.1 S-Function实现要点
高频注入模块的S-Function实现优化:
matlab复制function sys = mdlOutputs(t,x,u)
persistent theta_hfi hfi_filter;
% 参数初始化
if isempty(theta_hfi)
theta_hfi = 0;
hfi_filter = tf([2*pi*500], [1 2*pi*500]); % 500Hz一阶低通
end
% 高频信号生成
V_hfi = 0.1 * Vdc;
f_hfi = 2500;
Ts = 50e-6;
theta_hfi = mod(theta_hfi + 2*pi*f_hfi*Ts, 2*pi);
hfi_alpha = V_hfi * cos(theta_hfi);
hfi_beta = V_hfi * sin(theta_hfi);
% 电流解调处理
i_alpha = u(1); i_beta = u(2);
i_h = i_alpha*cos(theta_hfi) + i_beta*sin(theta_hfi);
i_filt = lsim(hfi_filter, i_h, t);
sys = [hfi_alpha; hfi_beta; i_filt];
end
5.2 仿真技巧
- 逆变器非线性补偿:
matlab复制% 死区补偿电压计算
function V_comp = Deadtime_Compensation(I, Vdc, Tdead, Ts)
sign_I = sign(I);
V_comp = sign_I * (Tdead/Ts) * Vdc;
end
- 参数敏感性分析:
- 电感变化±30%时观察位置误差
- 转动惯量变化时测试速度环稳定性
- 不同载波频率下的电流纹波对比
6. 实际调试经验
6.1 调试步骤
- 静态测试:
- 仅注入高频信号,不输出转矩
- 用示波器观察解调后的信号波形
- 调整带通滤波器参数直到获得清晰的正弦信号
- 动态测试:
- 低速阶跃响应测试(0→1rpm)
- 突加负载测试(20%→100%额定负载)
- 正反转切换测试
6.2 常见问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 启动抖动 | 初始位置误差大 | 延长高频注入时间,增加幅值 |
| 低速振荡 | 速度环PI参数不当 | 减小Kp,增加积分限幅 |
| 高速失步 | 观测器切换点不当 | 调整混合观测器过渡速度 |
| 电流畸变 | 死区未补偿 | 增加死区补偿电压 |
| 位置跳变 | 解调相位延迟 | 校准滤波器相位特性 |
6.3 硬件设计建议
- 电流采样:
- 推荐使用Σ-Δ型ADC+数字滤波器方案
- 采样时刻严格对齐PWM中点
- 至少2kHz以上的硬件滤波截止频率
- 布局要点:
- 电流采样电阻靠近电机端子
- 栅极驱动回路面积最小化
- 模拟地与功率地单点连接
在完成所有调试后,建议进行72小时连续运行测试,特别关注:
- 长时间零速运行时的温升
- 重复定位精度测试
- 不同温度下的参数漂移情况