【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接

附完整代码的下载链接

文章目录

总体介绍

本程序基于永磁同步电机(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代码定制需求,可从个人主页左侧联系我

相关推荐
云边云科技_云网融合1 小时前
面向汽车零部件制造业场景的解决方案 | 70 秒:一台车下线的时间里,藏着五张网
开发语言·汽车·php
will_net1 小时前
apollo 站点部署&C#接入
开发语言·c#·apollo
晗夜未央2 小时前
任务队列反复失败,先分清重试、阻塞和结果待核对
开发语言·javascript
熊猫钓鱼>_>2 小时前
四种书签,一条时间线:一个读书 App 的记忆颗粒与它的边界案例【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙pc
努力努力再努力wz3 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
飞浪纪元[FWC–FE]3 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt
Wang's Blog3 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我123454 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
架构师伯子明4 小时前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习