Skip to main content
Associate
February 1, 2025
Question

A question about 6-step for X-NUCLEO-IHM16M1

  • February 1, 2025
  • 1 reply
  • 802 views
  • MC Workbench generates a 6 step_sensless code for the following board: 
  • Type: 6-Step / Voltage Mode 
  • Control: NUCLEO-G431RB 
  • Power: X-NUCLEO-IHM16M1
  • Motor: GimBal GBM2804H-100T 
  • Code: pwmc-3pwm.c in middle-ware 

      Question: In each step, it looks like PWM-ch1 (High-side MOSFET)  and  Enable pin( Low-side MOSFET) turn on at the same step?  For example,in Case STEP_1, both "PWM_ch1(for U)"  and "pwm-en-U-pin" are set to high, why it will not cause short circuit?   

  •  

 

/* pwmc-3pwm.c 6 steps DC brushless motor
/*_weak void ThreePwm_LoadNextStep( PWMC_ThreePwm_Handle_t * pHandle, int16_t Direction )*/
/* 372-442*/ 


 /* standard configuration */
 else 
 {
 if (pHandle->DemagCounter >= pHandle->_Super.DemagCounterThreshold )
 {
 pHandle->FastDemagUpdated = true;
 ThreePwm_ResetOCPolarity(pHandle);
 LL_TIM_GenerateEvent_COM( TIMx );
 }
 switch ( pHandle->_Super.NextStep )
 {
 case STEP_1:
 {
 LL_TIM_OC_SetCompareCH1 ( TIMx, (uint32_t)pHandle->_Super.CntPh );
 LL_TIM_OC_SetCompareCH2 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH3 ( TIMx, 0 );
 LL_GPIO_ResetOutputPin( pHandle->pParams_str->pwm_en_w_port, pHandle->pParams_str->pwm_en_w_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_u_port, pHandle->pParams_str->pwm_en_u_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_v_port, pHandle->pParams_str->pwm_en_v_pin );
 }
 break;
 case STEP_2:
 {
 LL_TIM_OC_SetCompareCH1 ( TIMx, (uint32_t)pHandle->_Super.CntPh );
 LL_TIM_OC_SetCompareCH2 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH3 ( TIMx, 0 );
 LL_GPIO_ResetOutputPin( pHandle->pParams_str->pwm_en_v_port, pHandle->pParams_str->pwm_en_v_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_u_port, pHandle->pParams_str->pwm_en_u_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_w_port, pHandle->pParams_str->pwm_en_w_pin );
 }
 break;
 case STEP_3:
 {
 LL_TIM_OC_SetCompareCH1 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH2 ( TIMx, (uint32_t)pHandle->_Super.CntPh );
 LL_TIM_OC_SetCompareCH3 ( TIMx, 0 );
 LL_GPIO_ResetOutputPin( pHandle->pParams_str->pwm_en_u_port, pHandle->pParams_str->pwm_en_u_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_v_port, pHandle->pParams_str->pwm_en_v_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_w_port, pHandle->pParams_str->pwm_en_w_pin );
 }
 break;
 case STEP_4:
 {
 LL_TIM_OC_SetCompareCH1 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH2 ( TIMx, (uint32_t)pHandle->_Super.CntPh );
 LL_TIM_OC_SetCompareCH3 ( TIMx, 0 );
 LL_GPIO_ResetOutputPin( pHandle->pParams_str->pwm_en_w_port, pHandle->pParams_str->pwm_en_w_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_u_port, pHandle->pParams_str->pwm_en_u_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_v_port, pHandle->pParams_str->pwm_en_v_pin );
 }
 break;
 case STEP_5:
 {
 LL_TIM_OC_SetCompareCH1 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH2 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH3 ( TIMx, (uint32_t)pHandle->_Super.CntPh );
 LL_GPIO_ResetOutputPin( pHandle->pParams_str->pwm_en_v_port, pHandle->pParams_str->pwm_en_v_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_u_port, pHandle->pParams_str->pwm_en_u_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_w_port, pHandle->pParams_str->pwm_en_w_pin );
 }
 break;
 case STEP_6:
 {
 LL_TIM_OC_SetCompareCH1 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH2 ( TIMx, 0 );
 LL_TIM_OC_SetCompareCH3 ( TIMx, (uint32_t)pHandle->_Super.CntPh );
 LL_GPIO_ResetOutputPin( pHandle->pParams_str->pwm_en_u_port, pHandle->pParams_str->pwm_en_u_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_v_port, pHandle->pParams_str->pwm_en_v_pin );
 LL_GPIO_SetOutputPin( pHandle->pParams_str->pwm_en_w_port, pHandle->pParams_str->pwm_en_w_pin );
 }
 break;
 }	​

 

1 reply

wcc689653Author
Associate
February 5, 2025

It is related to STSPIN830 driver logic. Refer to the datasheet of STSPIN 830, in 5.2 Logic input, When MODE='L', Logi input runs in this way.