lunes, 12 de marzo de 2012

LEGOBot: Alimentando el Arduino


NOTA PREVIA: El autor ha probado todas las cosas que se explican a continuación usando una placa Arduino UNO real. No obstante, no se excluye la posibilidad de que haya algun error de concepto que haga que el uso de lo que sigue dañe la placa Arduino, el ordenador al cuál se conecte o la casa en la que se pruebe. Cualquier experimento es siempre bajo la responsabilidad del que lo hace y el autor declina cualquier responsabilidad. Igualmente se recomienda leer el artículo hasta el final para entender todas las implicaciones de la solución propuesta.

Para hacer funcionar la placa de Arduino, que es el cerebro del robot, se ha de alimentar adecuadamente. La manera standard de alimentar un Arduino UNO es empleando una tensión de entrada Vin, en el conector de alimentación redondo, entre 7V y 12V. Menos de 7V y el micro podría funcionar erráticamente. Mas de 12V y el regulador de 5V que contiene la placa se podría recalentar. Eso hace que mucha gente emplee pilas de 9V como la de la figura para alimentar la placa Arduino.



El problema de las pilas de 9V es que son poco eficientes para este uso. Una pila alcalina de 9V puede contener, siendo generosos, algo menos de 700mAh. Esto es, puede suministrar 700 mA durante 1h, o 250mA durante 2h, etc.. El problema es que al final de su vida útil la tensión ha caido de manera importante por lo que se debería hacer una estimación práctica más baja. Es por eso que lo normal es que si se usa en un Robot basado en Arduino, se use sólo para la placa arduino y los motores se alimenten con otros tipos de pilas mas económicas.

Para estudiar la mejor manera de alimentar el Arduino, lo mejor es estudiar el esquema eléctrico de la alimentación de esta placa.

La siguiente figura muestra el esquema de la alimentación de la placa Arduino UNO (Rev3).


y la siguiente figura muestra la posición de estos elementos sobre la placa.



 Abajo a la izquierda tenemos el conector de alimentación Vin. Esta entrada está también disponible al final de la tiras de pines que se halla abajo a la derecha en la figura si no se desea usar este voluminoso conector. A la derecha del conector tenemos los dos condensadores electrolíticos de 47uF y, debajo de éstos, el diodo D1 (M7). Encima del conector de alimentación tenemos el regulador de tensión NCP1117.
 

Podemos estudiar cual es la tensión mínima de funcionamiento del Arduino a partir de los componentes implicados. Supongamos que pedimos a la placa una corriente de 200mA, por decir algo. Respecto al regulador, el dato más importante para el cálculo es la tensión de dropout, esto es, la caida entre entrada y salida cuando funciona.


De la figura anterior, obtenida del datasheet del regulador, vemos que el dropout depende de la corriente y la temperatura. Para 200mA y 25ºC, tenemos algo menos de 1V.

Para el diodo M7, el datasheet muestra la siguiente figura para la relación corriente-tensión:


Por tanto, tenemos algo más de 0,8V a 0,2 A de de corriente. En total, juntando regulador y diodo tenemos una caida de 1,8V, por tanto, para una alimentación de 5V necesitamos un valor de Vin mínimo de 6,8V.

La placa Arduino no funcinará fiablemente con menos de 7V, pero, dado que internamente funciona a 5V, la eficiencia máxima de la alimentación será del 71% (=5V/7V). Si alimentamos la placa a 9V la eficiencia cae hasta el 55%. Esto es, tiramos la mitad de la energía que suministra la pila.

Lo más eficiente sería usar una fuente conmutada que convierta de cualquier tensión de entrada de las pilas que pongamos a 5V constantes que es lo que necesita Arduino. Es posible que trate sobre ello más adelante, pero de momento buscaremos una solución más sencilla.

