Arduino PWM con Arduino UNO

El Arduino PWM es una función para implementar la modulación de ancho de pulso con nuestra placa Arduino UNO. En este tutorial, se verá una aplicación básica regulando la intensidad de un LED. Recordemos que la modulación de ancho de pulso o PWM es la variación del el tiempo en alto de una señal cuadrada respecto a su periodo. Usualmente se mide en porcentaje (%). Existen diferentes maneras de generar señales PWM con Arduino, entre las más convencionales están, por software y mediante el módulo de PWM. Por software, usualmente es con retardos, esperando un determinado tiempo y conmutando el estado del pin. Con el módulo es usando los registros del temporizador.

Arduino PWM ya gestiona el uso de los módulos para proveer la señal PWM de acuerdo a nuestras necesidades con una simple instrucción. En el Arduino, los pines que soportan PWM están indicados a través de la serigrafia con la tilde «~» junto al numero.

Ciclos de trabajo distintos en la modulación por PWM con Arduino

Material:

1 Tarjeta Arduino UNO.

Protoboard.

1 LED.

1 Resistencia de 220 ohm.

Cables para conexiones.

 

¿Qué es el PWM?

Para empezar, se muestran las definiciones para  entender el Arduino PWM. PW es pulse width (ancho de pulso) representa el ancho del pulso, en función al periodo de la señal tiempo donde el periodo representa el tiempo en el que se repite dicha señal. Usualmente ta se define como el tiempo en alto y T como el periodo.

La frecuencia se define como la cantidad de veces que una señal periódica se repite en un segundo. Se mide en Hertz y es inversamente proporcional al periodo (T). De esta manera su expresión matemática es la inversa del periodo:

Frecuencia= 1/T

Asi pues, es una señal  digital muy usada para controlar el valor promedio de un voltaje de una señal cuadrada. De esta manera, si hay un voltaje analógico constante y se divide en pulsos variando el ancho de pulso; el valor promedio del voltaje puede modificarse. De esta manera, algunas aplicaciones son control de luminosidad de un LED, control de posición de un servomotor, control de velocidad de un motor de corriente directa, etc. Como en este último caso decrementando el ciclo de trabajo sobre la señal de control del circuito de potencia, el motor ira más lento.

 También hay otro concepto el ciclo de trabajo, el cual  debe tener presente cuando habla de la función Arduino PWM. Ademas el ciclo de trabajo (Duty Cycle en inglés), se mide en porcentaje y describe el periodo de tiempo que una señal digital se encuentra en alto; en función del tiempo.

Enseguida se muestran algunos ejemplos. Podemos ver la evolución del ciclo de tr

Así pues, si la señal se encontrara la mitad del tiempo en alto y la otra mitad en bajo, entonces el ciclo de trabajo está en un 50%; y si esta tres cuartas partes en alto y una cuarta parte en bajo, se dice que está a un 75% de su ciclo de trabajo.

 

Diseño del hardware

Primeramente, en la siguiente figura están indicadas las salidas digitales que cuentan con  Arduino PWM. Asi pues en Arduino con el atmega168 o atmega328, la señal de salida Arduino PWM es través de los pines 3, 5, 6,9, 10 y 11 es una señal de frecuencia de 490 Hz; que nos permite cambiar el ciclo de trabajo. El cuál es el tiempo que el pulso esta encendido (alto) o apagado (bajo) mediante la función AnalogWrite().

Fig 4. Pines digitales con PWM.

Resistencia:

Componente electrónico que ofrece oposición al paso de la corriente. Usaremos la resistencia para proporcionarle la corriente que necesita el LED . Ya que la resistencia no posee polaridad no hay inconveniente en cómo se conecte. También si conectamos la resistencia antes o después del LED, no afecta.

LED.  Por su significado de sus siglas en ingles, diodo emisor de luz constituido por material semiconductor, dotado con dos terminales. Para conectar el LED correctamente observemos la base plana. Entonces tomaremos esa pata como el cátodo que ira a tierra y la otra como el ánodo a 5v.

Protoboard:

