【PMSM例程5】永磁同步电机(PMSM)基于增广EKF的永磁磁链在线辨识与电磁转矩估计|磁链变化仿真及误差分析

有中文注释,包运行成功

文章目录

简介

本程序基于MATLAB搭建永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)仿真模型,采用增广扩展卡尔曼滤波(Extended Kalman Filter,EKF)实现永磁磁链参数的在线辨识,并进一步研究磁链参数变化对电磁转矩计算及电流需求换算的影响。

在电机实际运行过程中,永磁磁链可能受到温度变化、磁体特性等因素影响而发生改变。如果仍然采用固定的标称磁链参数,可能导致电磁转矩估计出现偏差。因此,准确辨识永磁磁链对于提高电机模型的参数准确性具有一定意义。

算法原理与实现

程序采用增广状态估计方法,将永磁磁链参数与dq轴电流共同纳入EKF状态向量。结合已知机械转速、dq轴电压以及带噪电流量测,通过状态预测、协方差传播和量测更新,实现磁链参数的递推估计。

其中,磁链参数采用对数形式进行估计,以保证恢复后的磁链参数为正值。程序同时使用Joseph形式更新误差协方差,提高数值计算的稳定性。

仿真场景与结果分析

仿真构建了具有编码器转速信息的电机电气模型,设置多频电流激励,并模拟永磁磁链随时间逐渐下降的工况,以检验算法对参数变化的跟踪能力。

程序主要展示以下结果:

  1. 永磁磁链辨识: 对比磁链真实值、估计值及相对误差,分析参数跟踪效果。
  2. dq轴电流滤波: 展示带噪电流观测、真实电流及滤波估计结果。
  3. 电磁转矩换算: 在相同估计电流条件下,对比使用标称磁链与在线辨识磁链计算的电磁转矩误差。
  4. 电流需求分析: 对比不同磁链参数下的q轴电流需求,分析参数更新对转矩指令换算的影响。
  5. 滤波性能评价: 输出磁链辨识误差、均方根误差(RMSE)、新息统计及参数估计不确定度等指标。

程序特点与适用方向

本例基于基础MATLAB函数编写,包含完整的参数设置、仿真计算、EKF递推估计及结果可视化过程。电机电阻、电感、永磁磁链、测量噪声、滤波协方差以及仿真工况等参数均可自行调整。

程序适用于永磁同步电机参数辨识、扩展卡尔曼滤波、磁链变化分析以及电磁转矩估计等方向的学习与仿真研究,也可以作为进一步开发电机在线参数补偿算法的参考例程。

运行结果

dq电流滤波

参数辨识结果

新息与参数不确定度

电压激励与编码器转速

磁链更新与转矩换算

命令行输出

MATLAB源代码

部分代码展示:

matlab 复制代码
% 磁链辨识与转矩换算:独立MATLAB例程
% 2026-10-12/Ver1,作者:matlabfilter,V同号,可获取代码定制、讲解等
% 只使用基础MATLAB。参数为普通标量,信号为数值数组,不使用结构体。
% 点击运行即可;末尾含全部局部函数。Figure无水印,配套PNG由维护工具导出。
clear; clc; close all;
rng(0);

%% 共用教学参数与单位:不将本例解释为Word中15 kW电机的实机验证
Rs=0.45; Ld=3e-3; Lq=3.6e-3; psi_f=0.075;
pole_pairs=4; J=2e-3; B=5e-4;
Ts=1e-4; simulation_time=1.2;
dc_voltage=120; voltage_limit=dc_voltage/sqrt(3); current_limit=10;
Kp_speed=0.25; Ki_speed=4.0;
current_bandwidth=1200;
Kp_d=Ld*current_bandwidth; Kp_q=Lq*current_bandwidth;
Ki_d=Rs*current_bandwidth; Ki_q=Rs*current_bandwidth;
time=0:Ts:simulation_time; sample_count=numel(time);
Kt=1.5*pole_pairs*psi_f; Kr=1.5*pole_pairs*(Ld-Lq);
% 维护用汇总也是数值向量;各指标仍以独立、有意义的变量保留。
speed_rmse=NaN; angle_rmse_deg=NaN; load_rmse=NaN;
parameter_relative_rmse_pct=NaN; secondary_parameter_rmse_pct=NaN;
improvement_pct=NaN; current_rmse=NaN; peak_speed_error=NaN;
gap_speed_rmse=NaN; recovery_speed_rmse=NaN;
final_parameter=NaN; final_secondary_parameter=NaN;
disturbance_speed_peak=NaN; control_current_peak=NaN; takeover_speed_peak=NaN;
recovery_time=NaN; covariance_min=Inf; covariance_chol_failures=0;
jacobian_error=0; state_is_finite=1;

