📄 bldc_1_sinusoidal.c
字号:
Vsg = Vs-(eb+ec)/2;
Vag = Vsg + ea;
Vbg = Vcg = Vs;
}
else //pwm freewheeling over
{
Vab = ea-eb;
Vac = ea-ec;
Vbc = eb-ec;
Vcg = Vs;
Vsg = Vs - ec;
Vbg = Vsg + eb;
Vag = Vsg + ea;
}
}
} goto d_end;
}
/*stator voltage vector 2*/
if((S5==1)&&(S4==1))
{ commu_flag = 1;
if(pwm==1)//pwm on mode
{
if(ib>=delta) //commutation freewheeling
{
Vab = 0;
Vbc = (-1)*Vs;
Vag = Vbg = 0;
Vcg = Vs;
Vsg = (Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vab = (-0.5)*(2*eb-ea-ec+Vs);
Vbc = 0.5*(2*eb-ea-ec-Vs);
Vag = 0;
Vcg = Vs;
Vsg = (Vs-ea-ec)/2;
Vbg = Vsg+eb;
}
Vac = (-1)*Vs;
}
else //pwm off mode
{
if(ib>=delta) //commutation freewheeling
{
if((-1)*ia>=delta)//pwm freewheeling
{
Vac = 0;
Vab = Vs;
Vbc = (-1)*Vab;
}
else //pwm freewheeling over
{
Vab = 0.5*(Vs+2*ea-eb-ec);
Vac = 0.5*(2*ea-Vs-eb-ec);
Vbc = (-1)*Vs;
}
Vag =Vcg = Vs;
Vbg = 0;
Vsg = (2*Vs-ea-ec-eb)/3;
}
else //commutation freewheeling over
{
if(ic>=delta) //pwm freewheeling
{
Vab = (-0.5)*(2*eb-ea-ec);
Vbc = (-1)*Vab;
Vac = 0;
Vag = Vcg = Vs;
Vsg = (2*Vs-ea-ec)/2;
Vbg = Vsg+eb;
}
else //pwm freewheeling over
{
Vab = ea-eb;
Vac = ea-ec;
Vbc = eb-ec;
Vcg = Vs;
Vsg = Vs-ec;
Vbg = Vsg+eb;
Vag = Vsg+ea;
}
}
} goto d_end;
}
/*stator voltage vector 3*/
if((S3==1)&&(S4==1))
{ commu_flag = 1;
if(pwm==1)//pwm on mode
{
if((-1)*ic>=delta&&(Vsg+ec)<Vs) //commutation freewheeling
{
Vac = (-1)*Vs;
Vbc = 0;
Vcg = Vs;
Vag = 0;
Vbg = Vs;
Vsg = (2*Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vac = (-0.5)*(2*ec-ea-eb+Vs);
Vbc = 0.5*(Vs-2*ec+ea+eb);
Vsg = (Vs-ea-eb)/2;
Vcg = Vsg+ec;
Vag = 0;
Vbg = Vs;
}
Vab = (-1)*Vs;
}
else //pwm off mode
{
if((-1)*ic>=delta&&(Vsg+ec)<Vs) //commutation freewheeling
{
if((-1)*ia>=delta)//pwm freewheeling
{
Vac = Vbc = Vab = 0;
Vag = Vbg = Vcg = Vs;
Vsg = (3*Vs-ea-eb-ec)/3;
}
else //pwm freewheeling over
{
Vac = (2*ea-eb-ec)/2;
Vbc = 0;
Vab = Vac;
Vbg = Vcg = Vs;
Vsg = Vs-(eb+ec)/2;
Vag = Vsg+ea;
}
}
else //commutation freewheeling over
{
if(ib>=delta) //pwm freewheeling
{
Vac = Vbc = (-0.5)*(2*ec-ea-eb);
Vab = 0;
Vsg = Vs-(eb+ea)/2;
Vcg = Vsg + ec;
Vag = Vbg = Vs;
}
else //pwm freewheeling over
{
Vab = ea-eb;
Vac = ea-ec;
Vbc = eb-ec;
Vbg = Vs;
Vsg = Vs - eb;
Vag = Vsg + ea;
Vcg = Vsg + ec;
}
}
} goto d_end;
}
/*stator voltage vector 4*/
if((S3==1)&&(S2==1))
{ commu_flag = 1;
if(pwm==1)//pwm on mode
{
if(ia>=delta) //commutation freewheeling
{
Vac = 0;
Vab = (-1)*Vs;
Vag = Vcg = 0;
Vbg = Vs;
Vsg = (Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vac = 0.5*(Vs+2*ea-eb-ec);
Vab = 0.5*(2*ea-Vs-eb-ec);
Vcg = 0;
Vbg = Vs;
Vsg = (Vs-eb-ec)/2;
Vag = Vsg+ea;
}
Vbc = Vs;
}
else //pwm off mode
{
if(ia>=delta) //commutation freewheeling
{
if((-1)*ic>=delta)//pwm freewheeling
{
Vbc = 0;
Vac = (-1)*Vs;
Vab = Vac;
Vbg =Vcg = Vs;
Vag = 0;
Vsg = (2*Vs-ea-ec-eb)/3;
}
else //pwm freewheeling over
{
Vac = (-0.5)*(Vs+2*ec-ea-eb);
Vbc = 0.5*(Vs-2*ec+ea+eb);
Vab = (-1)*Vs;
Vag = 0;
Vbg = Vs;
Vcg = Vs;
Vsg = 2*Vs/3 - (ea+eb+ec)/3;
}
}
else //commutation freewheeling over
{
if(ib>=delta) //pwm freewheeling
{
Vac = (2*ea-eb-ec)/2;
Vab = Vac;
Vbc = 0;
Vcg = Vbg = Vs;
Vsg = (2*Vs-eb-ec)/2;
Vag = Vsg+ea;
}
else //pwm freewheeling over
{
Vab = ea-eb;
Vac = ea-ec;
Vbc = eb-ec;
Vbg = Vs;
Vsg = Vs-eb;
Vag = Vsg+ea;
Vbg = Vsg+eb;
}
}
} goto d_end;
}
/*stator voltage vector 5*/
if((S1==1)&&(S2==1))
{
if(pwm==1)//pwm on mode
{
if((ia+ic)>=delta&&(Vsg+eb)<Vs) //commutation freewheeling
{ flag = 10;
Vbc = Vs;
Vab = 0;
Vbg = Vs;
Vcg = 0;
Vag = Vs;
Vsg = (2*Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{ commu_flag = 0;
flag = 20;
Vbc = (-1)*0.5*(2*eb+Vs-ea-ec);
Vab = 0.5*(Vs-2*eb+ea+ec);
Vsg = (Vs-ec-ea)/2;
Vbg = Vsg+eb;
Vcg = 0;
Vag = Vs;
}
Vac = Vs;
}
else //pwm off mode
{
if((-1)*ib>=delta&&(Vsg+eb)<Vs) //commutation freewheeling
{
if((-1)*ic>=delta)//pwm freewheeling
{ flag = 30;
Vab = Vac = Vbc = 0;
Vag = Vbg = Vcg = Vs;
Vsg = (3*Vs-ea-eb-ec)/3;
}
else //pwm freewheeling over
{ flag = 40;
Vbc = (-0.5)*(2*ec-ea-eb);
Vab = 0;
Vac = Vbc;
Vag = Vbg = Vs;
Vsg = Vs-(ea+eb)/2;
Vcg = Vsg+ec;
}
}
else //commutation freewheeling over
{
/* if((-1)*ic>=delta) //pwm freewheeling
{*/
Vab = 0.5*(ea+ec)-eb;
Vbc = eb-0.5*(ea+ec);
Vac = 0;
flag = 100;
Vsg = Vs-(ea+ec)/2;
Vbg = Vsg + eb;
Vag = Vcg = Vs;
//}
/* else //pwm freewheeling over
{
Vab = ea-eb;
Vac = ea-ec;
Vbc = eb-ec;
Vag = Vs;
Vsg = Vs - ea;
Vbg = Vsg + eb;
Vcg = Vsg + ec;
}*/
}
} goto d_end;
}
/*stator voltage vector 6*/
if((S1==1)&&(S6==1))
{ commu_flag = 1;
if(pwm==1)//pwm on mode
{
if(ic>=delta) //commutation freewheeling
{
Vbc = 0;
Vac = Vs;
Vcg = Vbg = 0;
Vag = Vs;
Vsg = (Vs-ea-eb-ec)/3;
}
else //commutation freewheeling over
{
Vbc = (-1)*0.5*(2*ec+Vs-ea-eb);
Vac = 0.5*(Vs+ea+eb-2*ec);
Vbg = 0;
Vag = Vs;
Vsg = (Vs-ea-eb)/2;
Vcg = Vsg+ec;
}
Vab = Vs;
}
else //pwm off mode
{
if(ic>=delta) //commutation freewheeling
{
if((-1)*ib>=delta)//pwm freewheeling
{
Vab = 0;
Vbc = Vs;
Vac = Vbc;
Vag =Vbg = Vs;
Vcg = 0;
Vsg = (2*Vs-ea-ec-eb)/3;
}
else //pwm freewheeling over
{
Vbc = 0.5*(Vs+2*eb-ea-ec);
Vab = 0.5*(Vs-2*eb+ea+ec);
Vac = Vs;
Vcg = 0;
Vag = Vs;
Vsg = 0.5*(Vs-ea-ec);
Vbg = 0.5*(Vs+2*eb-ea-ec);
}
}
else //commutation freewheeling over
{
/* if((-1)*ib>=delta) //pwm freewheeling
{*/
Vbc = 0.5*(ea+eb)-ec;
Vac = Vbc;
Vab = 0;
Vag = Vbg = Vs;
Vsg = (2*Vs-ea-eb)/2;
Vcg = Vsg+ec;
/* }
else //pwm freewheeling over
{
Vab = ea-eb;
Vac = ea-ec;
Vbc = eb-ec;
Vag = Vs;
Vsg = Vs-ea;
Vbg = Vsg+eb;
Vcg = Vsg+ec;
}*/
}
} goto d_end;
}
/*end of line to line voltage determination*/
d_end:
VAB = Vab;
VAC = Vac;
VBC = Vbc;
/*system state-space function*/
dx[0]=(Vab-R[0]*x[0]-(ea-eb))/(L[0]-M[0]); //iab
dx[1]=(Vac-R[0]*x[1]-(ea-ec))/(L[0]-M[0]); //iac
dx[2]=(Vbc-R[0]*x[2]-(eb-ec))/(L[0]-M[0]); //ibc
dx[3]=P[0]*(y0[0]-Tl)/J[0]; //electrical speed
dx[4]=x[3];//rotor electrical angle
}
/* 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 + -