本帖最后由 adandan 于 2019-6-17 21:12 编辑
case 3:
if (MotorA.FlagBEMF == 0) //未检测到过零事件 MotorA.FlagBEMF 过零事件标志
{
if (MotorA.PWMTicks >= 4)//消磁
{
if ( BEMF()) //判断是否过零点
{
MotorA.FlagSwitchStep = MotorA.PWMTicksPre >> 4; //延迟30电角度 PWMTicksPre记录的是上一步的时间
MotorA.FlagBEMF = 1; //检测到过零事件,不再检测
}
}
}
else
{
if (MotorA.FlagSwitchStep == 0) //延迟时刻到
{
BLDC_SwitchStep(); //换向
BEMF_Cnt++; //换向计数加1
}
else
{
MotorA.FlagSwitchStep--; //延时时刻未到,自减
}
}
if (BEMF_Cnt >= 800000) //800000次换向之后,停止
{
MotorA.State++; //状态加1
BEMF_Cnt = 0; //换向计数清零
}
break;
case 4:
BLDC_Stop();
break;
|