spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Generale > Forum generale

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 27-07-2014, 11.39.32
blueice80 blueice80 non è collegato
Robottaro gold
 
Data registrazione: 18-04-2009
Residenza: Silicon Valley
Messaggi: 111
Potenza reputazione: 50
blueice80 E' per ora ancora un mistero
Predefinito Misura tensione batteria

Salve,
in questo periodo sto realizzando un piccolo orologio da tavolo con sensore di temperatura, il tutto alimentato a batteria, un progettino ormai "classico" visto che in rete se ne trovano nmila esempi.
Per leggere la tensione della batteria con il microcontrollore e volendo limitare il più possibile il consumo energetico ho visto che in alcuni forum consigliano di inserire dei mosfet sul partitore in modo da attivare il ramo solo quando serve.

Visto che per me i mosfet sono ancora un oggetto oscuro, vi chiedo:
- lo schema allegato è corretto?
- mi aiutate a scegliere i mosfet? che caratterische devono avere?

Come batteria penso di usare una lipo 2S, quindi la tensione massima Vbat dovrebbe essere 8,4V.
Il microcontrollore invece sarà un pic 18F46K22 alimentato a 3,3V.

Grazie!
Immagini allegate
Tipo file: jpg V3.jpg (16.6 Kb, 9 visite)
Rispondi citando
  #2  
Vecchio 27-07-2014, 13.44.57
L'avatar di aldofad
aldofad aldofad non è collegato
Robottaro sostenitore
 
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 43
Messaggi: 936
Potenza reputazione: 89
aldofad Il suo nome è noto a tutti
Invia un messaggio via MSN a aldofad Send a message via Skype™ to aldofad
Predefinito

Io su un progetto che sto curando ormai da tempo leggo la tensione di una batteria da 3.6V con un atmega328p usando una R1=10M e R2=2.7M con il classico partitore http://www.raltron.com/cust/tools/voltage_divider.asp.
Stiamo parlando di mega di resistenza. A metterci un transistor forse ti consuma di più la base e i cali di tensione intrinseci nel transistor.
Ci sarebbero svariate condizioni teoriche secondo le quali delle resistenze così alte non andrebbero bene ma dipende dallo scenario circuitale nel suo insieme. Io ottengo letture precise perfino al primo colpo dopo aver riesumato la CPU dall'ibernazione. Faccio questo esempio perchè prima di leggere la tensione con un ingresso analogico usando il partitore di tensione, mi facevo restituire la tensione della batteria direttamente dal micro (dato che ha un watchdog dedicato a questo con riferimento interno di 1.1V) risparmiandomi le due resistenze, ma purtroppo l'imprecisione era parecchia al risveglio dall'ibernazione.
Rispondi citando
  #3  
Vecchio 27-07-2014, 15.28.19
L'avatar di guiott
guiott guiott è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Età : 64
Messaggi: 1,418
Potenza reputazione: 339
guiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Infatti ha parlato di mosfet non di transistor. La I di base (o meglio di gate) è praticamente nulla in condizioni statiche, si parla più di capacità (e quindi influisce sulle correnti variabili) che di R. E comunque consuma solo quando si mette a 1 l'I/O.
Io magari metterei solo il mosfet a canale N sul lato basso (lato R5). Basta tenere conto della sua caduta (peraltro molto bassa) nel partitore e si risparmia un canale P e altre R.

Giusto comunque anche il discorso di mettere delle R molto alte. Nell'esempio di Aldo si parla di una corrente di 283nA. In pratica, in un anno consuma solo 2,5mAh.

Sapendo bene come funziona un ADC si possono usare anche R molto alte. Nel caso della misura di una batteria si possono usare dei tempi di acquisizione alti (la V varia mooooolto lentamente) lasciando il tempo al condensatore di sample/hold di caricarsi e avere quindi una misura affidabile anche se la R non rientra nelle specifiche dei datasheet.
__________________
Guido
------
www.guiott.com
Rispondi citando
  #4  
Vecchio 27-07-2014, 15.31.37
blueice80 blueice80 non è collegato
Robottaro gold
 
Data registrazione: 18-04-2009
Residenza: Silicon Valley
Messaggi: 111
Potenza reputazione: 50
blueice80 E' per ora ancora un mistero
Predefinito

Sul datasheet del pic raccomandano di avere un impedenza massima di 10Kohm sull'ingresso anologico.
Resistenze da megaohm non ne ho per fare qualche test, ma se mi confermate che funziona scarto subito la soluzione a mosfet.
Rispondi citando
  #5  
