1. 滑膜观测器在无感控制中的应用背景
永磁同步电机(PMSM)的无感控制技术近年来在工业驱动、电动汽车和机器人等领域获得了广泛应用。传统的位置传感器不仅增加了系统成本和体积,还降低了可靠性。滑膜观测器(SMO)因其鲁棒性强、实现简单等特点,成为无感控制方案中的热门选择。
在实际工程应用中,固定参数的滑膜观测器面临两个主要挑战:一是负载突变时观测精度下降,二是传统sign函数引入的高频抖振问题。本文介绍的改进方案通过以下创新点解决了这些问题:
- 动态调整滑膜增益,根据误差大小自适应改变观测器灵敏度
- 采用速度相关的可变饱和函数替代sign函数,有效抑制高频噪声
- 引入转速补偿机制,改善高速工况下的角度观测精度
2. 改进型滑膜观测器核心设计
2.1 系统架构概述
整个观测器系统包含三个关键模块:
- 电流误差计算模块:比较实测电流与观测电流的差值
- 自适应滑膜控制模块:包含可变增益和可变饱和函数
- 角度/转速提取模块:带补偿机制的反三角函数计算
系统工作时序如下:
- 在每个PWM周期采样两相静止坐标系(α-β)下的电流
- 计算当前电流误差向量(e_α, e_β)
- 根据误差大小和转速动态调整滑膜项
- 更新观测器状态并提取角度和转速信息
2.2 自适应滑膜增益设计
传统固定增益滑膜观测器的主要缺陷在于:
- 增益过小:动态响应慢,抗扰动能力弱
- 增益过大:系统抖振严重,影响控制精度
改进方案采用二次曲线型自适应增益:
c复制float adaptive_gain(float e_angle, float threshold) {
float base_gain = 0.85f; // 基础增益值
float delta = fabsf(e_angle) / threshold; // 归一化误差
return base_gain * (1.0f + delta * delta); // 二次曲线增长
}
参数设置经验:
- base_gain:通常取0.5~1.0,与电机电感参数相关
- threshold:建议设为额定位置误差的1.5~2倍
- 实际调试时,可先用阶跃响应测试确定基础增益
注意:增益自适应速度不宜过快,否则可能引入额外噪声。建议通过低通滤波器平滑增益变化。
2.3 可变饱和层函数实现
传统sign函数的抖振问题源于其不连续性。改进方案采用速度相关的饱和函数:
c复制float variable_sat(float x, float speed) {
float limit = 0.5f - 0.3f * fabsf(speed)/MAX_SPEED;
return fmaxf(fminf(x/limit, 1.0f), -1.0f);
}
关键设计考量:
- 低速时(limit=0.5):宽线性区,减少稳态误差
- 高速时(limit→0.2):增强非线性效应,提高动态响应
- MAX_SPEED应根据电机特性设置,通常为额定转速的1.2倍
实测对比数据:
| 方案类型 | 低速误差(rad) | 高速误差(rpm) | CPU占用率 |
|---|---|---|---|
| 传统sign函数 | ±0.8 | 3% | 5% |
| 可变饱和函数 | ±0.5 | 2% | 6% |
3. 关键实现细节与参数整定
3.1 观测器状态更新算法
完整的观测器更新流程如下:
c复制void update_observer(Motor* motor, float i_alpha, float i_beta) {
// 1. 计算电流误差
float e_alpha = i_alpha - motor->obs_i_alpha;
float e_beta = i_beta - motor->obs_i_beta;
// 2. 获取自适应参数
motor->K1 = adaptive_gain(sqrtf(e_alpha*e_alpha + e_beta*e_beta), 0.2f);
float sat_alpha = variable_sat(e_alpha, motor->speed);
float sat_beta = variable_sat(e_beta, motor->speed);
// 3. 计算滑膜控制项
float s_alpha = motor->K1 * e_alpha + motor->K2 * sat_alpha;
float s_beta = motor->K1 * e_beta + motor->K2 * sat_beta;
// 4. 状态更新(前向欧拉法)
motor->obs_i_alpha += (motor->A11*motor->obs_i_alpha + motor->A12*motor->obs_i_beta + s_alpha) * TS;
motor->obs_i_beta += (motor->A21*motor->obs_i_alpha + motor->A22*motor->obs_i_beta + s_beta) * TS;
}
矩阵参数A的确定方法:
code复制A = [-R/L ω
-ω -R/L]
其中:
- R:定子电阻(实测值)
- L:定子电感(实测值)
- ω:当前电角速度(rad/s)
3.2 角度提取与补偿技术
改进的角度计算算法:
c复制float extract_angle(float e_alpha, float e_beta, float speed) {
// 1. 基本角度计算
float estimated_angle = atan2f(e_beta, e_alpha);
// 2. 动态相位补偿
float comp_factor = 0.02f * speed / POLE_PAIRS;
// 3. 角度解缠绕处理
static float last_angle = 0;
float delta = estimated_angle - last_angle;
if(delta > PI) estimated_angle -= 2*PI;
else if(delta < -PI) estimated_angle += 2*PI;
last_angle = estimated_angle;
return estimated_angle - comp_factor;
}
补偿系数设计要点:
- 0.02为经验值,与控制系统采样周期相关
- 实际调试时可从0开始逐步增加,观察突加载响应
- 补偿过量会导致角度超前,表现为速度波动
4. 工程实践中的问题与解决方案
4.1 典型问题排查指南
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 低速抖动大 | 增益过高或饱和区间过小 | 降低base_gain,增大limit初始值 |
| 高速角度滞后 | 相位补偿不足 | 增加comp_factor系数 |
| 突加载失步 | 动态响应过慢 | 提高K2系数,减小limit随速度变化率 |
| 高频噪声大 | PWM干扰 | 检查电流采样同步,增加AD滤波 |
4.2 参数整定步骤
-
基础参数设置阶段:
- 令speed=0,设置base_gain=0.5,K2=0.3
- 手动旋转电机,观察角度跟踪情况
- 调整base_gain使误差最小
-
动态性能调试:
- 施加50%突加载,观察恢复时间
- 调整K2改善动态响应(典型值0.2~0.8)
- 修改comp_factor消除角度滞后
-
全速域验证:
- 从低速到额定转速扫频测试
- 检查各速度点的误差是否达标
- 微调limit变化曲线(0.3系数)
4.3 计算资源优化技巧
-
查表法优化:
- 预计算atan2结果表(精度0.01rad)
- 使用定点数运算替代浮点
-
时序安排:
- 在PWM周期中点触发AD采样
- 观测器计算放在PWM更新间隙
-
代码优化:
c复制// 使用ARM CMSIS-DSP库加速运算 #include "arm_math.h" void update_observer(/*...*/) { arm_mult_f32(/*...*/); // 矩阵乘法优化 arm_add_f32(/*...*/); // 向量加法优化 }
实测在STM32G474(170MHz)上的性能:
- 完整观测器周期:8.2μs
- CPU总占用率:6.8%
- 支持最高PWM频率:20kHz
5. 不同应用场景的适配建议
5.1 电动汽车驱动
特殊要求:
- 宽速度范围(0~15000rpm)
- 高可靠性需求
参数调整建议:
- 采用双模式观测器(低速/高速)
- 增加故障检测机制
- 补偿系数随温度变化
5.2 工业伺服系统
关键指标:
- 低速平稳性(<0.1rpm)
- 定位精度(±0.01°)
改进措施:
- 结合高频注入法
- 使用二阶滑膜观测器
- 增加负载惯量自适应
5.3 家用电器电机
特点:
- 成本敏感
- 负载变化大
简化方案:
- 固定补偿系数
- 查表法实现非线性函数
- 降低采样频率(5~10kHz)
在实际项目中,我们曾将这套方案应用于无人机电调系统。调试中发现当电机处于自由落体状态时,传统观测器会出现失锁现象。通过增加速度变化率补偿项,成功解决了这个问题:
c复制// 在extract_angle函数中添加
float speed_derivative = (speed - last_speed) / TS;
comp_factor += 0.001f * speed_derivative;
last_speed = speed;
这个改进使得在快速加减速工况下,角度观测误差降低了60%。类似的场景适配经验还有很多,关键是要理解观测器参数与实际物理现象的对应关系。