交流电机直接转矩控制仿真设计

发布于:2022-11-28 ⋅ 阅读:(351) ⋅ 点赞:(0)

目 录
摘 要 I
Abstract II
第1章 绪论 1
1.1 选题背景及意义 1
1.2 研究现状及发展趋势 1
1.2.1直接转矩控制的现状及发展趋势 1
1.2.2目前的热点研究问题及解决方法 2
1.3 研究内容及章节安排 3
第2章 直接转矩控制系统理论 4
2.1 概述 4
2.2 三相交流电动机的数学模型 5
2.3 逆变器的数学模型与电压空间矢量 7
2.4 直接转矩控制系统的组成 9
2.5 磁链调节 11
2.6 转矩调节 12
2.7 空间电压矢量对定子磁链和转矩的影响 13
2.7.1 空间电压矢量对定子磁链的影响 13
2.7.2 空间电压矢量对电磁转矩的影响 15
第3章 直接转矩控制系统的MATLAB仿真 17
3.1三相交流电机及PWM控制模块仿真 17
3.2三相变换 18
3.3转速调节器 19
3.4定子磁链的计算和转矩计算模块 20
3.5空间电压矢量的选择模块 20
第4章 仿真结果及分析 23
第5章 工作总结与展望 25
5.1 总结 25
5.2 展望 25
致 谢 26
参考文献 27
1.2.2目前的热点研究问题及解决方法
三相交流电机直接转矩控制计算方便,控制结构简单,动态性能好。但在低速运行时,存在一些问题,这些问题成为目前DTC研究的热点。主要体现在以下两方面:
(1)低速时,由于定子电阻的变化带来的一系列问题。主要表现在定子电流和磁链的畸变非常严重。
主要解决方法:
(1.1)采用u—n模型。使用电流PI调节器,强迫电机模型电流和实际电机电流相等,精度大大提高,但结构比较复杂。
(1.2)模糊定子电阻辨识器(FLI),以定子磁链大小和相角误差作为输入,通过推论和解模,对定子电阻进行辨识御。
(2)低速时,转矩脉动、死区效应、开关频率问题。
主要解决方法:
(2.1)使用改进的开关状态表,改进控制参数与开关量的关系,使之产生更优的控制电压波形。
(2.2)运用Fuzzy PI转矩控制器代替传统的控制方法,即引入模糊控制和智能控制,用软件来解决转矩脉动问题。
(2.3)引入模糊控制方法,对转速进行辨识,从而得到稳定的开关频率并降低转矩脉动。
1.3 研究内容及章节安排
本文主要研究和设计了三相交流电动机按定子磁链控制的直接转矩控制系统。首先阐述了三相交流电动机直接转矩控制系统的基本原理。通过了解定子电压矢量对定子磁链与电磁转矩的控制作用,以及对定子磁链和转矩计算模型的学习,利用Matlab/Simulink搭建直接转矩控制系统仿真模型,对系统进行仿真,验证理论的正确性和可行性。
本文的主要内容如下:
第 1 章为绪论部分,阐述了电机调速技术的发展概况,以及直接转矩控制的发展现状,提出三相交流电机的直接转矩控制理论以及目前的热点研究问题。最后论述论文研究的内容。
第 2 章阐述课题设计的主要思想和直接转矩控制系统的基本原理。本章首先给出了最后搭建的仿真模型,介绍了三相交流电动机的数学模型,逆变器的数学模型和电压空间矢量。然后再对直接转矩控制系统的各部分模块作了理论的描述和分析,说明了设计的理论依据。
第3章利用 Matlab软件的Simulink模块对直接转矩控制系统进行仿真,针对直接转矩控制系统的各个组成环节分别建立仿真模型,构建直接转矩控制系统。
第4章对仿真的结果进行分析,并对搭建的直接转矩控制系统进行简单评价。

function [sys,x0,str,ts] = cilian(t,x,u,flag)
%SFUNTMPL General M-file S-function template
%   With M-file S-functions, you can define you own ordinary differential
%   equations (ODEs), discrete system equations, and/or just about
%   any type of algorithm to be used within a Simulink block diagram.
%
%   The general form of an M-File S-function syntax is:
%       [SYS,X0,STR,TS] = SFUNC(T,X,U,FLAG,P1,...,Pn)
%
%   What is returned by SFUNC at a given point in time, T, depends on the
%   value of the FLAG, the current state vector, X, and the current
%   input vector, U.
%
%   FLAG   RESULT             DESCRIPTION
%   -----  ------             --------------------------------------------
%   0      [SIZES,X0,STR,TS]  Initialization, return system sizes in SYS,
%                             initial state in X0, state ordering strings
%                             in STR, and sample times in TS.
%   1      DX                 Return continuous state derivatives in SYS.
%   2      DS                 Update discrete states SYS = X(n+1)
%   3      Y                  Return outputs in SYS.
%   4      TNEXT              Return next time hit for variable step sample
%                             time in SYS.
%   5                         Reserved for future (root finding).
%   9      []                 Termination, perform any cleanup SYS=[].
%
%
%   The state vectors, X and X0 consists of continuous states followed
%   by discrete states.
%
%   Optional parameters, P1,...,Pn can be provided to the S-function and
%   used during any FLAG operation.
%
%   When SFUNC is called with FLAG = 0, the following information
%   should be returned:
%
%      SYS(1) = Number of continuous states.
%      SYS(2) = Number of discrete states.
%      SYS(3) = Number of outputs.
%      SYS(4) = Number of inputs.
%               Any of the first four elements in SYS can be specified
%               as -1 indicating that they are dynamically sized. The
%               actual length for all other flags will be equal to the
%               length of the input, U.
%      SYS(5) = Reserved for root finding. Must be zero.
%      SYS(6) = Direct feedthrough flag (1=yes, 0=no). The s-function
%               has direct feedthrough if U is used during the FLAG=3
%               call. Setting this to 0 is akin to making a promise that
%               U will not be used during FLAG=3. If you break the promise
%               then unpredictable results will occur.
%      SYS(7) = Number of sample times. This is the number of rows in TS.
%
%
%      X0     = Initial state conditions or [] if no states.
%
%      STR    = State ordering strings which is generally specified as [].
%
%      TS     = An m-by-2 matrix containing the sample time
%               (period, offset) information. Where m = number of sample
%               times. The ordering of the sample times must be:
%
%               TS = [0      0,      : Continuous sample time.
%                     0      1,      : Continuous, but fixed in minor step
%                                      sample time.
%                     PERIOD OFFSET, : Discrete sample time where
%                                      PERIOD > 0 & OFFSET < PERIOD.
%                     -2     0];     : Variable step discrete sample time
%                                      where FLAG=4 is used to get time of
%                                      next hit.
%
%               There can be more than one sample time providing
%               they are ordered such that they are monotonically
%               increasing. Only the needed sample times should be
%               specified in TS. When specifying than one
%               sample time, you must check for sample hits explicitly by
%               seeing if
%                  abs(round((T-OFFSET)/PERIOD) - (T-OFFSET)/PERIOD)
%               is within a specified tolerance, generally 1e-8. This
%               tolerance is dependent upon your model's sampling times
%               and simulation time.
%
%               You can also specify that the sample time of the S-function
%               is inherited from the driving block. For functions which
%               change during minor steps, this is done by
%               specifying SYS(7) = 1 and TS = [-1 0]. For functions which
%               are held during minor steps, this is done by specifying
%               SYS(7) = 1 and TS = [-1 1].