Vecchio 28-07-2014, 02.42.27
L'avatar di aldofad
aldofad aldofad non è collegato
Robottaro sostenitore
 
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 43
Messaggi: 936
Potenza reputazione: 89
aldofad Il suo nome è noto a tutti
Invia un messaggio via MSN a aldofad Send a message via Skype™ to aldofad
Predefinito

Citazione:
Orginalmente inviato da guiott Visualizza messaggio
Infatti ha parlato di mosfet non di transistor.
Pardon.

Citazione:
Orginalmente inviato da blueice80 Visualizza messaggio
se mi confermate che funziona scarto subito la soluzione a mosfet.
Per me la puoi scartare
Rispondi citando
  #6  
Vecchio 28-07-2014, 08.21.41
L'avatar di guiott
guiott guiott è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Età : 64
Messaggi: 1,418
Potenza reputazione: 339
guiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Citazione:
Orginalmente inviato da blueice80 Visualizza messaggio
Sul datasheet del pic raccomandano di avere un impedenza massima di 10Kohm sull'ingresso anologico.
Come dicevo le specifiche sono per mantenere il sample rate garantito nel datasheet. Se vuoi misurare segnali variabili velocemente non puoi salire sopra i 10kOhm. Con una tensione che varia lentamente come quella della batteria puoi salire molto.

Studia bene la configurazione dell'ADC. Se usi un PIC della serie 18F hai molte possibilità. Puoi impostare la sorgente di clock ed il prescaler. Usando il divisore massimo imposti il TAD (in pratica il clock dell'ADC) più lungo. Il TACQ (tempo di acquisizione) è un multiplo del TAD. Anche in questo caso prendi il valore massimo. Questo è il tempo nel quale il segnale di ingresso è collegato al condensatore di sample/hold e serve per caricarlo. Se guardi nelle pagine relative del datasheet ti dice anche il circuito equivalente e puoi farti i tuoi calcoli sulla curva di carica per stare tranquillo anche con la teoria.

Sempre con la serie 18F hai la possibilità di avviare la misura in automatico e fare tutto ad interrupt, in modo che la misura non carichi tempo CPU. A questo punto puoi fare molti campionamenti (anche per diversi secondi) e fare la media per migliorare ulteriormente la precisione.

un esempio di configurazione nella modalità appena descritta per un PIC18F4620:

Codice:
  //-------A/D converter
    ADCON1bits.PCFG=0b1110; // only AN0 is an analog ports
    ADCON1bits.VCFG1=0;     // VREF- source = Vss
    ADCON1bits.VCFG0=0;     // VREF+ source = Vdd
    ADCON2bits.ADFM=0;      // left justified. Only the most significant 8 bits
                            // in ADRESH are going to be used
    ADCON2bits.ADCS=0b110;	// A/D Conversion Clock, TAD = TOSC*64 = 1.6us
    ADCON2bits.ACQT=0b111;	// A/D Acquisition Time = 20 TAD = 1.6*20 = 32us
    ADCON0bits.CHS=0;       // AN0 is used
    ADCON0bits.ADON=1;      // A/D on
in questo caso uso solo gli 8 bit alti della misura, mi danno una precisione più che sufficiente per i miei scopi.
Impostando il TACQ in questo modo gli dici di avviare automaticamente il sampling alla fine del TACQ.

La configurazione dell'interrupt:

Codice:
    IPR1bits.ADIP=0;        //AD interrupt low priority
    PIR1bits.ADIF=0;        //reset of interrupt flag
    PIE1bits.ADIE=1;        //AD interrupt enabled
La ISR

Codice:
void interrupt low_priority low_isr (void)
{  
     if (PIR1bits.ADIF)
    {// A new AD value has been read
         PIR1bits.ADIF=0;               // reset interrupt flag
         DutyCycle=(ADRESH*LightIndx);//only the higest 8 bits are read
    }
}
Volendo puoi fare una sommatoria delle letture e dividerla per il numero di campioni per fare la media.

La lettura viene avviata da un interrupt esterno ogni secondo:

Codice:
        ADCON0bits.GO_DONE = 1; // start ambient light reading
Impostando il TACQ in manuale invece puoi aumentare quanto vuoi il tempo di lettura, se non ti bastano 20 TAD. Si complica un po' la procedura perché, dopo aver avviato la lettura, ti devi fare un temporizzatore che la stacchi ed avvii il sampling. In questo modo però puoi tenere il segnale da misurare collegato con il condensatore per tutto il tempo che vuoi ed usare R di ingresso grandi a piacere dandogli comunque tutto il tempo per caricarsi. C'è sempre da farsi due conti per trovare il giusto compromesso.

Se invece usi un PIC della serie 16F.... ti consiglio vivamente di fare il salto alla 18
__________________
Guido
------
www.guiott.com

Ultima modifica di guiott : 28-07-2014 alle ore 08.29.42
Rispondi citando
  #7  
Vecchio 06-08-2014, 20.37.54
blueice80 blueice80 non è collegato
Robottaro gold
 
Data registrazione: 18-04-2009
Residenza: Silicon Valley
Messaggi: 111
Potenza reputazione: 50
blueice80 E' per ora ancora un mistero
Predefinito

Oggi finalmente ho trovato un pò di tempo per fare qualche prova e posso dire che la soluzione col partitore "megaohm" funziona.
Ringrazio guiott e aldofad per il supporto tecnico
Rispondi citando
  #8  
Vecchio 07-08-2014, 00.56.24
L'avatar di aldofad
aldofad aldofad non è collegato
Robottaro sostenitore
 
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 43
Messaggi: 936
Potenza reputazione: 89
aldofad Il suo nome è noto a tutti
Invia un messaggio via MSN a aldofad Send a message via Skype™ to aldofad
Predefinito

Citazione:
Orginalmente inviato da blueice80 Visualizza messaggio
Oggi finalmente ho trovato un pò di tempo per fare qualche prova e posso dire che la soluzione col partitore "megaohm" funziona.
Ringrazio guiott e aldofad per il supporto tecnico
precisamente che valori di R usi? tensione sorgente? frequenza di lettura? frequenza dell'Arduino?
...tanto per sapere un'esperienza in più...

felice che tu abbia risolto
Rispondi citando
  #9  
Vecchio 08-08-2014, 09.20.28
blueice80 blueice80 non è collegato
Robottaro gold
 
Data registrazione: 18-04-2009
Residenza: Silicon Valley
Messaggi: 111
Potenza reputazione: 50
blueice80 E' per ora ancora un mistero
Predefinito

Citazione:
Orginalmente inviato da aldofad Visualizza messaggio
precisamente che valori di R usi? tensione sorgente? frequenza di lettura? frequenza dell'Arduino?
...tanto per sapere un'esperienza in più...
Utilizzo una R da 10Mohm e una R da 3,3Mohm, il pic è alimentato a 3,3V.
Con batteria lipo 1s l'adc misura 325 che corrisponde a circa 4,22V mentre con il voltmetro misuro 4,15. L'errore presumo sia dovuto al valore delle resistenze che sono al 5%.
Frequenza di lettura: una ogni secondo.
Rispondi citando
  #10  
Vecchio 12-09-2014, 19.06.46
L'avatar di aldofad
aldofad aldofad non è collegato
Robottaro sostenitore
 
Data registrazione: 22-01-2007
Residenza: Treviso
Età : 43
Messaggi: 936
Potenza reputazione: 89
aldofad Il suo nome è noto a tutti
Invia un messaggio via MSN a aldofad Send a message via Skype™ to aldofad
Predefinito

Lieto di aver contribuito a risolvere l'esigenza di blueice80, devo tuttavia ritrattare i consigli che avevo suggerito.
Proprio in questi giorni ho dovuto perdere molto tempo con l'Arduino Mega 2560 su un progettino di LiPo balancer per trovare un valore di R1 il più alto possibile ma che permetta comunque una buona precisione anche a fronte di brusche variazioni della tensione sotto misura con letture continue.
Ebbene, nelle condizioni sopra descritte, adoperare la R1 sull'ordine dei 10 MegaOhm è effettivamente altino e la misura diventa un pò troppo ballerina.
Su altri forum c'è chi si è fatto un bel pò di calcoli terorici andando a sviscerarsi anche il circuito interno di sample/hold dell'Atmega, concludendo che la R1 ottimale varia da 1K a 5K per tensioni fino a 50V. Questi valori di R1 sono molto scomodi perchè il consumo di corrente diventa notevole e le comuni R da 0.25W non bastano più.

Concludo insomma dicendo che dopo svariati test fino a 50V con Arduino la R1 ottimale è di 100K e non di 10 MegaOhm come precedentemente consigliavo

ciao
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Misuratore tensione batteria michelozzo Arduino 37 12-03-2014 14.49.42
Misura di tensione e corrente di potenza. Ziko Sensori 2 20-05-2013 17.15.36
LEM LA 100-TP (misura corrente) MrGhost Elettronica 10 08-09-2010 13.43.42
Misura di distanze MasterBoy Elettronica 4 22-08-2003 17.09.08
Misura Distanze Kaioh Elettronica 3 24-12-2002 18.32.00


Tutti gli orari sono GMT. Adesso sono le: 07.35.44.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB