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

📄 tsf_main.c

📁 变频器程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        }
    
    
    
    
    
    
    
    
    
    
                           /* endless loop, wait for interrupt */

}  

       
                                  /* end of main() */

/********************** INTERRUPT SERVICE ROUTINES *********************/
void Led1On(void)
{*PEDATDIR=*PEDATDIR&0xFFFD;
}
void Led1Off(void)
{*PEDATDIR=*PEDATDIR|0x0002;
}
void Led2On(void)
{*PEDATDIR=*PEDATDIR&0xFFFB;
}
void Led2Off(void)
{*PEDATDIR=*PEDATDIR|0x0004;
}
void Led3On(void)
{*PEDATDIR=*PEDATDIR&0xFFF7;
}
void Led3Off(void)
{*PEDATDIR=*PEDATDIR|0x0008;
}
void Led4On(void)
{*PEDATDIR=*PEDATDIR&0xFFEF;
}
void Led4Off(void)
{*PEDATDIR=*PEDATDIR|0x0010;
}
void Led5On(void)
{*PEDATDIR=*PEDATDIR&0xFFDF;
}
void Led5Off(void)
{*PEDATDIR=*PEDATDIR|0x0020;
}
void Led6On(void)
{*PEDATDIR=*PEDATDIR&0xFFBF;
}
void Led6Off(void)
{*PEDATDIR=*PEDATDIR|0x0040;
}



void UpCeptRes(void)
{*PBDATDIR=*PBDATDIR|0x1010;
}
 
 
 
 
 
 void GndCeptRes(void)
 {*PBDATDIR=*PBDATDIR|0x1000;

  *PBDATDIR=*PBDATDIR&0xFFEF;
 }
 
 
 void UpCeptS(void)
 {*PBDATDIR=*PBDATDIR&0xDFFF;
 *PBDATDIR=*PBDATDIR|0x0020;
 
 
 
 
 }
 
 void GndCeptS(void)
 {*PBDATDIR=*PBDATDIR&0xDFDF;
 }

 void UpPrtRes(void)
 {*PBDATDIR=*PBDATDIR|0x4040;
 }
 void GndPrtRes(void)
 {*PBDATDIR=*PBDATDIR|0x4000;
 *PBDATDIR=*PBDATDIR&0xFFBF;
 }
 
 void UpTS(void)
 {
 *PBDATDIR=*PBDATDIR&0x7FFF;
 *PBDATDIR=*PBDATDIR|0x0080;
 }
 void GndTS(void)
 {
 *PBDATDIR=*PBDATDIR&0x7F7F;
 
 
 
 }
 
 
 void UpJzgEn(void)
 {*PEDATDIR=*PEDATDIR|0x8080;
 
   *PADATDIR=*PADATDIR|0x0020;//cap3 up
 }
 
 void GndJzgEn(void)
 {*PEDATDIR=*PEDATDIR|0x8000;
 *PEDATDIR=*PEDATDIR&0xFF7F;
   *PADATDIR=*PADATDIR&0xFFDF;  //cap3 down
 }
 void UpVtgRes(void)
 {
 
 
 *PFDATDIR=*PFDATDIR|0x101;
 }
 void GndVtgRes(void)
 {*PFDATDIR=*PFDATDIR|0x0100;

 *PFDATDIR=*PFDATDIR&0xFFFE;
 }
 void UpVtgs(void)
 
 
 {*PFDATDIR=*PFDATDIR&0xFDFF;
 *PFDATDIR=*PFDATDIR|0x0002;
 }
 
 
 
 
 void GndVtgS(void)
 {*PFDATDIR=*PFDATDIR&0xFDFD;
 }
 


void UpJcqEn(void)
{ *PFDATDIR=*PFDATDIR|0x0010;}


void GndJcqEn(void)
{
	   *PFDATDIR=*PFDATDIR&0xFFEF;
	   
	   
	
	   }
       
       
       
       
       
       
       
void DisDrive(void)
{*PADATDIR=*PADATDIR|0x0080;
*PBDATDIR=*PBDATDIR|0x000A;
}


void EnDrive(void)
{*PADATDIR=*PADATDIR&0xFF7F;
*PBDATDIR=*PBDATDIR&0xFFF5;
}


void UpRes(void)
{*PBDATDIR=*PBDATDIR&0xFFEF;
}  

void GndRes(void)
{*PBDATDIR=*PBDATDIR|0x0010;
}

       
    
void UpP1(void)
{
*PADATDIR=*PADATDIR|0x0040;    }
void GndP1(void)
{*PADATDIR=*PADATDIR&0xFFBF;

}


