%% 理想有编码器电气台架:机械转速已知,只研究电气参数
speed_known=90+12*sin(2*pi*2*time);
angle_known=cumtrapz(time,pole_pairs*speed_known);
id_reference=1.2*sin(2*pi*19*time)+0.7*sin(2*pi*43*time);
iq_reference=2.5+1.1*sin(2*pi*17*time)+0.7*sin(2*pi*31*time);
resistance_true=Rs*ones(1,sample_count);
flux_true=psi_f*ones(1,sample_count);
Ld_true=Ld*ones(1,sample_count); Lq_true=Lq*ones(1,sample_count);
flux_true=psi_f*(1-0.18*(1+tanh((time-0.45)/0.07))/2);
current_true=zeros(2,sample_count); current_true(:,1)=[0;2.5];
voltage_dq=zeros(2,sample_count); current_integrals=zeros(2,1);
for k=2:sample_count
    [udq,current_integrals]=dq_current_controller(current_true(:,k-1), ...
        [id_reference(k-1);iq_reference(k-1)],speed_known(k-1),current_integrals,Ts, ...
        Rs,Ld,Lq,psi_f,pole_pairs,Kp_d,Ki_d,Kp_q,Ki_q,voltage_limit);
    voltage_dq(:,k-1)=udq;
    current_true(:,k)=electrical_truth_step(current_true(:,k-1),udq,speed_known(k-1), ...
        Ts,resistance_true(k-1),Ld_true(k-1),Lq_true(k-1),flux_true(k-1),pole_pairs);
end
voltage_dq(:,end)=voltage_dq(:,end-1);
current_dq_meas=current_true+0.04*randn(2,sample_count);

完整代码⬇️

如需帮助,或有滤波相关的MATLAB代码定制需求,可从个人主页左侧联系我

相关推荐
Evand J3 小时前
【PMSM例程4】PMSM电阻辨识与模型补偿EKF,MATLAB例程。附下载链接,包运行成功
开发语言·matlab·电机·ekf·卡尔曼·pmsm
智能制造爱好者9 小时前
传统绕线机适配不了分块定子?有哪些自动化解法
自动化·电机
Evand J5 天前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
Evand J17 天前
【PMSM例程6】永磁同步电机(PMSM)基于增广EKF的d-q轴电感分阶段辨识算法|电机参数估计与误差分析
算法·matlab·电机·ekf
Evand J24 天前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波
Evand J24 天前
【电机滤波例程2】负载转矩增广扩展卡尔曼滤波(EKF)原理与MATLAB例程:五维PMSM状态与负载阶跃估计。订阅专栏后可查看完整代码
开发语言·matlab·电机·ekf·卡尔曼滤波
hengcaib3 个月前
2026工业驱动新风向:德马克直流无刷电机在精密控制场景下的深度应用解析
电机
Evand J4 个月前
【MATLAB例程】一维EKF(扩展卡尔曼滤波)、UKF(无迹卡尔曼滤波)、CKF(容积卡尔曼滤波)、PF(粒子滤波)四种滤波方法对比
开发语言·matlab·ekf·ckf
Evand J4 个月前
【MATLAB例程】一维非线性状态滤波对比:经典EKF、MCC-EKF、MVC-EKF。在含异常测量的场景下,对比三种滤波方法的估计曲线和误差统计。
matlab·mvc·ekf·滤波·mcc