单片机/MCU论坛
直播中

h1654155764.5398

12年用户 429经验值
擅长:嵌入式技术
私信 关注
[文章]

BLDC有感记录 改变马达方向的调试

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;
}

}

回帖(1)

h1654155764.5398

2022-9-11 15:34:14
非常感谢查阅,附件是详细程序,调试BLDC有感马达的方式,还有说明细节。感谢!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分