Sobre Arduino y PWM

En la entrada anterior mencioné al Arduino y la Modulación por Ancho de Pulso (Pulse With Modulation, PWM) que serán utilizados en el proyecto. El Arduino es un dispositivo de hardware y una plataforma de software:

  • El dispositivo de hardware es una placa de circuitos que incluye un microcontrolador y una interfaz de comunicación con la computadora vía USB.
  • La plataforma de software incluye un entorno integrado de desarrollo (IDE, basado en el proyecto Processing), un lenguaje (el lenguaje Arduino, similar a C++), un compilador (avr-gcc) y una biblioteca especializada.

Este conjunto puede utilizarse para crear dispositivos físicos desde un alto nivel y con una gran abstracción de los detalles físicos. Al final, lo que utilizas es un tarjeta con simples entradas y salidas.

El proyecto Arduino es un proyecto Open Hardware, y posee distintas versiones del Arduino para distintas necesidades. Los Arduinos oficiales pueden encontrarlos aquí, aunque debido a su naturaleza abierta, existen muchos clones y adaptaciones no oficiales, como el Sanguino o el Illuminato. Además, el Arduino está diseñado para ser modular, por lo que se le pueden colocar los llamados Shields o escudos para adaptarle distintas funcionalidades (Ethernet, Data Logging, GPS y un gran etc). El que nos interesa a nosotros es el Arduino Duemilanove, pues es el que utilizaremos para crear el controlador de iluminación dentro del Flame Of Knowledge:

Ahora, este placa tiene 6 salidas con la capacidad de generar PWM. La Modulación por Ancho de Pulso, Pulse Width Modulation, PWM, es un técnica para obtener resultados análogos por medios digitales. Se utiliza control digital para generar una onda cuadrada, es decir, una señal que alterna entre encendido y apagado. Este patrón de encendido-apagado puede simular tensiones entre completamente encendido (5 voltios) y apagado (0 voltios) al cambiar la porción del tiempo que la señal se encuentra encendida en relación al tiempo en que se encuentra apagada. La duración del “tiempo encendido” es llamado el ancho del pulso. Para obtener valores análogos variables, se debe cambiar, o modular, ese ancho del pulso. Si se repite este patrón encendido-apagado lo suficientemente rápido con, por ejemplo, una LED, el resultado es como si la señal fuera una tensión comprendida entre 0 y 5 voltios controlando el brillo del LED.

En el siguiente gráfico la líneas verdes representan un periodo regular de tiempo. Esta duración o periodo es inverso a la frecuencia del PWM. En otras palabras, con el PWM del Arduino corriendo a una frecuencia de alrededor de 500Hz, las líneas verdes miden/duran 2 milisegundos cada una. El lenguaje Arduino posee una función llamada analogWrite() que permite controlar el ciclo del PWM con un valor de un byte, es decir, entre 0 y 255. Por lo tanto, un llamada de analogWrite(255) produce un ciclo continuo (es decir, siempre encendido), una llamada de analogWrite(127) genera un ancho de pulso de 50% (encendido la mitad del tiempo), etc.

Acerca de cjenkins
Mi nombre es Carlos Jenkins, soy graduado de Ingeniería en Computación Instituto Tecnológico de Costa Rica. Trabajé en proyectos de investigación en el Centro de Investigación en Computación de la misma institución y trabajo para una empresa de Investigación y Desarrollo de Software. Tengo 27 años y soy usuario de Linux desde hace 10. Me apasiona el software, hardware y diseño gráfico en general.

2 Responses to Sobre Arduino y PWM

  1. Cecilio dice:

    Quiero variar la velocidad de un motor de corriente contínua manteniendo el par nominal. La regulación quiero hacerla desde 0 hasta el máximo. He probado con una salida analógica y no va bien. ¿como puedo modular el ancho y frecuencia del pulso PWM hasta 10 Khz?

    • cjenkins dice:

      PWM es un concepto en lo que se regula en el ancho del pulso (duty cycle), no la frencuencia. Cuando uno usa una técnica PWM la frecuencia es fija. En este caso expuesto la frecuencia es de 488KHz, dada por la configuración preestablecida de los Timers en el ATMega168 del Arduino. Dependiendo de la aplicación, hay unas frecuencias más aptas que otras. Por ejemplo, un motor DC modulado a altas frecuencias tiene a sobrecalentarse o hacer mucho ruido. Algunos de los Timers del microcontrolador son de resolución de 8bits, por ende se puede regular el ancho del pulso desde 0 hasta 255 (supongo que a eso te refieres con el máximo), siendo 0 ancho de pulso 0%, es decir, LOW constante, y 255 ancho del 100%, es decir, HIGH constante, y valores intermedios son linealmente proporcionales.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: