在前面几节的内容中,已经详细介绍了坐标变换和SVPWM技术的理论知识,在本节内容中,将在Simulink中搭建坐标变换和SVPWM仿真模型。
坐标变换公式参考《一、永磁同步电机矢量控制(FOC)—概述及坐标变换》。
首先假定三相对称正弦电为:
三相对称正弦电模型及波形图如下,利用“sine wave”模块构建正弦波形,正弦电幅值和频率自由给定,作者给定的幅值为12、频率为2π:
1.Clark变换
定义两相静止坐标系中的a轴与定子A相绕组重合,β轴逆时针超前a轴90空间电角度。
利用“MATLAB Function”模块搭建Clark变换模块。
Clark变换内部函数为:
function [u_alpha,u_beta] = clark(u_a,u_b,u_c)
u_alpha=(u_a-1/2*u_b-1/2*u_c)*2/3;
u_beta=(sqrt(3)/2*u_b-sqrt(3)/2*u_c)*2/3;
注意,此处输入量为电压值,也可以设置为电流值、磁链。
通过Clark变换后,3个三相正弦电信号转化为两相静止坐标系αβ中的2个正弦电信号,需要控制的信号变为2个,控制难度降低,但是控制信号仍为交流电信号,控制难度仍然存在,如果将交流电信号转变为直流电信号,控制难度将进一步降低,这就需要通过Park变换。
2.Park变换
通过Park变换就将U_α、U_β转化到了转子旋转坐标系中,由U_d U_q代替。在Park变换中引入了电角度θ,电角度θ的斜率也即θ的微分,就是电角速度,电角速度的频率和三相正弦电频率相同,三相正弦电频率为2π,电角速度也为2π。
利用“Ramp”模块生成电角度θ,斜率Slope为2*pi:
利用“MATLAB Function”模块搭建Park变换模块。
Park变换模块内部函数如下:
function [u_d,u_q] = park(u_alpha,u_beta,theta_e)
u_d=u_alpha*cos(theta_e)+u_beta*sin(theta_e);
u_q=-u_alpha*sin(theta_e)+u_beta*cos(theta_e);
同样的,输入输出量也可设置为电流、磁链。
通过Park变换,就将两个正弦电信号转化为了两个直流电信号,因此控制难度大大减小,控制u_q的大小,就可以控制电机的转矩(电机控制的核心就是对转矩的控制)。U_d=0也符合Id=0的电流环控制策略。
3.反Park变换
将两相垂直旋转坐标系中的u_d u_q转换为两相静止坐标系中的u_α u_β。
模型框架如下:
反Park变换模块内部函数如下,也需要输入电角度θ:
function [u_alpha,u_beta] = inv_park(u_q,u_d,theta_e)
u_alpha=cos(theta_e)*u_d-sin(theta_e)*u_q;
u_beta=sin(theta_e)*u_d+cos(theta_e)*u_q;
end
变换后输出图像如下,两个直流电信号转化为两个交流电信号。
4.反Clark变换
将两相静止坐标系中的u_α u_β转换为三相静止坐标系中的u_a u_b u_c。
模型框架如下:
反Clark变换模块内部函数如下:
function [u_a,u_b,u_c] = inv_clark(u_alpha,u_beta)
u_a = u_alpha;
u_b = -0.5*u_alpha + sqrt(3)/2*u_beta;
u_c = -0.5*u_alpha - sqrt(3)/2*u_beta;
输出图像如下:
从反Park变换和反Clark变换可以看出,两种反变换都可以输出和原始信号幅值、频率相同的信号,但是相位上会有所差异。
5.SVPWM技术
此处理论知识参考《四、永磁同步电机矢量控制(FOC)—空间矢量调制技术SVPWM》。
相关参数在a_2_Initfun.m文件中设置,首先运行该文件生成对应变量。
%% 初始参数区
T=2000;%一个PWM计数周期
CCR=1000;%三角波中的最大值,为T的一半
U_dc=12;%三相电机供电电压为24V
m=sqrt(3)*T/U_dc;
p=11;
主体框架如下,U_alpha U_beta可接入坐标变换中,Clark变化后产生的u_α和u_β。
此处m不是调制系数,而是m= ,即X、Y、Z中计算用到的参数:
(1)ABC值及N计算
若A、B、C大于0则An、Bn、Cn为1,小于0则为0,N=4Cn+2Bn+An,与二进制对应。
%% 计算ABC的值,用于计算N值,以判断扇区
function [X,Y,Z,N] = fcn(U_alpha,U_beta,m)
A=U_beta;
B=sqrt(3)/2*U_alpha-1/2*U_beta;
C=-sqrt(3)/2*U_alpha-1/2*U_beta;
A_temp=A>0;
B_temp=B>0;
C_temp=C>0;
N=4*C_temp+2*B_temp+A_temp;
%计算基本矢量和零矢量的基本作用时间
X=m*A;
Y=m*B;
Z=m*C;
当电机沿着某一方向旋转时(可理解为u_α u_β为正弦电)时,N值的变化规律是2-3-1-5-4-6
(2)矢量作用时间计算
该部分主要根据N值判断Uout当前所在的扇区,并利用XYZ值根据N值计算出基本矢量作用时间Tx、Ty(对应其他文章中的Tfirst、Tsecond),和零矢量作用时间T0(T7)。PWM计算周期T利用“constant”模块,在其中输入以生成的常量T符号。
function [T_x,T_y,T_0,N] = fcn(X,Y,Z,N,T)
switch N
case 1
T_x = -Y;
T_y = -Z;
case 2
T_x = -Z;
T_y = -X;
case 3
T_x = Y;
T_y = X;
case 4
T_x = -X;
T_y = -Y;
case 5
T_x = X;
T_y = Z;
otherwise
T_x = Z;
T_y = Y;
end
T_xy_sum = T_x+T_y;
T_x_temp = T_x;
T_y_temp = T_y;
if T_xy_sum>T
T_x=T_x_temp/T_xy_sum*T;
T_y=T_y_temp/T_xy_sum*T;
end
T_0=(T-T_x-T_y)/2.0;
end
(3)切换时间计算
该部分主要根据T_x,T_y,T_0,N,计算切换时间Ta、Tb、Tc。通过N值来分配每相的CCR_X值。
function [CCR_U,CCR_V,CCR_W] = fcn(T_x,T_y,T_0,N)
T_a=T_0/2.0;
T_b=T_a+T_x/2.0;
T_c=T_b+T_y/2.0;
switch N
case 1
CCR_U=T_b;
CCR_V=T_a;
CCR_W=T_c;
case 2
CCR_U=T_a;
CCR_V=T_c;
CCR_W=T_b;
case 3
CCR_U=T_a;
CCR_V=T_b;
CCR_W=T_c;
case 4
CCR_U=T_c;
CCR_V=T_b;
CCR_W=T_a;
case 5
CCR_U=T_c;
CCR_V=T_a;
CCR_W=T_b;
otherwise
CCR_U=T_b;
CCR_V=T_c;
CCR_W=T_a;
end
(4)三相桥臂通断计算
该部分加入三角载波模块,使用的是“Repeating Sequence”模块,对其中参数进行设置如下:
“Time values”表示一个三角载波的周期,即1/PWM计算周期T=1/2000=0.0005。CCR值即三角波输出的最大值,CCR值为T的一半即1000,该模块在0.00025时间内由0计数至1000,再由0.00025至0.0005之间,由1000减至0。
以A(U)相为例,若A相切换时间为Ta(CCR_U),当CCR值小于Ta时,A相桥臂下桥臂导通,A相接地,当CCR值大于Ta时,A相桥臂上桥臂导通,A相接电源正极。其他两相也是相同的原理。
function [U,U_N,V,V_N,W,W_N] = fcn(CCR_U,CCR_V,CCR_W,Count)
if Count<CCR_U
U=0;
U_N=1;
else
U=1;
U_N=0;
end
if Count<CCR_V
V=0;
V_N=1;
else
V=1;
V_N=0;
end
if Count<CCR_W
W=0;
W_N=1;
else
W=1;
W_N=0;
end
end
将SVPWM模块生成的PWM信号接入到三相逆变电路中,即可实现对永磁同步电机的控制。
在本节内容中,将前面提到的坐标变换以及SVPWM技术在Simulink中搭建了仿真模型,通过在FOC速度闭环控制电路中的仿真,验证了以上各仿真模块的有效性。模块可以直接使用。
三相CCR值为有效的马鞍波形。
以上模型放在该链接内,需要请自取(速度环控制电路模型未放在该连接中,后续将逐步讲解)。
链接: https://pan.baidu.com/s/1evFka2ECMfs9y2o4n9EQEA?pwd=9q8e 提取码: 9q8e