interrupt void Protect(void)
{ int p1,p2,p3;
     asm(" setc INTM ");
   p1=T-s;
   p2=Vtg_s;
   p=Cept_s;
   if(p1==0)
   {Led5On();}
   if(p2==0)
  {Led4On();}
   if (p3==0)
   {Led6On();}
   
   while(1)
   {s1=*PFDATDIR&0x0004;
    s2=*PFDATDIR&0x0020;
    s3=*PFDATDIR&0x0008;
    if(s1==0)
    
      
          if(s3==0)
    {  GndJcqEn();
       Led1Off();  
       GndJzgEn();
        Led3Off();         
     break;
      
     }
      
      if(s2==0)
      {
      Led3On();
      
      break;}
      
      
     }
     
     
     GndPrtRes();
     delay();
     UpPrtRes();
     
     












}










interrupt void timer2_isr(void)
{    
    
}   





        
void ad(void)

{ int end_ad,kk,tmp1;

static unsigned int tt=0,xxx=0;
static int ii=0;


static int i=0,j=0;


//loop:
//	end_ad=*ADCTRL2&0x1000; /*wait for the end of conversion of adbit12*/
//	while(end_ad) goto loop; 
//	*ADCTRL2=*ADCTRL2|0x4000; /*Immediately reset sequencer to state CONV00*/  
//    channel_0=(*RESULT15)>>6; /*Phase B*/
//    channel_1=(*RESULT7)>>6; /*Phase C*/
//	channel_2=(*RESULT14)>>6; /*None*/
//	channel_3=(*RESULT6)>>6; /*Phase A*/
   // Ad_data[ii]=(*RESULT3)>>6
//if(tt<50) tt++ ;  
tt=tt+50;
//*CMPR1 = 1000;/*pwm_duty;*/                 /* set PWM1 duty cycle 563*/
//*CMPR2 = 1000;/*pwm_duty;*/
//*CMPR3 = 1000;/*pwm_duty;*/ 
xxx++;
//if(qq==1) freq_testing=0;
 if(qq==1)
 {
  if(xxx==12&&amp>0)
  {
   amp--;
   xxx=0;
   }
   
 }
 else {  
   if(xxx==12&&amp<0x2000)
     {
     amp=amp+1;
     xxx=0;
     }
}
     
Vq_testing = amp;  
  /* if(ii<300)
{Ad_data[ii]=(*RESULT6)>>6;

ii++;
}*/

       //drive.calc(&drive);
//       rmpc.target_value = freq_testing;
       rmpc.calc((void *)&rmpc);
       
       rg.rmp_freq=rmpc.setpt_value;

       rg.calc((void *)&rg);
       
 /*      pid_spd.pid_ref_reg3 = 0;
       pid_spd.pid_fdb_reg3 = sp.speed_frq;
       pid_spd.calc((void *)&pid_spd);*/
       pid_spd.pid_ref_reg1 = 500;
       pid_spd.pid_fb_reg1 = sp.speed_frq;
       pid_spd.calc((void *)&pid_spd);
              
       pid_id.pid_ref_reg3 = 0x2000;//0x0
       pid_id.pid_fdb_reg3 = current_DQ.d;
       pid_id.calc((void *)&pid_id);
       
       pid_iq.pid_ref_reg3 = pid_spd.pid_out_reg1;
       pid_iq.pid_fdb_reg3 = current_DQ.q;
       pid_iq.calc((void *)&pid_iq);
       
       //observe((pid_spd.pid_out_reg3^0x8000)>>4,(pid_spd.pid_fdb_reg3^0x8000)>>4,(pid_iq.pid_out_reg3^0x8000)>>4,(pid_iq.pid_fdb_reg3^0x8000)>>4);
       voltage_DQt.D = pid_id.pid_out_reg3;
       voltage_DQt.Q = pid_iq.pid_out_reg3;
       //voltage_DQt.theta = 0;
       //voltage_DQt.theta = fe.theta_r_fe;
      //voltage_DQt.D = 0;
       //voltage_DQt.Q = Vq_testing;


       
      voltage_DQt.theta = cur.theta_cur_mod;
	//	voltage_DQt.theta = rg.rmp_out;


       ipark((void *)&voltage_DQt,(void *)&voltage_dq);
//      observe((current_DQ.d^0x8000)>>4,(current_DQ.q^0x8000)>>4,(voltage_DQt.D^0x8000)>>4,(voltage_DQt.Q^0x8000)>>4);
       
       svgen.d = voltage_dq.d;
       svgen.q = voltage_dq.q;
       svgen.calc((void *)&svgen);
   
       pwm.mfunc_c1 = svgen.va;
       pwm.mfunc_c2 = svgen.vb;
       pwm.mfunc_c3 = svgen.vc;
       pwm.update(&pwm);
       
       ilg2_vdc.read(&ilg2_vdc);
       current_abc.a = ilg2_vdc.Imeas_a;
	   current_abc.b = ilg2_vdc.Imeas_b;
	   current_abc.c = ilg2_vdc.Imeas_c;
//	   observe((current_abc.a^0x8000)>>4,(current_abc.b^0x8000)>>4,(rg.rmp_out^0x8000)>>4,(sp.speed_frq^0x8000)>>4);
       /*if(j<200)
       {
       
       Ad_data[j]=ilg2_vdc.Imeas_a;
       j++;
       }*/
/*       fira.input=ilg2_vdc.Imeas_a;
	   fira.calc(&fira);
 	   current_abc.a=fira.output;
 	   
       firb.input=ilg2_vdc.Imeas_b;
	   firb.calc(&firb);
 	   current_abc.b=firb.output;

 	   current_abc.c=-(current_abc.a+current_abc.b);*/

       Vbus = ilg2_vdc.Vdc_meas;
       /*if(i<=49) 
        {
            aa[i]=channel_0;
            bb[i]=channel_1;
            cc[i]=channel_3;
            i++;
        }*/
 //observe((current_dq.d^0x8000)>>4,(current_dq.q^0x8000)>>4,(current_DQ.d^0x8000)>>4,(current_DQ.q^0x8000)>>4);
//	   observe(  channel_0<<2, channel_1<<2, channel_2<<2,0);
	   clark(&current_abc,&current_dq);
	   
	   current_dqt.D = current_dq.d;
       current_dqt.Q = current_dq.q;
       //current_dqt.theta = 0;
       
       
       
       current_dqt.theta = cur.theta_cur_mod;
      //current_dqt.theta = rg.rmp_out;


      park(&current_dqt,&current_DQ);
      //observe((current_dqt.D^0x8000)>>4,(current_dqt.Q^0x8000)>>4,(cur.theta_cur_mod^0x8000)>>4,0);
       volt.Mfunc_V1=svgen.va;
	   volt.Mfunc_V2=svgen.vb;
	   volt.Mfunc_V3=svgen.vc;
	   volt.DC_bus=Vbus;
	   volt.calc(&volt);
	   
	   /*fe.u_ds_fe = volt.Vdirect;//volt.Vdirect;//rg.rmp_out;
 	   fe.u_qs_fe = volt.Vquadra;//volt.Vquadra;//rg.rmp_out;
	   fe.i_ds_fe = current_dq.d;//current_dq.d;//rg.rmp_out;
	   fe.i_qs_fe = current_dq.q;//current_dq.q;//rg.rmp_out;
	   fe.calc(&fe);*/
	   //fe.theta_r_fe=fe.theta_r_fe-rg.rmp_out;
	   
	   //observe((fe.theta_r_fe^0x8000)>>4,(rg.rmp_out^0x8000)>>4,(current_dq.d^0x8000)>>4,(current_dq.q^0x8000)>>4);
	   
	   
	   qep1.calc(&qep1);
	   
       sp.theta_elec = qep1.theta_elec; //qep1.theta_mech;
       sp.calc(&sp);

     observe((sp.speed_frq^0x8000)>>4,(*T2CNT^0x8000),(current_DQ.q^0x8000)>>4,0);
       cur.i_cur_mod_D = current_DQ.d;
	   cur.i_cur_mod_Q = current_DQ.q;
	   cur.spd_cur_mod = sp.speed_frq;
	   if(cur.spd_cur_mod<0) cur.spd_cur_mod = 0;    //sp.speed_frq;
	   cur.calc(&cur);
	  // observe((cur.theta_cur_mod^0x8000)>>4,0,0,0);
     //observe(qep1.theta_elec>>4,qep1.theta_mech>>4,sp.speed_frq>>4,sp.speed_rpm>>4);
     //observe((0x500^0x8000)>>4,(pid_spd.pid_fdb_reg3^0x8000)>>4,(pid_iq.pid_fdb_reg3^0x8000)>>4,(current_DQ.q^0x8000)>>4); 
       
       
       
       
}


void timer1_isr(void)/*	interrupt void timer1_isr(void)*/
	{
	}
	 
	 
	


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -