Quiero crear un PWM a 100kHz que pueda tener 1000 pasos. por ejemplo, cuando configuro CCR1 en 0 %, el PWM está desactivado y cuando configuro CCR1 en 499, debería estar al 50 % y, obviamente, en CCR1 = 999, debería tener un ciclo de trabajo completo del 100 %.
El CPU_CLK es de 80 MHz... 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 40kHz... muy por debajo de los 100kHz... el Prescalare ya está al mínimo... ¿es esto imposible de lograr?
El chip es STM32L476.
La respuesta corta es que no es trivial con un reloj de 80 MHz a menos que utilice algunas técnicas de interpolación (ver más abajo).
En su caso, los pasos requeridos son 10 bits... por lo tanto, necesita al menos un reloj principal de 100 MHz.
El documento que vinculé en mi comentario muestra algunas formas complejas de lograr esto con frecuencias de reloj más bajas al difuminar y combinar más temporizadores (es bastante complejo). Aquí está el documento del propio STM.
Obviamente, otra solución sería usar otro MCU de la misma familia con velocidades de reloj más altas si su aplicación/presupuesto lo permite.
QueRosaBestia
Sean87
Autista
Tony Estuardo EE75
Arce
DEKKER
Arce