📄 inverter_integrated.c
字号:
/*stator voltage vector 3*/
if((S3==1)&&(S4==1))
{ flag = 2;
if(pwm==1)//pwm on mode
{
if((-1)*ic>=delta) //commutation freewheeling
{
Vcg = Vs;
Vag = 0;
Vbg = Vs;
Vsg = (2*Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vsg = (Vs-ea-eb)/2;
Vcg = Vsg+ec;
Vag = 0;
Vbg = Vs;
/* if(Vcg_p < 0) //handel back emf current
{
Vcg = 0;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
}
else //pwm off mode
{
if((-1)*ic>=delta) //commutation freewheeling
{
if((-1)*ia>=delta)//pwm freewheeling
{
Vag = Vbg = Vcg = Vs;
Vsg = (3*Vs-ea-eb-ec)/3;
}
else //pwm freewheeling over
{
Vbg = Vcg = Vs;
Vsg = Vs-(eb+ec)/2;
Vag = Vsg+ea;
}
}
else //commutation freewheeling over
{
if(ib>=delta) //pwm freewheeling
{
Vsg = Vs-(eb+ea)/2;
Vcg = Vsg + ec;
Vag = Vbg = Vs;
}
else //pwm freewheeling over
{
Vbg = Vs;
Vsg = Vs - eb;
Vag = Vsg + ea;
Vcg = Vsg + ec;
}
/* if(Vcg_p < 0) //handel back emf current
{
Vcg = 0;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
} goto d_end;
}
/*stator voltage vector 4*/
if((S3==1)&&(S2==1))
{ flag = 3;
if(pwm==1)//pwm on mode
{
if(ia>=delta) //commutation freewheeling
{
Vag = Vcg = 0;
Vbg = Vs;
Vsg = (Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vcg = 0;
Vbg = Vs;
Vsg = (Vs-eb-ec)/2;
Vag = Vsg+ea;
/* if(Vag_p > Vs+Ud) //handel back emf current
{
Vag = Vs;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
}
else //pwm off mode
{
if(ia>=delta) //commutation freewheeling
{
/*if((-1)*ic>=delta)//pwm freewheeling
{*/
Vbg =Vcg = Vs;
Vag = 0;
Vsg = (2*Vs-ea-ec-eb)/3;
// }
/* else //pwm freewheeling over
{
Vac = (-1)*(0.5*Vs + 1.5*ec);
Vbc = 0.5*Vs-1.5*ec;
Vab = (-1)*Vs;
}*/
}
else //commutation freewheeling over
{
if(ib>=delta) //pwm freewheeling
{
Vcg = Vbg = Vs;
Vsg = (2*Vs-eb-ec)/2;
Vag = Vsg+ea;
}
else //pwm freewheeling over
{
Vbg = Vs;
Vsg = Vs-eb;
Vag = Vsg+ea;
Vcg = Vsg+eb;
}
/* if(Vag_p > Vs+Ud) //handel back emf current
{
Vag = Vs;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
} */
}
} goto d_end;
}
/*stator voltage vector 5*/
if((S1==1)&&(S2==1))
{ flag = 1;
if(pwm==1)//pwm on mode
{
if((-1)*ib>=delta) //commutation freewheeling
{
Vbg = Vs;
Vcg = 0;
Vag = Vs;
Vsg = (2*Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vsg = (Vs-ec-ea)/2;
Vbg = Vsg+eb;
Vcg = 0;
Vag = Vs;
/* if(Vbg_p < 0) //handel back emf current
{
Vbg = 0;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
}
else //pwm off mode
{
if((-1)*ib>=delta) //commutation freewheeling
{
if((-1)*ic>=delta)//pwm freewheeling
{
Vag = Vbg = Vcg = Vs;
Vsg = (3*Vs-ea-eb-ec)/3;
}
else //pwm freewheeling over
{
Vag = Vbg = Vs;
Vsg = Vs-(ea+eb)/2;
Vcg = Vsg+ec;
}
}
else //commutation freewheeling over
{
if(ia>=delta) //pwm freewheeling
{
Vsg = Vs-(ea+ec)/2;
Vbg = Vsg + eb;
Vag = Vcg = Vs;
}
else //pwm freewheeling over
{
Vag = Vs;
Vsg = Vs - ea;
Vbg = Vsg + eb;
Vcg = Vsg + ec;
}
/* if(Vbg_p < 0) //handel back emf current
{
Vbg = 0;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
} goto d_end;
}
/*stator voltage vector 6*/
if((S1==1)&&(S6==1))
{ flag = 5;
if(pwm==1)//pwm on mode
{
if(ic>=delta) //commutation freewheeling
{
Vcg = Vbg = 0;
Vag = Vs;
Vsg = (Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vbg = 0;
Vag = Vs;
Vsg = (Vs-ea-eb)/2;
Vcg = Vsg+ec;
/* if(Vcg_p > Vs+Ud) //handel back emf current
{
Vcg = Vs;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
}
else //pwm off mode
{
if(ic>=delta) //commutation freewheeling
{
/*if((-1)*ib>=delta)//pwm freewheeling
{*/
Vag =Vbg = Vs;
Vcg = 0;
Vsg = (2*Vs-ea-ec-eb)/3;
/* }
else //pwm freewheeling over
{
Vbc = 0.5*Vs+1.5*eb;
Vab = 0.5*Vs-1.5*eb;
Vac = Vs;
}*/
}
else //commutation freewheeling over
{
if(ia>=delta) //pwm freewheeling
{
Vag = Vbg = Vs;
Vsg = (2*Vs-ea-eb)/2;
Vcg = Vsg+ec;
}
else //pwm freewheeling over
{
Vag = Vs;
Vsg = Vs-ea;
Vbg = Vsg+eb;
Vcg = Vsg+ec;
}
/* if(Vcg_p > Vs+Ud) //handel back emf current
{
Vcg = Vs;
Vsg = (Vag+Vbg+Vcg-ea-eb-ec)/3;
}*/
}
} goto d_end;
}
/*end of line to line voltage determination*/
d_end:
/*dc rail current behind the capacitor calculation*/
if(S1==1) iah=ia;
else if(S4==1&&pwm==1) iah=0;
else if(S4==1&&pwm==0) iah=ia;
else if(ia>0) iah=0;
if(S3==1) ibh=ib;
else if(S6==1&&pwm==1) ibh=0;
else if(S6==1&&pwm==0) ibh=ib;
else if(ib>0) ibh=0;
if(S5==1) ich=ic;
else if(S2==1&&pwm==1) ich=0;
else if(S2==1&&pwm==0) ich=ic;
else if(ic>0) ich=0;
/*dc rail current calculation over*/
y0[0] = Vag-Vsg;
y1[0] = Vbg-Vsg;
y2[0] = Vcg-Vsg;
y3[0] = Vag;
y4[0] = Vbg;
y5[0] = Vcg;
/*simulate the saturation function of the shunt circuit*/
if((iah+ibh+ich)<=0) y6[0]=0;
else y6[0] = iah+ibh+ich;
}
/* Function: mdlTerminate =====================================================
* Abstract:
* No termination needed, but we are required to have this routine.
*/
static void mdlTerminate(SimStruct *S)
{
}
#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */
#include "simulink.c" /* MEX-file interface mechanism */
#else
#include "cg_sfun.h" /* Code generation registration function */
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -