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

📄 example_280xadcsoc.c

📁 TI DSP TMS320F280X在马达控制上的应用
💻 C
📖 第 1 页 / 共 2 页
字号:
    U_SUM_SUM+=U_SUM;
    if(MAX_COUNT>15)
    {
    U_SUM_PJ=U_SUM_SUM>>4;
    MAX_COUNT=0;
    U_SUM_SUM=0;
    }
    temp_i=(I_SUM128/699);//I_SUM
	//----
	I_SUM_n[I_SUM_cnt]=temp_i;
    I_SUM_cnt++;
	if(I_SUM_cnt>7)
	   I_SUM_cnt=0;
	I_SUM_SUM=0;
	for(i=0;i<7;i++)
	  {
       I_SUM_SUM+=I_SUM_n[i];
	  }
    //---
	//I_SUM=temp_i;
	I_SUM=I_SUM_SUM>>3;
    I_SUM128=0;    
  }

  else
      ConversionCount++;
//----------------------------------------------
   if(ConversionCount==1)
   {
    temp=0;
	   if(MOTOR_ADJ<2501)
	   {
       for(i=0;i<9;i++)
         {
		  if(MT_325<61)
          temp+=Voltage3[MT_325+50+i];
		  else if(MT_325<71)
          temp+=Voltage3[MT_325+40+i];
		  else if(MT_325<81)
          temp+=Voltage3[MT_325+30+i];
		  else
		  temp+=Voltage3[MT_325+20+i];
           } 
		  }
		  else
		  {
           for(i=0;i<9;i++)
            {
		     if(MT_325<61)
               temp+=Voltage1[MT_325+50+i];
		     else if(MT_325<71)
               temp+=Voltage1[MT_325+40+i];
		     else if(MT_325<81)
               temp+=Voltage1[MT_325+30+i];
		     else
		       temp+=Voltage1[MT_325+20+i];
           } 
		   temp=temp*18;
		  }
       if(PROTECT_FLAG_reg.bit.A1_flag==1)//MC2
       {          
       TEMP2=temp>>3;
      // if(TEMP2>40)
      // TEMP2=TEMP2-40;
      // else
	  // TEMP2=0;
       Uint16Emf1=TEMP2; 
       }
       else//mc3
       {
       TEMP2=temp>>3;
      // if(TEMP2>20)
      // TEMP2=TEMP2-20;
      // else
	  // TEMP2=0;
       Uint16Emf1=TEMP2;
       } 
	   //-----------------------------
	 /* Uint16Emf3[7]=Uint16Emf3[6];
	  Uint16Emf3[6]=Uint16Emf3[5];
	  Uint16Emf3[5]=Uint16Emf3[4];
	  Uint16Emf3[4]=Uint16Emf3[3];
	  Uint16Emf3[3]=Uint16Emf3[2];
	  Uint16Emf3[2]=Uint16Emf3[1];
      Uint16Emf3[1]=Uint16Emf3[0];
      Uint16Emf3[0]=Uint16Emf1;
	  temp32=0;
	  for(i=0;i<7;i++)
	      {
           temp32+=Uint16Emf3[i];
		  }
	  Uint16Emf3_sum=temp32>>3*/
	   //-----------------------------
		S60_S90_QF();

       //------------------------------
       if(MOTOR_ADJ<51)
	     {
          motor_ctrl_1();
		  MT_325=60;
		  }
       else if(MOTOR_ADJ<501)
	     {
           motor_ctrl_2();
		  if(I_SUM>15)
			 I_SUM_test=(I_SUM-15)>>1;
		   else
		     I_SUM_test=0;
		   if(I_SUM_test>16)
		     I_SUM_test=16;
           MT_325=70+I_SUM_test;
           } 
       else if(MOTOR_ADJ<1001)
	     {
           motor_ctrl_3();
		   MT_325=80;
		   /*if(I_SUM>15)
			 I_SUM_test=I_SUM-15;
		   else
		     I_SUM_test=0;
		   if(I_SUM_test>40)
		     I_SUM_test=40;
           MT_325=50+I_SUM_test;*/
           }
       else if(MOTOR_ADJ<2501)
	     {
           motor_ctrl_4(); 
		   MT_325=80;
		   /*if(I_SUM>15)
			 I_SUM_test=I_SUM-15;
		   else
		     I_SUM_test=0;
		   if(I_SUM_test>40)
		     I_SUM_test=40;
           MT_325=50+I_SUM_test;*/
           } 
       else if(MOTOR_ADJ<5001)
	     {
           motor_ctrl_4_1(); 
		   MT_325=80;
		  /* if(I_SUM>15)
			 I_SUM_test=I_SUM-15;
		   else
		     I_SUM_test=0;
		   if(I_SUM_test>20)
		     I_SUM_test=20;
           MT_325=70+I_SUM_test;*/
           } 
       else if(MOTOR_ADJ<15001)
	     {
           motor_ctrl_5(); 
		   MT_325=96;
          /* MT_325=75+(MOTOR_ADJ>>9);
		   if(MT_325>128)
		      MT_325=128;*/
           } 
		  else if(MOTOR_ADJ<25001)
	     {
           motor_ctrl_6(); 
           MT_325=128;
           }
		  else if(MOTOR_ADJ<30001)
	     {
           motor_ctrl_7(); 
           MT_325=128;
           }
          else if(MOTOR_ADJ<35001)
	     {
              motor_ctrl_8();
           MT_325=128;
           }    
          else 
	     {
              motor_ctrl_9();
           MT_325=128;
           }                                       
       //------------------------------
   }
      // Reset the watchdog counter
   ////ServiceDog();
  //----------------------------------------------------
  AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;         // Reset SEQ1
  AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;       // Clear INT SEQ1 bit
  PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;   // Acknowledge interrupt to PIE
  return;
}
  //-------------------------------------
