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.
最近调试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。望解答!