Este tutorial trata sobre cómo generar una señal pwm (modulación de ancho de pulso) con el microcontrolador stm32f103 utilizando sus temporizadores de hardware internos. El código de inicialización de los componentes/periféricos del microcontrolador Stm32f103 se genera utilizando el ide stmcubemx y el código se escribe y compila en el ide keil MDK-ARMv6. Un LED simple se deriva de una salida de señal PWM fija. El LED se atenúa y parpadea según el ciclo de trabajo y la frecuencia que emite un pin PWM en particular. En el tutorial se genera/emite una única señal PWM, pero puede generar múltiples señales PWM con el mismo método y configuración.
Enviaré una señal pwm (modulación de ancho de pulso) de frecuencia de 1 Hz y ciclo de trabajo del 50% usando el temporizador 4 del microcontrolador stm32f103. El temporizador 4 canal 1 se utiliza para emitir la señal. El canal 1 corresponde al pin PB6 del microcontrolador stm32f103. Se conecta un LED al PB6 donde se puede ver la salida pwm. La frecuencia de 1 Hz en el dominio del tiempo es T=1/f > T=1/1 Hz > T=1 s. Entonces, la frecuencia de 1 Hz se traduce en 1 si mi ciclo de trabajo es del 50%, por lo que el LED en el pin PB6 parpadeará a una velocidad de medio segundo.
¿Cómo generar la frecuencia PWM deseada/específica? Derivación de fórmulas y cálculos.
Frecuencia de tic del temporizador La frecuencia de tic del temporizador es la frecuencia con la que el temporizador completa su ciclo de instrucciones.
Frecuencia del contador La frecuencia del contador es la frecuencia con la que queremos que aumente el contador de tics del temporizador.
|
Fórmula de cálculo de frecuencia Stm32f103 Pwm (modulación de ancho de pulso)
|
Resolución PWM
|
Fórmula Stm32f103 pwm para el valor de Prescaller
|
Reemplazar la frecuencia del contador con su fórmula en las ecuaciones de valores del preescalador del temporizador produce la ecuación que se muestra en el lado izquierdo. Ahora es fácil determinar el valor del preescalador.
|
Pasos de inicialización del código Stmcube-Mx y generación de código keil MDK-ARM
Supongo que está familiarizado con el proceso de creación del proyecto stmcube mx y conoce los pasos necesarios. Si no, haz un tutorial sencillo.
- Introducción a stmcube-mx y MDK-ARM v5

Los temporizadores 3 y 4 son independientes y no chocan con ninguna otra función periférica. Por eso es bueno usarlos. Estoy usando Timer 4 en el proyecto/tutorial.
Estoy usando la fuente del reloj interno, así que seleccione esta casilla de verificación en la configuración del temporizador. Estoy usando el temporizador 4, canal 1 para salida pwm, así que seleccioné el canal 1. El canal 1 corresponde al PB6 del microcontrolador stm32f103. El diagrama de configuración se proporciona en el lado derecho.

Cálculo de valores para salida de señal pwm de frecuencia de 1 Hz y ciclo de trabajo del 50%
En la configuración final del temporizador, es hora de ingresar el período del contador/resolución de Pwm (pasos), el valor del preescalador y el pulso requerido. El pulso es el ciclo de trabajo requerido y en nuestro caso es del 50%. Resolvamos la fórmula superior de acuerdo con la fórmula de cálculo de pwm proporcionada anteriormente.
Valores dados:
Reloj de entrada del temporizador = 0,0625 MHz o 62500 Hz
Frecuencia requerida = 1 Hz (en el dominio del tiempo 1 segundo)
Periodo de contador/resolución Pwm (pasos) = 3906 (elegí un valor aleatorio)
Frecuencia del contador = frecuencia requerida * Periodo del contador
Frecuencia del contador = 1 Hz * 3906 = 3906 Hz
Valor del preescalador del temporizador = (reloj de entrada del temporizador/frecuencia del contador)-1
Valor del preescalador del temporizador = (62.500 Hz / 3.906 Hz) – 1 = 15
Ahora tenemos el valor del Temporizador Presaller, Período de Contador/Resolución Pwm (Pasos) y también están en el rango de 16 bits. Ahora ingrese los valores en la configuración 4 del temporizador. Seleccioné el contador para que esté en modo ARRIBA (contando de 0 a 3906). El pulso es el ciclo de trabajo, en nuestro caso es 50%, por lo que 3906*50% > 3906*0,5 = 1953.


