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

📄 ad.c

📁 一个基于DSP 2812的开关磁阻电机的控制程序的例子。用霍尔传感器测相位
💻 C
📖 第 1 页 / 共 2 页
字号:
 	
    // **第三路电流 ACDINT5 CMPER3 **
   	
    I21_SAMPLE=AdcRegs.RESULT2>>4;
	I21_ERROR=I21_REF-I21_SAMPLE;
                
	        I21_SUMERROR+=I21_ERROR;
        	if(I21_SUMERROR<-2000) I21_SUMERROR=-2000;
            else if (I21_SUMERROR>2000) I21_SUMERROR=2000;
            I21_IRESULT=I21_SUMERROR;
            I21_IRESULT=I21_IRESULT>>8;
            I21_IRESULT=I21_IRESULT*I_KI;
           
	        I21_PRESULT=I21_ERROR*I_KP;
	        I21_PRESULT=I21_PRESULT>>3;
	        
	        I21_PIRESULT=I21_PRESULT+I21_IRESULT;
         
           	EvbRegs.CMPR4+=I21_PIRESULT;
	
       	if(EvbRegs.CMPR4<6000) EvbRegs.CMPR4=6000;
	    else if (EvbRegs.CMPR4>8500) EvbRegs.CMPR4=8500;
	   // EvbRegs.CMPR4=7500;
	
	
    // **第四路电流 ACDINT4 T1CMPR**
 
   	I22_SAMPLE=AdcRegs.RESULT3>>4;
	I22_ERROR=I22_REF-I22_SAMPLE;
                
	        I22_SUMERROR+=I22_ERROR;
        	if(I22_SUMERROR<-2000) I22_SUMERROR=-2000;
            else if (I22_SUMERROR>2000) I22_SUMERROR=2000;
            I22_IRESULT=I22_SUMERROR;
            I22_IRESULT=I22_IRESULT>>8;
            I22_IRESULT=I22_IRESULT*I_KI;
           
	        I22_PRESULT=I22_ERROR*I_KP;
	        I22_PRESULT=I22_PRESULT>>2;
	        
	        I22_PIRESULT=I22_PRESULT+I22_IRESULT;
        
           	EvbRegs.CMPR5+=I22_PIRESULT;
	
       	if(EvbRegs.CMPR5<6000) EvbRegs.CMPR5=6000;
	    else if (EvbRegs.CMPR5>8500) EvbRegs.CMPR5=8500;
	    //EvbRegs.CMPR5=7500;
	
	    // **第五路电流 ACDINT3 CMPR4**
	I31_SAMPLE=AdcRegs.RESULT3>>4;
	I31_ERROR=I31_REF-I31_SAMPLE;
                
	        I31_SUMERROR+=I31_ERROR;
        	if(I31_SUMERROR<-2000) I31_SUMERROR=-2000;
            else if (I31_SUMERROR>2000) I31_SUMERROR=2000;
            I31_IRESULT=I31_SUMERROR;
            I31_IRESULT=I31_IRESULT>>4;
            I31_IRESULT=I31_IRESULT*I_KI;
           
	        I31_PRESULT=I31_ERROR*I_KP;
	        I31_PRESULT=I31_PRESULT;
	        
	        I31_PIRESULT=I31_PRESULT+I31_IRESULT;
         
           	EvaRegs.CMPR3+=I31_PIRESULT;
	
       	if(EvaRegs.CMPR3<450) EvaRegs.CMPR3=450;
	    else if (EvaRegs.CMPR3>7200) EvaRegs.CMPR3=7200;  
	    // **第六路电流 ACDINT2 CMPR5 **
    I32_SAMPLE=AdcRegs.RESULT4>>4;
	I32_ERROR=I32_REF-I32_SAMPLE;
                
	        I32_SUMERROR+=I32_ERROR;
        	if(I32_SUMERROR<-2000) I32_SUMERROR=-2000;
            else if (I32_SUMERROR>2000) I32_SUMERROR=2000;
            I32_IRESULT=I32_SUMERROR;
            I32_IRESULT=I32_IRESULT>>4;
            I32_IRESULT=I32_IRESULT*I_KI;
           
	        I32_PRESULT=I32_ERROR*I_KP;
	        I32_PRESULT=I32_PRESULT>>8;
	        
	        I32_PIRESULT=I32_PRESULT+I32_IRESULT;
        
           	EvbRegs.CMPR6+=I32_PIRESULT;
	
       	if(EvbRegs.CMPR6<450) EvbRegs.CMPR6=450;
	    else if (EvbRegs.CMPR6>3200) EvbRegs.CMPR6=3200;
	    EvbRegs.CMPR6=7500;
	    // **第七路电流 ACDINT1 CMPR6 **
		I41_SAMPLE=AdcRegs.RESULT1>>4;
    	I41_ERROR=I41_REF-I41_SAMPLE;
                
	        I41_SUMERROR+=I41_ERROR;
        	if(I41_SUMERROR<-5000) I41_SUMERROR=-5000;
            else if (I41_SUMERROR>5000) I41_SUMERROR=5000;
            I41_IRESULT=I41_SUMERROR;
            I41_IRESULT=I41_IRESULT>>4;
            I41_IRESULT=I41_IRESULT*I_KI;
           
	        I41_PRESULT=I41_ERROR*I_KP;
	        I41_PRESULT=I41_PRESULT>>8;
	        
	        I41_PIRESULT=I41_PRESULT+I41_IRESULT;
         
           	EvaRegs.CMPR3+=I41_PIRESULT;
	
       	if(EvaRegs.CMPR3<450) EvaRegs.CMPR3=450;
	    else if (EvaRegs.CMPR3>3200) EvaRegs.CMPR3=3200;
	    EvaRegs.CMPR3=7500;
	    // **第八路电流 ACDINT0 T3CMPR **
	 I42_SAMPLE=AdcRegs.RESULT0>>4;
	I42_ERROR=I42_REF-I42_SAMPLE;
                
	        I42_SUMERROR+=I42_ERROR;
        	if(I42_SUMERROR<-5000) I42_SUMERROR=-5000;
            else if (I42_SUMERROR>5000) I42_SUMERROR=5000;
            I42_IRESULT=I42_SUMERROR;
            I42_IRESULT=I42_IRESULT>>4;
            I42_IRESULT=I42_IRESULT*I_KI;
           
	        I42_PRESULT=I42_ERROR*I_KP;
	        I42_PRESULT=I42_PRESULT>>8;
	        
	        I42_PIRESULT=I42_PRESULT+I42_IRESULT;
        
           	EvbRegs.T3CMPR+=I42_PIRESULT;
	
       	if(EvbRegs.T3CMPR<450) EvbRegs.T3CMPR=450;
	    else if (EvbRegs.T3CMPR>3200) EvbRegs.T3CMPR=3200;
	    
	    // **第九路电流 ACDINT0 T2CMPR**
	    I51_SAMPLE=AdcRegs.RESULT0>>4;
    	I51_ERROR=I51_REF-I51_SAMPLE;
      //fliter  
     //   I51_ERR=3*I51_ERROR1+2*I51_ERROR2+4*I51_ERR1-I51_ERR2;
      //  I51_ERR=I51_ERR>>3;
      // if(I51_ERROR>=800) I_KP=24;
      // else if (I51_ERROR<=-800) I_KP=24;  
      // else if (-800<I51_ERROR<800) I_KP=2;
	     //   I51_SUMERROR+=I51_ERROR;
        //	if(I51_SUMERROR<-2000) I51_SUMERROR=-2000;
         //   else if (I51_SUMERROR>2000) I51_SUMERROR=2000;
          //  I51_IRESULT=I51_SUMERROR;
          //  I51_IRESULT=I51_IRESULT>>10;
          //  I51_IRESULT=I51_IRESULT*I_KI;
      
         
	        I51_PRESULT=I51_ERROR*I_KP;
	        I51_PRESULT=I51_PRESULT>>8;
	        
	        I51_IRESULT=I51_IRESULT+I51_PRESULT/10+I51_SATERR/10;
	        
	        I51_PIRESULT=I51_PRESULT+I51_IRESULT;
	        
	    if(I51_PIRESULT<-1000) I51_PI=-1000;
	    else if (I51_PIRESULT>1000) I51_PI=1000;
	    else I51_PI=I51_PIRESULT;
         
           	EvaRegs.T2CMPR+=I51_PI;
         

	
       	if(EvaRegs.T2CMPR<450) EvaRegs.T2CMPR=450;
	    else if (EvaRegs.T2CMPR>3200) EvaRegs.T2CMPR=3200;
	   
	     I51_SATERR=I51_PI-I51_PIRESULT;
	    //I51_ERROR2=I51_ERROR1;
	   // I51_ERROR1=I51_ERROR;
	   // I51_ERR2=I51_ERR1;
	   // I51_ERR1=I51_ERR;
	    
	    
	    
	    // **第十路电流 ACDINT1 T4CMPR **
	/*	 I52_SAMPLE=AdcRegs.RESULT1>>4;
    	I52_ERROR=I52_REF-I52_SAMPLE;
                
	       // I52_SUMERROR+=I52_ERROR;
        //	if(I52_SUMERROR<-5000) I52_SUMERROR=-5000;
           // else if (I52_SUMERROR>5000) I52_SUMERROR=5000;
           // I52_IRESULT=I52_SUMERROR;
          //  I52_IRESULT=I52_IRESULT>>4;
          //  I52_IRESULT=I52_IRESULT*I_KI;
           
	        I52_PRESULT=I52_ERROR*I_KP;
	        I52_PRESULT=I52_PRESULT>>8;
	        
	        I52_PIRESULT=I52_PRESULT+I52_IRESULT;
        
           	EvbRegs.T4CMPR+=I52_PIRESULT;
	
       	if(EvbRegs.T4CMPR<450) EvbRegs.T4CMPR=450;
	    else if (EvbRegs.T4CMPR>3200) EvbRegs.T4CMPR=3200;	
        */
	
	//*******************************************	
	

	
	//---------清三个中断--------
	IFR=0x0000;
	PieCtrl.PIEIFR1.all = 0;
	PieCtrl.PIEACK.all=0xffff;

	AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