Una batería de 1.5V alcalina, en formato AA, puede contener, en comparación, 2500 mAh, que es mas de 3,5 veces más. Eso sí, sólo a 1.5V que no es bastante. Si juntamos 5 en serie tendremos 7.5V que es suficiente para alimentar un Arduino UNO usando la entrada Vin durante mucho más rato que con una pila de 9V. La eficiencia también será mejor, alcanzando el 66%. Aun así tiramos bastante energia. Por otro lado necesitamos 5 pilas y éstas se suelen vender de 4 en 4.



Si deseamos eficiencias altas, nos hemos de saltar el regulador y el didodo D1 incluidos en la placa y alimentar la placa Arduino directamente con 5V, o algo parecido.


Juntando 4 pilas de 1.5V, como en la figura anterior, tenemos 6V. El problema es que el procesador ATmega328, según indica su datasheet no se puede alimentar a más de 5,5V.

La propuesta consiste en conectar el pack de 4 pilas a la placa Arduino usando un diodo en 1N4001 en serie. La caida de tensión en el diodo será de unos 0,7V por lo que la tensión que se verá en la línea interna de 5V de la placa Arduino será 5.3V. Dado que el micro ATmega328 que es el corazón de Arduino UNO puede ser alimentado hasta con tensiones de 5.5V, nos hallamos dentro del margen correcto de funcionamiento.



En la figura se aprecia la solución propuesta. Los dos condensadores son para filtrar un poco el ruido y el valor dependerá del uso que se dé a la placa. Nuestra sistema podrá usar tanto la tensión de 5.3V, para el caso de Arduino, como la tensió de 6V directa de las pilas para alimentar motores.

Si usáramos baterías recargables de tipo NiMH, como su tensión por elemento es de 1,2V, podríamos alimentar el Arduino directamente con 4 pilas que darían justo 5V y no necesitaríamos el diodo.

¡Cuidado con el USB!

La realización de la solución anterior tiene un problema potencial si conectamos la placa Arduino al PC a través de un puerto USB cuando aún está alimentada por el pack de pilas.
La siguiente figura es una parte del esquema de la placa Arduino UNO.

El sistema de alimentación de la placa Arduino usa un transistor PMOS T1 para conectar la alimentación del puerto USB a la línea interna +5V. La activación de este transistor depende de la salida de un comparador que depende de la entrada Vin. Analizando el esquema se ve que el transistor se pondrá en marcha siempre que la entrada Vin se halle por debajo de 6.6V.

Si, por ejemplo, tenemos 9V en la entrada Vin, el transistor T1 se cortará, y la placa Arduino se alimentará con su alimentación externa, no con el puerto USB. Si no conectamos nada a la entrada Vin, el transistor conducirá y alimentaremos la placa a través de puerto USB.

Veamos lo que pasa si conectamos nuestras pilas con diodo, que dá una tensión de 5.3V a la línea +5V de la placa. Dado que no hemos conectado nada en Vin, el transistor conducirá, por lo que al conectar la placa al puerto USB tendremos un conflicto entre los 5,3V de nuestras pilas y los 5V del puerto USB. En el mejor de los casos se dará una corriente en el sentido de las pilas hacia el PC que, cuando alcance 500mA, hará saltar el fusible que lleva la placa.

El uso de este tipo de alimentación requiere de desconectar el pack de pilas cuando se desee programar la placa Arduino usando el puerto USB.

Otra conclusión es que conviene conectar todos los periféricos del sistema, o al menos los que más consuman, como es el caso de los motores, a la salida de 6V del pack de pilas. Haciendolo así, cuando se conecte la placa al PC por USB, sin usar el pack de pilas, el diodo evitará que los periféricos consuman corriente de la línea USB que se halla limitada a 500mA.


De momento este es el último artículo del proyecto LEGOBot




1 comentario:

  1. Muchas gracias por la información, me queda una duda que tal vez ya está implícita en el contexto pero me gustaría que la ratifiques:

    *SI conecto en Vin un voltaje de 12V y al mismo tiempo conecto el USB al PC no me va a dar ningún problema? Muchas gracias por tu ayuda.

    ResponderEliminar