This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于F2812/F28335 BLDC换向的问题

最近调试BLDC,主要模块采用TI电机控制模块,有一问题一直不太清楚。BLDC假如采用霍尔开关作为换向传感器,但是在调用F281X_EV1_BLDC_PWM_Update(PWMGEN *p) 该函数时,电机正反转通过什么判断的?谢谢大家答复! 

void F281X_EV1_BLDC_PWM_Update(PWMGEN *p)
{

int32 Tmp;
int16 Period, GPR0_BLDC_PWM;
// Convert "Period" (Q15) modulation function to Q0
Tmp = (int32)p->PeriodMax*(int32)p->MfuncPeriod; // Q15 = Q0*Q15
Period = (int16)(Tmp>>15); // Q15 -> Q0 (Period)

// Check PwmActive setting
if (p->PwmActive==1) // PWM active high
GPR0_BLDC_PWM = 0x7FFF - p->DutyFunc;

else if (p->PwmActive==0) // PWM active low
GPR0_BLDC_PWM = p->DutyFunc;

// Convert "DutyFunc" or "GPR0_BLDC_PWM" (Q15) duty modulation function to Q0
Tmp = (int32)Period*(int32)GPR0_BLDC_PWM; // Q15 = Q0*Q15
// EvaRegs.CMPR1 = (int16)(Tmp>>15); // Q15 -> Q0

// State s1: current flows to motor windings from phase A->B, de-energized phase = C
if (p->CmtnPointer==0)
{ EPwm1Regs.AQCSFRC.all=0x8;
EPwm1Regs.AQCTLA.all=0x90;
EPwm2Regs.AQCTLB.all=0x90;
EPwm2Regs.AQCSFRC.all=0x2;
EPwm3Regs.AQCSFRC.all=0xA;
EPwm1Regs.CMPA.half.CMPA =(int16)(Tmp>>15);
}
// State s2: current flows to motor windings from phase A->C, de-energized phase = B
else if (p->CmtnPointer==1)
{ EPwm1Regs.AQCTLA.all=0x90;
EPwm1Regs.AQCSFRC.all=0x8;
EPwm2Regs.AQCSFRC.all=0x0a;
EPwm3Regs.AQCTLB.all=0x90;
EPwm3Regs.AQCSFRC.all=0x2;
EPwm1Regs.CMPA.half.CMPA =(int16)(Tmp>>15);
}
// State s3: current flows to motor windings from phase B->C, de-energized phase = A
else if (p->CmtnPointer==2)
{ EPwm1Regs.AQCSFRC.all=0xA;
EPwm2Regs.AQCTLA.all=0x90;
EPwm2Regs.AQCSFRC.all=0x8;
EPwm3Regs.AQCSFRC.all=0x2;
EPwm3Regs.AQCTLB.all=0x90;
EPwm2Regs.CMPA.half.CMPA =(int16)(Tmp>>15);
}
// State s4: current flows to motor windings from phase B->A, de-energized phase = C
else if (p->CmtnPointer==3)
{ EPwm1Regs.AQCSFRC.all=0x2;
EPwm1Regs.AQCTLB.all=0x90;
EPwm2Regs.AQCTLA.all=0x90;
EPwm2Regs.AQCSFRC.all=0x8;
EPwm3Regs.AQCSFRC.all=0xA;
EPwm2Regs.CMPA.half.CMPA =(int16)(Tmp>>15);
}
// State s5: current flows to motor windings from phase C->A, de-energized phase = B
else if (p->CmtnPointer==4)
{ EPwm1Regs.AQCTLB.all=0x90;
EPwm1Regs.AQCSFRC.all=0x2;
EPwm2Regs.AQCSFRC.all=0x0a;
EPwm3Regs.AQCTLA.all=0x90;
EPwm3Regs.AQCSFRC.all=0x8;
EPwm3Regs.CMPA.half.CMPA =(int16)(Tmp>>15);
}
// State s6: current flows to motor windings from phase C->B, de-energized phase = A
else if (p->CmtnPointer==5)
{ EPwm1Regs.AQCSFRC.all=0xA;
EPwm2Regs.AQCTLB.all=0x90;
EPwm2Regs.AQCSFRC.all=0x2;
EPwm3Regs.AQCSFRC.all=0x8;
EPwm3Regs.AQCTLA.all=0x90;
EPwm3Regs.CMPA.half.CMPA =(int16)(Tmp>>15);
}


}

  • 追问:

    程序中调用void F280X_HALL3_Read(HALL3 *p)函数时,却发现转动电机时,能够正确感测出霍尔开关A,B,C的变化,可是程序不执行

     F280X_HALL3_Next_State_Ptr(p);  这条语句,导致hall1.CmtnTrigHall的值始终为0。望解答!