Señales PWM

En este apartado aprenderás qué son las señales PWM  (Pulse Widht Modulation) y las utilizarás para controlar la intensidad de brillo de un LED.

Imagina que requieres realizar un circuito donde se necesita controlar la intensidad de iluminación de un led o  la velocidad de un motor. Entonces necesitamos manejar un valor analógico de voltaje. Para ello se recurre a la señal PWM (Modulación por ancho de pulsos).

PWM es una técnica en la que se modifica el ciclo de trabajo de una señal periódica para controlar la cantidad de energía que se envía en una señal. 

Este tipo de señales se utiliza en los circuitos cuando se necesita simular  una señal analógica. Consiste en  cambiar el ancho relativo de la señal respecto al período de la misma, el resultado de este cambio es llamado ciclo de trabajo y sus unidades están representadas en términos de porcentaje.

Para entender cómo funciona esta técnica, vamos a ver el siguiente video.

Salidas analógicas en Arduino

Arduino implementa por hardware salidas PWM en varios de sus pines, que aparecen identificados en la placa con el símbolo «~» junto al número del pin.

Figura 1. Pines PWM de la tarjeta Arduino UNO

Vamos a ver el uso de las salidas analógicas con el  siguiente ejemplo:

Se desea programar un circuito electrónico que encienda un LED ajustando el  brillo con el valor de un potenciómetro  usando  señal PWM.  El LED se conectará al pin 6  y potenciómetro al pin A0  (Figura 2).

Figura 2. Ajuste del brillo de LED conectado al pin 6 PWM y potenciómetro al puerto A0 de la tarjeta Arduino UNO

Comenzamos declarando como constantes los pines utilizados para controlar el LED y el potenciómetro

const int pinSensor = 0; // Sensor analógico conectado al potenciómetro
const int pinLed = 6; // Salida PWM conectada al LED

Para utilizar los valores que necesitamos, se declaran dos variables de tipo entero, una para manejar el brillo y otra para almacenar el valor del potenciómetro:

int brilloLed = 0; // Almacena el valor de brillo que se dará al LED
int valorPotenciometro = 0; // Almacena el valor leído del potenciómetro

La tarjeta Arduino enviará al led el valor de la señal PWM  para encenderlo, por lo tanto, el pin debe ser configurado de salida. La instrucción de configuración del pin 6 PWM sería:  

pinMode(pinLed, OUTPUT); // Define al pin 6 como salida PWM 

Para hacer la lectura del valor del potenciómetro utilizamos la función analogRead y se almacena en la variable valorPotenciómetro como se muestra:

valorPotenciometro = analogRead(pinSensor); // Lee el valor del potenciómetro

Como los valores del potenciómetro van del  0 al 1024  y el pin PWM sólo maneja un rango del 0 al 254, ajustamos los valores del potenciómetro  para usar toda su escala, que al bajarlo por completo sea cero y al girarlo por completo sea 255, no 1023. Para realizar este ajuste utilizamos la función map

Función map

Sirve para convertir números de un rango a otro. Ahorra trabajo de  conversión y podemos cambiar una magnitud a otra.

Sintaxis

map(valor, valor mínimo, valor máximo, rango mínimo, rango máximo);

Parámetros

valor –  el número a mapear.

valor mínimo: el límite inferior del rango actual del valor.

valor máximo: el límite superior del rango actual del valor.

rango mínimo: el límite inferior del rango objetivo del valor.

rango máximo: el límite superior del rango objetivo del valor.

Para comprender cómo funciona la función map, observa el video:

 

Como pudes observar en el video, la utilización de la función map queda como sigue:

brilloLed = map(valorPotenciometro, 0, 1023, 0, 255); // Reescala el valor del pot

Ahora que ya tenemos el valor mapeado en la variable brilloLed,  se envía el valor a través de la tarjeta Arduino UNO al LED que se encuentra en el pin PWM  6 y que fué declarado como salida. Para envíar la cantidad de brillo lo hacemos enviando una señal PWM utilizando la función analogWrite.

Función analogWrite

