1.算法仿真效果
matlab2022a仿真结果如下:
2.算法涉及理论知识概要
传统的交-直-交变换器由于存在中间储能 环节,因而动态响应较慢,输入电流中含有大量的 谐波,容易造成对电网的污染,同时也难以实现能 量的双向流动等缺点。交-交矩阵式变换器(Ma trix Converter,MC)体积小、自身结构简单,具有能 量双向流通、输出电流正弦性良好、输入功率因数 可控等特点。永磁同步电机(Permanent Magnet Synchronous Motor,PMSM)以其高效率、高转矩惯 量比、高功率密度和低维护费用等特点,使其在现 代交流调速系统中成为了异步电机强有力的竞争 对手 。国内外许多学者提出了很多关于矩阵式变换器供电的IM的直接转矩控制(Direct Torque Control,DTC)的控制策略,但把MC与永磁同 步电动机DTC相结合的应用研究则相对较少。
矩阵式变换器的换流控制必须严格遵循两个 基本原则:一是三相输入侧任意两相电路没有短 路;二是输出侧任意一相电路没有断路。因为这 两个基本原则的限制,所以在矩阵式变换器一共 允许的27种可能的开关组合中,DTC只可以使用 其中的21种(见表1)。其中|u0|和α 0 分别为对 应开关组合的输出电压矢量在定子静止坐标系中 幅值和辐角;表1中前18种开关组合(分别命名 为+1,-1,+2,-2,…,+9,-9,)均为有两输出 相同时连接到同一输入相上,称为运动矢量。表1 中后3种开关组合均实现了输出三相的短路,输 出电压和输入电流均为零,称为零矢量。
矩阵式变换器的调制策略可以主要分为以下三种:
登录后复制
(1) 直接变换法:直接变换法是通过对输入电压的连续斩波来合成“输出电压”的,它可以分为坐标变换法、谐波注入法、等效电导法及标量法,所有这些方法虽各有一定的优越性,但也存在一定的问题,限制了它们的应用范围。如标量法的输入相电流波形较好,但输出谐波较大。
(2) 电流跟踪法。这种方法将三相输出电流信号与实测的输出电流信号相比较,根据比较结果和当前的开关电源状态决定开关动作,它具有容易理解、实现简单、响应快、鲁棒性好等特点,但也有滞环电流共有的缺点:开关频率不够稳定、谐波随机分布,且输入电流波形不够理想、存在较大的谐波等。
登录后复制
(3) 空间矢量调制技术,又称为间接变换法、交—直—交等效变换法,是基于空间矢量变换的一种方法,它将交—交变换虚拟为交直和直交变换,这样便可采用流行的高频整流和高频PWM波形合成技术,变换器的性能可以得到较大的改善。当然具体实现时是将整流和逆变一步完成的,低次谐波得到了较好的抑制,但控制方案较为复杂,缺少有效的动态理论分析支持。它是在矩阵式变换器中研究较多也是较为成熟的一种控制策略,比较有发展前途。这种调制策略既能控制输出波形,又能控制输入电流波形,可改变输入功率因数,是最具有前途的一种调制策略。
3.MATLAB核心程序
登录后复制
str = [];
ts = [0 0];
function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];
function sys=mdlOutputs(t,x,u)
if u==+1
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=0;
S_Bb=1;
S_Bc=0;
S_Ca=0;
S_Cb=1;
S_Cc=0;
elseif u==-1
S_Aa=0;
S_Ab=1;
S_Ac=0;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=1;
S_Cb=0;
S_Cc=0;
elseif u==+2
S_Aa=0;
S_Ab=1;
S_Ac=0;
S_Ba=0;
S_Bb=0;
S_Bc=1;
S_Ca=0;
S_Cb=0;
S_Cc=1;
elseif u==-2
S_Aa=0;
S_Ab=0;
S_Ac=1;
S_Ba=0;
S_Bb=1;
S_Bc=0;
S_Ca=0;
S_Cb=1;
S_Cc=0;
elseif u==+3
S_Aa=0;
S_Ab=0;
S_Ac=1;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=1;
S_Cb=0;
S_Cc=0;
elseif u==-3
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=0;
S_Bb=0;
S_Bc=1;
S_Ca=0;
S_Cb=0;
S_Cc=1;
elseif u==+4
S_Aa=0;
S_Ab=1;
S_Ac=0;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=0;
S_Cb=1;
S_Cc=0;
elseif u==-4
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=0;
S_Bb=1;
S_Bc=0;
S_Ca=1;
S_Cb=0;
S_Cc=0;
elseif u==+5
S_Aa=0;
S_Ab=0;
S_Ac=1;
S_Ba=0;
S_Bb=1;
S_Bc=0;
S_Ca=0;
S_Cb=0;
S_Cc=1;
elseif u==-5
S_Aa=0;
S_Ab=1;
S_Ac=0;
S_Ba=0;
S_Bb=0;
S_Bc=1;
S_Ca=0;
S_Cb=1;
S_Cc=0;
elseif u==+6
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=0;
S_Bb=0;
S_Bc=1;
S_Ca=1;
S_Cb=0;
S_Cc=0;
elseif u==-6
S_Aa=0;
S_Ab=0;
S_Ac=1;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=0;
S_Cb=0;
S_Cc=1;
elseif u==+7
S_Aa=0;
S_Ab=1;
S_Ac=0;
S_Ba=0;
S_Bb=1;
S_Bc=0;
S_Ca=1;
S_Cb=0;
S_Cc=0;
elseif u==-7
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=0;
S_Cb=1;
S_Cc=0;
elseif u==+8
S_Aa=0;
S_Ab=0;
S_Ac=1;
S_Ba=0;
S_Bb=0;
S_Bc=1;
S_Ca=0;
S_Cb=1;
S_Cc=0;
elseif u==-8
S_Aa=0;
S_Ab=1;
S_Ac=0;
S_Ba=0;
S_Bb=1;
S_Bc=0;
S_Ca=0;
S_Cb=0;
S_Cc=1;
elseif u==+9
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=0;
S_Cb=0;
S_Cc=1;
elseif u==-9
S_Aa=0;
S_Ab=0;
S_Ac=1;
S_Ba=0;
S_Bb=0;
S_Bc=1;
S_Ca=1;
S_Cb=0;
S_Cc=0;
elseif u==0
S_Aa=1;
S_Ab=0;
S_Ac=0;
S_Ba=1;
S_Bb=0;
S_Bc=0;
S_Ca=1;
S_Cb=0;
S_Cc=0;
end
sys = [S_Aa;S_Ab;S_Ac;S_Ba;S_Bb;S_Bc;S_Ca;S_Cb;S_Cc];
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删