Practica04 MM UlisesDanielSalinasChávez

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

UNIVERSIDAD DE GUANAJUATO

DIVISIÓN DE INGENIERÍAS
CAMPUS IRAPUATO - SALAMANCA

GENERACIÓN DE UNA SEÑAL PWM

PRACTICA 04

MATERIA:
MICROPROCESADORES Y MICROCONTROLADORES

PRESENTA:
ULISES DANIEL SALINAS CHÁVEZ

PROFESOR:
Dr. OSCAR GERARDO IBARRA MANZANO

Salamanca, Guanajuato. 06/10/2024

21
1. Introducción
En la actualidad, la modulación por ancho de pulso (PWM) es una técnica esencial en el
ámbito de la electrónica, especialmente en el control de dispositivos y sistemas. Esta práctica
se centró en la configuración y uso del microcontrolador STM32, explorando su capacidad
para generar y controlar señales PWM a través del temporizador TIM2. La comprensión de
estos conceptos es fundamental para la implementación de soluciones eficientes en
aplicaciones industriales y de consumo. Durante la práctica, se profundizó en la interacción
entre hardware y software, así como en la visualización y ajuste dinámico de los parámetros
de la señal, lo que resulta crucial para el desarrollo de sistemas electrónicos.

2. Antecedentes
2.1 La modulación PWM
La modulación por ancho de pulso (PWM, Pulse Width Modulation) es una técnica
ampliamente utilizada en electrónica para el control de energía en diversos dispositivos. En
lugar de aplicar una señal continua variable (analógica), la PWM utiliza una serie de pulsos
discretos cuya duración puede ser ajustada. Al modificar el ancho de estos pulsos, se regula
la cantidad de energía entregada a un dispositivo, lo que permite un control eficiente y
preciso.
Una de las principales ventajas de la PWM es su eficiencia energética, especialmente al
controlar cargas inductivas, como motores. La técnica minimiza la pérdida de energía al
operar en condiciones de conmutación rápida, lo que reduce el calor generado y mejora la
duración del equipo. Además, la PWM es esencial para aplicaciones que requieren
variaciones en la potencia, como el control de velocidad en motores eléctricos y la regulación
del brillo en luces LED.

Figura 1. Principio de operación de la modulación por ancho de pulso (PWM)

Conceptos Básicos
La PWM se basa en el concepto de ciclo de trabajo (duty cycle), que representa el porcentaje
del tiempo en que la señal está activa en comparación con el ciclo total. Por ejemplo, un ciclo

pág. 2
de trabajo del 50% indica que la señal está encendida la mitad del tiempo. Este control del
ciclo de trabajo permite ajustar la potencia suministrada a un dispositivo de manera precisa.
Aplicaciones Comunes
La modulación por ancho de pulso tiene diversas aplicaciones en el ámbito industrial y
cotidiano. Algunas de las más comunes incluyen:
• Control de Motores: La PWM permite mantener un par constante y regular la
velocidad de motores eléctricos, mejorando su rendimiento y eficiencia.
• Sistemas de Iluminación: Se utiliza en la regulación del brillo de luces LED,
ofreciendo una iluminación más eficiente y adaptable a diferentes necesidades.
• Telecomunicaciones: La PWM es útil para minimizar interferencias y optimizar la
transmisión de señales.
Ventajas de la Modulación por Ancho de Pulso
• Eficiencia Energética: La capacidad de controlar la energía de manera precisa reduce
el consumo general en aplicaciones.
• Reducción de Calor: Al utilizar conmutación rápida, se generan menos pérdidas de
energía en comparación con sistemas analógicos.
• Versatilidad: La PWM se puede implementar en una amplia variedad de tecnologías
y dispositivos, lo que la convierte en una herramienta clave en la electrónica moderna.

3. Material empleado
• Tarjeta de evaluación NUCLEO- • Manejador para LED de potencia
L476RTG • Computadora
• Cable mini-USB (Datos) • STM32CubeMX
• Cables de conexiones • STM32CubeIDE
• Puntas de osciloscopio • STM32Cube Monitor
• LED de potencia • Osciloscopio