La función analogWrite, sirve para escribir un valor a un pin PWM. Los valores posibles están comprendidos entre 0 y 255. 

Sintaxis

analogWrite (pinPWM, valor);

Parámetros

pinPWM – número de pin PWM  del Arduino que se quiere configurar

valor – el ciclo de trabajo de la señal entre 0 (siempre apagado) y 255 (siempre encendido)

La siguiente imagen muestra ejemplos del valor del ciclo de trabajo y la señal PWM a la que corresponde (Figura 3):

Figura 3. Función analogWrite y los ciclos de trabajo

En nuestro ejemplo, el pin PWM es el 6 y se almacena en la variable pinLed, y el valor de la señal PWM esta almacenado en la variable brilloLed, por lo que la instrucción es la siguiente:

analogWrite(pinLed, brilloLed); // Se ajusta la salida del pin PWM

Manos a la obra

Armando Circuitos

Ahora que ya conoces cómo utilizar las señales PWM,  vamos a realizar una práctica que consiste en la construcción y programación de un circuito electrónico lea el valor de un potenciómetro
y lo utilice  para ajustar el brillo de un led usando una señal PWM

 

Materiales

Si no te acuerdas o deseas repasar las características técnicas y funcionamiento de alguno de los componentes electrónicos, puedes dar clic sobre su imagen para consultar su información. 

Construcción del circuito electrónico

Realiza las conexiones del circuito electrónico que se muestra en el diagrama esquemático de la Figura 4. Observa que el ánodo del led va conectado a la resistencia y al osciloscopio,  el cátodo a la tierra.

Figura 4. Diagrama esquemático del circuito electrónico que controla el brillo de un led con un potenciómetro

Cómo puedes apreciar, el circuito utiliza un osciloscopio. la forma de conectarlo y su explicación del uso lo veras en el siguiente video:

Programación del circuito electrónico

Captura el código del programa en el IDE de Arduino. Recuerda escribir el código para  aprender las instrucciones. 

/* Manual de programación con Arduino
* Práctica: Señales PWM
* Objetivo: Programa que lee el valor de un potenciómetro
y lo usa para ajustar el brillo a un led usando una señal PWM
* Fecha: agosto 2020
* Autor: Miguel Ángel Bañuelos
*/

// Declaración de constantes
const int pinSensor = 0; // Sensor analógico conectado al potenciómetro
const int pinLed = 6; // Salida PWM conectada al LED

// Declaración de variables
int brilloLed = 0; // Almacena el valor de brillo que se dará al LED
int valorPotenciometro = 0; // Almacena el valor leído del potenciómetro

// Inicialización
void setup() {
pinMode(pinLed, OUTPUT); // Define al pin 6 como salida PWM
}
// Programa principal
void loop(){
valorPotenciometro = analogRead(pinSensor); // Lee el valor del potenciómetro
brilloLed = map(valorPotenciometro, 0, 1023, 0, 255); // Reescala el valor del pot
analogWrite(pinLed, brilloLed); // Se ajusta la salida del pin PWM
delay(100); // Retardo de 100 milisegundos
}

Compila, depura y sube el sketch a la tarjeta Arduino UNO. 

Funcionamiento del circuito electrónico

Prueba el funcionamiento de tu circuito electrónico. Verifica que el circuito funcione como la simulación que se muestra a continuación. Presiona el botón Iniciar simulación, gira el potenciómetro y observa  y observa cómo cambia la intensidad del brillo del  led y la señal en el osciloscopio.

logo-autoevaluación

Autoevaluación

 

para aprender más

Para aprender más

Si en tu navegador no se muestra la simulación, ingresa al enlace https://www.tinkercad.com/embed/3WDP1DBtk5B

LLamas L. ( 2015 ) Salidas analógicas PWM en Arduino.   https://www.luisllamas.es/salidas-analogicas-pwm-en-arduino/

Guerra Carmenate J. (s/f). Señal PWM con Arduino y analogWrite. Recuperado de: https://programarfacil.com/blog/arduino-blog/pwm-con-arduino-analogico/