Al hacer conexiones en el debemos tener en cuenta que las columnas (los agujeros que están en vertical),estos se encuentran conectados entre sí. Así evitaremos un mal funcionamiento.

Enseguida se muestra el esquema para las conexiones del hardware.

Arduino PWM Conexiones

Programación

En primer lugar, solo como referencia, se muestra como es que se puede implementar una señal de PWM mediante software. Al programa se le puede modificar el pin  deseado en la linea 3 del código. Este programa pone el pin 6 en alto una vez por segundo durante un cuarto de segundo. Entonces, el ciclo de trabajo es de un 25%. Así  la frecuencia  es de un pulso por segundo o 1 Hertz.

De este modo, modificando la temporización del programa es posible cambiar el ciclo de trabajo, entonces  lo cambiamos  por 500 y la señal es un 50%; también si lo ponemos en 750 la señal es un 75% de su ciclo de trabajo y la frecuencia es 1 Hz. Este programa solo es didactico, no se recomienda usar una señal PWM con este tipo de programación, mejor usar la función analogWrite.

Haciendo uso de las herramientas de Arduino, consideramos la función analgoWrite, esta acepta valores de 0 a 255, considerando que es el 0% al 100%. Para una señal con ciclo de trabajo de 75%, escribimos en  value de la función analogWrite (pin value) el valor de 190.

Asi, cambiando el parámetro value en la función analogWrite (pin, value),  obtiene distintos ciclos. Por ejemplo, considerando la relación valor a porcentaje: 0-0%, 63-25%, 127-50%, 190-75%, 255-100%. De esta manera estas cifras se deben a que las salidas PWM solo dan un valor entre 0 y 255.

Observando la señal Arduino PWM en el osciloscopio.

Enseguida conectaremos el osciloscopio para observar la forma de onda, y demás mediciones. Asi pues a modo de ejemplo cargamos el primer programa, para observar la función Arduino PWM.

Arduino PWM Resultados

Fig 9. Señal PWM.

Para finalizar  en la imagen vemos lo siguiente: la frecuencia es 1hz, el periodo es  1s y el ancho de pulso es de 250ms. Asi que el ciclo de trabajo está al 25%, como se comentó anteriormente.

Calculo del ciclo de trabajo

Adema, se muestra como calcular el ciclo de trabajo, con una sencilla regla de tres podemos calcular nuestro ciclo de trabajo, dependiendo del tiempo que dure el periodo. Entonces si tenemos que en 500 ms nuestro ciclo de trabajo está al 50%. ¿En cuánto estará el ciclo de trabajo si el periodo es de 250ms?

Por ejemplo:

500ms – 50%

250ms – X%

X= (50%*250)/500

X=25%

De esta manera, nuestro ciclo de trabajo sería  25%.

Y  la frecuencia:

F=1/T=1/1s=1Hz

11 comentarios en «Arduino PWM con Arduino UNO»

  1. Buenos días,
    Quiero hacer que Arduino me de una señal PWM con una frecuencia de 200Hz.
    ¿Pueden ayudarme? Se los agradezco de antemano

    1. Francisco si quieres hacer uno de 200 Hz una opción es hacerlo con retardos, esto es defines el periodo de T = 5000uS entonces defines tu ciclo de trabajo, que sería el tiempo en alto, digamos ta=1000 uS. Entonces el programa lo haces de la siguiente manera, Activas pin, pones retardo de ta, desactivas pin y pones retardo de T-ta.

    1. Mariana, si te refieres al Arduino, pues tenemos básicamente pines digitales, analogicos ADC, con PWM, y con protocolos de comunicación como i2c, SPI, serial.

  2. Seria posible sincronizar la frecuencia con la de la red para a traves de un rele SSR controlar la temperatura de una resistencia de calenamiento en una incubadora.?

    1. Tendrías que usar algo como un detector de cruce por cero o algo asi, pero no me queda muy claro para que lo quieres sincronizar.

  3. Si quiero hacer que el ciclo de trabajo pueda cambiar para mantener constante un Vrms en una carga, como podría solucionar ese problema? Lo que leería el ADC sería una fuente que varía su voltaje

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *