资源简介

基于EKF的三相PMSM无传感器矢量控制,根据现代永磁同步电机控制原理及Matlab仿真搭建,仿真模型已通过调试,波形完美,可以作为参考资料

资源截图

代码片段和文件信息

function [sysx0strts] =EKF(txuflag)
% The following outlines the general structure of an S-function.
switch flag
  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0
    [sysx0strts]=mdlInitializeSizes;
  %%%%%%%%%%%%%%%
  % Derivatives %
  %%%%%%%%%%%%%%%

  %%%%%%%%%%
  % Update %
  %%%%%%%%%%
  case 2
    sys=mdlUpdate(txu);    
  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3
    sys=mdlOutputs(txu);
  %%%%%%%%%%%%%%%%%%%%%%%
  % GetTimeOfNextVarHit %
  %%%%%%%%%%%%%%%%%%%%%%%
  case {149}
    sys=[];
  %%%%%%%%%%%%%
  % Terminate %
  %%%%%%%%%%%%%

  %%%%%%%%%%%%%%%%%%%%
  % Unexpected flags %
  %%%%%%%%%%%%%%%%%%%%
  otherwise
    error([‘Unhandled flag = ‘num2str(flag)]);
end

% end sfuntmpl

%=============================================================================
% mdlInitializeSizes
% Return the sizes initial conditions and sample times for the S-function.
%=============================================================================
%
function [sysx0strts]=mdlInitializeSizes

global P0;
sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 4;
sizes.NumOutputs     = 4;
sizes.NumInputs      = 4;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;   

sys = simsizes(sizes);
% initialize the initial conditions
x0  = [0 0 0 0];
P0 = diag([0.1 0.1 0 0]);%P估计初值

% str is always an empty matrix
str = [];
ts  = 1e-6;
% end mdlInitializeSizes
%=======================================================================
% mdlDerivatives
% Return the derivatives for the continuous states.
%=======================================================================
function  sys = mdlUpdate(txu)
    global P0;
    Rs = 2.875;%电阻
    Ls = 0.0085;%电感
    np = 2;%极对数
    J = 0.008;%转动惯量
    flux = 0.3;%磁链
    B1 = 0;%阻尼系数
    Q = diag([0.1 0.1 1 0.01]);
    R = diag([0.2 0.2]);
    T = 1e-6;
    vs_ab = [u(1) u(2)]‘;
    is_ab = [u(3) u(4)]‘;
    H = [1 0 0 0; 0 1 0 0];
    B = [1/Ls 0 0 0; 0 1/Ls 0 0]‘;
    F = [-Rs/Ls 0 flux/Ls*sin(x(4)) flux/Ls*x(3)*cos(x(4));0 -Rs/Ls -...
        flux/Ls*cos(x(4)) flux/Ls*x(3)*sin(x(4)); 0 0 0 0; 0 0 1 0];%雅克比矩阵
    %非线性系统矩阵函数3/2*np^2*flux/J*(x(2)*cos(x(4))-x(1)*sin(x(4)))-B1*x(3)/J
    f1 = [-Rs/Ls*x(1)+flux/Ls*x(3)*sin(x(4));-Rs/Ls*x(2)-flux/Ls*x(3)*cos(x(4)); 0; x(3)];
    
    f2 = diag([1 1 1 1])+T*F;%系统转移矩阵
    X_pred = x+T*(f1+B*vs_ab);%系统转移矩阵
    Y_pred = H*X_pred;%测量预测值
    Y = is_ab;
    P_pred = f2*P0*f2‘+Q;%预测值
    K = P_pred*H‘*inv(H*P_pred*H‘+R);%增益
    sys = X_pred+K*(Y-Y_pred);
    P0 = P_pred-K*H*P_pred;%估计值    
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(txu)

sys=x;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2970  2018-10-31 19:04  PMSM-EKF\EKF.m

     文件      40210  2018-11-02 00:01  PMSM-EKF\PMSM_EKF.slx

     目录          0  2018-11-02 00:04  PMSM-EKF

----------- ---------  ---------- -----  ----

                43180                    3


评论

共有 条评论