1. 项目概述
在永磁同步电机(PMSM)无传感器控制领域,滑模观测器(SMO)因其强鲁棒性而被广泛应用。然而传统SMO存在一个顽固性问题——抖振现象。这就像试图用颤抖的手画直线,虽然理论上可行,但实际效果总是不尽如人意。我们实验室最近尝试将模型参考自适应系统(MRAS)与传统SMO结合,开发出一种改进型观测器结构。
这个方案的核心创新点在于:在传统SMO的低通滤波器后级联了一个MRAS补偿模块。这就好比在普通净水器后面加装了智能水质调节器,不仅能过滤杂质,还能动态调节水的酸碱度。实测表明,该方法可使转子位置估计误差降低75%以上,同时显著改善电流波形质量。
2. 技术原理深度解析
2.1 传统SMO的痛点分析
传统滑模观测器的工作原理就像用开关控制加热器来维持恒温:
- 通过电机电压方程构建电流观测模型
- 比较实测电流与观测电流的误差
- 采用符号函数进行开关控制
这种方法的抖振问题主要源于:
- 符号函数的离散特性导致高频切换
- 低通滤波器引入相位滞后
- 固定参数无法适应转速变化
2.2 MRAS补偿机制设计
我们的改进方案采用双闭环结构:
code复制[传统SMO] → [低通滤波器] → [MRAS补偿器] → [位置估算]
↑ ↑
电流反馈 自适应调整
MRAS模块的核心是一个参数自适应的旋转补偿器,其工作原理可以类比为:
- 参考模型:电机理想电流方程
- 可调模型:实际观测电流
- 自适应律:基于李雅普诺夫稳定性推导
关键数学表达:
code复制θ̇ = γ·e·ε
其中:
θ:补偿角度
γ:自适应增益
e:反电势信号
ε:电流误差
3. 实现细节与参数设计
3.1 系统架构实现
在Simulink中搭建的模型包含以下关键子系统:
- PMSM电机模型(采用ANSOFT参数化建模)
- 传统SMO核心模块
- 二阶Butterworth低通滤波器
- MRAS补偿器(实现图示)

3.2 关键参数整定指南
-
低通滤波器设计:
- 截止频率:f_c = (1/5~1/3)×f_sw
- 阻尼系数:ζ=0.707(Butterworth特性)
- 示例:当开关频率10kHz时,取f_c=2kHz
-
自适应增益选择:
- 初始值:γ=0.02
- 调节范围:0.01~0.05
- 调试方法:
matlab复制for gamma = 0.01:0.01:0.05 sim('PMSM_MRAS_SMO'); THD = calculate_thd(i_alpha); plot(gamma, THD); end
-
补偿器初始化:
c复制typedef struct { float theta[2]; float gamma; } MRAS_Compensator; void MRAS_Init(MRAS_Compensator* comp) { comp->theta[0] = comp->theta[1] = 0.0f; comp->gamma = 0.02f; }
4. 实测效果与性能分析
4.1 静态性能对比
| 指标 | 传统SMO | MRAS-SMO | 改进率 |
|---|---|---|---|
| 位置误差(rad) | ±1.2 | ±0.3 | 75% |
| 电流THD(%) | 7.8 | 4.1 | 47% |
| 响应时间(ms) | 15 | 12 | 20% |
4.2 动态响应测试
在转速阶跃变化工况下(500→3000rpm):
- 传统SMO出现明显超调(约18%)
- MRAS-SMO超调量控制在5%以内
- 转速估计建立时间缩短40%

5. 工程应用注意事项
5.1 典型问题排查
-
补偿过冲现象:
- 症状:转速估计出现高频振荡
- 解决方案:
- 降低自适应增益γ
- 增加低通滤波器阶数
- 检查电流采样延迟
-
低速性能下降:
- 根本原因:反电势信号幅值过小
- 改进措施:
- 注入高频信号
- 切换至I/F控制模式
5.2 参数调试心得
-
γ值黄金法则:
- 先设为0.01,观察响应速度
- 每次增加0.005直至出现轻微振荡
- 回退到振荡临界点的80%
-
滤波器相位补偿:
matlab复制[b,a] = butter(2, 2000/(fs/2)); grpdelay(b,a) % 查看群延迟 -
实时性优化技巧:
- 将MRAS计算放在PWM中断服务例程
- 采用查表法实现三角函数运算
- 使用Q15格式定点数运算
6. 进阶优化方向
6.1 与负载观测器联调
当负载突变时,可采用以下协同策略:
code复制if (torque_change > threshold)
freeze_MRAS_adjustment();
enable_load_observer();
end
6.2 自适应增益调整方案
改进的自适应律设计:
c复制float dynamic_gamma(float speed) {
const float gamma_base = 0.02f;
const float speed_ref = 1000.0f; // rpm
return gamma_base * (1.0f + 0.5f * fabs(speed)/speed_ref);
}
6.3 数字实现优化
针对DSP的代码优化技巧:
- 使用IQmath库进行快速计算
- 将矩阵运算转换为标量形式
- 采用移位代替除法运算
示例代码:
c复制#pragma CODE_SECTION(MRAS_update, "ramfuncs");
void MRAS_update(MRAS_Compensator* comp, float e, float i_err) {
comp->theta += _IQmpy(_IQ(comp->gamma),
_IQmpy(_IQ(e), _IQ(i_err)));
}
7. 参考文献与资源
-
核心论文:
- Ma H, et al. "SMO-MRAS hybrid observer for PMSM sensorless control", IEEE Trans. Ind. Electron., 2021
-
仿真模型:
- GitHub仓库:Improved-SMO-with-MRAS
- 关键文件:
- /PMSM_Control/MRAS_SMO.slx
- /Utils/butterworth_filter.m
-
实验数据:
- 测试报告:/Docs/Test_Report_2023.pdf
- 示波器截图:/Images/scope_*.png
在实际工程应用中,我们发现这套方案特别适合以下场景:
- 中高速范围(>10%额定转速)运行
- 动态负载变化频繁的场合
- 对电流谐波敏感的应用
有个值得注意的细节是:当电机温度变化超过30℃时,建议重新做一次参数自整定。这是因为绕组电阻变化会影响MRAS的参考模型精度。我们通常在电机控制器中加入温度补偿算法:
c复制void temp_compensation(float delta_T) {
params.R *= (1.0f + 0.00393f * delta_T);
params.Ld *= (1.0f + 0.0042f * delta_T);
update_MRAS_model();
}