//	AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
	EvaRegs.EVAIFRA.all=0xffff;
	EvaRegs.EVAIFRB.all=0xffff;
	EvaRegs.EVAIFRC.all=0xffff;
	
	
	AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位排序器,回到CONVOO
	isss=isss+1;
	EINT;
	
	
}

init_availables()
{
  I_KP=2;           //电流环比例系数
  I_KI=1;         //电流环积分系数
  
  KP_T=10;           
  KI_T=8;           
  KD_T=20;
  KP=0;           
  KI=0;           
  KD=0;
  
  
   W1_SAMPLE=0;       
   W1_ERROR=0; 
   W1_ERR=0;       
   W1_REF=0;          
   W1_SUMERROR=0;     
   W1_IRESULT=0;
   W1_PRESULT=0;
   W1_DRESULT=0;
   W1_PIDRESULT=0;
   
   W2_SAMPLE=0;       
   W2_ERROR=0; 
   W2_ERR=0;       
   W2_REF=0;          
   W2_SUMERROR=0;     
   W2_IRESULT=0;
   W2_PRESULT=0;
   W2_DRESULT=0;
   W2_PIDRESULT=0;
   
   W3_SAMPLE=0;       
   W3_ERROR=0; 
   W3_ERR=0;       
   W3_REF=0;          
   W3_SUMERROR=0;     
   W3_IRESULT=0;
   W3_PRESULT=0;
   W3_DRESULT=0;
   W3_PIDRESULT=0;
   
   W4_SAMPLE=0;       
   W4_ERROR=0; 
   W4_ERR=0;       
   W4_REF=0;          
   W4_SUMERROR=0;     
   W4_IRESULT=0;
   W4_PRESULT=0;
   W4_DRESULT=0;
   W4_PIDRESULT=0;
  
   W5_SAMPLE=0;       
   W5_ERROR=0; 
   W5_ERR=0;       
   W5_REF=2641;          
   W5_SUMERROR=0;     
   W5_IRESULT=0;
   W5_PRESULT=0;
   W5_DRESULT=0;
   W5_PIDRESULT=0;
   
  I11_SAMPLE=0;
  I11_ERROR=0;        //本次电流偏差值 
  I11_REF=340;          //电流设定值
  I11_SUMERROR=0;     //电流偏差累计和
  I11_PIRESULT=0;    //电流PID结果
  I11_IRESULT=0;
  I11_PRESULT=0;
  
  I12_SAMPLE=0;
  I12_ERROR=0;        //本次电流偏差值 
  I12_REF=340;     //电流设定值
  I12_SUMERROR=0;     //电流偏差累计和
  I12_PIRESULT=0;    //电流PID结果
  I12_IRESULT=0;
  I12_PRESULT=0;
   
  I21_SAMPLE=0;
  I21_ERROR=0;        //本次电流偏差值 
  I21_REF=340;          //电流设定值
  I21_SUMERROR=0;     //电流偏差累计和
  I21_PIRESULT=0;    //电流PID结果
    I21_IRESULT=0;
  I21_PRESULT=0;
    
  I22_SAMPLE=0;
  I22_ERROR=0;        //本次电流偏差值 
  I22_REF=340;          //电流设定值
  I22_SUMERROR=0;     //电流偏差累计和
  I22_PIRESULT=0;    //电流PID结果
  I22_IRESULT=0;
  I22_PRESULT=0;
    
  I31_SAMPLE=0;
  I31_ERROR=0;        //本次电流偏差值 
  I31_REF=1365;          //电流设定值
  I31_SUMERROR=0;     //电流偏差累计和
  I31_PIRESULT=0;    //电流PID结果
  I31_IRESULT=0;
  I31_PRESULT=0;
    
  I32_SAMPLE=0;
  I32_ERROR=0;        //本次电流偏差值 
  I32_REF=1365;          //电流设定值
  I32_SUMERROR=0;     //电流偏差累计和
  I32_PIRESULT=0;    //电流PID结果
  I32_IRESULT=0;
  I32_PRESULT=0;
    
  I41_SAMPLE=0;
  I41_ERROR=0;        //本次电流偏差值 
  I41_REF=1365;          //电流设定值
  I41_SUMERROR=0;     //电流偏差累计和
  I41_PIRESULT=0;    //电流PID结果
  I41_IRESULT=0;
  I41_PRESULT=0;
  
  I42_SAMPLE=0;
  I42_ERROR=0;        //本次电流偏差值 
  I42_REF=1365;          //电流设定值
  I42_SUMERROR=0;     //电流偏差累计和
  I42_PIRESULT=0;    //电流PID结果
  I42_IRESULT=0;
  I42_PRESULT=0;
       
  I51_SAMPLE=0;
  I51_ERROR=0;        //本次电流偏差值 
  I51_REF=1365;          //电流设定值
  I51_SUMERROR=0;     //电流偏差累计和
  I51_PIRESULT=0;    //电流PID结果
  I51_IRESULT=0;
  I51_PRESULT=0;
  I51_ERROR1=0;
  I51_ERROR2=0;
  I51_ERR=0;
  I51_ERR1=0;
  I51_ERR2=0;
  I51_SATERR=0;
  I51_PI=0;
    
  I52_SAMPLE=0;
  I52_ERROR=0;        //本次电流偏差值 
  I52_REF=1365;          //电流设定值
  I52_SUMERROR=0;     //电流偏差累计和
  I52_PIRESULT=0;    //电流PID结果
  I52_IRESULT=0;
  I52_PRESULT=0;
}





//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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