Geração de sinal Stm32f103 Pwm (modulação por largura de pulso) usando temporizadores internos, keil MDK-ARMv6 e Stmcubemx Ide

Stm32f103 Pwm (modulación de ancho de pulso) Generación de señal mediante temporizadores internos, Keil MDK-ARMv6 y Stmcubemx Ide

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.

La fórmula de cálculo del valor para la generación de PWM no es muy compleja, solo requiere un conocimiento profundo del reloj, la estructura del temporizador y los registros del temporizador STM32F103. Dividí la fórmula y el método en pasos y es muy fácil saber calcular los valores. Abajo en el lado derecho se da la fórmula para calcular los valores para la generación de señal pwm específica y en el lado izquierdo se dan los términos genéricos utilizados en la fórmula con su definición/significado.

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)

Fórmula de cálculo de frecuencia Stm32f103 Pwm (modulación de ancho de pulso)

Resolución PWM

La resolución de Pwm es la cantidad de pasos de Pwm necesarios para generar una frecuencia de contador requerida. Generalmente usamos un número arbitrario aquí y luego lo ajustamos según nuestras necesidades. La resolución de Pwm debe estar entre 0 y 65535 ya que este valor se almacena en el registro de 16 bits y el recuento máximo de 16 bits es 65535.

Fórmula Stm32f103 pwm para el valor de Prescaller

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.
Nota: Pwm Resolution y Timer Precaller son registros de 16 bits y su valor no debe exceder 65535.
Ahora, mirando la fórmula final, necesitamos dos cosas en ella. Valor del preescalador del temporizador y resolución Pwm (pasos) . Puede asignar el valor del preescalador del temporizador o la resolución de Pwm (pasos) a un valor fijo y calcular el otro perímetro.

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

Configuración del temporizador 4 Stm32f103 utilizando la entrada del reloj HSI

Configuración del temporizador 4 Stm32f103 utilizando la entrada del reloj HSI
Stm32f103c8t6 tiene 4 temporizadores de 16 bits, 1,2,3 y 4 temporizadores. Podemos usar los cuatro temporizadores para generar una señal pwm (modulación de ancho de pulso). Cada temporizador tiene pines fijos a través de los cuales se puede emitir la señal PWM, llamados canales. Los temporizadores 1 y 2 están multiplexados con otros periféricos para usar su función pwm, debemos asegurarnos de que el temporizador no colisione con ninguna otra función periférica.
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.

Configuración del reloj de entrada del temporizador Stm32f103

Configuración del reloj de entrada del temporizador Stm32f103
Estoy usando un oscilador/reloj interno HSI (interno de alta velocidad). Después de dividir el reloj con preescaladores en diferentes etapas, el reloj final suministrado al temporizador 4 es 0,0625 MHz. La traducción de 0,0625 MHz a Hz es 62500 Hz. Por lo tanto, la frecuencia de entrada final del temporizador es 62500 Hz.

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.

Stm32f103 4 configuraciones del temporizador pwm

Stm32f103 4 configuraciones del temporizador pwm
Siguiente tutorial avanzado sobre salida variable PWM (Modulación de ancho de pulso) con microcontrolador Stm32f103 usando stm32cubemx y keil uvision ide. Haga clic en el botón de abajo para ir al tutorial.

Stm32f103 Salida Pwm variable usando temporizadores internos

Descarga el código del proyecto. La carpeta contiene el archivo de proyecto stmcubemx y los archivos de proyecto keil Mdk-Arm v5. Por favor danos tu opinión sobre el proyecto.

Mira el vídeo del proyecto aquí...

Carpeta de archivos/código

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.