void motor_ctrl_1(void)
  {
   
  }
//-------------------------------------
void motor_ctrl_2(void)
  {


   //EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up
   EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; //2000      // Set timer period
   EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // Disable phase loading
   EPwm1Regs.TBPHS.half.TBPHS = 0x0000;       // Phase is 0
   EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
   //XZLEPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2;   // Clock ratio to SYSCLKOUT
   //XZLEPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
   EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;   // Clock ratio to SYSCLKOUT
   EPwm1Regs.TBCTL.bit.CLKDIV = 0;

   // Setup shadow register load on ZERO
   EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;   
   
   // Set Compare values
   EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA;    // Set compare A value EPWM1_CMPA
   EPwm1Regs.CMPB = EPWM1_MIN_CMPB;              // Set Compare B value

   // Set actions
   EPwm1Regs.AQCTLA.bit.ZRO =AQ_SET;           // Set PWM1A on Zero
   EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;             // Clear PWM1A on event A, up count

   EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;            // Set PWM1B on Zero
   EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;          // Clear PWM1B on event B, up count
   
   // Interrupt where we will change the Compare Values
   EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
   EPwm1Regs.ETSEL.bit.INTEN = 1;                // Enable INT
   EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;           // Generate INT on 3rd event   

   // a pointer to the correct ePWM registers
   epwm1_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA & CMPB 
   epwm1_info.EPwm_CMPB_Direction = EPWM_CMP_UP;
   epwm1_info.EPwmTimerIntCount = 0;             // Zero the interrupt counter
   epwm1_info.EPwmRegHandle = &EPwm1Regs;        // Set the pointer to the ePWM module
   epwm1_info.EPwmMaxCMPA = EPWM1_MAX_CMPA;      // Setup min/max CMPA/CMPB values
   epwm1_info.EPwmMinCMPA = EPWM1_MIN_CMPA;       
   epwm1_info.EPwmMaxCMPB = EPWM1_MAX_CMPB;    
   epwm1_info.EPwmMinCMPB = EPWM1_MIN_CMPB;     
   	EALLOW;		
	EPwm2Regs.HRCNFG.all = 0x0;	
	EPwm2Regs.HRCNFG.bit.EDGMODE = HR_FEP;                //MEP control on Rising edge
	EPwm2Regs.HRCNFG.bit.CTLMODE = HR_CMP;
	EPwm2Regs.HRCNFG.bit.HRLOAD  = HR_CTR_ZERO;
	
	EDIS;  

}
/*
*/
void InitEPwm2Example()
{
   EPwm2Regs.TBPRD = EPWM2_TIMER_TBPRD; //2000      // Set timer period
   EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;    // Disable phase loading
   EPwm2Regs.TBPHS.half.TBPHS = 0x0000;       // Phase is 0
   EPwm2Regs.TBCTR = 0x0000;                  // Clear counter
   EPwm2Regs.TBCTL.bit.HSPCLKDIV = 4;   // Clock ratio to SYSCLKOUT
   EPwm2Regs.TBCTL.bit.CLKDIV = 4;

   // Setup shadow register load on ZERO
   EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
   EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;   

   // Set Compare values
   EPwm2Regs.CMPA.half.CMPA = EPWM2_MIN_CMPA;    // Set compare A value
   EPwm2Regs.CMPB = EPWM2_MIN_CMPB;              // Set Compare B value

   // Set actions
   EPwm2Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
   EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count

   EPwm2Regs.AQCTLB.bit.ZRO = AQ_CLEAR;            // Set PWM1B on Zero
   EPwm2Regs.AQCTLB.bit.CBU = AQ_SET;          // Clear PWM1B on event B, up count
   
   // Interrupt where we will change the Compare Values
   EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
   EPwm2Regs.ETSEL.bit.INTEN = 1;                // Enable INT
   EPwm2Regs.ETPS.bit.INTPRD = ET_3RD;           // Generate INT on 3rd event   

   epwm2_info.EPwm_CMPA_Direction = EPWM_CMP_UP; // Start by increasing CMPA & CMPB 
   epwm2_info.EPwm_CMPB_Direction = EPWM_CMP_UP;
   epwm2_info.EPwmTimerIntCount = 0;             // Zero the interrupt counter
   epwm2_info.EPwmRegHandle = &EPwm2Regs;        // Set the pointer to the ePWM module
   epwm2_info.EPwmMaxCMPA = EPWM2_MAX_CMPA;      // Setup min/max CMPA/CMPB values
   epwm2_info.EPwmMinCMPA = EPWM2_MIN_CMPA;       
   epwm2_info.EPwmMaxCMPB = EPWM2_MAX_CMPB;    
   epwm2_info.EPwmMinCMPB = EPWM2_MIN_CMPB;       

}  
//-------------------------------------
void InitGpio()
{
   // Enable GPIO outputs on GPIO8 - GPIO11, set it high
   EALLOW;
  /* GpioCtrlRegs.GPAPUD.bit.GPIO2 = 0;   // Enable pullup on GPIO8
   GpioDataRegs.GPASET.bit.GPIO2 = 1;   // Load output latch
   GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;  // GPIO8 = GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;   // GPIO8 = output
   */
   //设置LED故障引脚 D4
   GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;   // Enable pullup on GPIO8
   GpioDataRegs.GPASET.bit.GPIO25 = 1;   // Load output latch
   GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 0;  // GPIO8 = GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO25 = 1;   // GPIO8 = output
   //设置LED故障引脚 D5
   GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;   // Enable pullup on GPIO8
   GpioDataRegs.GPASET.bit.GPIO26 = 1;   // Load output latch
   GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 0;  // GPIO8 = GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO26 = 1;   // GPIO8 = output
   //设置LED故障引脚 D6
   GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;   // Enable pullup on GPIO8
   GpioDataRegs.GPASET.bit.GPIO13 = 1;   // Load output latch
   GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;  // GPIO8 = GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;   // GPIO8 = output   
   //设置LM2678控制引脚 
   /*GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;   // Enable pullup on GPIO8
   GpioDataRegs.GPASET.bit.GPIO5 = 1;   // Load output latch
   GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0;  // GPIO8 = GPIO8
   GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;   // GPIO8 = output 
   */ 
   // Enable Trip Zone inputs on GPIO6 
   GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;   // Enable pullup on GPIO6
   GpioCtrlRegs.GPAQSEL1.bit.GPIO6 = 3; // asynch input
   GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;  // GPIO6 = GPIO6
   GpioCtrlRegs.GPADIR.bit.GPIO6 = 0;   // GPIO6 = input 
   // Enable Trip Zone inputs on GPIO7 
   GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;   // Enable pullup on GPIO7
   GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 3; // asynch input
   GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;  // GPIO7 = GPIO7 
   GpioCtrlRegs.GPADIR.bit.GPIO7 = 0;   // GPIO7 = input     
   // Enable Trip Zone inputs on GPIO8 
   GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0;   // Enable pullup on GPIO8
   GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 3; // asynch input
   GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0;  // GPIO8 = GPIO8 
   GpioCtrlRegs.GPADIR.bit.GPIO8 = 0;   // GPIO8 = input    
   // Enable Trip Zone inputs on GPIO9 
   GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;   // Enable pullup on GPIO9
   GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 3; // asynch input
   GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0;  // GPIO9 = GPIO9 
   GpioCtrlRegs.GPADIR.bit.GPIO9 = 0;   // GPIO9 = input    
    // Enable Trip Zone inputs on GPIO31 
   GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0;   // Enable pullup on GPIO31
   GpioCtrlRegs.GPAQSEL2.bit.GPIO31 = 3; // asynch input
   GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0;  // GPIO31 = GPIO31 
   GpioCtrlRegs.GPADIR.bit.GPIO31 = 0;   // GPIO31 = input    
    // Enable Trip Zone inputs on GPIO32 
   GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;   // Enable pullup on GPIO32
   GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; // asynch input
   GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;  // GPIO32 = GPIO32 
   GpioCtrlRegs.GPBDIR.bit.GPIO32 = 0;   // GPIO32 = input  
    // Enable Trip Zone inputs on GPIO33 
   GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0;   // Enable pullup on GPIO33
   GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; // asynch input
   GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;  // GPIO33 = GPIO33 
   GpioCtrlRegs.GPBDIR.bit.GPIO33 = 0;   // GPIO33 = input         
   EDIS;
}
//-------------------------------------
void LED_EXE()
{
    if(LED_COUNT<8000)
	{
    GpioDataRegs.GPACLEAR.bit.GPIO26=1;
	}
    else
	{
    GpioDataRegs.GPASET.bit.GPIO26=1;
	}
	//11-12
   if(UART_COUNT<1)
	GpioDataRegs.GPACLEAR.bit.GPIO25=1;
	else
	GpioDataRegs.GPASET.bit.GPIO25=1;
	   // Reset the watchdog counter
    ////ServiceDog();
}
//-------------------------------------

⌨️ 快捷键说明

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