
附完整代码的下载链接
文章目录
总体介绍
本程序基于永磁同步电机(Permanent Magnet Synchronous Motor, PMSM)数学模型,采用增广扩展卡尔曼滤波(Extended Kalman Filter, EKF)实现机械转速、转子电角度及未知负载转矩的联合估计。程序通过磁场定向控制(FOC)模拟电机运行过程,设置不同负载阶跃工况,利用电压和电流信息完成状态预测与量测更新,并绘制转速、角度、负载转矩及估计误差曲线。同时输出均方根误差(RMSE)等性能指标。电机参数、负载变化、控制器参数及量测噪声均可自行调整,便于开展不同工况下的状态观测与算法性能分析。
运行结果
状态估计误差

电压与新息诊断

电流观测与估计

负载转矩观测

转速与角度观测

命令行输出

MATLAB源代码
部分代码展示:
matlab
% 2026-10-09/Ver1,作者:matlabfilter,V同号,可获取代码定制、讲解等
clear; clc; close all;
% 固定伪随机数种子,使带噪电流测量在重复运行时可复现。
rng(0);
%% 共用教学参数与单位:不将本例解释为Word中15 kW电机的实机验证
% 下列参数均采用国际单位制(SI);如调整电机或工况,应成组检查
% 电阻、电感、磁链、极对数、转动惯量、阻尼及控制器增益。
% Rs:定子相电阻(Ω);Ld/Lq:d/q轴电感(H);psi_f:永磁体磁链(Wb)。
% Ld与Lq不相等,模型保留由凸极效应产生的电磁转矩项。
Rs=0.45; Ld=3e-3; Lq=3.6e-3; psi_f=0.075;
% pole_pairs:电机极对数;J:转动惯量(kg·m^2);
% B:粘性摩擦系数(N·m·s/rad)。注意极对数不是极数。
pole_pairs=4; J=2e-3; B=5e-4;
% Ts:积分和滤波离散步长(s);simulation_time:总仿真时间(s)。
% 当前步长为0.1 ms、总时长1.2 s。
Ts=1e-4; simulation_time=1.2;
% dc_voltage:直流母线电压(V);voltage_limit:dq电压矢量幅值限制;
% current_limit:q轴电流指令的绝对值限制(A)。
dc_voltage=120; voltage_limit=dc_voltage/sqrt(3); current_limit=10;
% 外部速度PI控制器的比例、积分增益:由速度误差生成q轴电流指令。
Kp_speed=0.25; Ki_speed=4.0;
% 电流控制目标带宽(rad/s),后续用电机电感与电阻确定电流PI增益。
current_bandwidth=1200;
% d轴/q轴电流比例增益;其数值依据各轴电感和目标带宽计算。
Kp_d=Ld*current_bandwidth; Kp_q=Lq*current_bandwidth;
% d轴/q轴电流积分增益;与比例增益共同决定电流闭环响应。
Ki_d=Rs*current_bandwidth; Ki_q=Rs*current_bandwidth;
% time:包含首末时刻的离散时间轴;sample_count:仿真样本总数。
time=0:Ts:simulation_time; sample_count=numel(time);
% Kt:由永磁磁链产生的电磁转矩系数;
% Kr:磁阻转矩系数,转矩模型为 Kt*iq + Kr*id*iq。
Kt=1.5*pole_pairs*psi_f; Kr=1.5*pole_pairs*(Ld-Lq);
% 维护用汇总也是数值向量;各指标仍以独立、有意义的变量保留。
% 指标变量先用NaN占位:本例没有计算的指标保持NaN,输出时跳过。
% NaN不应理解为算法失败,也不应将这些占位指标视为实际实验结果。
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;
% covariance_min:历次后验协方差最小特征值中的最小值;
% covariance_chol_failures:Cholesky分解失败累计次数,用于正定性检查。
recovery_time=NaN; covariance_min=Inf; covariance_chol_failures=0;
% jacobian_error:解析雅可比与数值差分雅可比的相对差异;
% state_is_finite:原程序预设的汇总标记,另有assert逐次检查状态数值。
jacobian_error=0; state_is_finite=1;
%% 编码器FOC台架:仅负责生成实际电压、电流和物理一致的真值
% FOC = Field-Oriented Control(磁场定向控制)。
% 这一部分提供独立仿真"台架":控制器使用真值转速/角度反馈,
% 通过电机动力学模型生成电压、电流和负载阶跃下的状态真值。
% EKF只使用台架产生的电压及带噪电流,不会直接使用这些真值状态。
完整代码:
https://download.csdn.net/download/callmeup/93681198
如需帮助,或有滤波相关的MATLAB代码定制需求,可从个人主页左侧联系我