永磁同步电机的直接转矩控制一一一传统DTC仿真结果分析

Posted 昔时扬尘处

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了永磁同步电机的直接转矩控制一一一传统DTC仿真结果分析相关的知识,希望对你有一定的参考价值。

永磁同步电机的直接转矩控制(二)一一一传统DTC仿真结果及分析

0研究背景


写在前面:
 1.本代码基于MATLAB2019a版本,低版本或者不同版本可能会报错,mdl文件或slx文件打开可能会失败;
 2.本博客附上仿真模型并详细介绍各个部分的搭建,如果转载请注明出处;
 3.如果本博客恰巧与您的研究有所关联,欢迎您的咨询qq1366196286


1直接转矩控制的仿真模型

   本博客是基于上一篇博客继续进行的研究,并针对转矩滞环环宽、PI控制器参数等对直接转矩控制系统的影响进行探究。

  其中,上一篇博客直接转矩控制的仿真模型,如图2所示。
在这里插入图片描述
图2 永磁同步电机的直接转矩控制Simulink仿真图

永磁同步电机的直接转矩控制(一)一一一DTC仿真模型的搭建

  此外,与上一篇博客不同的是,DTC仿真模型的搭建中磁链估算采取不同的方式进行搭建、扇区判断及开关表可采取s函数进行编写,进而得到另外一种Simulink仿真模型,如图3所示。

在这里插入图片描述
图3 永磁同步电机的直接转矩控制Simulink仿真图(另外一种传统的DTC)

2控制系统仿真模型的搭建

   图3与上一篇博客所搭建的仿真模型图2所不同的有:
   1.转矩直接通过对电机输出端进行采样,而图2是采取转矩进行估算的;
   2.图3中磁链估算是通过a-β轴的分量,而图2中磁链估算是通过d-q轴的分量并经过坐标变换所得;
   3.图3中扇区判断是通过自定义s函数来实现的,而图2中扇区判断是通过Simulink来实现;
   4.图3中开关表是通过自定义s函数来实现的,而图2中扇区判断是通过Simulink来实现;
   5.转速环所设定的参考转速值是依据电机的额定转速来给定,一般测试情况是额定转速下测电机的输出转矩,或是电机在额定转矩下的转速突变情况以及额定工况下的电机性能测试等。图3中参考转速是600 r/min;图2中参考转速是1000 r/min。(一般是在额定转速运行或以下运行)。此外,所施加的负载转矩大小是依据电机的额定转矩和过载能力来给定的,而这些是基于电机的结构和本体参数设计来确定的。
   本博客的仿真结果及分析是基于图2,即在上一篇博客永磁同步电机的直接转矩控制(一)一一一DTC仿真模型的搭建的基础上进行仿真研究的。

2.1 磁链的估算模型及仿真图

在这里插入图片描述

在这里插入图片描述
图4 磁链估算模型的仿真Simulink图

在这里插入图片描述
图5 a-β轴上的合成圆形磁链

2.2 扇区判断及开关表

  扇区判断及开关表的机理同上一篇博客,图3在这里采取的s函数进行编写。

  扇区判断sector.m

function [sys,x0,str,ts] = sector(t,x,u,flag)

% The following outlines the general structure of an S-function.
%
switch flag,   %判断flag,看当前处于哪个状态

  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0,
  [sys,x0,str,ts]=mdlInitializeSizes; 
  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3,
    sys=mdlOutputs(t,x,u);
  case {2,4,9},
    sys=[];

  %%%%%%%%%%%%%%%%%%%%
  % 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 [sys,x0,str,ts]=mdlInitializeSizes

%
% call simsizes for a sizes structure, fill it in and convert it to a
% sizes array.
%
% Note that in this example, the values are hard coded.  This is not a
% recommended practice as the characteristics of the block are typically
% defined by the S-function parameters.
%
sizes = simsizes; %用于设置参数的结构体用simsizes来生成

sizes.NumContStates  = 0; %连续状态变量的个数
sizes.NumDiscStates  = 0; %离散状态变量的个数
sizes.NumOutputs     = 1; %输出变量的个数
sizes.NumInputs      = 2; %输入变量的个数
sizes.DirFeedthrough = 1; %是否存在反馈
sizes.NumSampleTimes = 1; %采样时间个数,至少是一个

sys = simsizes(sizes); %设置完后赋给sys输出
x0  = [];  %状态变量设置为空,表示没有状态变量
str = [];
ts  = [-1 0]; %采样周期设为0表示是连续系统,-1表示采用当前的采样时间

% end mdlInitializeSizes

