Tabla de contenido:

Reducción del consumo de energía de la batería para Digispark ATtiny85: 7 pasos
Reducción del consumo de energía de la batería para Digispark ATtiny85: 7 pasos

Video: Reducción del consumo de energía de la batería para Digispark ATtiny85: 7 pasos

Video: Reducción del consumo de energía de la batería para Digispark ATtiny85: 7 pasos
Video: Como programar un Attiny85 con Arduino Uno 2024, Noviembre
Anonim
Reducción del consumo de energía de la batería para Digispark ATtiny85
Reducción del consumo de energía de la batería para Digispark ATtiny85
Reducción del consumo de energía de la batería para Digispark ATtiny85
Reducción del consumo de energía de la batería para Digispark ATtiny85

o: Ejecutar un Arduino con una celda de botón 2032 durante 2 años.

Usando su placa Digispark Arduino lista para usar con un programa Arduino, consume 20 mA a 5 voltios.

Con un banco de energía de 5 voltios de 2000 mAh, solo funcionará durante 4 días.

Paso 1: Reducir el voltaje de suministro mediante el uso de una batería LiPo

Reducción del voltaje de suministro mediante el uso de una batería LiPo
Reducción del voltaje de suministro mediante el uso de una batería LiPo

Usando una batería LiPo con 3.7 voltios como suministro, su placa Digispark consume solo 13 mA.

Con una batería de 2000 mAh funcionará durante 6 días.

Paso 2: Reducir el reloj de la CPU

Si no utiliza una conexión USB, matemáticas intensas o sondeo rápido en su programa, reduzca la velocidad del reloj. P.ej. la biblioteca de recepción de infrarrojos de sondeo pesado IRMP funciona bien a 8 MHz.

A 1 MHz, su Digispark consume 6 mA. Con una batería de 2000 mAh funcionará durante 14 días.

Paso 3: Retire el LED de alimentación y el regulador de potencia integrados

Desactive el LED de alimentación rompiendo el cable de cobre que conecta el LED de alimentación al diodo con un cuchillo o retire / desactive la resistencia 102.

Dado que ahora está utilizando una batería LiPo, también puede quitar el IC regulador de potencia integrado. Primero levante las clavijas exteriores con la ayuda de un soldador y una clavija. Luego suelde el conector grande y retire el regulador. Para reguladores pequeños, use mucha soldadura y caliente los 3 pines juntos, luego retírelos.

A 1 MHz y 3,8 voltios, su Digispark ahora consume 4,3 mA. Con una batería de 2000 mAh funcionará durante 19 días.

Paso 4: Desconecte la resistencia de pullup USB D (marcada 152) de 5 voltios (VCC) y conéctela a USB V +

Desconexión de la resistencia pullup USB D (marcada 152) de 5 voltios (VCC) y conéctela a USB V +
Desconexión de la resistencia pullup USB D (marcada 152) de 5 voltios (VCC) y conéctela a USB V +

Esta modificación es compatible con todas las versiones1.x del gestor de arranque de micronúcleos. Si ya tiene un nuevo gestor de arranque 2.x en su placa, debe actualizar a una de las versiones 2.5 con "activePullup" en su nombre. La forma más sencilla de hacer esto es instalar el nuevo paquete de la placa digispark y grabar el gestor de arranque con la versión recomendada (¡¡¡no la predeterminada ni la agresiva !!!).

Romper el hilo de cobre del lado de la resistencia que apunta al ATtiny, esto deshabilita la interfaz USB y a su vez la posibilidad de programar la placa Digispark vía USB. Para habilitarlo nuevamente, pero aún así ahorrar energía, conecte la resistencia (marcada 152) directamente al USB V + que está fácilmente disponible en el lado exterior del diodo shottky. El diodo y sus lados correctos se pueden encontrar usando un probador de continuidad. Un lado de este diodo está conectado al pin 8 del ATtiny (VCC) y Digispark 5V. El otro lado está conectado al USB V +. Ahora, la resistencia pullup USB solo se activa si la placa Digispark está conectada a USB, p. Ej. durante la programación.

Los 2 últimos pasos también se documentan aquí.

A 1 MHz y 3,8 voltios, su Digispark ahora consume 3 mA. Con una batería de 2000 mAh funcionará durante 28 días.

Paso 5: use la suspensión en lugar de la demora ()

Usar suspensión en lugar de demora ()
Usar suspensión en lugar de demora ()

En lugar de retrasos prolongados, puede utilizar la suspensión de la CPU para ahorrar energía. Los durmientes pueden durar de 15 milisegundos a 8 segundos en pasos de 15, 30, 60, 120, 250, 500 milisegundos y 1, 2, 4, 8 segundos.

Dado que el tiempo de inicio desde la suspensión es de 65 milisegundos con la configuración de fábrica del fusible Digispark, solo las demoras superiores a 80 ms pueden reemplazarse por suspensión.

Durante el sueño, su Digispark consume 27 µA. Con una pila de botón de 200 mAh 2032 dormirá durante 10 meses.

Para ser correcto, el Digispark debe despertarse al menos cada 8 segundos, funcionando durante al menos 65 milisegundos y consumiendo alrededor de 2 mA de corriente. Esto conduce a una corriente promedio de 42 µA y 6 meses. En este escenario, casi no hay diferencia si su programa se ejecuta durante 10 milisegundos (cada 8 segundos).

El código para usar el sueño es:

#include #include volátil uint16_t sNumberOfSleeps = 0; extern volatile unsigned long millis_timer_millis; configuración vacía () {sleep_enable (); set_sleep_mode (SLEEP_MODE_PWR_DOWN); // modo de suspensión más profunda…} void loop () {… sleepWithWatchdog (WDTO_250MS, true); // dormir durante 250 ms… sleepWithWatchdog (WDTO_2S, verdadero); // dormir durante 2 s…} / * * aWatchdogPrescaler puede ser de 0 (15 ms) a 3 (120 ms), 4 (250 ms) a 9 (8000 ms) * / uint16_t computeSleepMillis (uint8_t aWatchdogPrescaler) {uint16_t tResultMillis = 8000; for (uint8_t i = 0; i save 200 uA // use wdt_enable () ya que maneja que el bit WDP3 está en el bit 5 del registro WDTCR wdt_enable (aWatchdogPrescaler); WDTCR | = _BV (WDIE) | _BV (WDIF); // Habilitar interrupción de vigilancia + restablecer bandera de interrupción -> necesita ISR (WDT_vect) sei (); // Habilitar interrupciones sleep_cpu (); // La interrupción de vigilancia nos despertará del sueño wdt_disable (); // Porque la próxima interrupción lo hará de otra manera conducir a un reinicio, ya que wdt_enable () establece WDE / Watchdog System Reset Enable ADCSRA | = ADEN; / * * Dado que el reloj del temporizador puede estar desactivado, ajuste milis solo si no está dormido en modo IDLE (SM2… 0 bits son 000) * / si (aAdjustMillis && (MCUCR & ((_BV (SM1) | _BV (SM0))))! = 0) {millis_timer_millis + = computeSleepMillis (aWatchdogPrescaler);}} / * * Esta interrupción despierta la CPU desde el modo de suspensión * / ISR (WDT_vect) {sNumberOfSleeps ++;}

Paso 6: Modifique los fusibles

22 mA de los 27 mA son extraídos por el BOD (BrownOutDetection / detección de subtensión). El BOD solo se puede desactivar reprogramando los fusibles, lo que solo se puede hacer con un programador ISP. Con este script puede reducir la corriente a 5,5 µA y también reducir el tiempo de inicio desde la suspensión a 4 milisegundos.

5 de los 5,5 µA restantes son extraídos por el contador de vigilancia activo. Si puede usar reinicios externos para despertar, el consumo de corriente puede bajar a 0.3 µA como se indica en la hoja de datos.

Si no puede alcanzar este valor, la razón puede ser que la corriente inversa del diodo Schottky entre VCC y el pullup sea demasiado alta. Tenga en cuenta que una resistencia de 12 MOhm también consume 0.3 µA a 3.7 voltios.

Esto da como resultado un consumo de corriente medio de 9 µA (2,5 años con una pila de botón 2032 de 200 mAh) si, p. Ej. procesar datos cada 8 segundos durante 3 milisegundos como aquí.

Paso 7: más información

Dibujo actual de un tablero Digispark.

Proyecte usando estas instrucciones.

Recomendado: