STM32F4 HAL - PWM Canales de cambio de fase en el mismo temporizador

1

He configurado mi temporizador TIMM STM32F407VG (STM32F4Discovery) usando el siguiente código:

void TIM4_Init(void)
{
    // Configure TIM4 for PWM
    hTim4.Instance = TIM4;
    hTim4.Init.Prescaler= 42000 - 1; // (84MHz / 42000 = 2KHz)
    hTim4.Init.CounterMode = TIM_COUNTERMODE_UP;
    hTim4.Init.Period = 2000 - 1; // Period = 2000 -> 1 second
    hTim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&hTim4);

    // Configure channels 1-4 for TIM4,
    // each channel is mapped to a GPIO pin
    TIM_OC_InitTypeDef oc_config;
    oc_config.OCMode = TIM_OCMODE_PWM1;
    oc_config.Pulse = 1000;
    oc_config.OCNIdleState = TIM_OCNIDLESTATE_RESET;
    oc_config.OCIdleState = TIM_OCIDLESTATE_RESET;
    oc_config.OCFastMode = TIM_OCFAST_DISABLE;

    HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_1);
    HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_3);

    // Flip the OC polarity for channels 2 and 4
    oc_config.OCPolarity = TIM_OCPOLARITY_LOW;
    HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_2);
    HAL_TIM_PWM_ConfigChannel(&hTim4, &oc_config, TIM_CHANNEL_4);

    // I want to shift channel 1-4 90 degrees apart...
    HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_2);
    HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_3);
    HAL_TIM_PWM_Start(&hTim4, TIM_CHANNEL_4);
}

Cada canal se asigna a un pin GPIO, con la intención de conducir un motor paso a paso.

Me gustaría generar una señal, con un ciclo de trabajo de 25% cada una, donde las fases se han desplazado 90 grados.

¿Cómo hago para cambiar las fases en los 4 canales?

¿Debo configurar otro temporizador y usarlo como una interrupción sobre la cual puedo llamar a HAL_TIM_PWM_Start () para cada canal en el tiempo apropiado?

    

1 respuesta

-1

Tengo entendido que la PWM trifásica es posible con "temporizadores avanzados", TIM1 y TIM8, pero no creo que la 4-fase sea con el uso simple de PWM. Dicho esto, ¿no es 180 grados simplemente el negativo de tu grado 0 y similar con 270 y 90? Por lo tanto, necesita generar DOS fases y simplemente cambiar el estado de OC activo para dos de sus cuatro canales en cualquier temporizador de cuatro canales.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas