lunes, 28 de octubre de 2013

Multiplicar las salidas PWM utilizando los timers

Como parte del sistema domótico sobre plataforma arduino que estoy desarrollando, se me planteó el problema de la limitación de salidas PWM que nos quedan libres al utilizar una placa ethernet.

Para aquellos que no sepan que significa el acronismo PWM, indico que proviene de las iniciales "Pulse Width Modulation" en inglés, que traducido a la lengua cervantina significa modulación por ancho de pulso.

Con esta técnica es posible que una salida digital que, como tal, puede tomar únicamente dos valores: cero o uno, "simule" un valor analógico, de modo que por ejemplo una bombilla no se encuentre encendida o apagada, sino que sea posible que este al 30, 40 o 50% de luminosidad, lo mismo ocurre con un motor o cualquier otra carga que conectemos.


Para profundizar sobre esta técnica, recomiendo darse una vuelta, como siempre, por la wikipedia, así como por la amplia referencia existente en internet.

Bien, como he indicado el uso de una placa ethernet sobre arduino requiere la utilización de los pines 10, 11, 12 y 13. además del pin 4 si hacemos uso del zócalo para tarjetas microSD incorporado, por lo que el número de salidas PWM en una tarjeta arduino uno quedan reducidas a sólo 4, mientras que en una tarjeta arduino mega el número de salidas PWM disponible se reduce de 14 a 9.

Por este motivo he desarrollado un sketch que, a modo de ejemplo, y haciendo uso del timer3 sobre una placa arduino mega, permite habilitar ¡¡16 salidas PWM !!.

Para entender el funcionamiento de este sketch, lo mejor es leerse el datasheet del propio AVR. Por otra parte indicar que para su correcta implementación ha sido necesario recurrir al acceso directo a los puertos del microprocesador, dadas las exigencias de velocidad de ejecución requeridas.

La generación de las señales PWM se basa en el timer3 el cual va generando por desbordamiento cada uno de los ciclos. No he conseguido aún evitar un leve efecto de tintileo bastante desagradable, pero tiempo al tiempo. Si alguien quiere echar una mano, toda colaboración será bienvenida.

Aquí os dejo el enlace para la descarga del sketch de ejemplo. Cuando tenga algo más de tiempo libre y solvente el problema anteriormente comentado, espero poder desarrollar una librería mínimamente decente.

Ejemplo

No hay comentarios:

Publicar un comentario