%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u)
if(u(1)==0) 
    N=1;    %如果输入值为0,电压参考量在第一扇区
else
    a1=u(1); 
    b1=u(1)*(-0.5)+(sqrt(3)/2)*u(2); %%根据文章的计算公式得到
    c1=u(1)*(-0.5)-(sqrt(3)/2)*u(2);
    if a1>0
        a=0;
    else
        a=1;
    end
    if b1>0
        b=0;
    else
        b=1;
    end
    if c1>0
        c=0;
    else
        c=1;
    end
    N=4*a+2*b+c; %扇区计算
end
    sys=N;

% end mdlOutputs

在这里插入图片描述
图6 PWM生成的仿真图

开关表PMSM_switch.m

function [sys,x0,str,ts] = PMSM_switch(t,x,u,flag)

% The following outlines the general structure of an S-function.
%
switch flag, %判断flag,看当前处于哪个状态

  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3,
    sys=mdlOutputs(t,x,u);
  case {2,4,9},
    sys=[];

  %%%%%%%%%%%%%%%%%%%%
  % Unexpected flags %
  %%%%%%%%%%%%%%%%%%%%
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end

%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts]=mdlInitializeSizes

%
% call simsizes for a sizes structure, fill it in and convert it to a
% sizes array.
%
% Note that in this example, the values are hard coded.  This is not a
% recommended practice as the characteristics of the block are typically
% defined by the S-function parameters.
%
sizes = simsizes;%用于设置参数的结构体用simsizes来生成

sizes.NumContStates  = 0;%连续状态变量的个数
sizes.NumDiscStates  = 0; %离散状态变量的个数
sizes.NumOutputs     = 1; %输出变量的个数 
sizes.NumInputs      = 3; %输入变量的个数
sizes.DirFeedthrough = 1; %是否存在反馈
sizes.NumSampleTimes = 1; %采样时间个数,至少是一个

sys = simsizes(sizes);%设置完后赋给sys输出
x0  = [];%状态变量设置为空,表示没有状态变量
str = [];
ts  = [-1 0]; %采样周期设为0表示是连续系统,-1表示采用当前的采样时间

% end mdlInitializeSizes

%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(~,x,u)
 %%根据文章的表格计算得到
V_Table=[2 4 6 1 3 5;4 1 5 2 6 3;3 6 2 5 1 4 ;5 3 1 6 4 2];
x=2*u(1)+u(2)+1;
sys=V_Table(x,u(3));

% end mdlOutputs

3仿真结果及分析

3.1 转矩滞环环宽对转矩脉动的影响

   当转矩环的滞环环宽给定[-0.1 0.1]N·m,转矩脉动如图7(a)所示;当转矩环的滞环环宽给定[-0.01 0.01]N·m,转矩脉动如图7(b)所示。

在这里插入图片描述
图7(a) 转矩滞环环宽对转矩脉动的影响[-0.1 0.1]

在这里插入图片描述

图7(b) 转矩滞环环宽对转矩脉动的影响[-0.01 0.01]

   图7反映了转矩滞环宽度对转矩脉动的影响,减小滞环宽度,有利于降低转矩脉动幅度

3.2 不同工况下对控制系统性能影响

   图8和图9分别是负载和给定转速突变时的转矩和转速波形,其结果表明系统在阶跃变化时能够自动保持稳定运行状态。

在这里插入图片描述

图8 系统的转速响应

在这里插入图片描述

图9 系统的转矩响应

3.3 不同PI参数对系统性能的影响

   表3是通过仿真研究得到的不同PI参数对系统性能的影响。

在这里插入图片描述

4总结

   利用MATLAB/Simulink 建立永磁同步电机直接转矩控制系统,可以从理论上研究控制系统的性能及其相关因素的影响,仿真结果和分析所得到的结论是可信的。在建立实际系统之前,通过仿真研究对控制系统进行充分论证,可以提高研究效率。后续博客将滑模控制、模糊控制以及自适应控制等先进控制方法改进到传统的DTC中,以提升系统的控制性能。

以上是关于永磁同步电机的直接转矩控制一一一传统DTC仿真结果分析的主要内容,如果未能解决你的问题,请参考以下文章

永磁同步电机的直接转矩控制一一一滑模控制器改进DTC

永磁同步电机的直接转矩控制一一一基于滑模转速控制器的DTC

DTC

基于simulink的永磁无刷直流电机控制系统的仿真研究

基于PARK-Clark的双闭环PI的永磁同步电机SVPVM控制系统simulink仿真

分数阶pid控制和矢量控制永磁电机