Пример #1
0
void interrupt VectorNumber_Vpit0 pit0(void)    //1ms中断
{
     g_n1MsEventCount++;
     g_nSpeedControlPeriod++;     
     g_nDirectionControlPeriod++;
     SpeedControlOutput();
     MotorOutput();
     DirectionControlOutput();
     if(g_n1MsEventCount >= 5)
     {
         g_n1MsEventCount = 0;      
         SpeedCalculate();                    
     }
     else if(g_n1MsEventCount == 1) 
     {
          GetAngle(AngleResult);    
     }
     else if(g_n1MsEventCount == 2)
     {      
         AngleControl(); 
     }
     else if(g_n1MsEventCount == 3) 
     {
          g_nSpeedControlCount++;
          if(g_nSpeedControlCount >= 20) 
          {
              SpeedControl();
              g_nSpeedControlCount = 0;
              g_nSpeedControlPeriod = 0;     
           }
      }
      else if(g_n1MsEventCount == 4)
      {
         g_nDirectionControlCount++;
         if(g_nDirectionControlCount >= 2) 
         {
             DirectionControl();
             g_nDirectionControlCount = 0;
             g_nDirectionControlPeriod = 0;
          }
      }              
      PITTF_PTF0 = 1; 
}
Пример #2
0
void PIT_Signal(void)
{   
  DisableInterrupts;
  
  //--------------------------------------------------------------------------
  g_nSpeedControlPeriod++;
  SpeedControlOutput();  
  g_nDirectionControlPeriod ++;
  DirectionControlOutput();
  //---------------------------------------------------------------------------  
  g_nCarCount++;//中断服务片选
  switch(g_nCarCount)
  {
    //---------------------------计数:0   
  case 1:
   {   
      asm("nop"); 
      
   }; break;
    
     //---------------------------计数:1   AD采集                   第1个1ms  
  case 2:          
   {
      asm("nop");
      AngleCalculate(); 
      g_nDirectionGyro = (int16)LPLD_ADC_Get(ADC0, AD11); //方向陀螺仪采集
   }; break;
    
    //----------------------------计数:2   直立控制 电机PWM输出     第2个1ms
  case 3:
    { 
       asm("nop");
       AngleControl();
       MotorOutput();
    };  break;
    
    //----------------------------计数:3    车模速度控制            第3个1ms
  case 4:
    {  
       asm("nop");
       g_nSpeedControlCount++;  
      if(g_nSpeedControlCount>=20)        //控制是否进入速度更新环节
      { 
        SpeedControl();
        g_nSpeedControlCount = 0;
        g_nSpeedControlPeriod = 0; 
      }
    };break;
    
    //----------------------------计数:4    车模方向控制           第4个1ms
  case 5:   
    {  
      asm("nop");
      g_nCarCount=0; 
      
      g_nDirectionControlCount ++;
      DirectionVoltageSigma();           //电感采集、滤波                                             
      
      if( g_nDirectionControlCount >= 2)//控制是否进入方向更新环节
       {
          DirectionControl();
          g_nDirectionControlCount = 0;
          g_nDirectionControlPeriod = 0;
       }
    };break;
  }
  
  
  EnableInterrupts;
}