Forums

BLDC Drive[Starting & Speed Control Problem] Plz Help me[DSP56f803]

Started by microLOGIX embedded December 8, 2004
Hai to All,
 I am Muthu,working on motorola DSP56F80x series processor.
 Currently i am developing a BLDC Drive,i have some problems.
 
 Sensored BLDC Drive
 -------------------
 i)  I connected SensorA in TMRA0[Taking Captrure for Speed Reference Here]
  Sensor B--> PortA3[Configured as interrupt port]
  Sensor C--> PortA2[Configured as interrupt port]
 
 my Program
 ----------
 
 Read_HallSensor();
 Commutate();
 
 Problem
 -------
 i) Starting Problem
  Motor is not Started ,i have to rotate through hand.
   How do i eliminate this one.
 ii)I am trying to implement the PI Algorithms
  How to Map the Duty Cycle & Speed
  Trial & Error Method or Any other Method
 For Speed Control
 -----------------
 This my code for Speed Control.I am Calling PIControl Library Routine
 R_P_M = (unsigned int)((1/(Time_Constant * Capture_Value))*60);
 Error_Value = MC3_controllerPItype1(15000, R_P_M, &PI_params);
 
  if(Error_Value > 1000)
   {
    
     Duty_Cycle = (int)Error_Value/1000;
     PWMA_PWMVAL0 +=Duty_Cycle;
     PWMA_PWMVAL1 +=Duty_Cycle;
     PWMA_PWMVAL2 +=Duty_Cycle;
     PWMA_PWMVAL3 +=Duty_Cycle;
     PWMA_PWMVAL4 +=Duty_Cycle;
     PWMA_PWMVAL5 +=Duty_Cycle; 
    
    
   }
  // else if(DesVoltage < 800 && DesVoltage >0)
   else if(Error_Value < 1000 && Error_Value >0)
   {
    // Duty_Cycle1 = (int)(DesVoltage/10);
     Duty_Cycle1 = (int)(Error_Value/20);
     if(Error_Value>200)
     PWMA_PWMCM  -=Duty_Cycle1;
   }
  // else if(DesVoltage < 0)
   else if(Error_Value < 0)
   {
    Error_Value = (-1)*Error_Value;
   //DesVoltage = (-1)*DesVoltage;
   if(Error_Value > 1000)
   // if(DesVoltage > 1000)
   {
   
    // Duty_Cycle = (int)DesVoltage/1000;
     Duty_Cycle = (int)Error_Value/1000;
     PWMA_PWMVAL0  -=Duty_Cycle;
     PWMA_PWMVAL1  -=Duty_Cycle;
     PWMA_PWMVAL2  -=Duty_Cycle;
     PWMA_PWMVAL3 
-=Duty_Cycle;
     PWMA_PWMVAL4  -=Duty_Cycle;
     PWMA_PWMVAL5  -=Duty_Cycle;
   }
  // if(DesVoltage < 800 && DesVoltage >0)
   if(Error_Value < 1000 && Error_Value >0)
   {
    // Duty_Cycle1 = (int)(DesVoltage/10);
     Duty_Cycle1 = (int)(Error_Value/20);
     PWMA_PWMCM  +=Duty_Cycle1;
     
   }
    
   }
  
   Temp = PWMA_PMCTL;
   PWMA_PMCTL = 0x0003;

I am Expecting solution for my problem.PLZ Help me.
By
Muthu

Yahoo! India Matrimony: Find your life partner online.