Cómo configurar la frecuencia PWM con granalidad alta

2

Quiero crear un PWM a 100kHz que puede tener 1000 pasos. p.ej. cuando establezco CCR1 en 0%, el PWM está desactivado y cuando configuro CCR1 en 499 debería ser del 50% y, obviamente, en CCR1 = 999, debería tener un ciclo de trabajo completo del 100%.

La CPU_CLK es 80MHz ... pero no puedo lograrlo. Aquí está mi código hasta ahora:

  htim1.Instance = TIM1;
  htim1.Init.Prescaler = 0;
  htim1.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED2;
  htim1.Init.Period = 1000-1;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

Esto me da un PWM con una frecuencia de 40 kHz ... muy por debajo de 100 kHz ... el Prescalare ya está en el mínimo ... ¿es esto imposible de lograr?

El chip es STM32L476.

    
pregunta DEKKER

1 respuesta

1

La respuesta corta es que no es trivial con un reloj de 80 MHz a menos que se obtengan algunas técnicas de tramado (ver más abajo).

$$ \ mathcal {f_ {clk}} = PWM_ {frequqncy} \ times2 ^ {steps} $$

En su caso, los pasos requeridos son 10 bits ... por lo tanto, necesita al menos un reloj principal de 100MHz.

El documento que vinculé en mi comentario, muestra algunas formas complejas de lograr esto con velocidades de reloj más bajas al mezclar y combinar más temporizadores (es bastante complejo). Aquí está el document por el propio STM.

Obviamente, otra solución sería utilizar otra MCU de la misma familia con velocidades de reloj más altas si su aplicación / presupuesto lo permite.

    
respondido por el Sean87

Lea otras preguntas en las etiquetas