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

📄 myad.c

📁 交交变频矢量控制DSP部分
💻 C
📖 第 1 页 / 共 2 页
字号:
		    {
		       w_fk=pos2-w_buf[jjj];
		       if(w_fk>700)
		         w_fk=w_fk-1024;
		       if(w_fk<-700)
		         w_fk=w_fk+1024;
		       w_fk=w_fk<<1;
		       w_buf[jjj]=pos2;
		       jjj++;
		       if(jjj==16) jjj=0; 
		    }    
		    
/********************************ia,ib,ic变换为id,iq****************************/           
		    
		    temp=ia;
            temp=temp*MySin[a_cos];
            temp2=ib;
            temp2=temp2*MySin[b_cos]; 
            temp3=ic;
            temp3=temp3*MySin[c_cos];
			temp=(temp+temp2+temp3)*2;
			id_fk=temp>>8;    /*得到id_fk,本应移14位,定标减掉6位*/  
		    
		    temp=ia;
            temp=temp*MySin[a_sin];
            temp2=ib;
            temp2=temp2*MySin[b_sin]; 
            temp3=ic;
            temp3=temp3*MySin[c_sin];
			temp=-(temp+temp2+temp3)*2;
			iq_fk=temp>>8;     /*得到iq_fk*,本应移14位,定标减掉6位*/

/********************************id,iq,if滤波**************************************/ 			
           
           if(iiii<M)             
		    {
		       id_buf[iiii]=id_fk; 
		       iq_buf[iiii]=iq_fk; 
		       if_buf[iiii]=if_fk;
		       sumId+=id_fk;
		       sumIq+=iq_fk;
		       sumIf+=if_fk;
		       iiii++; 
		    }
		    else
		    {
		       sumId=sumId+id_fk-id_buf[jjjj];
		       sumIq=sumIq+iq_fk-iq_buf[jjjj];
		       sumIf=sumIf+if_fk-if_buf[jjjj];
		       id_fk=sumId>>MM;
		       iq_fk=sumIq>>MM;
		       //if_fk=sumIf>>MM;
		       id_buf[jjjj]=id_fk; 
		       iq_buf[jjjj]=iq_fk;  
		       if_buf[jjjj]=if_fk;
		       jjjj++;
		       if(jjjj==M) jjjj=0; 
		    }
		     
		    if(bFirstTime==1)
			{
			   id_fk=0;
               iq_fk=0; 
               if_fk=0;
               bFirstTime=0;
            }                     
            
/************************励磁电流调节器********************************************/ 
        
		   	/*if按Q.7/10定标*/ 
  		    temp=if_gd-if_fk;
		    if(temp>16||temp<-16)
		    {  
		        if_out=temp*if_kp;   
		    }
		    else
		    { 
		        if_out=temp*if_kp+if_sum;
		        if_sum+=temp*if_ki;    
		        if(if_sum>20000)if_sum=20000; //限为39V 
		        if(if_sum<0)if_sum=0;
		    }
		     
		    if(if_out>20000)if_out=20000; //限为39V 
		    if(if_out<1000)if_out=1000;
		   /*Ufm=40V,按Q.9/16定标,=20480*/
		    temp=(if_out*51)>>12;      /*(uf/Ufm*256+256)*/
			n=temp+256;
			*FALPHA=MyAcos[n];       /*得到FALPHA*/  	    
		             					    
/*********************************速度调节器***************************************/
		    
		    temp=w_gd-w_fk;
		    temp2=w_fk-w_pre;   
		    if((temp2<16)&&(temp2>-16))  
 		      if((temp>16||temp<-16))
 		      {
                 w_out=temp*w_kp; 
              }
		      else
		      { 
		         w_out=temp*w_kp+w_sum; 
                 w_sum+=temp*w_ki; //电容电压是否继续积累?
		         if(w_sum>MaxI)w_sum=MaxI; //限为7A 
		         if(w_sum<-MaxI)w_sum=-MaxI; 
		      }
		      
		    if(w_out>MaxI)w_out=MaxI; 
		    if(w_out<-MaxI)w_out=-MaxI;  
		    w_pre=w_fk; 
           
/*********************************电流调节器***************************************/		    
		    /*iq,id按Q.11/16定标*/  
		    iq_gd=w_out;
		    temp=iq_gd-iq_fk;
            if(temp>256||temp<-256)
            {
		      iq_out=temp*i_kp;
		    }
		    else
		    {
		      iq_out=temp*i_kp+iq_sum;
		      iq_sum+=temp*i_ki;
		      if(iq_sum>MaxU)iq_sum=MaxU;
		      if(iq_sum<-MaxU)iq_sum=-MaxU; 
		    }
		     
		    temp=id_gd-id_fk; 
		    if(temp>256||temp<-256)
            {
              id_out=temp*i_kp;
            } 
		    else
		    { 
		      id_out=temp*i_kp+id_sum;
              id_sum+=temp*i_ki;
		      if(id_sum>MaxU)id_sum=MaxU;
		      if(id_sum<-MaxU)id_sum=-MaxU;
		    }
		      
/*********************************电压前馈**************************************/ 
           
            temp=-823;
            temp=temp*iq_gd;
            temp=temp>>9;
            temp=temp*w_gd; 
            ud_qk=temp;
            
            temp=796;
            temp=temp*w_gd;
            temp=temp*if_gd;
            temp2=285;
            temp2=temp2*iq_gd;
            uq_qk=(temp>>3)+(temp2>>1); 
            
/************************ud,uq/ua,ub,uc变换,并得到触发角**********************************/		    
		   
		    /*Um=135 V,相电压最大值,按Q.8/16定标,=34572*/
             
            temp=((ud_qk*kk)>>3)+id_out;
            temp2=((uq_qk*kk)>>3)+iq_out;
              
            if(temp>MaxU)temp=MaxU;//限为Um
		    if(temp<-MaxU)temp=-MaxU;  
		    if(temp2>MaxU)temp2=MaxU;//限为最大电压
		    if(temp2<-MaxU)temp2=-MaxU;//限为最大电压 
            
            ud=-(temp>>9); 
            uq=-(temp2>>9);  //本应缩小8倍,前面扩大64倍
		     
		    temp=ud;
            temp=temp*MySin[a_cos];
            temp2=uq;
            temp2=temp2*MySin[a_sin];
            temp=(temp-temp2)*3;
            ua=temp>>14; 
            temp=ua;
			temp=(temp*UU)>>16;    /*(ua/Um*512+512)*/
			n=temp+256;
			*AALPHA=MyAcos[n];       /*得到ua,AALPHA*/ 
			
			temp=ud;
            temp=temp*MySin[b_cos];
            temp2=uq;
            temp2=temp2*MySin[b_sin];
            temp=(temp-temp2)*3;
            ub=temp>>14;
            temp=ub;
			temp=(temp*UU)>>16;
			n=temp+256;
			*BALPHA=MyAcos[n];       /*得到ub,BALPHA*/ 
			
			temp=ud;
            temp=temp*MySin[c_cos];
            temp2=uq;
            temp2=temp2*MySin[c_sin];
            temp=(temp-temp2)*3;
            uc=temp>>14;
            temp=uc;
			temp=(temp*UU)>>16;
			n=temp+256;
			*CALPHA=MyAcos[n];       /*得到uc,CALPHA*/ 

/****************************检测通讯*********************************************/

            *R_AALPHA=0xff00;
		    *R_BALPHA=0xff00;
		    *R_CALPHA=0xff00;
		    *R_FALPHA=0xff00;
		    if((*R_AALPHA!=*AALPHA)||
		       (*R_BALPHA!=*BALPHA)||
		       (*R_CALPHA!=*CALPHA)||
		       (*R_FALPHA!=*FALPHA))
		    {
		         /*MAINSTOP=0xffff;
		         bStop=1;
		         DAC=0;*/
		         error=error+1;
		    }
		    			  
/****************************观测4个量*********************************************/		    
		    
            if(j<5000)
            {
              j++;    
            }
            else
            {
              if(i<SIZE)
              {    
                buffer1[i]=theta;
                buffer2[i]=w_gd; 
                buffer3[i]=w_fk;
                
                buffer4[i]=iq_gd;
                buffer5[i]=iq_fk;
                buffer6[i]=iq_out>>9;
                
                buffer7[i]=id_gd;
                buffer8[i]=id_fk;
                buffer9[i]=id_out>>9;
                
                buffer10[i]=ud_qk>>9; 
                buffer11[i]=uq_qk>>9;
                buffer12[i]=-ud;
                buffer13[i]=-uq;
                
                buffer14[i]=ua;
                buffer15[i]=ub;
                buffer16[i]=uc;
                
                buffer17[i]=ia;
                buffer18[i]=ib;
                buffer19[i]=ic;
                
                buffer20[i]=if_gd;
                buffer21[i]=if_fk;
                
                buffer22[i]=if_out; 
                
                i++;            
              }
              if(i==SIZE)
              { 
                 /*MAINSTOP=0xffff;
		         /*bStop=1;*/
                 i=SIZE;
              } 
            }
             
/***************************观测四路AD********************************************/		    
	        temp=ia<<2;
		    temp=temp+2048;
		    DA0=temp;
		    
            temp=ia<<2;
		    temp=temp+2048;
		    DA1=temp;
		    
		    temp=ia<<2;
		    temp=temp+2048;
		    DA2=temp;
		    
            temp=ia<<2;
		    temp=temp+2048;
		    DA3=temp;
		
		    DA4=0; 
/********************************************************************************/	 
           
            *ADCTRL2=*ADCTRL2|0X4200;	// 复位SEQ1,且清除INT FLAG SEQ1标志写"1"清0 
            asm(" NOP");
            asm(" NOP");
            asm(" NOP");
            asm(" NOP"); 
            t=15-t;
            DAC=t;
            asm(" clrc INTM");
}   

main()
{
   asm(" setc INTM");	
   initial( );
   ValueInit( );
   ADINIT( );
   asm(" clrc INTM");
   ADSOC( );  
   while(!(bStop))
   {}
}

⌨️ 快捷键说明

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