Mostrando entradas con la etiqueta consumo. Mostrar todas las entradas
Mostrando entradas con la etiqueta consumo. Mostrar todas las entradas

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/

viernes, 8 de marzo de 2013

Reduciendo consumo. Parte 1 Reloj - DS1302

Página principal

Arduino
Reduciendo consumo.
Parte 1
Reloj - DS1302
xsetaseta@gmail.com

En este montaje intentamos reducir el consumo de corriente de mi anterior montaje arduds.html.
El consumo de todo el circuito incluido placa de arduino y LCD es de 23,3 mA.
En esta primera parte he utilizado tres métodos para reducir el consumo.

Método 1.
El primero es variar dinámicamente mediante el programa la velocidad del reloj del ATMEGA328.
Esto se consigue modificando el registro CLKPR – Clock Prescale Register.


En la parte del programa que quiero que corra a 16MHZ pongo las ordenes:
            CLKPR = (1 << CLKPCE);
            CLKPR = 0; // Velocidad 16Mhz

En la parte del programa que quiero que corra a 500khz pongo las ordenes:
               CLKPR = (1 << CLKPCE);
             CLKPR = 5;  // Velocidad 500khz      

Método 2.
El segundo método para reducir el consumo es el de reducir el voltaje de alimentación del circuito.
El arduino utiliza 5V para la alimentación de todo el circuito. Si se disminuye el voltaje de 5V a 4V podemos obtener un significativo ahorro de consumo.
Podríamos disminuir el voltaje hasta 2,8 V, pero los LCD no trabajan por debajo de los 4V, con lo cual el microcontrolador funciona, pero en el LCD no se ve nada.
Tengo un LCD que en teoría funciona con 3,3V, pero en la práctica por debajo de 3,6V no se ven los caracteres.


Método 3.
El tercer método para reducir el consumo es montar solo el microcontrolador con los componentes mínimos para que funcione, cristal y dos condensadores. De esta forma eliminamos el consumo del conversor USB->RS232 y otros componentes que lleva la placa.
Si no se requiere mucha precisión de reloj, podríamos eliminar el crystal y los dos condensadores, utilizando el oscilador interno de  8 MHz. Estó requiere modificar el boot del arduino por lo que lo he descartado.

Montaje del micro con los dos condensadores y el cristal.

Programa arduino

Después de realizar todas la pruebas, estos son los resultados:

5V
4V
3,7V
16Mhz
23.3mA
14,5mA

2MHz
14,4mA
9mA

1MHz
13,4mA
8,6mA

500KHz
13,2mA
8,3mA

500KHz(Atmega328+LCD)
5,5mA
4,5mA
2,6mA

En el mejor de los casos, si alimentamos el circuito con 3 pilas alcalinas en serie (4,5V) de 2890mAH y colocamos un diodo en serie para bajar el voltaje a 3,8V la corriente medida es de 2,6mA.
Si dividimos 2890 entre 2.6 el resultado es de 1111 horas, 46 días. Siempre es algo menos debido a la autodescarga de la propia batería.
Si quitamos el LCD en consumo se reduce a 1mA, alimentando el Atmega a 3,7V.

En la segunda parte trataremos el poner el microcontrolador a dormir para disminuir el gasto de la batería.

Saludos
SETA43

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/