⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inverter_integrated.c

📁 用C语言编写的在Simulink环境下对3相交流逆变器进行数值仿真的S函数源代码。该仿真源代码的一个独特之处就是:利用全新的数学模型能够对逆变器相间换流的动态过程进行仿真
💻 C
📖 第 1 页 / 共 2 页
字号:
   /*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 + -