Six-Step BLDC Control Complimentary Switching Issue
Hello,
Currently, I'm working with BLDC motor controller development. I used complementary switching logic to control my MOSFET. Here, the motor is not starting at less duty cycle, the motor is starting only at 70percent duty cycle. and more noise also coming
anybody, please help me how to solve this issue.
Thank You.
Commutation code is:
case 1:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, duty_cycle);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, 0);
TIM1->CCR1 = duty_cycle;
TIM1->CCR2 = 0;
break;
case 2:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, duty_cycle);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_3, 0);
TIM1->CCR1 = duty_cycle;
TIM1->CCR3 = 0;
break;
case 3:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, duty_cycle);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_3, 0);
TIM1->CCR2 = duty_cycle;
TIM1->CCR3 = 0;
break;
case 4:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_3);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, duty_cycle);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, 0);
TIM1->CCR2 = duty_cycle;
TIM1->CCR1 = 0;
break;
case 5:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_2);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_3, duty_cycle);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, 0);
TIM1->CCR3 = duty_cycle;
TIM1->CCR1 = 0;
break;
case 6:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
HAL_TIMEx_PWMN_Stop(&htim1, TIM_CHANNEL_1);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_3, duty_cycle);
//__HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_2, 0);
TIM1->CCR3 = duty_cycle;
TIM1->CCR2 = 0;
break;
