基于EKF扩展卡尔曼滤波算法的PMSM无传感器控制技术:仿真与性能分析报告
基于EKF扩展卡尔曼滤波的PMSM无传感器控制 仿真实现了永磁电机无传感器转速闭环控制。 其中,永磁同步电机采用数学模型进行建模,将卡尔曼滤波器作为自适应系统控制电机工作,该算法适用于高性能伺服系统,可以在很大的速度范围工作,在低速状态下能快速完成闭环。 由仿真结果可以看到初始阶段和上升阶段转速的误差较大,但随着转速的上升及稳定,误差逐渐减少,可以说明选择合适的协方差矩阵,基于EKF的无传感器技术能满足实现电机控制性能的要求。 文件包含: [1]一个仿真文件 [2]EKF卡尔曼滤波器源代码 [3]相关参考文献
最近在折腾永磁同步电机(PMSM)无传感器控制,发现扩展卡尔曼滤波(EKF)这玩意儿确实有意思。传统观测器在低速容易翻车,EKF硬是通过概率模型把转速和位置都给估出来了。今天咱们就掰开揉碎了聊聊这个事,顺便把仿真代码里几个关键点拎出来看看。
先看电机模型部分。PMSM在dq坐标系下的电压方程长得挺规整:
% PMSM动态模型
function dx = motor_model(t, x, u)
Ld = 0.001; Lq = 0.001; R = 0.5; J = 0.01; B = 0.1; P = 4;
lambda_m = 0.1;
id = x(1); iq = x(2); w = x(3); theta = x(4);
ud = u(1); uq = u(2);
did = (ud - R*id + Lq*w*iq)/Ld;
diq = (uq - R*iq - Ld*w*id - lambda_m*w)/Lq;
dw = (3/2*P*(lambda_m*iq + (Ld-Lq)*id*iq) - B*w)/J;
dtheta = w;
dx = [did; diq; dw; dtheta];
end
这里有个坑要注意:电感参数Ld和Lq如果设置不对,整个观测器立马抽风。之前仿真时把Ld设成0.01,结果转速估计直接飞天上不来了,调了三天才发现是这货的问题。

EKF的核心在状态预测和修正这两板斧。看看预测阶段的骚操作:
def predict(self, u):
# 状态转移
self.x = self.f(self.x, u)
# 雅可比矩阵计算
F = self.jacobianF(self.x, u)
# 协方差预测
self.P = F @ self.P @ F.T + self.Q
这里的雅可比矩阵计算绝对是技术活。以转速w的偏导数计算为例:
% 雅可比矩阵F计算片段
df4dw = - (3*P^2*(lambda_m*iq + (Ld-Lq)*id*iq))/(2*J) * Ts;
df4did = (3*P^2*(Ld-Lq)*iq)/(2*J) * Ts;
这种偏导要是手算分分钟出错,建议直接上符号计算工具。之前用Matlab的jacobian函数自动生成代码,结果仿真速度慢了五倍,最后还是硬着头皮手写了。
观测模型也别掉以轻心。实测发现只测相电流的话,低速时观测器容易迷路。后来改成电流+反电动势观测,效果立竿见影:
// 观测方程(C代码片段)
float h[2] = {
id_est,
iq_est + K * w_est * sin(theta_est)
};
这个K系数就是个玄学参数,调到0.7时波形突然就稳了,至今没想明白理论依据是啥。
基于EKF扩展卡尔曼滤波的PMSM无传感器控制 仿真实现了永磁电机无传感器转速闭环控制。 其中,永磁同步电机采用数学模型进行建模,将卡尔曼滤波器作为自适应系统控制电机工作,该算法适用于高性能伺服系统,可以在很大的速度范围工作,在低速状态下能快速完成闭环。 由仿真结果可以看到初始阶段和上升阶段转速的误差较大,但随着转速的上升及稳定,误差逐渐减少,可以说明选择合适的协方差矩阵,基于EKF的无传感器技术能满足实现电机控制性能的要求。 文件包含: [1]一个仿真文件 [2]EKF卡尔曼滤波器源代码 [3]相关参考文献

协方差矩阵调参堪称大型打地鼠现场。Q矩阵对角元素设大了,估计值抖得像帕金森;设小了又反应迟钝。最后找到个邪门规律:电流噪声设1e-4,转速噪声设1e-3,角度噪声设1e-5时效果最魔幻。
看看仿真结果曲线,启动瞬间转速估计误差能有200rpm,但0.2秒后就收敛到±10rpm以内。这说明EKF的预测能力确实顶,不过初始阶段的鬼畜波动也暴露出系统对初值敏感的问题。解决方案嘛,要么加个启动预定位,要么在初始阶段暂时切到开环。
最后扔个调试秘诀:把过程噪声协方差Q和观测噪声协方差R设成可调参数,直接在仿真里动态修改。这样能实时看到参数变化对系统的影响,比改代码重跑仿真高效十倍。具体实现就是在Simulink里加几个滑动条模块,谁用谁知道。

参考文献打包扔网盘了,重点推荐那篇1994年的经典论文《Sensorless Control of PMSM Using EKF》,虽然年头久但干货十足。仿真代码建议从空载启动开始调,别一上来就加负载,容易怀疑人生。
更多推荐


所有评论(0)