2 votos

Cómo ajustar la frecuencia PWM con granualidad

Quiero crear un PWM en 100 kHz que puede tener 1000 pasos. p.e. cuando pongo CCR1 a 0%, el PWM esta apagado y cuando pongo CCR1 a 499 deberia ser 50% y obviamente en CCR1 = 999, deberia ser ciclo de trabajo completo de 100%.

El CPU_CLK es 80MHz ... pero no puedo lograr esto. aquí está mi código hasta el momento:

  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 frecuencia de 40kHz....muy por debajo de 100kHz...el Prescalare ya está al mínimo...¿es esto imposible de conseguir?

El chip es STM32L476.

1voto

Christian Oudard Puntos 13461

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

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

En tu caso, los pasos requeridos son de 10 bits... por lo que necesitas al menos un reloj principal de 100MHz.

El documento que he enlazado en mi comentario, muestra algunas formas complejas de lograr esto con velocidades de reloj más bajas por dithering y la combinación de más temporizadores (es bastante complejo). Aquí está el documento por el propio STM.

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X