BLDC有感记录 改变方向的调试
//SysVariable.MotoPosition = (hu<<2) + (hw<<1) + hv;//读出最新的霍尔位置信息 反转
SysVariable.MotoPosition = (hv<<2) + (hw<<1) + hu;//读出最新的霍尔位置信息 正转 顺时针
void Moto_CW(void)
{
switch(SysVariable.MotoPosition) //根据HALL的位置进行换向 假设 1-3-2-6-4-5为正转 那么 1-5-4-6-2-3为反转
{
case 1: //SetPwmWH_H; SetPwmVL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_3,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_3, TIM_CCx_Enable);
Set_PWM2L_H;
break;
case 3: // SetPwmWH_H; SetPwmUL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM2L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_3,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_3, TIM_CCx_Enable);
Set_PWM1L_H;
break;
case 2: // SetPwmVH_H; SetPwmUL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM2L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_2,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_2, TIM_CCx_Enable);
Set_PWM1L_H;
break;
case 6: // SetPwmVH_H; SetPwmWL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM2L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_2,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_2, TIM_CCx_Enable);
Set_PWM3L_H;
break;
case 4: // SetPwmUH_H; SetPwmWL_H;
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM2L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_1,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_1, TIM_CCx_Enable);
Set_PWM3L_H;
break;
case 5: // SetPwmUH_H; SetPwmVL_H;
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_1,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_1, TIM_CCx_Enable);
Set_PWM2L_H;
break;
default:break;
}
}
void Moto_CCW(void)
{
switch(SysVariable.MotoPosition) //根据HALL的位置进行换向 假设 1-3-2-6-4-5为正转 那么 1-5-4-6-2-3为反转
{ //1变为了6 001变为110
case 6: //SetPwmWH_H; SetPwmVL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_3,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_3, TIM_CCx_Enable);
Set_PWM2L_H;
break;
case 4: //3变为了4 011变为100
// SetPwmWH_H; SetPwmUL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM2L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_3,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_3, TIM_CCx_Enable);
Set_PWM1L_H;
break;
case 5: //2变为了5 010变为101
// SetPwmVH_H; SetPwmUL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM2L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_2,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_2, TIM_CCx_Enable);
Set_PWM1L_H;
break;
case 1: //1变为了6 001变为110
// SetPwmVH_H; SetPwmWL_H;
TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM2L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_2,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_2, TIM_CCx_Enable);
Set_PWM3L_H;
break;
case 2: // SetPwmUH_H; SetPwmWL_H;
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM2L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_1,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_1, TIM_CCx_Enable);
Set_PWM3L_H;
break;
case 3: // SetPwmUH_H; SetPwmVL_H;
TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);
Set_PWM1L_L;
Set_PWM3L_L;
TIM_SelectOCxM(TIM1,TIM_Channel_1,TIM_OCMode_PWM1);
TIM_CCxCmd(TIM1,TIM_Channel_1, TIM_CCx_Enable);
Set_PWM2L_H;
break;
default:break;
}
}
更多回帖