m基于simulink和S函数实现SVPWM永磁同步电机双PI转矩脉动控制系统仿真

发布时间 2023-04-23 19:40:23作者: 我爱C编程

1.算法仿真效果

matlab2022a仿真结果如下:

 

 

 

 

 

2.算法涉及理论知识概要

        永磁同步电机(PMSM)基本结构为定子、转子和端盖。其中转子磁路结构是永磁同步电机(PMSM)与其它电机最主要的区别,其在很大程度上决定了永磁同步电机(PMSM)的实际性能指标[12,13,14]。通常情况下,永磁同步电机(PMSM)的转子磁路结构分为:凸装式、嵌入式和内置式三种结构。目前为止,由于永磁同步电机(PMSM)优越的性能,其越来越受到国内外专家学者的重视,并广泛应用到了工业领域的各个方面。通常在建立永磁同步电机(PMSM)的时候,需要将一些实际因素进行简化,比如:忽略铁心饱和效应;不记涡流和磁滞损耗;转子上没有阻尼绕组,永磁体也没有阻尼作用;反电动势是正弦的。此外,由于永磁同步电机(PMSM)的的转子在磁、电结构上的不对称性,导致了转子瞬间位置的非线性,从而增加了其解析难度。因此,我们需要使用矢量控制技术来解决这个问题,通过坐标变化,将变量变为常量,将变系数变为常系数,从而简化解析复杂度。

 

2.1 PMSM的坐标变换

       该坐标轴线放在定子上,α轴与A轴重合,β轴超前α轴90°,如图所示,α-β坐标系中的电压和电流通过简单线性变换就可以直接从实际测量的三相电压和电流得到。一个旋转矢量从三相定子坐标系变换到α-β坐标系,又称3/2变换,如下式:

 

 

 

 

       该坐标系为同步旋转坐标系,q轴(交轴)超前d轴(直轴)90,如图2-4所示,若把d轴的取向与转子永磁总磁链方向一致,则成为转子磁场定向坐标系[23]

 

 

 

2.2基于SVPWM永磁同步电机的控制策略

       SVPWM控制技术,其本质上是为了使电机能够获得幅度较为恒定的圆形磁场,即通常所说的正弦磁通。通过三相对称正弦波电压供电时的理想圆形磁通轨迹为基准用三相逆变器不同的开关模式产生的实际磁通去逼近基准磁通圆,使得磁链的轨迹靠电压空间矢量相加得到,从而达到较高的控制性能。本课题所研究的基于SVPWM的控制系统的结构如下图所示:

 

 

 

       从图可以看到,整个SVPWM控制系统,主要包括两个环路,外面的为速度控制环,里面的为电流控制环,串联的两个闭环分别实现电机的速度和电流控制。转速和电流调节器采用限积分饱和的PI控制器。其中,转子的位置信息则通过磁编码器以串口模式发送到其余模块使用,根据实际需要设置速度指令值,该指令值并与实际反馈来的速度比较后,作为速度控制器的输入。速度控制器的输出信号是电流控制器的输入,而实际的电流值idiq值经ClarkPark变换后得到。这样电流指令值与实际差值经PI调节器后输出的是电压指令值,再经反Park变换和SVPWM模块产生相应的脉冲驱动信号送给IPM模块产生需要的电压,进而电机会产生相应的转矩而旋转。速度环的主要作用是提高系统的抗扰性能和动态特性,抑制速度波动。

 

2.3空间矢量扇区判断

       在一个经典的SVPWM控制系统中,的三相电压型逆变器驱动电路通过控制6IGBT(T1~T6)的开关状态及其开关顺序,通过这个操作之后,可以使电压空间矢量运行轨迹为圆形,从而大大降低了电流谐波 [37]。三相桥臂的开关状态可组成8个基本电压空间矢量,其中(000)(111)定义为零矢量,其它6个矢量定义为有效矢量,其大小和位置分布如图2.7(a)所示,相邻有效矢量均间隔60°,矢量长度为2/3Ud

 

 

3.MATLAB核心程序

 

 

function [sys,x0,str,ts] = func_N_calculation(t,x,u,flag)
%A=0;B=0;
%C=0;N=0;
global A B C N;
switch flag,
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;
  case 1,
    sys=[];
  case 2,
    sys=[];
  case 3,
    sys=mdlOutputs(t,x,u,A,B,C,N);
  case 4,
    sys=[];
  case 9,
    sys=[];
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
 
 
function [sys,x0,str,ts]=mdlInitializeSizes
 
sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 3;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
 
sys = simsizes(sizes);
x0  = [0 0 0];
str = [];
ts  = [0 0];
 
%u(1)=Uafa;u(2)=Ubta
function sys=mdlOutputs(t,x,u,A,B,C,N)
x(1)=u(2);                         %x(1)=Ua
x(2)=1/2*(sqrt(3)*u(1)-u(2));      %x(2)=Ub
x(3)=1/2*(-sqrt(3)*u(1)-u(2));    %x(3)=Uc
 
if (x(1)>0);    %A
   A=1;
else
   A=0; 
end
if (x(2)>0);     %B
   B=1;
else
   B=0; 
end
if (x(3)>0);
   C=1;          %C
else
   C=0; 
end
N=4*C+2*B+A;   %N
sys=N;
08_010_m