资讯动态

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

发布时间:2026/10/30 2:20:25 来源:尧图企业网站定制
有中文注释包运行成功文章目录简介算法原理与实现仿真场景与结果分析程序特点与适用方向运行结果dq电流滤波参数辨识结果新息与参数不确定度电压激励与编码器转速磁链更新与转矩换算命令行输出MATLAB源代码简介本程序基于MATLAB搭建永磁同步电机Permanent Magnet Synchronous MotorPMSM仿真模型采用增广扩展卡尔曼滤波Extended Kalman FilterEKF实现永磁磁链参数的在线辨识并进一步研究磁链参数变化对电磁转矩计算及电流需求换算的影响。在电机实际运行过程中永磁磁链可能受到温度变化、磁体特性等因素影响而发生改变。如果仍然采用固定的标称磁链参数可能导致电磁转矩估计出现偏差。因此准确辨识永磁磁链对于提高电机模型的参数准确性具有一定意义。算法原理与实现程序采用增广状态估计方法将永磁磁链参数与dq轴电流共同纳入EKF状态向量。结合已知机械转速、dq轴电压以及带噪电流量测通过状态预测、协方差传播和量测更新实现磁链参数的递推估计。其中磁链参数采用对数形式进行估计以保证恢复后的磁链参数为正值。程序同时使用Joseph形式更新误差协方差提高数值计算的稳定性。仿真场景与结果分析仿真构建了具有编码器转速信息的电机电气模型设置多频电流激励并模拟永磁磁链随时间逐渐下降的工况以检验算法对参数变化的跟踪能力。程序主要展示以下结果永磁磁链辨识对比磁链真实值、估计值及相对误差分析参数跟踪效果。dq轴电流滤波展示带噪电流观测、真实电流及滤波估计结果。电磁转矩换算在相同估计电流条件下对比使用标称磁链与在线辨识磁链计算的电磁转矩误差。电流需求分析对比不同磁链参数下的q轴电流需求分析参数更新对转矩指令换算的影响。滤波性能评价输出磁链辨识误差、均方根误差RMSE、新息统计及参数估计不确定度等指标。程序特点与适用方向本例基于基础MATLAB函数编写包含完整的参数设置、仿真计算、EKF递推估计及结果可视化过程。电机电阻、电感、永磁磁链、测量噪声、滤波协方差以及仿真工况等参数均可自行调整。程序适用于永磁同步电机参数辨识、扩展卡尔曼滤波、磁链变化分析以及电磁转矩估计等方向的学习与仿真研究也可以作为进一步开发电机在线参数补偿算法的参考例程。运行结果dq电流滤波参数辨识结果新息与参数不确定度电压激励与编码器转速磁链更新与转矩换算命令行输出MATLAB源代码部分代码展示% 磁链辨识与转矩换算独立MATLAB例程% 2026-10-12/Ver1作者matlabfilterV同号可获取代码定制、讲解等% 只使用基础MATLAB。参数为普通标量信号为数值数组不使用结构体。% 点击运行即可末尾含全部局部函数。Figure无水印配套PNG由维护工具导出。clear;clc;close all;rng(0);%% 共用教学参数与单位不将本例解释为Word中15 kW电机的实机验证Rs0.45;Ld3e-3;Lq3.6e-3;psi_f0.075;pole_pairs4;J2e-3;B5e-4;Ts1e-4;simulation_time1.2;dc_voltage120;voltage_limitdc_voltage/sqrt(3);current_limit10;Kp_speed0.25;Ki_speed4.0;current_bandwidth1200;Kp_dLd*current_bandwidth;Kp_qLq*current_bandwidth;Ki_dRs*current_bandwidth;Ki_qRs*current_bandwidth;time0:Ts:simulation_time;sample_countnumel(time);Kt1.5*pole_pairs*psi_f;Kr1.5*pole_pairs*(Ld-Lq);% 维护用汇总也是数值向量各指标仍以独立、有意义的变量保留。speed_rmseNaN;angle_rmse_degNaN;load_rmseNaN;parameter_relative_rmse_pctNaN;secondary_parameter_rmse_pctNaN;improvement_pctNaN;current_rmseNaN;peak_speed_errorNaN;gap_speed_rmseNaN;recovery_speed_rmseNaN;final_parameterNaN;final_secondary_parameterNaN;disturbance_speed_peakNaN;control_current_peakNaN;takeover_speed_peakNaN;recovery_timeNaN;covariance_minInf;covariance_chol_failures0;jacobian_error0;state_is_finite1;%% 理想有编码器电气台架机械转速已知只研究电气参数speed_known9012*sin(2*pi*2*time);angle_knowncumtrapz(time,pole_pairs*speed_known);id_reference1.2*sin(2*pi*19*time)0.7*sin(2*pi*43*time);iq_reference2.51.1*sin(2*pi*17*time)0.7*sin(2*pi*31*time);resistance_trueRs*ones(1,sample_count);flux_truepsi_f*ones(1,sample_count);Ld_trueLd*ones(1,sample_count);Lq_trueLq*ones(1,sample_count);flux_truepsi_f*(1-0.18*(1tanh((time-0.45)/0.07))/2);current_truezeros(2,sample_count);current_true(:,1)[0;2.5];voltage_dqzeros(2,sample_count);current_integralszeros(2,1);fork2: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);endvoltage_dq(:,end)voltage_dq(:,end-1);current_dq_meascurrent_true0.04*randn(2,sample_count);完整代码⬇️如需帮助或有滤波相关的MATLAB代码定制需求可从个人主页左侧联系我

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