【PMSM例程分享】(10)永磁同步电机(PMSM)基于EKF的转速与转子位置观测与控制

原创代码,附下载链接。可联系我获取定制和讲解,请勿翻卖

文章目录

程序简介

本程序基于MATLAB搭建永磁同步电机(PMSM)仿真模型,采用扩展卡尔曼滤波(EKF)实现机械转速与转子电角度的在线估计,并将估计结果引入磁场定向控制(FOC)系统,实现基于状态观测反馈的闭环转速控制。

传统FOC通常依赖编码器提供转子位置和转速反馈,而基于EKF的状态观测方法可以利用电机数学模型、电压及电流测量信息估计相关状态,为减少对机械位置传感器的依赖提供参考。

本程序重点研究从编码器反馈切换至EKF估计反馈后的控制表现,并与编码器反馈控制进行对比。

算法与仿真设置

程序采用四维EKF状态模型,将d轴电流、q轴电流、机械角速度和转子电角度作为估计状态,通过电机模型预测与电流量测更新完成状态估计。

仿真设置两组控制方案:

  1. 编码器反馈控制: 控制器始终使用真实转速和转子角度作为反馈信息。
  2. EKF观测反馈控制: 初始阶段使用编码器反馈,在0.30秒时切换至EKF估计转速和转子角度,实现观测反馈闭环运行。

仿真总时长为1.2秒,设置0.30秒反馈接管,以及0.60秒附近转速给定由80 rad/s向100 rad/s变化的工况。

两组方案采用相同的电机参数、控制器参数及电流测量噪声序列,以比较不同反馈方式下的闭环控制表现。

结果分析

程序主要输出以下结果:

  1. 闭环转速响应: 对比转速给定、编码器反馈及EKF反馈控制下的实际转速。
  2. 转速跟踪误差: 分析不同反馈方式的转速跟踪性能。
  3. 反馈接管过程: 展示0.30秒附近反馈模式切换、速度估计误差和电角度估计误差。
  4. 电流与电磁转矩: 展示dq轴实际电流、电磁转矩及接管瞬态下的q轴电流变化。
  5. 性能评价: 输出转速估计RMSE、电角度估计RMSE、闭环跟踪误差及接管阶段的最大转速偏差等指标。

程序特点

本程序采用在线交替执行的仿真结构,将FOC控制、电机真实状态推进和EKF更新结合起来,而不是仅对预先生成的数据进行离线滤波。

程序包含完整的PMSM数学模型、FOC控制器、EKF状态观测、反馈接管、误差统计与结果可视化功能。

电机参数、控制器参数、反馈切换时间、转速给定及滤波协方差等均可自行修改,适用于PMSM状态观测、EKF反馈控制、无位置传感器控制相关算法及闭环控制性能分析等方向的学习与仿真研究。

运行结果

EKF观测反馈转速控制:

反馈接管与观测误差:

接管局部电流:

观测反馈电流与转矩:

命令行输出

MATLAB源代码

matlab 复制代码
% 观测反馈转速控制:独立MATLAB例程
% 2026-10-09/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;

%% 在线交替控制、真值推进与EKF更新:不是离线数据回放

完整代码:https://download.csdn.net/download/callmeup/93690677

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

相关推荐
Evand J3 天前
【PMSM滤波例程2】PMSM未知负载转矩观测EKF。MATLAB例程(负载增广EKF与实际仿真结果)。附下载链接
开发语言·matlab·电机
Evand J4 天前
【PMSM例程5】永磁同步电机(PMSM)基于增广EKF的永磁磁链在线辨识与电磁转矩估计|磁链变化仿真及误差分析
电机·ekf
Evand J4 天前
【PMSM例程4】PMSM电阻辨识与模型补偿EKF,MATLAB例程。附下载链接,包运行成功
开发语言·matlab·电机·ekf·卡尔曼·pmsm
智能制造爱好者4 天前
传统绕线机适配不了分块定子?有哪些自动化解法
自动化·电机
Evand J9 天前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
Evand J21 天前
【PMSM例程6】永磁同步电机(PMSM)基于增广EKF的d-q轴电感分阶段辨识算法|电机参数估计与误差分析
算法·matlab·电机·ekf
Evand J1 个月前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波
Evand J1 个月前
【电机滤波例程2】负载转矩增广扩展卡尔曼滤波(EKF)原理与MATLAB例程:五维PMSM状态与负载阶跃估计。订阅专栏后可查看完整代码
开发语言·matlab·电机·ekf·卡尔曼滤波
会议咨询1 个月前
2026年物联网、电气与信息经济国际会议(ITEIE 2026)
物联网·电气·信息经济