概述
Simulink中已知PMSM转子位置计算转子速度
计算原理
此模块常用于转子位置已知前提下,用于求解转子速度。此模块计算原理利用了简单的微积分知识,其数学式可表述如下:
v
[
k
]
=
θ
[
k
]
−
θ
[
k
−
1
]
T
s
color{red} v_{[k]}=frac {theta_{[k]}-theta_{[k-1]}} {T_s}
v[k]=Tsθ[k]−θ[k−1]
式中:
k
k
k表示第
k
k
k个采样时刻(当前采样时刻),
k
−
1
k-1
k−1表示第
k
−
1
k-1
k−1个采样时刻(上一采样时刻),
θ
[
k
]
theta_{[k]}
θ[k]表示
k
k
k时刻(当前采样时刻)的转子位置,
θ
[
k
]
theta_{[k]}
θ[k]表示
k
−
1
k-1
k−1时刻(上一采样时刻)的转子位置,
v
[
k
]
v_{[k]}
v[k]表示
k
k
k时刻(当前采样时刻)的转子速度,
T
s
T_s
Ts表示采样时间。
从mat文件加载theta数据
从mat文件中加载theta数据至工作区,Simulink中使用From worksapce 模块加载工作区的theta数据。mat文件中的theta数据加载至工作区间的实现代码如下:
% This code is used for load theta from .mat file.
clear;clc
load('SIM_IPMSM_FOC_theta_data_new.mat')
theta.signals.values = data{14}.Values.data(1:3000000,1);
Fs=1000000;
%离散系统采样频率,更改采样频率需赋值
Ts = 1/Fs;
L = size(theta.signals.values,1);
%查询size(ia.signals.values)第一个维度的长度,即数据的个数(长度)
t = (0:L-1)*Ts;
theta.time = t;
速度计算代码
unit delay实现(memory实现与此相同,unit delay换成memory即可)
模型截图如下:
function speed_now = fcn(speed_last,position_last,position_now,Ts)
error = position_now-position_last;
if error < -6
error = error + 2*pi;
end
if abs(error) >= 0.04*pi
speed_now = speed_last;
else
speed_now = error/Ts;
end
persistent实现
%--------------------------------------
%Function: This code is used for calculating speed from rotor position
%Author: made by PEZHANG
%Time: 2022.1.3
%--------------------------------------
function speed_now = fcn(position_now,Ts)
persistent speed_last position_last
if isempty(speed_last)
speed_last = 0;
position_last = 0;
end
error = position_now-position_last;
if error < -6
error = error + 2*pi;
end
if abs(error) >= 0.04*pi
speed_now = speed_last;
else
speed_now = error/Ts;
end
speed_last = speed_now;
position_last = position_now;
代码计算预览
参考文献
【1】 https://blog.csdn.net/qq_50632468/article/details/120739136
最后
以上就是欢喜跳跳糖为你收集整理的Simulink中已知PMSM转子位置计算转子速度Simulink中已知PMSM转子位置计算转子速度的全部内容,希望文章能够帮你解决Simulink中已知PMSM转子位置计算转子速度Simulink中已知PMSM转子位置计算转子速度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复