Saltar al contenido
Control Automático Educación

PWM Arduino

Hola controleros y controleras en el día de hoy vamos a aprender a usar el PWM ARDUINO, o Modulación por Ancho de Pulso (Pulse Width Modulation -PWM), el cual es una de las señales de control más importantes y utilizadas con el Arduino.

Antes de comenzar, te hago la invitación para que veas nuestro CURSO GRATIS DE ARDUINO.

PWM Arduino

La señal de PWM con Arduino es generada en los pines especificados con el símbolo (~), en la mayoría de las placas Arduino disponibles en el mercado (aquellas que tienen como corazón el microcontrolador ATmega168 o ATmega328), las Salidas PWM o PWM Output Arduino se encuentran en los pines 3, 5, 6, 9, 10 y 11. En Arduino Mega, esto funciona del pin 2 al 13 y del 44 al 46. Y en modelos más antiguos con un micro ATmega8 solo tiene como PWM Output en Arduino los pines 9, 10 y 11, A continuación, podemos ver una imagen con la ubicación de las Salidas PWM en un Arduino UNO.

PWM Arduino

La señal PWM con Arduino es una señal periódica (o sea que se repite con el pasar del tiempo) la cual le podemos modificar su ciclo de trabajo (Duty Cicle – En Ingles).

Por ejemplo, el PWM de un PIN en Arduino es simplemente una señal binaria (0v o 5v) que podremos configurar para que trabaje un determinado tiempo en Encendido o 5v y el resto de tiempo en Apagado o 0v, y repita este procedimiento infinitamente, pudiendo variar este ancho de pulso en cualquier instante, tal y como se puede observar en la siguiente figura, que representa el PWM en un PIN de Arduino.

PWM PIC
15. PWM

Esto es interesante, porque el voltaje medio que se le aplica a la carga es proporcional al tiempo que la señal se mantuvo en 5v y con esto podemos lograr varias aplicaciones como controlar la luminosidad de un LED (PWM Led Arduino), la velocidad de un motor (PWM Motor Arduino), regular resistencias calefactoras a través de relés de estado sólido, etc.

Recordemos que una resolución de 8bits en una salida PWM significa que tenemos 256 niveles. Es decir, representamos el Duty cycle mediante un número de 0 a 255.

Timer – PWM Arduino

Como hablamos en la entrada de Timer Arduino, la señal y frecuencia del PWM del Arduino están gobernados por los diferentes temporizadores o TIMERs que posee la placa de desarrollo.

Cada uno de los Timers del Arduino está en la capacidad de controlar 2 o 3 pwm asignando un registro de comparación para cada señal, de tal forma que cuando el temporizador alcance el valor del registro de comparación simplemente cambia el estado lógico de la salida. Logrando de esa forma la señal binaria del PWM.

En la siguiente tabla se muestra los pines PWM que son administradas por cada Timer junto con su frecuencia (PWM frequency Arduino).

BOARD PWM PINS PWM FREQUENCY
Uno, Nano, Mini 3, 5, 6, 9, 10, 11 490 Hz (pins 5 and 6: 980 Hz)
Mega 2 – 13, 44 – 46 490 Hz (pins 4 and 13: 980 Hz)
Leonardo, Micro, Yún 3, 5, 6, 9, 10, 11, 13 490 Hz (pins 3 and 11: 980 Hz)
Uno WiFi Rev.2 3, 5, 6, 9, 10 976 Hz
MKR boards * 0 – 8, 10, A3 (18), A4 (19) 732 Hz
MKR1000 WiFi * 0 – 8, 10, 11, A3 (18), A4 (19) 732 Hz
Zero * 3 – 13, A0 (14), A1 (15) 732 Hz
Due ** 2-13 1000 Hz
101 3, 5, 6, 9 pins 3 and 9: 490 Hz, pins 5 and 6: 980 Hz

