首页/新闻资讯/正文详情

【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接

发布时间:2026/11/4 2:15:05 来源:云帆数科 栏目:资讯中心
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
原创代码包运行成功文章目录程序简介算法与仿真设置结果分析程序特点与适用方向运行结果状态估计误差电压与新息诊断电流观测与估计转速与角度观测命令行输出MATLAB源代码程序简介本程序基于MATLAB搭建永磁同步电机Permanent Magnet Synchronous MotorPMSM仿真模型采用无迹卡尔曼滤波Unscented Kalman FilterUKF实现电机电流、机械转速及转子电角度的联合估计。永磁同步电机具有非线性动态特征传统扩展卡尔曼滤波EKF需要对系统模型进行线性化处理而UKF通过无迹变换Unscented TransformUT传播状态分布无需计算非线性状态方程的雅可比矩阵。本程序重点研究UKF在永磁同步电机状态观测中的应用利用电压、电流量测信息完成状态估计并分析转速变化工况下的估计精度。算法与仿真设置程序采用四维状态模型包括d轴电流、q轴电流、机械角速度和转子电角度。UKF通过生成Sigma点在非线性状态方程中传播各采样点再根据加权统计计算预测状态均值与协方差并结合电流量测完成滤波更新。程序主要包含以下设计Sigma点无迹变换采用缩放无迹变换生成Sigma点完成非线性状态预测及量测更新。转子角度环绕处理对跨越±π边界的电角度进行特殊处理避免角度周期性引起估计误差。电流量测更新利用α-β坐标系下的带噪电流测量对电机状态进行递推估计。滤波数值检查包含无迹变换精度检查、协方差正定性检查及状态数值有效性检查。仿真总时长为1.2秒采样周期为0.1 ms设置转速给定先上升、后下降的变化工况电流测量噪声标准差为0.04 A。结果分析程序主要输出以下结果转速估计结果对比机械转速真实值与UKF估计值观察不同转速工况下的状态跟踪情况。转子电角度估计展示真实电角度与估计电角度的局部曲线分析角度估计精度。状态估计误差绘制转速和电角度估计误差计算相应的均方根误差RMSE。电流滤波结果对比α-β轴真实电流、带噪测量电流和UKF估计电流。电压与新息诊断展示电机实际施加的α-β轴电压及归一化新息平方NIS辅助分析滤波运行情况。程序特点与适用方向本程序使用基础MATLAB函数编写包含完整的PMSM数学模型、磁场定向控制FOC仿真、Sigma点生成、UKF状态预测与量测更新、角度环绕处理及结果可视化过程。电机参数、采样时间、测量噪声、过程噪声协方差及UKF相关参数均可自行修改方便开展不同工况下的仿真测试。适用于永磁同步电机状态观测、无迹卡尔曼滤波、非线性状态估计及转子位置与转速估计等方向的学习和仿真研究也可以作为后续开展EKF与UKF算法对比研究的基础例程。运行结果状态估计误差电压与新息诊断电流观测与估计转速与角度观测命令行输出MATLAB源代码部分代码展示% 转速与角度观测独立MATLAB例程% 2026-10-11/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;ut_error0;state_is_finite1;%% 编码器FOC台架仅负责生成实际电压、电流和物理一致的真值speed_reference8020*(1tanh((time-0.25)/0.035))/2...-10*(1tanh((time-0.85)/0.035))/2;load_true0.35*ones(1,sample_count);state_truezeros(4,sample_count);voltage_abzeros(2,sample_count);plant[0;(0.35B*80)/Kt;80;0.30];state_true(:,1)plant;controller_integralszeros(3,1);iq_referencezeros(1,sample_count);voltage_saturatedfalse(1,sample_count);iq_bias(0.35B*80)/Kt;fork2:sample_count feedback_abcurrent_measurement(plant);[uab,controller_integrals,iq_reference(k-1),voltage_saturated(k-1)]foc_controller(...feedback_ab,plant(4),plant(3),speed_reference(k-1),controller_integrals,Ts,...Rs,Ld,Lq,psi_f,pole_pairs,voltage_limit,current_limit,...Kp_speed,Ki_speed,Kp_d,Ki_d,Kp_q,Ki_q,iq_bias);voltage_ab(:,k-1)uab;plantmotor_truth_step(plant,uab,Ts,Rs,Ld,Lq,psi_f,pole_pairs,J,B,load_true(k-1));state_true(:,k)plant;endvoltage_ab(:,end)voltage_ab(:,end-1);iq_reference(end)iq_reference(end-1);current_ab_true[cos(state_true(4,:)).*state_true(1,:)-sin(state_true(4,:)).*state_true(2,:);...sin(state_true(4,:)).*state_true(1,:)cos(state_true(4,:)).*state_true(2,:)];noise_std0.04*ones(2,sample_count);current_ab_meascurrent_ab_truenoise_std.*randn(2,sample_count);measurement_validtrue(1,sample_count);current_ab_meas(:,~measurement_valid)NaN;%% 状态观测不使用台架的真实转速、真实角度或未知负载state_dimension4;ut_errorcheck_sigma_transform_ukf();assert(abs(wrap_angle((-pi0.01)-(pi-0.01))-0.02)1e-12);filter_count1;state_historyzeros(state_dimension,sample_count,filter_count);nis_historynan(filter_count,sample_count);R_historyzeros(2,sample_count,filter_count);weight_historyones(2,sample_count);innovation_historynan(2,sample_count,filter_count);sigma_speed_historyzeros(filter_count,sample_count);forfilter_index1:filter_count x[0.15;(0.35B*80)/Kt-0.1;85;0.42];Pdiag([0.3^2,0.3^2,12^2,0.18^2]);Qdiag([2e-6,2e-6,2e-3,2e-8]);ifstate_dimension5x[x;0.20];Pblkdiag(P,0.25^2);Qblkdiag(Q,3e-5);endR0.04^2*eye(2);innovation_covarianceR;state_history(:,1,filter_index)x;R_history(:,1,filter_index)diag(R);sigma_speed_history(filter_index,1)sqrt(P(3,3));fork2:sample_count[xp,Pp]motor_predict_ukf(x,P,Q,voltage_ab(:,k-1),Ts,Rs,Ld,Lq,psi_f,pole_pairs,J,B,0.35);ifmeasurement_valid(k)[predicted,Czz,Pxz]current_moments_ukf(xp,Pp);residualcurrent_ab_meas(:,k)-predicted;effective_RR;[x,P,residual,nis_value]state_update_ukf(xp,Pp,current_ab_meas(:,k),effective_R);innovation_history(:,k,filter_index)residual;nis_history(filter_index,k)nis_value;elsexxp;x(4)wrap_angle(x(4));P(PpPp)/2;end[~,chol_flag]chol(P);covariance_chol_failurescovariance_chol_failures(chol_flag~0);covariance_minmin(covariance_min,min(eig(P)));assert(chol_flag0all(isfinite(x)),状态或协方差异常);state_history(:,k,filter_index)x;R_history(:,k,filter_index)diag(R);sigma_speed_history(filter_index,k)sqrt(P(3,3));endendstate_eststate_history(:,:,end);current_est[cos(state_est(4,:)).*state_est(1,:)-sin(state_est(4,:)).*state_est(2,:);...sin(state_est(4,:)).*state_est(1,:)cos(state_est(4,:)).*state_est(2,:)];innovationinnovation_history(:,:,end);nis_valuesnis_history(end,:);speed_truestate_true(3,:);speed_eststate_est(3,:);angle_truestate_true(4,:);angle_eststate_est(4,:);speed_errorspeed_est-speed_true;angle_errorwrap_angle(angle_est-angle_true);evaluationtime0.24;speed_rmsesqrt(mean(speed_error(evaluation).^2));angle_rmse_degsqrt(mean(angle_error(evaluation).^2))*180/pi;peak_speed_errormax(abs(speed_error(evaluation)));valid_evaluationevaluationmeasurement_valid;current_rmsesqrt(mean((current_est(:,valid_evaluation)-current_ab_true(:,valid_evaluation)).^2,all));control_current_peakmax(abs(state_true(2,:)));%% 绘图实际输出的图片Figure保持无水印完整代码https://download.csdn.net/download/callmeup/93707146如需帮助或有滤波相关的MATLAB代码定制需求可从个人主页左侧联系我

