用最快的方法在 simulink 里搭建一个基础的直接转矩控制模型,不熟悉的话可以参考下,有空更新每个步骤细节和其他实现方法,创作不宜,记得点赞收藏。

说明:1.仿真搭建参考袁雷的仿真书籍(s-function代码实现)和学长提供的模型(纯模块实现)

2. 有的仿真起步时会出现反转的情况,后面给出了说明

1 直接转矩控制框图

话不多说,先看框图

2 直接转矩控制控制simulink仿真模型

直接转矩的原理这里不详细概述了,涉及到的东西太多,只做简单说明,有空专门针对每个模块进行说明,根据框图中的模块,直接转矩控制在Simulink模型和 model 里需要的模型如下:

下面对每个模块的参数进行说明,也可以根据实际需要自行设置修改

2.1 Powergui和仿真设置

选择模块列表:

找到对应模块:(后面都是通过模型名找到对应的模型图双击或者拖到仿真界面上)

习惯了用定步长,这里设置可选

2.2 功能模块

永磁同步电机模块 (Permanent MagnetSynchronous Machine):

磁链和转矩计算模块中要注意的是电机初始状态为0,其磁链在alpha上的分量须加上转子磁链,不加会导致扇区判断错误,也就是没加的情况下电机开始出现反转的原因。

扇区判断:(代码实现或者模块实现2选1)

1)(S-Function)代码实现

function[sys,x0,str,ts]=sector(t,x,u,flag)
switch flag,
  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  %%%%%%%%%%%%%%%
  % Derivatives %
  %%%%%%%%%%%%%%%
  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3,
    sys=mdlOutputs(t,x,u);
  %%%%%%%%%%%%%%%%%%%%%%%
  % GetTimeOfNextVarHit %
  %%%%%%%%%%%%%%%%%%%%%%%
  case {2,4,9}
    sys=[];
  otherwise
    error(['Unhandled flag =',num2str(flag)]);
function [sys,x0,str,ts]=mdlInitializeSizes
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);
x0  = [];
str = [];
ts = [-1 0];
u(1) = 0.175;
function sys=mdlOutputs(t,x,u)
if(u(1)==0)
    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
if b1>0
if c1>0
N=4*a+2*b+c;
    sys = N;

2)模块实现

这里每个模块具体就不介绍了,点开试一试就知道了。

磁链计算:

根据转矩磁链和扇区计算输出脉冲:( 代码和模块2选1 )

1)代码实现:

对应参数设置如下

S-function代码如下

function[sys,x0,str,ts]=PMSM_switch(t,x,u,flag)
switch flag,
    case 0,
     [sys,x0,str,ts]=mdlInitializeSizes;
    case 3,
     sys=mdlOutputs(t,x,u);
       case {2,4,9}
    sys=[];
  otherwise
    error(['Unhandled flag =',num2str(flag)]);
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [];
str = [];
ts = [-1 0];
function sys=mdlOutputs(t,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];
%V_Table=[5 6 1 2 3 4;3 4 5 6 1 2;6 1 2 3 4 5;2 3 4 5 6 1];
x=2*u(1)+u(2)+1;
sys=V_Table(x,u(3));
                    用最快的方法在simulink里搭建一个基础的直接转矩控制模型,不熟悉的话可以参考下,有空更新每个步骤细节和其他实现方法,创作不宜,记得点赞收藏。说明:1.仿真搭建参考袁雷的仿真书籍(s-function代码实现)和学长提供的模型(纯模块实现)     2. 有的仿真起步时会出现反转的情况,后面给出了说明1 直接转矩控制框图话不多说,先看框图2 直接转矩控制控制simulink仿真模型直接转矩的原理这里不详细概述了,涉及到的东西太多,只做简单说明,......
				
导读:本期文章主要介绍永磁同步电机直接转矩控制,通过MATLAB仿真建模来学习DTC的基本原理,后期会介绍基于两电平三电平SVPWM改进的PMSM直接转矩控制。 如果需要本文的仿真模型,关注微信公众号:浅谈电机控制,获取。...
永磁同步电机直接转矩控制(二)一一一传统DTC仿真结果及分析 目录永磁同步电机直接转矩控制(二)一一一传统DTC仿真结果及分析0研究背景1直接转矩控制仿真模型2控制系统仿真模型的搭建2.1 磁链的估算模型及仿真图2.2 扇区判断及开关表3仿真结果及分析3.1 转矩滞环环宽对转矩脉动的影响3.2 转矩滞环环宽对转矩脉动的影响3.2 不同PI参数对系统性能的影响4总结 0研究背景 写在前面:  1.本代码基于MATLAB2019a版本,低版本或者不同版本可能会报错,mdl文件或slx文件打开可能会失败
本文章会汇总Matlab/Simulink仿真问题和相关技巧汇总。 如果有问题可以查询本文。有相关问题可以私信我,给你把你们的问题同步更新。wx:shadowknight007 本文章会持续更新。
永磁同步电机PMSM)是一种无刷直流电机,具有高效率、高功率密度和高控制精度等优点,因此在工业和家庭电器等领域得到广泛应用。Simulink是一种MATLAB基于模型的设计工具,可以用于可视化建模、仿真和分析控制系统。 永磁同步电机的控制很重要,Simulink可以用来建立仿真模型,从而实现高精度的运动控制。具体而言,可以采用矢量控制算法,通过将永磁同步电机转子坐标系变换为定子坐标系,实现包括功率控制、速度控制和位置控制等方案。同时,还可以利用PID控制器,对电机进行精度控制,实现高效的转速控制和位置控制。 在Simulink的建立仿真模型中,需要涉及到永磁同步电机的电动力学方程、坐标变换方程、速度控制和位置控制等方面,因此需要掌握一定的电机控制理论知识。同时,还需要了解仿真软件,掌握基本的仿真配置和参数设置等技能。在建立模型后,可进行仿真、实验和分析,对电机控制算法进行优化和验证,在目标实际操作环境下获得更好的控制效果。 总之,永磁同步电机Simulink控制仿真模型是实现高精度转速控制和位置控制的基础,需要深入理解永磁同步电机原理、掌握电机控制理论和仿真工具,通过仿真、实验和分析实现优化和验证。