El PWM en los pines 5 y 6 tendrán ciclos de trabajo más altos de lo esperado. Esto se debe a las interacciones con las funciones millis () y delay (), que comparten el mismo TIMER interno utilizado para generar esas salidas PWM. Esto se notará principalmente en configuraciones de ciclo de trabajo bajo (por ejemplo, 0-10) y puede dar como resultado que un valor de 0 no apague completamente la salida en los pines 5 y 6.

Configurar el PWM en Arduino

Para la configuración del PWM Output Arduino simplemente utilizamos la siguiente instrucción:

Sintaxis

analogWrite (pin, valor)

Parámetros

pin: el pin PWM Arduino a ser escrito. Tipos de datos permitidos: int.

valor: el ciclo de trabajo: entre 0 (siempre apagado) y 255 (siempre encendido). Tipos de datos permitidos: int.

PWM Frecuencia (Frequency) Arduino

La señal PWM está determinada por la velocidad del TIMER. Suponiendo que está utilizando un Arduino UNO, el reloj de este contador es igual al reloj del sistema dividido por un valor de preescaler. El pescaleres un valor de 3 bits almacenado en los tres bits menos significativos del registro del TIMER: CS02, CS01 y CS00.

Existen tres registros de temporizador / contador: TCCR0B, TCCR1B y TCCR2B.

Como hay tres preescaladores diferentes, los seis pines PWM se dividen en tres pares, cada par tiene su propio preescalador. Por ejemplo, los pines de Arduino 6 y 5 están controlados por TCCR0B, por lo que se puede configurar los pines Arduino 6 y 5 para emitir una señal PWM a una determinada frecuencia. Los pines Arduino 9 y 10 están controlados por TCCR1B, por lo que pueden configurarse a una frecuencia diferente de los pines 6 y 5. Los pines Arduino 11 y 3 están controlados por TCCR2B, por lo que pueden configurarse a una tercera frecuencia. Pero no puede establecer diferentes frecuencias para los pines controlados por el mismo preescalador (por ejemplo, los pines 6 y 5 deben estar en la misma frecuencia).

¿Cómo se cambia la frecuencia PWM?

En void setup () establezca o borre los bits CS02, CS01 y CS00 en el registro TCCRnB correspondiente.

Para Arduino Uno, Nano, YourDuino RoboRED, Mini Driver, Lilly Pad y cualquier otra placa que use ATmega 8, 168 o 328

Para Arduino Mega1280, Mega2560, MegaADK, Spider o cualquier otra placa que use ATmega1280 o ATmega2560

 

PWM Led Arduino

En este primer ejemplo veremos cómo variar la intensidad de un LED y el PWM es perfecto para controlar dicha intensidad del LED con Arduino. Para le control PWM del LED con Arduino vamos a utilizar un potenciómetro conectado a un Pin Análogo.

PWM Led Arduino

Motor DC Arduino – PWM

Con esta práctica vamos a aprender como variar la velocidad de un motor DC con Arduino. Para eso vamos a utilizar un potenciometro, un mosfer IRFZ44N, un diodo 1N4001, una resistencia de 220ohms.

PWM Motor DC Arduino

en este ejemplo estamos usando el MOSFET IRFZ44N como un Switch, dado que es un dispositivo capaz de mover grandes potencias. La idea básica es que la señal PWM Swichee a alta velocidad el mosfet y de esa forma podremos regular la velocidad del motor DC con Arduino.

Mosfet como Switch

En la implementación práctica, usaremos una motobomba de 12v, por lo tanto debemos usar dos fuentes de alimentación. Una para el arduino y otra para la motobomba. Recordar conectar ambas tierras de las fuentes, para crear una única tierra común.

Códigos

A continuación están los dos códigos de los ejemplos que fueron explicados en detalle en los videos. Para accesar al código solo basta con compartir el contenido de este post, para permitir que más personas conozcan el sitio web y de esa forma podremos contribuir con el conocimiento para las demás personas.

LED

 

Motobomba

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.