相关推荐

图像处理库 libvips:低内存高性能的实战指南
图像处理库 libvips:低内存高性能的实战指南

图像处理库 libvips:低内存高性能的实战指南 【免费下载链接】libvips A fast image processing library with low memory needs. 项目地址: https://gitcode.com/gh_mirrors/li/libvips libvips 是一个用 C 写的高性能图像处理库。它按区域按需处理像素&… · 2026/11/4 2:15:05

Mac韩英切换工具gksdud新手教程:6个实用技巧让输入法切换快人一步
Mac韩英切换工具gksdud新手教程:6个实用技巧让输入法切换快人一步

【免费下载链接】gksdud 빠릿빠릿한 macOS 한영 전환 유틸 项目地址: https://gitcode.com/gh_mirrors/gks/gksdud 点击查看 免费下载 gksdud 是一款专为 macOS 打造的韩英切换工具,无需 Karabiner-Elements、无需复杂配置,一个轻量菜单栏应… · 2026/11/4 2:15:05

如何从白帽角度做 PHP 安全开发:常见漏洞防御清单与 WAF 实战指南
如何从白帽角度做 PHP 安全开发:常见漏洞防御清单与 WAF 实战指南

【免费下载链接】ppts_for_php2017 2017 第三届PHP全球开发者大会PPT/Keynote 项目地址: https://gitcode.com/gh_mirrors/ppt/ppts_for_php2017 点击查看 免费下载 ppts_for_php2017 是 2017 第三届 PHP 全球开发者大会的官方 PPT/Keynote 合集仓库。本文基于其中… · 2026/11/4 2:15:05

