- ¿Qué es una señal PWM?
- ¿Cómo convertir la señal PWM a voltaje analógico?
- Diagrama de circuito:
- Programación del MSP para señal PWM:
- Controlar el brillo del LED con PWM:
Este tutorial es parte de una serie de tutoriales de MSP430G2 LaunchPad en los que estamos aprendiendo a usar el MSP430G2 LaunchPad de Texas Instruments. Hasta ahora hemos aprendido los conceptos básicos de la placa y hemos cubierto cómo leer voltaje analógico, interfaz LCD con MSP430G2, etc. Ahora procedemos con el siguiente paso para aprender sobre PWM en MSP430G2. Lo haremos controlando el brillo de un LED variando el potenciómetro. Por lo tanto, el potenciómetro se conectará a un pin analógico del MSP430 para leer su voltaje analógico, por lo que se recomienda conocer el tutorial de ADC antes de continuar.
¿Qué es una señal PWM?
La modulación de ancho de pulso (PWM) es una señal digital que se usa más comúnmente en circuitos de control. Esta señal se establece en alto (3.3v) y bajo (0v) en un tiempo y velocidad predefinidos. El tiempo durante el cual la señal permanece alta se denomina "tiempo de activación" y el tiempo durante el cual la señal permanece baja se denomina "tiempo de inactividad". Hay dos parámetros importantes para un PWM como se describe a continuación:
Ciclo de trabajo del PWM:
El porcentaje de tiempo en el que la señal PWM permanece ALTA (a tiempo) se denomina ciclo de trabajo. Si la señal está siempre encendida, está en un ciclo de trabajo del 100% y si siempre está apagada, es un ciclo de trabajo del 0%.
Ciclo de trabajo = tiempo de encendido / (tiempo de encendido + tiempo de apagado)
Frecuencia de un PWM:
La frecuencia de una señal PWM determina qué tan rápido un PWM completa un período. Un período es el ENCENDIDO y APAGADO completo de una señal PWM como se muestra en la figura anterior. En nuestro tutorial, la frecuencia debe ser de 500 Hz, ya que es el valor predeterminado establecido por Energia IDE.
Hay una gran cantidad de aplicaciones para señales PWM en tiempo real, pero para darle una idea, la señal PWM se puede usar para controlar servomotores y también se puede convertir a voltaje analógico que puede controlar el brillo del brillo de un LED. Aprendamos un poco sobre cómo se podría hacer eso.
Aquí hay algunos ejemplos de PWM con otro microcontrolador:
- Generando PWM usando el microcontrolador PIC con MPLAB y XC8
- Control de servomotor con Raspberry Pi
- Atenuador LED basado en Arduino usando PWM
Consulta todos los proyectos relacionados con PWM aquí.
¿Cómo convertir la señal PWM a voltaje analógico?
Para señales PWM a voltaje analógico podemos usar un circuito llamado filtro RC. Este es un circuito simple y más comúnmente utilizado para este propósito. El circuito solo incluye una resistencia y un condensador en serie, como se muestra en el circuito a continuación.
Entonces, lo que básicamente sucede aquí es que cuando la señal PWM es alta, el capacitor se carga a través de la resistencia y cuando la señal PWM baja, el capacitor se descarga a través de la carga almacenada. De esta forma siempre tendremos un voltaje constante en la salida que será proporcional al ciclo de trabajo PWM.
En el gráfico que se muestra arriba, el color amarillo es la señal PWM y el color azul es el voltaje analógico de salida. Como puede ver, la onda de salida no será una onda de CC pura, pero debería funcionar muy bien para nuestra aplicación. Si necesita una onda de CC pura para otro tipo de aplicación, debe diseñar un circuito de conmutación.
Diagrama de circuito:
El diagrama del circuito es bastante simple; solo tiene un potenciómetro y una resistencia y condensador para formar un circuito RC y el propio LED. El potenciómetro se utiliza para proporcionar un voltaje analógico basado en el cual se puede controlar el ciclo de trabajo de la señal PWM. La salida de la olla está conectada al Pin P1.0 que puede leer voltajes analógicos. Luego tenemos que producir una señal PWM, que se puede hacer usando el pin P1.2, esta señal PWM luego se envía al circuito de filtro RC para convertir la señal PWM en voltaje analógico que luego se le da al LED.
Es muy importante comprender que no todos los pines de la placa MSP pueden leer voltaje analógico o pueden generar pines PWM. Los pines específicos que pueden realizar las tareas específicas se muestran en la siguiente figura. Utilice siempre esto como guía para seleccionar sus pines para la programación.
Ensamble el circuito completo como se muestra arriba, puede usar una placa de pruebas y algunos cables de puente y hacer las conexiones fácilmente. Una vez que se realizan las conexiones, mi placa se ve como se muestra a continuación.
Programación del MSP para señal PWM:
Una vez que el hardware esté listo, podemos comenzar con nuestra programación. Lo primero en un programa es declarar los pines que vamos a utilizar. Aquí vamos a utilizar el pin número 4 (P1.2) como nuestro pin de salida ya que tiene la capacidad de generar PWM. Así que creamos una variable y asignamos el nombre del pin para que sea más fácil hacer referencia a ella más adelante en el programa. El programa completo se da al final.
int PWMpin = 4; // Estamos usando el cuarto pin del módulo MSP como pin PWM
A continuación, entramos en la función de configuración . Cualquier código que esté escrito aquí se ejecutará solo una vez, aquí declaramos que estamos usando este 4º pin como un pin de salida ya que PWM es una funcionalidad de salida. Tenga en cuenta que hemos utilizado la variable PWMpin aquí en lugar del número 4 para que el código parezca más significativo
configuración vacía () { pinMode (PWMpin, SALIDA); // El PEMpin está configurado como Outptut }
Finalmente entramos en la función de bucle . Todo lo que escribimos aquí se ejecuta una y otra vez. En este programa tenemos que leer el voltaje analógico y generar una señal PWM en consecuencia y esto tiene que suceder una y otra vez. Entonces, primero comencemos leyendo el voltaje analógico del pin A0 ya que lo hemos conectado a un potenciómetro.
Aquí estamos leyendo el valor usando la función AanalogRead , esta función devolverá un valor de 0-1024 basado en el valor de voltaje aplicado al pin. Luego almacenamos este valor en una variable llamada "val" como se muestra a continuación
int val = analogRead (A0); // lee el valor ADC del pin A0
Tenemos que convertir los valores de 0 a 1024 del ADC a valores de 0 a 255 para darle a la función PWM. ¿Por qué deberíamos convertir esto? Lo diré en breve, pero por ahora recuerde que tenemos que convertirnos. Para convertir un conjunto de valores en otro conjunto de valores, Energia tiene una función de mapa similar a Arduino. Entonces convertimos los valores de 0-1204 a 0-255 y los guardamos de nuevo en la variable “val”.
val = mapa (val , 0, 1023, 0, 255); // El ADC dará un valor de 0-1023, conviértalo en 0-255
Ahora tenemos un valor variable de 0-255 basado en la posición del potenciómetro. Todo lo que tenemos que hacer es usar este valor en el pin PWM, esto se puede hacer usando la siguiente línea.
analogWrite (PWMpin, val); // Escribe ese valor en el pin PWM.
Volvamos a la pregunta de por qué se escribe 0-255 en el pin PWM. Este valor 0-255 decide el ciclo de trabajo de la señal PWM. Por ejemplo, si el valor de la señal es 0, entonces significa que el ciclo de trabajo es 0% para 127 es 50% y para 255 es 100% tal como se muestra y explica en la parte superior de este artículo.
Controlar el brillo del LED con PWM:
Una vez que haya entendido el hardware y el código, es hora de divertirse con el funcionamiento del circuito. Cargue el código en la placa MSP430G2 y gire la perilla del potenciómetro. Al girar la perilla, el voltaje en el pin 2 variará, lo que será leído por el microcontrolador y de acuerdo con el voltaje se generarán las señales PWM en el pin 4. Cuanto mayor sea el voltaje, mayor será el ciclo de trabajo y viceversa.
Esta señal PWM luego se convierte en voltaje analógico para encender un LED. El brillo del LED es directamente proporcional al ciclo de trabajo de la señal PWM. Además del LED en la placa de prueba, también puede notar que el LED smd (color rojo) varía su brillo de manera similar al LED de la placa de pruebas. Este LED también está conectado al mismo pin, pero no tiene una red RC, por lo que en realidad parpadea muy rápido. Puede agitar el tablero en una habitación oscura para comprobar su naturaleza parpadeante. El trabajo completo también se puede ver en el video a continuación.
Eso es todo por ahora amigos, hemos aprendido cómo usar señales PWM en la placa MSP430G2, en nuestro próximo tutorial aprenderemos lo fácil que es controlar un servomotor usando las mismas señales PWM. Si tiene alguna duda, publíquela en la sección de comentarios a continuación o en los foros para obtener ayuda técnica.