4. Desarrollo
4.1 Configuración de operación del microcontrolador
En esta Práctica, configuraremos nuestro sistema con los elementos por defecto que nos
proporciona la selección de la tarjeta de evaluación del microcontrolador NUCLEO-
L476RG, que son el LED verde (LD2), el botón azul (B1) y el puerto de comunicación
asíncrona (UART2). Además, configuraremos el puerto PA0 como salida del canal 1 (CH1)
del temporizador 2 (TIM2). Este puerto será configurado más adelante para operar como
salida PWM.
▪ Selección de la tarjeta y configuración por defecto. Ejecuta la herramienta
STM32CubeMX y selecciona la tarjeta de evaluación NUCLEO-L476RG y habilita
la configuración de los periféricos por defecto.
pág. 3
▪ Configuración de la terminal PA0. Navega hasta el puerto PA0 y selecciona la
opción´ TIM2 CH1, esta selección permitirá configurar el puerto como una salida
PWM controlada por el temporizar 2.

Figura 2. Configuración del TM2_CH1 en el puerto PA0

▪ Selección del modo de operación del TIM2_CH1 en el puerto (PA0). Navega hasta
la sección de configuración del temporizador ubicada en la pestaña de [Categories]→
[Timers] → [TIM2]. En la configuración del temporizador realiza las siguientes
selecciones: [Clock Source] → [Internal Clock]y [Channel 1] → [PWM Generation
CH1].

Figura 3. Modo de operación del TIM2_CH1

▪ Selección de la configuración de operación del TIM2_CH1 en el puerto (PA0).


La configuración del temporizador define las propiedades de la señal PWM que
deseas generar. Las dos propiedades a considerar son: La frecuencia de operación de
la señal PWM ( fPWM ) y la resolución del ancho de pulso de la señal PWM ( ˜
NPWM ). Estas propiedades se relacionan con la frecuencia de operación de
temporizador PCLK1 [80MHz] y los registros del preescalador PSC [16-bits] y del
contador del periodo ARR [32-bits] de acuerdo con la siguiente ecuación:

pág. 4
Tomando en cuenta las ecuaciones anteriores, y considerando que deseamos generar
una señal PWM a una frecuencia de f = 5,0kHz con una resolución de NPWM = 100
pasos. Si la frecuencia de operación del reloj del temporizador es de PCLK1=80MHz,
entonces los registros quedarían de la siguiente forma:

con los valores calculados podemos establecer la configuración del TIM2_CH1.


Actualiza los siguientes registros: [Prescaler (PSC 16 - bits value)] → [159], [Counter
Period (AutoReload Register 32 - bits value)] → [99] y [Pulse (32 - bits value)] →
[49]. Este último registro será el ancho de pulso con el cual inicia la operación de la
señal PWM.

Figura 4. Configuración de operación del TIM2_CH1

pág. 5
▪ Generación de código. El último paso para obtener la estructura de archivos es
definir el nombre de nuestro proyecto, establecer el entorno de desarrollo que
utilizaremos (STM32CubeIDE) y seleccionar una generación de archivos pares .c
y .h separados para cada uno de los periféricos. Este proceso se observa en la
Figura 5. Genera el código una vez que hayas grabado el proyecto .ioc,
presionando el botón [GENERATE CODE] que está ubicado en la parte superior
derecha de la ventana

Figura 5. Generación del código

4.2 Programación de la aplicación en el STM32CubeIDE


En este punto, hemos concluido con la configuración de los módulos que serán utilizados
por nuestra aplicación (SMT32CubeMx). Ahora, corresponde al entorno de desarrollo
integrado (IDE) proporcionar el ambiente para programar, compilar y construir el proyecto
deseado.
Iniciemos con una breve descripción de las características que requiere nuestra aplicacion:
• El programa deberá generar una señal de control PWM en el puerto PA0 que permita
ajustar el ancho delpulso en el rango del 0 a 100 % mediante una tablero programado
en la herramienta SMT32Cube Monitor
• La interfaz de control publicará y actualizará el ciclo de trabajo (ancho de pulso) a
través del servidor MQTT (Message Queuing Telemetry Transport, Protocolo de
comunicación de mensajes ligeros).
• El ciclo de trabajo será verificado utilizando un osciloscopio para visualizar la señal
PWM obtenida.
Establecidos los requerimientos de la aplicación y considerando que el microcontrolador
cuenta con los módulos necesarios para generar la señal PWM deseada configurando su
hardware. Entonces, solo será necesario incorporar a nuestro programa la habilitación de la

