lunes, 11 de marzo de 2013

Arduino-Reduciendo consumo-Parte 2

Página principal

Arduino
Reduciendo consumo
Atmega328 power low
Parte 2
Reloj - DS1302
xsetaseta@gmail.com

En esta segunda parte de como reducir el consumo de mi reloj arduds ,se utilizara la técnica de hacer dormir el ATMEGA328 cuando no se necesite.Este modo se llama SLEEP_MODE_PWR_DOWN, el oscilador externo se para.

SMCR – Sleep Mode Control Register

Existen varias maneras de despertar al ATMEGA328, y una de ellas es el
Watchdog(perro guardián),  es la forma que vamos a utilizar para que despierte el ATMEGA328. El Watchdog utiliza un oscilador  de 128 kHz, separado del reloj principal.
Mediante prescaler podemos hacer que se active en diferentes tiempos, para este caso utilizaré un prescaler a 0.5 Segundos.


Table 10-2. Watchdog Timer Prescale Select

El programa funciona de la siguiente forma:
1.- Se activa el
Watchdog en el setup a 0.5 S.
2.-Empieza el bucle del programa principal.
3.-Se pone el microprocesador a dormir en modo
SLEEP_MODE_PWR_DOWN.
4.-Si se rebasa el tiempo de 0.5 S., se activa el Watchdog y se produce una interrupción.
5.-Se ejecuta el programa de la interrupción.
6.-A la vuelta de la interrupción se sigue ejecutando el programa del bucle principal.
7.-Se vuelve al punto 2 .

Para conseguir aún más consumo he desactivado el conversor A/D de la siguiente forma:
ADCSRA = ADCSRA & B01111111;
ACSR = B10000000;


También existe la posibilidad de deshabilitar las líneas de entrada para ahorrar algo de corriente, pero en mi caso las necesito.
//DIDR0 = DIDR0 | B00111111;
He comentado esta parte para que no se realice.

Programa arduino


Montaje del circuito.

Para poder medir el consumo del circuito por partes y quitar el consumo de los componentes de la placa arduino, he sacado el Atmega en un modulo board. También he añadido un conversor USM->rs232 para poder programar el microcontrolador.


Tabla de consumos

Conversor A/D activado y frecuencia a 16Mhz.

5 V
4 V
4,5 V con diodo  quedando 3,88V
Batería 3,7 V
Atmega 328 + LCD
2,3 mA
1,43 mA
1,50mA (Picos 2,4 mA)
1,42mA(Picos 2,5 mA)
Atmega 328
0,44 mA(Picos 2,2 mA)
0,35 mA(Picos 1,36 mA)
1,36 mA(Picos 1,46 mA)
0,34mA(Picos 1,46 mA)

Conversor A/D desactivado.

5 V
4,5 V con diodo  quedando 3,88V
Batería 3,7 V
Atmega 328 + LCD (0,5-16Mhz)
2 mA(Picos 2,6 mA)

1,17 mA(Picos 1,24 mA)
Atmega (0,5-16Mhz) 0,123 mA

0,08 mA(Picos 1,50 mA)
Atmega 328 + LCD (16Mhz)
1,29 mA(Picos 2,30 mA)
1,20 mA(Picos 2,20 mA)
Atmega 328 (16Mhz)
0,08 mA(Picos 1,17 mA)
0,08 mA(Picos 1,50 mA)

Los picos de corriente corresponden a una mínima porción de tiempo, al despertar del micro cada segundo.

Conclusión:
El consumo del circuito (Atmega328+LCD) en el mejor de los casos es de 1,20 mA .Como podemos observar se encuentra muy penalizado por el LCD, que solo él consume 1,1 mA.
En una situación real donde el circuito se encuentra alimentado por 3 pilas alcalinas de 1,5V (2890mAh) , en total 4,5V, con un diodo en serie que nos quedaría 3,88V. Si consume 1,29mA el circuito, el tiempo máximo de autonomía sera 2240 Horas, 93 días.
Por otro lado si solo se utiliza el Atmega328 quitando el LCD,  la autonomia sería 36125 horas, 1505 días, 4 años.
Lo que verdaderamente aumentaría la autonomía, sería encontrar un LCD de bajo consumo.
Todo esto es bastante teórico, las baterías se autodescargan con el tiempo.
Los picos de corriente aunque sean cortos, disminuyen la autonomía. Existe la posibilidad de poner el Watchdog a un tiempo máximo de 8 segundos, con lo cual el microcontrolador estará dormido mucho más tiempo y aumenta la autonomía del circuito. No he querido tocar el programa principal, para poder ver los segundos, aunque disminuya algo la autonomía.

He de destacar que la diferencia de consumo entre variar la frecuencia y tenerla fija a 16Mhz es mínima. Tiene un motivo, si el micro va despacio, tardará más en ejecutar el programa, y por lo tanto consumirá más. A la inversa pasa lo mismo, es una cuestión de preferencia.

Espero que haya ayudado a aumentar la autonomía de vuestros circuitos.
Para la realización del programa he utilizado código de distinto sitios, modificando a mi gusto ciertas partes, no soy el autor de ciertas líneas del programa.

Saludos.
Juan Galaz


Bibliografía:
http://www.gammon.com.au/forum/?id=11497
http://www.surprisingedge.com/low-power-atmegatiny-with-watchdog-timer/
http://blog.dosbotones.com/2011/09/reducir-el-consumo-de-arduino.html
http://www.sparkfun.com/tutorials/309
http://interface.khm.de/index.php/lab/experiments/sleep_watchdog_battery/
http://www.engblaze.com/hush-little-microprocessor-avr-and-arduino-sleep-mode-basics/
http://www.fiz-ix.com/2012/11/low-power-arduino-using-the-watchdog-timer/
http://jeelabs.org/2009/05/16/power-consumption-more-savings/

No hay comentarios:

Publicar un comentario