Arduino di norma non ha un efficace gestione delle politiche di risparmio dei consumi , mentre altre hanno un power managment che gestisce i consumi, disattivando tutto quello che non serve in arduino bisogna fare tutto a mano
Incominciamo a dire che i test sono fatti con arduino Uno R3, da data sheet abbiamo che i consumi sono di 50 mA
Se si vuole fare le cose in maniera manuale si puo' disabilitare
#include <avr/sleep.h> void setup(){ //abilito sleep mode sleep_enable(); //scelgo la tipologia di sleep mode set_sleep_mode(SLEEP_MODE_PWR_DOWN); //disabilito tutte le periferiche ADCSRA = 0; //disabilito ADC PRR = 0xff; //disabilito tutte le periferiche //mando giu' BOD: MCUCR = _BV (BODS) | _BV (BODSE); MCUCR = _BV (BODS); //mando in sleep mode la cpu sleep_cpu(); } void loop(){ }
dove:
ADCSRA abilita o disabilita ADC
la libreria di ARDUINO ha una variabile di nome PRR. Settando PRR a 1 accendo la
periferica a 0 si spegne Bit 7 - PRTWI: Power Reduction TWI Bit 6 - PRTIM2: Power Reduction Timer/Counter2 Bit 5 - PRTIM0: Power Reduction Timer/Counter0 Bit 4 - Res: Reserved bit Bit 3 - PRTIM1: Power Reduction Timer/Counter1 Bit 2 - PRSPI: Power Reduction Serial Peripheral Interface Bit 1 - PRUSART0: Power Reduction USART0 Bit 0 - PRADC: Power Reduction ADC
al setup se vuoi disabilitae ADC, USART0, TWI, SPI devi settarli
ADCSRA = 0; PRR = B10010111;
Il compito del Brown-out Detection (BOD) è quello di ripristinare il controller quando la tensione di alimentazione è troppo bassa per un funzionamento sicuro.
BOD può essere impostato su più livelli di tensione o puo' essere spento. I livelli di BOD sono 4.3V, 2.7V e 1.8V. Lo standard è 2.7 V che è buono quando si dispone di alcuni dispositivi collegati 3.3V
per disabilitare il BOD (Bisogna comunque disativare prima sempre ADC per poterlo disabilitare)
MCUCR = _BV (BODS) | _BV (BODSE); MCUCR = _BV (BODS);
poi ci sono le varie modalità di sleep mode le quali si differenziano da ltempo di risveglio del microconrollore e quandi della risposta che deve fornire l'intero sistema
Sleep modes e Consumi:
- SLEEP_MODE_IDLE: 15 mA
- SLEEP_MODE_ADC: 6.5 mA
- SLEEP_MODE_PWR_SAVE: 1.62 mA
- SLEEP_MODE_EXT_STANDBY: 1.62 mA
- SLEEP_MODE_STANDBY : 0.84 mA
- SLEEP_MODE_PWR_DOWN : 0.36 mA
Se si vuole usare invece in un progetto dove non sivuole consumare troppa batteria e si vuole far risvegliare Arduino con un interrupt.
Questo è il link per poter testare il tutto, bisogna pero', con un cavo collegare il pin D0 e il pin D2 cosi' l'evento verrà generato dall'invio di un dato dalla testiare sulla seriale
Questi sono i riferimenti che ho utilizzato per le prove:
link1
link2
link3
link4
poi c'è questo forum link
importante esempio link
esempio con libreria link
gestione interrupt link oppure link
Questa pagina è sotto licenza Creative Common BY-SA
This page is under Creative Common BY-SA
Nessun commento:
Posta un commento