%   Copyright 1990-2002 The MathWorks, Inc.
%   $Revision: 1.18 $

%
% The following outlines the general structure of an S-function.
%
switch flag,

  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;

  %%%%%%%%%%%%%%%
  % Derivatives %
  %%%%%%%%%%%%%%%
   

  %%%%%%%%%%
  % Update %
  %%%%%%%%%%

  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3,
    sys=mdlOutputs(t,x,u);

  %%%%%%%%%%%%%%%%%%%%%%%
  % GetTimeOfNextVarHit %
  %%%%%%%%%%%%%%%%%%%%%%%
  case {1,2,4,9}
    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 [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;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed

sys = simsizes(sizes);

%
% initialize the initial conditions
%
x0  = [];

%
% str is always an empty matrix
%
str = [];

%
% initialize the array of sample times
%
ts  = [0 0];

% end mdlInitializeSizes

%
%=============================================================================
% mdlDerivatives
% Return the derivatives for the continuous states.
%=============================================================================
%

% end mdlDerivatives

%
%=============================================================================
% mdlUpdate
% Handle discrete state updates, sample time hits, and major time step
% requirements.
%=============================================================================
%

% end mdlUpdate

%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u)
if(u(1)==0&u(2)==0)sn=1;
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)sa1=0;
else sa1=1;
end
if (b1>0)sb1=0;
else sb1=1;
end
if(c1>0)sc1=0;
else sc1=1;
end
sn=sa1+2*sb1+4*sc1;
end

% k=sqrt(u(1)*u(1)+u(2)*u(2));
% 
% 
% if(u(1)>0)
%     if((-k)<=u(2)<=(-k/2))sn=6;
%     elseif((-k/2)<u(2)<k/2)sn=1;
%     elseif(k/2<=u(2)<=k)sn=2;   
%     end
% elseif(u(1)<0)
%     if(-k<u(2)<=(-k/2))sn=5;
%     elseif((-k/2)<u(2)<k/2)sn=4;
%     elseif(k/2<=u(2)<k)sn=3;
%     end
% elseif(u(1)==0)
%     if(u(2)>0)sn=2;
%     elseif(u(2)<0)sn=6;
%   end
%     else sn=1;  
% end
% %     
% % elseif(u(1)==0&u(2)>0)sn=2;
% % elseif(u(1)==0&u(2)<0)sn=5;
% %     else sn=1;   


% if(u(1)>0&(-(sqrt(3)))<=(u(2)/u(1))<sqrt(3))sn=1;
% elseif(u(1)>0&(sqrt(3)<=(u(2)/u(1))))sn=2;
% elseif(u(1)>0&((u(2)/u(1))<(-sqrt(3))))sn=6;
%     
% elseif(u(1)<0&((-sqrt(3))<=(u(2)/u(1))<sqrt(3)))sn=4;
% elseif(u(1)<0&((-sqrt(3))<=(u(2)/u(1))))sn=5;
% elseif(u(1)<0&((u(2)/u(1))<(-sqrt(3))))sn=3;
%   
% elseif(u(1)==0&u(2)>0)sn=3;
% elseif(u(1)==0&u(2)<0)sn=6;
% elseif(u(1)==0&u(2)==0)sn=1;
%     
% elseif(u(2)==0&u(1)>0)sn=1;
% elseif(u(2)==0&u(1)<0)sn=4;
% elseif(u(2)==0&u(1)==0)sn=4;
% end
sys=[sn]
%=============================================================================
% mdlGetTimeOfNextVarHit
% Return the time of the next hit for this block.  Note that the result is
% absolute time.  Note that this function is only used when you specify a
% variable discrete-time sample time [-2 0] in the sample time array in
% mdlInitializeSizes.
%=============================================================================
%

% end mdlGetTimeOfNextVarHit

%
%=============================================================================
% mdlTerminate
% Perform any end of simulation tasks.
%=============================================================================
%
% end mdlTerminate

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到