生成式推荐:从打分到序列生成的排序模型新范式
生成式推荐:从打分到序列生成的排序模型新范式

从两段式打分到直接生成有序列表,推荐排序这件事正在换一套底层逻辑。我做了几年排序模型,之前一直用GBDT、DNN、双塔这一路判别式思路,直到最近系统性地梳理生成式推荐,才意识到排序模型的天花板可能不在特征和模型结构上&#x… · 2026/11/4 20:54:43

SenseVoiceSmall语音合成模型本地部署实战指南
SenseVoiceSmall语音合成模型本地部署实战指南

1. 项目背景与核心价值 去年在语音合成领域出现了一个很有意思的开源项目SenseVoice,这个由国内团队开发的语音模型因其轻量化和优秀的音质表现吸引了不少开发者的注意。最近他们推出了更小尺寸的SenseVoiceSmall版本,特别适合在消费级硬件上本地部署。我… · 2026/11/4 20:54:43

834真题怎么用:自命题计算机考研数据结构与网络命题逻辑
834真题怎么用:自命题计算机考研数据结构与网络命题逻辑

简介:面向报考华中科技大学计算机相关专业、备战834计算机综合的考研读者,这份2019年真题PDF适合用于阶段自测、把握命题重点与查漏补缺。题目涉及串的定义与性质、链表与队列操作、数组访问复杂度、二叉树遍历、图遍历与拓扑排序、堆排序、哈夫曼编码&a… · 2026/11/4 20:54:43

三维环境下多无人机协同路径规划与动态避障技术
三维环境下多无人机协同路径规划与动态避障技术

1. 项目背景与核心挑战在复杂三维山体环境中实现多无人机协同飞行与动态避障,是当前无人机自主导航领域的前沿课题。去年参与某山区物资运输项目时,我们团队曾面临5架无人机同时穿越峡谷时突发山体滑坡的紧急情况,传统预设航线的局限性暴露无… · 2026/11/4 20:53:41

WorkBuddy AI 办公助手落地:知识库、提示词与工作流实战
WorkBuddy AI 办公助手落地:知识库、提示词与工作流实战

第一次把 WorkBuddy AI 打开的时候,我把它当成一个会写周报的聊天框,用了两周就丢在一边。后来因为手头同时压着三个项目,会议记录、竞品资料、任务派发全堆在一起,才重新把它捡起来认真配置。这一捡,前后推倒重来至少… · 2026/11/4 20:53:41

SpyGlass L-2016.06功耗估计与降耗规则环境配置指南
SpyGlass L-2016.06功耗估计与降耗规则环境配置指南

简介:《SpyGlass Power Estimation and SpyGlass Power Reduction Rules Reference Guide》是面向集成电路低功耗设计、静态功耗分析与EDA工具使用者的原厂参考指南,可用于在项目早期评估芯片功耗、定位功耗热点,并查阅降功耗规则的适用场景与… · 2026/11/4 20:53:41

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码