Geek Electrónica

Explicaciones, tutoriales y noticias sobre electrónica y tecnología en general

ArduinoMicrocontroladores

USO DE PWM CON ARDUINO

La modulación por ancho de pulsos más conocida como PWM, es una técnica mediante la cual se modifica el ciclo de trabajo de una señal periódica, esta modificación se puede hacer para controlar la cantidad de energía que le va a ser entregada a una carga o para comunicación.
 
Esta señal PWM por lo general es producida por un circuito digital como por ejemplo un microcontrolador, dicho circuito genera una señal cuadrada a la que le puede variar el ciclo útil y con lo cual emular una señal análoga de diferentes amplitudes de voltaje con la cual controlar la carga que desee, algunas de las aplicaciones en las que más se usa el PWM es el control de velocidad de motores o el control de intensidad de brillo de un bombillo.
 
El ciclo útil o ciclo de trabajo de la señal viene determinado por los tiempos que dura en alto la señal cuadrada, respecto al periodo de la señal.
 
 
 
Donde:
D= Ciclo útil o ciclo de trabajo
t1= Tiempo que la señal dura en valor alto (en un periodo)
T= Periodo de la señal
 

Señal PWM
(Señal PWM generada por Arduino con ciclo util del 50%)
 
El resultado de ese ciclo útil es un valor de porcentaje que representará el porcentaje del valor máximo de la señal que le será entregado a la carga que se quiere controlar. Por ejemplo si se tiene un ciclo útil del 50% y un valor máximo de señal de 5 voltios, el valor análogo emulado es de 2,5 voltios.
 
Arduino cuenta con la posibilidad de generar señales PWM, la cantidad de señales que puede generar depende de la tarjeta que se esté utilizando, por ejemplo la tarjeta Arduino UNO puede generar hasta 6 señales PWM (Pines 3, 5, 6, 9, 10, 11) o para el caso del Arduino MEGA puede generar hasta 15 señales PWM (Pines 2 al 13 y 44 al 46).
 
El comando utilizado para generar dicha señal PWM es el comando analogWrite(pin, valor) donde pin representa el terminal en el cual se va a generar la señal y valor representa el valor de ciclo útil que se le quiere asignar al PWM.
 
Los PWM de Arduino tienen una resolución de 8 bits, ósea que puede representar 256 valores (0 a 255), estos valores entre 0 y 255 son los que acepta el comando analogWrite en el parámetro de valor para especificar el ciclo útil, lo que quiere decir que si se quiere ajustar un ciclo útil del 100% se deberá colocar 255 en el espacio del parámetro que antes indicamos como valor.
 
 
En la línea de código anterior se está configurando una señal PWM que va a ser generada por el pin 13 del Arduino y que va a tener un ciclo útil de 49.8%, se puede calcular de forma sencilla el ciclo útil del PWM o el valor que se debe colocar en la instrucción analogWrite mediante una sencilla regla de 3, teniendo en cuenta que un ciclo útil del 100% debe ser representado como un 255 dentro del comando analogWrite.
 
Es importante tener claro ya que es algo que suele confundir a quienes están comenzando en electrónica, que aunque la traducción literal del comando analogWrite sea “Escritura análoga”, en ningún momento se está generando una señal análoga por el arduino, la señal PWM que se genera es una señal de tipo digital que puede emular de cierta forma a una señal análoga sin llegar a serlo.
 
Una de las formas de hacer control de velocidad de motores o de luminosidad de bombillos por medio de un PWM es utilizar como valor de referencia del ciclo útil del PWM un valor de entrada análogo, con el cual dependiendo de ese valor de entrada se pueda variar el ciclo útil del PWM.
 
A continuación se muestra un código de programación para arduino, donde se toma un valor análogo y este valor es utilizado posteriormente para ajustar el ciclo útil del PWM.
 
 
Código PWM con Arduino
(Código Ejemplo de PWM con Arduino)
 
Hay que tener en cuenta que si se va a utilizar una lectura de un canal análogo del Arduino como medio de control del ciclo útil del PWM, que ambos dispositivos (ADC y PWM) trabajan con resoluciones diferentes, mientras el convertidor análogo a digital del arduino trabaja por defecto con una resolución de 10 bits (1024 valores), el PWM de Arduino trabaja con una resolución de 8 bits (256 valores), por lo cual es necesario implementar alguna estrategia para que los valores del ADC de 10 bits puedan ser utilizados para controlar el ciclo útil del PWM de 8 bits. Para el caso especifico del código anterior se opto por dividir el valor de convertidor análogo a digital entre 4.01176.
 
A continuación se presenta un esquema de conexión de Arduino para controlar la luminosidad de un LED mediante un potenciómetro.
 
 
Circuito PWM con Arduino
(Esquema circuito de prueba de PWM con Arduino)

Iván Cuadros Acosta

Licenciado en Electrónica y Master en desarrollo de aplicaciones móviles con experiencia en docencia universitaria. Apasionado por la electrónica y la programación.

4 comentarios en «USO DE PWM CON ARDUINO»

  • buenas tardes muy bien explicado sobre la señal PWM.

    disculpe soy principiante en arduino y me interesa saber como puedo realizar un proyecto de un sensor CKP(sensor del árbol de levas) y CMP (sensor del sigueñal), esto en el área automotriz. ya que me gustaria realizar un proyecto de un simulador de ECU (computadora autromotriz).

    para poder realizar hay que poder simular todos los sensores de un vehiculo como son:

    sensor CKP
    sensor CMP
    sensor TPS
    sensor IAC
    valvula IAC
    inyectores, con la explicacion del PWM que comento usted ya tengo una idea.
    bobinas
    ETC,ETC.

    pero quiero hacerlo con arduino, quiero saber si se puede realizar.

    le agradecería si pudiera orientarme.

    • Hola buen día y gracias por visitar el blog.

      Para poder ayudarte me gustaría que me dijeras cuales son las referencias de los sensores que vas a utilizar y así observar el modo de funcionamiento de los mismos, con esto ya me podría hacer una idea de las funciones o características de arduino que se podrían utilizar.

  • Buen dia compañero quisiera saber si es posible generar una onda senoidal de frecuencia varíable y cual seria el min y max de esta frecuencia. Gracias por la atención.

    • Hola buen día y gracias por visitar el blog.

      Si se puede generar una señal senoidal a partir de una señal PWM generada por arduino, pero no es un proceso directo, sino que por el contrario hay que seguir varias etapas.

      * Determinar una relación entre los valores de la señal senoidal y los valores del ciclo util del PWM. Los valores mas pequeños de la señal senoidal van a representar menores valores de ciclo util y viceversa.
      * Generar el PWM con arduino utilizando los valores de ciclo util determinados en el punto anterior.
      * A la salida del arduino en el pin que genera el PWM implementar un filtro pasabajos para que a la salida del filtro si se pueda ver la señal senoidal.

      En cuanto a la frecuencia de las señales va a depender de la frecuencia del PWM que para el caso de arduino, el valor de frecuencia del PWM por defecto es 490 Hz, esta frecuencia se podría cambiar pero ya se tendría que empezar a modificar los valores de configuración del microcontrolador.

      Por el momento te puedo dejar el siguiente enlace de un articulo donde explican paso a paso como hacer el proceso de utilizar un PWM para generar una señal senoidal. http://revistas.utp.edu.co/index.php/revistaciencia/article/view/551/289

      Espero que te sirva y recuerda que puedes seguirnos en Facebook, Twitter y Youtube para estar al día de todas las publicaciones de Geek Electrónica.

Los comentarios están cerrados.