pág. 6
generación de la señal PWM y una etapa de actualización de ciclo de trabajo. Por lo tanto,
solo será necesario declarar dos variables:

La variable DutyCycle será la encargada de actualizar el ancho de pulso de la señal PWM y


la variable DutyCycleUpdate la utilizaremos como variable de comunicación entre la tarjeta
de evaluación y el STM32Cube Monitor.
La generación de la señal PWM será activada por la función del HAL_(Hardware Abstraction
Layer): HAL StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32 t
Channel), donde solo es necesario especificar que temporizador será utilizado y cuál de sus
canales, como se muestra:

Finalmente, incluimos dentro del ciclo while(1) la condición de actualización del registro
CCRx, encargado de establecer la duración en alto de la señal PWM, generada solo cuando
las variables DutyCycle y DutyCycleUpdate sean diferentes, lo que ocurre, cuando de forma
externa a traves del STM32Cube Monitor se modifica la variable DutyCycleUpdate, esta
actualización la realizaremos aplicando el macro HAL_TIM_SET_COMPARE(
__HANDLE__,__CHANNEL__,__COMPARE__), como lo muestra la sección del
programa siguiente:

pág. 7
4.3 Programación de panel de comunicación en el STM32Cube Monitor
Inicia la aplicación STM32Cube Monitor, el área de trabajo inicial se mostrará de la siguiente
forma:

Figura 6. Área de trabajo del STM32Cube Monitor

▪ Configuración del puerto ST-Link: Ahora se procederá a realizar la configuración


a realizar la configuración de comunicación con la tarjeta NUCLEO a través de la
interfaz ST-Link. Abre la ventana de configuración del nodo myProbe_Out y da click
en la lápiz que se encuentra a la derecha del menú Probe Config, esta acción te dará
acceso a la ventana de localización de la interfaz ST-Link, seleccionala y presiona
[Up-Date], esto cerrará la ventana y regresarás a la ventana anterior, donde
seleccionarás la interfaz en el menú Probe Config. Finalmente, presiona [Done].

Figura 7. Configuración del nodo myProbe_Out

▪ Selección de variables: La selección de variables que serán leídas y actualizadas es


realizada configurando el nodo myVariables, dando doble click accederás a la
selección de variables y del archivo ejecutable tipo .elf. Primero da click al lápiz que
se encuentra a la derecha de del menú Executable, esto te llevará a la ventana que te
permitirá seleccionar el archivo ejecutable nombre.elf, donde seleccionaras primero

pág. 8
la ruta de acceso para el archivo, usualmente de la forma: ...Debug. Definida la ruta
de acceso, podrás seleccionar el nombre del archivo. Después de haber seleccionado
el archivo se expandirán todas las variables declaradas en la aplicación. Selecciona
las variables DutyClycle y DutycycleUpdate y presiona el botón [UPDATE], esto te
llevara a la ventana anterior. Aquí, observa la dirección de inicio de la variable
dutyCycleUpdate, será utilizada posteriormente. Presiona [DONE] para concluir la
configuración.

Figura 8. Configuración del nodo myVariables

▪ Configuración del indicador de la variable DutyCycle: Arrastra los nodos Single


Value (ubicada en la sección de subflows) y gauge (indicador ubicado en la sección
dashboard) al área de trabajo. Realiza la conexión de la salida del nodo processing a
la entrada del nodo Single value y la salida de este a la entrada del nodo gauge
(indicador). El conjunto de nodos quedara como lo muestra la Figura 9. Ahora, se
puede proceder a su configuración. Iniciando con el nodo Single value, dando doble
click, tendrás acceso a su configuración, en la propiedad de Name escribe el nombre
con el cual será rotulado el nodo y en la propiedad de Variable el nombre de la
variable que será filtrada al indicador, en nuestro caso DutyCycle. Concluye la
configuración presionando [Done]. Las propiedades de nodo gauge que

pág. 9
actualizaremos son: Units con % y Range con los valores de 0 y 100 para min y max,
respectivamente. Cierra la configuración presionando [Done].

Figura 9. Conexión y configuración de los nodos: Single value y gauge

▪ Configuración del control deslizante [slider] y de los nodos de escritura para


actualizar variables. Esta configuración permitirá la modificación de la variable
DutyCycleUpdate. Arrastra los nodos slider (ubicado en dashboard), template y
change, ambas ubicadas en la sección de functions. Realiza las conexiones de los tres
nodos como lo muestra la Figura 10. Configura las propiedades de min y max en el
nodo slider con 0 y 100 respectivamente y presiona [Done] para concluir. En el nodo
change→set msg.payload, configura las siguientes reglas: Set→msg.topic y to the
value→write. Presiona [Done] para cerrar y concluir la configuración de este nodo

pág. 10
Figura 10. Conexión y configuración de los nodos: Single value y gauge

La configuración del nodo template se realizará seleccionando la salida como Output


as→Parsed JSON y agregando el siguiente código:

El parámetro "address": "0x20000000", deberá ser especificado para la posición de


memoria en donde fue localizada la variable DutyCycleUpdate mientras que "type":
9, especifica el tipo de variable, 9 para una variable del tipo float. Esta configuración
es mostrada en la Figura 11.

pág. 11
Figura 11. Configuración del nodo: Template

El identificador para el tipo de variable es uno de los siguientes:

4.3 Prueba
Para realizar la prueba del sistema deberás desplegar el programa presionando [DEPLOY] y
una vez que se muestre que se ha realizado en despliegue satisfactoriamente, verifica el
correcto funcionamiento presionando [DASHBOARD] e inicia la ejecución presionando
[START ACQUISITION]. En este momento, podrás observar el indicador (gauge) que
muestra el valor de la variable DutyCycle y el control deslizante (slider) es capaz de
actualizar el valor de la variable DutyCycleUpdate. Verifica con ayuda del osciloscopio que
el ciclo de trabajo de la señal PWM generada sea actualizada al valor deseado.

5. Actividades y resultados
1. Desarrolla la aplicación descrita en la Práctica y realiza las pruebas necesarias.
Reporta la señal observada en el osciloscopio en donde se aprecie la medición del
ciclo de trabajo de la señal PWM.

pág. 12
Para desarrollar la aplicación, comenzamos configurando el entorno de trabajo en
STM32CubeMX, seleccionando la tarjeta NUCLEO-L476RG. Una vez listo, configuramos
los periféricos necesarios, como el temporizador que usaríamos para generar la señal PWM.
Decidimos utilizar el temporizador TIM2 para controlar el pin PA0, que es donde se generaría
la señal PWM.
Luego ajustamos el temporizador para que la frecuencia de la señal PWM fuera de 5 kHz,
con un ciclo de trabajo inicial del 50%. Esto lo logramos configurando adecuadamente el
prescaler y el periodo del temporizador, garantizando así que la señal tuviera la resolución
que buscábamos.
Con el entorno configurado, generamos el código en STM32CubeMX y lo importamos en
STM32CubeIDE. En este punto, escribimos el código necesario para iniciar la señal PWM
usando las funciones de la librería HAL y también agregamos un ciclo de control para ajustar
dinámicamente el ciclo de trabajo de la señal según las necesidades. De esta forma, pudimos
controlar la señal PWM y variarla entre 0% y 100%.

Figura 12. Ciclo de trabajo y frecuencia PWM

Una vez que todo estuvo programado, cargamos el código en la tarjeta y utilizamos un osciloscopio
para verificar la señal. Conectamos la sonda al pin PA0 y observamos la señal PWM generada.
Pudimos apreciar claramente el ciclo de trabajo, que variaba tal como lo habíamos configurado en el
código. Esto nos permitió confirmar que la señal estaba funcionando correctamente y que la
configuración había sido exitosa.

Figura 12. Señal mostrada en el osciloscopio

pág. 13
2. Describe que función tienen los registros PSC, ARR, Pulse y la frecuencia de
operación del reloj del temporizador PCLK1.
PSC: Ajusta la frecuencia del reloj.
ARR: Define el periodo total del temporizador.
Pulse: Establece el ciclo de trabajo de la señal PWM.
PCLK1: Es la frecuencia base que alimenta el temporizador antes de cualquier división.
3. Modifica la aplicación para generar una señal PWM con una frecuencia operación de
fPWM = 2,5kHz y una resolución de 8-bits ( NPWM = 256).
Para modificar la aplicación y generar una señal PWM con una frecuencia de operación de
2.5 kHz y una resolución de 8 bits (256 pasos), es necesario recalcular los valores de los
registros clave, como el PSC) y el valor ARR, basados en la frecuencia del reloj del
temporizador (PCLK1) que es de 80 MHz.
La relación entre la frecuencia PWM, el prescaler, y el valor de auto-reload se da por la
siguiente fórmula:

Paso 1: Determinar ARR


La resolución de la señal PWM, es decir, cuántos pasos se tendrán por ciclo, está controlada
por el valor de ARR. Para tener una resolución de 8 bits (256 pasos), el valor de ARR será:
𝐴𝑅𝑅 = 256 − 1 = 255
Paso 2: Determinar el PSC
Ahora que sabemos que ARR = 255, podemos usar la fórmula para encontrar el valor de PSC
que nos permita obtener la frecuencia de 2.5 kHz.

Sustituyendo los valores obtenemos que :


𝑃𝑆𝐶 = 124
Paso 3: Ajustar el ciclo de trabajo (Pulse)
El ciclo de trabajo inicial se ajustará con el valor del registro Pulse. Para este caso,
seleccionaremos un ciclo de trabajo del 50%.
𝐴𝑅𝑅
𝑃𝑢𝑙𝑠𝑒 =
2
El valor obtenido es 127.5 pero para mayor comodidad, utilizaremos el entero 128.
pág. 14
Con esta configuración, podemos generar la señal PWM deseada con una frecuencia de
operación de 2.5 kHz y un ciclo de trabajo del 50%.
4. Incorpora la capacidad de actualizar el ciclo de trabajo de la señal PWM generada
de forma remota a través del protocolo MQTT
En el siguiente diagrama, se incorporó la capacidad de actualizar el ciclo de trabajo de la
señal PWM generada de forma remota a través del protocolo MQTT. Esta funcionalidad
permite el control dinámico de la señal PWM.

Figura 13. Diagrama de Actualización Remota del Ciclo de Trabajo PWM mediante MQTT

6. Conclusiones
Durante esta práctica, profundicé en la configuración y uso de los periféricos del
microcontrolador STM32, centrándome especialmente en la generación de señales PWM a
través del temporizador TIM2. Aprendí a configurar el canal TIM2_CH1 para generar una
señal PWM con una frecuencia de 5 kHz, permitiéndome ajustar el ciclo de trabajo entre 0%
y 100%. Esta experiencia me ayudó a entender cómo el microcontrolador gestiona las señales
de salida y cómo puedo controlar dispositivos utilizando el modo PWM.
También exploré el uso de la variable DutyCycle para modificar el ancho del pulso en tiempo
real. Implementé la función HAL_TIM_PWM_Start() para iniciar la generación de la señal
y utilicé el macro HAL_TIM_SET_COMPARE() para actualizar el registro CCRx, lo que
me permitió hacer cambios instantáneos en el ciclo de trabajo.
Un aspecto que considero importante fue mi experiencia con STM32Cube Monitor, donde
configuré un panel de comunicación que me permitió visualizar el ciclo de trabajo actual y
modificarlo a través de un control deslizante. Esta interfaz no solo facilitó la visualización en
tiempo real, sino que también validó que los cambios en el DutyCycleUpdate se reflejaban
correctamente en la señal PWM generada.

pág. 15
7. Bibliografías
[1] PWM: Modulación por Ancho de Pulso, ¿Qué es y sus aplicaciones?,
Transistores.info, [Online]. Available: https://transistores.info/pwm-modulacion-
por-ancho-de-pulso-que-es-y-sus-aplicaciones/.
[2] STM32 Nucleo PWM Timers using STM32CubeIDE, Microcontrollers Lab,
[Online]. Available: https://microcontrollerslab.com/stm32-nucleo-pwm-timers-
stm32cubeide/.
[3] PWM: Modulación por Ancho de Pulso, Unicrom, [Online]. Available:
https://unicrom.com/pwm-modulacion-por-ancho-de-pulso/.
[4] L. E. Vázquez Prado y U. Peñuelas Rivas, Manual de prácticas: STM32 con IDE
Cube. [Online]. Available:
https://www.ingenieria.unam.mx/penuelas/CircuitosDigitales/doc/Manuales/mp_st
m32_con_ide_cube.pdf.
[5] STM32CubeIDE, STMicroelectronics. [Online]. Available:
https://www.st.com/en/development-tools/stm32cubeide.html.

pág. 16

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy