AnsweredAssumed Answered

Commutation delay hall sensor config

Question asked by Lukasz Przenioslo on Sep 13, 2016
Latest reply on Sep 17, 2016 by Lukasz Przenioslo
Hello there,
I am trying to figure out how to interface with the Hall sensor module in STM32F4. I am not sure what does the commutation parameter (using mxCube) stand for really. Looking in the init code:

  * @brief  Initializes the TIM Hall Sensor Interface and create the associated handle.
  * @param  htim: pointer to a TIM_HandleTypeDef structure that contains
  *                the configuration information for TIM module.
  * @param  sConfig: TIM Hall Sensor configuration structure
  * @retval HAL status
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef* sConfig)
  TIM_OC_InitTypeDef OC_Config;
  /* Check the TIM handle allocation */
  if(htim == NULL)
    return HAL_ERROR;
  /* Set the TIM state */
  htim->State= HAL_TIM_STATE_BUSY;
  /* Init the low level hardware : GPIO, CLOCK, NVIC and DMA */
  /* Configure the Time base in the Encoder Mode */
  TIM_Base_SetConfig(htim->Instance, &htim->Init);
  /* Configure the Channel 1 as Input Channel to interface with the three Outputs of the  Hall sensor */
  TIM_TI1_SetConfig(htim->Instance, sConfig->IC1Polarity, TIM_ICSELECTION_TRC, sConfig->IC1Filter);
  /* Reset the IC1PSC Bits */
  htim->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC;
  /* Set the IC1PSC value */
  htim->Instance->CCMR1 |= sConfig->IC1Prescaler;
  /* Enable the Hall sensor interface (XOR function of the three inputs) */
  htim->Instance->CR2 |= TIM_CR2_TI1S;
  /* Select the TIM_TS_TI1F_ED signal as Input trigger for the TIM */
  htim->Instance->SMCR &= ~TIM_SMCR_TS;
  htim->Instance->SMCR |= TIM_TS_TI1F_ED;
  /* Use the TIM_TS_TI1F_ED signal to reset the TIM counter each edge detection */ 
  htim->Instance->SMCR &= ~TIM_SMCR_SMS;
  htim->Instance->SMCR |= TIM_SLAVEMODE_RESET;
  /* Program channel 2 in PWM 2 mode with the desired Commutation_Delay*/
  OC_Config.OCMode = TIM_OCMODE_PWM2;
  OC_Config.Pulse = sConfig->Commutation_Delay;
  TIM_OC2_SetConfig(htim->Instance, &OC_Config);
  /* Select OC2REF as trigger output on TRGO: write the MMS bits in the TIMx_CR2
    register to 101 */
  htim->Instance->CR2 &= ~TIM_CR2_MMS;
  htim->Instance->CR2 |= TIM_TRGO_OC2REF;
  /* Initialize the TIM state*/
  htim->State= HAL_TIM_STATE_READY;
  return HAL_OK;

It seems that the timer is slaved through TRGO, but I cant quite understand this. I tried to increase commutation delay and rotate my BLDC motor shaft with hand in order to see either Input capture compare 1 interrupt will be delayed by the commutation time, but it was not. Am I understanding correctly that this is the destination of this parameter?
Also it is a bit confusing for me that commutation name is at any point connected with the hall sensor configuration, as this term is more likely used for motor current commutation.

I would really appreciate all help regarding this.