martedì 22 luglio 2014

Riduzione consumi di un Arduino uno R3


 
 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