Applicazioni E Realizzazioni Pratiche
INDICATORE DI CARICA E SCARICA BATTERIE DIGITALE ,proviamo a farlo!!!


FinePagina

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 5/6/2011,23:50

Salve ha tutti,
come già annunciato a Bolle apro questa discussione con l'intenzione di realizzare un indicatore di carica e scarica batterie digitale da usare per una miriade di applicazioni, a partire dagli accumulatori per pannelli solari, o indicatore di livello batterie per bici, moto, macchine elettriche, a finire come strumento di precisione per misurare la percentuale di accumulo max e resa di una batteria.

Il proggetto dovrebbe svilupparsi con un semplice pic magari quello del PPTEA e qualche componente passivo esterno oltre ovviamente ad un bel display lcd per visualizzare i dati.

La misurazione che ho in mente deve essere fatta tramite i due convertitori A/D da 10bit contenuti all'interno del pic uno sulla tensione che chiameremo V, ed uno su una resistenza shunt che misurerà la corrente che chiameremo I.

Fin qui nulla di chè, ora però utilizzando il microprocessore, conteremo quanti ampere/secondo scorrono verso la batteria nella fase di CARICA sommando il valore di I ogni secondo su una variabile (diciamo A) e stopperemo il conteggio quando il valore di tensione massimo della batteria (valore di V) raggiungerà un valore immesso da noi su un'altra variabile (diciamo B).
Lo STOP CARICA sarà indicato tramite un led collegato ad OUT1 del pic che tramite un transistor ed un relè spegnerà il caricatore.
Logicamente si sommeranno alla variabile A anche gli ampere/secondo che scorrono dalla batteria verso il carico (FASE DI SCARICA) ma in maniera negativa, per cui dovremmo far in modo che la tensione presente sull'ingresso A/D 10bit del pic, che viene dalla resistenza shunt, sia metà della tensione di alimentazione di questo quando la corrente che scorre è zero e tramite programma dovremo leggere i primi 9 bit tenendo solo il 10 bit come indicatore di segno (per es. 1= I da sommare alla variabile A, 0= I da sottrarre alla variabile A).
Quando il livello tensione della batteria scendesse sotto un valore da noi immesso su una terza variabile (diciamo C) si staccherà il carico per non danneggiare le batterie e questo sarà indicato tramite un led collegato ad OUT2 del pic che tramite un transistor ed un relè che fornira un uscita N/O o N/C farà cessare il carico sulle batterie.
Il valore della variabile A sarà visibile sul display e possibilmente anche il valore della variabile V.
La variabile A mostrerà gli ampere che si sono persi per via della resa delle batterie che non è il 100% ma meno.
Riavviando il ciclo di CARICA la variabile A sarà resettata al valore 0.

Il secondo tipo di calcolo che dovrà effettuare il pic è la percentuale di resa della batteria che ne mostrerà il risultato dopo un completo ciclo di CARICA senza carico partendo da variabile A=0 (OUT1 off-OUT2 on) e SCARICA senza carica (OUT1 on- OUT2 off) fino ai valori impostati nelle variabili B e C eseguendo questo ciclo: inserimento su variabile D dell'operazione valore variabile A/100 a fine carica (OUT1 on-OUT2 off), inserimento su variabile E del valore variabile A a fine scarica (OUT1 off-OUT2 on), inerimento su variabile F dell'operazione variabile E/variabile D.
Visualizzazione su display del valore variabile F che mostrerà la resa delle batterie in percentuale, in pratica mostrerà quanta potenza si può richiedere alle batterie in base alla massima carica che possono accumulare in base alla loro percentuale di resa.

Per il circuito appena ho un pò di tempo lo posto, mentre per il programma di gestione chiedo aiuto ai programmatori del Forum.

Spero che l'idea piaccia e sia di largo utilizzo e soprattutto di facile realizzazione!!!

Master Digit




Modificato da Master Digit - 18/8/2011, 18:42


---------------
Sono sempre disponibile...quando ci sono!





 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 6/6/2011,04:00

Ciao Master, per il programma penso sia abbastanza semplice, puoi utilizzare facilmente C++ oppure il programmatore che ha fatto Bolle in EAbasic per il PPTEA.
C'è un problema però di cui devi tener conto, e cioè che la capacità di ogni batteria cambia in base all'amperaggio che gli scarichi. Se ad esempio hai una batteria da 10Ah e imposti la tua soglia a 9Ah, e poi la scarichi tirandogli via 5-6 Ah, in circa un ora raggiungerai la scarica totale della batteria senza che la soglia venga minimamente raggiunta. Per essere efficace quella soglia dovrai scaricare la batteria a 0,5Ah e cioè ad un ventesimo della sua capacità, questo ovviamente se parliamo di normali batterie al piombo. Questa cosa si potrebbe anche risolvere facendo "prevedere" e calcolare al firmware quale sarà la capacità della batteria in base ai vari C di scarica, questo però funzionerebbe solmante per le prime volte perchè la batteria con il tempo si deteriorerà e cambierà la sua capacità, fra l'altro ogni batteria dovrebbe avere il suo firmware dedicato. Come intendi risolvere questo problema? A meno che imposti delle soglie basate sul semplice voltaggio, e allora a quel punto sicuramente andrà tutto bene.

Se mi spieghi meglio come intendi gestire tutte le varie opzioni, domani ti butto giù due righe in C++ così verifichiamo insieme se tutto va bene.

Un saluto kekko



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 6/6/2011,10:09

Ciao Kekko, sicuramente mi sono spiegato male, infatti io intendevo soglie basate sul voltaggio , infatti il valore nella variebile V viene inserito dal secondo A/D 10bit (il primo legge l'amperaggio) che leggerà la tensione presente sui morsetti batteria, mentre la soglia min e max tensione batteria che andremo ad inserire a seconda del tipo di batteria stanno rispettivamente nelle variabili C e B.
In questo modo con varie prove potremo stabilire anche le migliori soglie per ogni tipo di batteria in base alla percentuale di resa che ci indicherà lo strumento.
Tutto questo permetterà la massima resa delle batterie oltre che ad un perfetta regolazione di ciclo.
Pensa invece all'utilità e precisione come indicatore Fuell su una macchina elettrica od altro!!!

Master Digit



---------------
Sono sempre disponibile...quando ci sono!





 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 6/6/2011,13:30

Master ti ho scritto due righe al volo, a funzionare funziona di sicuro perchè alla fine è una cosa analoga a quello che ho fatto nel regolatore di carica per fotovoltaico. Ovviamente i parametri e i settaggi andranno modificati in base al tipo di PIC che userai, ma in linea di massima il codice è questo qui sotto, come display ho utilizzato un semplice 16x2.

#include "lcd16x2.h"

float Amp= 0;
float Volt= 0;
float Ah= 0;

unsigned long secondi= 0;
unsigned int i= 0;

char f= 0;
char sem= 1;

#pragma vector = TIMER1_COMPA_vect
__interrupt void compa (void);

#pragma vector = ADC_vect
__interrupt void volt_amp (void);

static void wait (void)
{
for (i=0; i<65000; i++)
{
f= 0;
f= 1 + 50;
}
}


void main (void)
{

SREG= SREG | 0x80; //attivazione interrupt INT0

TIMSK= TIMSK | 0x1D; //attivazione interrupt TIMER0 e TIMER2

ADMUX= 0x41;
ADCSRA= 0xCF; //configurazione resgistro + PRESCALER 128

DDRD = 0xFF;

TCCR1B= 0x00;
OCR1A= 6000;
ADCSRA_Bit6= 1;

LCD_Init();

LCD_GotoXY(0,0);
LCD_SendChar('T');
LCD_SendChar('E');
LCD_SendChar('S');
LCD_SendChar('T');
LCD_SendChar('E');
LCD_SendChar('R');
LCD_SendChar(' ');
LCD_SendChar('V');
LCD_SendChar('1');
LCD_SendChar('.');
LCD_SendChar('0');

wait();

LCD_ClearAll();

while(1)
{
LCD_GotoXY(0,0);
LCD_SendChar('V');
LCD_SendChar(':');
LCD_GotoXY(0,3);
LCD_SendDec(5,' ',Volt,2);

LCD_GotoXY(1,0);
LCD_SendChar('A');
LCD_SendChar(':');
LCD_GotoXY(0,3);
LCD_SendDec(5,' ',Amp,1);

LCD_GotoXY(1,7);
LCD_SendChar('A');
LCD_SendChar('h');
LCD_SendChar(':');
LCD_GotoXY(0,10);
LCD_SendDec(5,' ',Ah,1);

}

}

///////////////////////////////////////////////////////////////////////////////////////////////



#pragma vector = ADC_vect
__interrupt void volt_amp (void)
{
ADCSRA= 0x00;

if(sem==1)
{
Volt= (((ADC * 5) / 1023) * 45); // l'ulitmo valore (45) è il fattore correzione del partitore di tensione
}

if(Volt>= 138)
{
PORTD= 0x01; // Questo Bit rappresenta l'uscita 0 - 1 per un relè che interrompe o fa iniziare la carica
}

if(Volt<= 112)
{
PORTD= 0x00;
}

if(sem==2)
{
Amp= (((ADC * 5) / 1023) * 10); // l'ulitmo valore (10) è il fattore correzione dell'amplificatore amperaggio
// il risultato 250 indica il valore 0 Amp, se il risultato è superiore a 250 abbiamo un Amp positivio,
// se è inferiore abbiamo un Amp negatvo

if(Amp>=252 || Amp<=248)
{
TCCR1B= 0x05;
}
if(Amp==250)
{
TCCR1B= 0x00;
Ah= ((secondi / 3600) * Amp);
secondi= 0;
}
sem= 0;
}

sem++;

ADCSRA= 0xCF;
}


#pragma vector = TIMER1_COMPA_vect
__interrupt void compa (void)
{
secondi++;
}



Kekko

PS: Mi dispiace che nell'incollaggio del codice la piattaforma mi ha levato gli spazi, e le graffe stanno tutte attaccate al margine sinistro, il che rende un po' difficile la comprensione, ma a funzionare funziona lo stesso.



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 6/6/2011,15:00

Grazie mille Kekko per queste cose sei da paura, se sapessi programmare come fai avrei una marea di idee da realizzare e ci si farebbero pure dei soldini!!!
Devo valutare bene il pic da usare, andrebbe bene anche il PIC12F675 se non fosse per il display che però serve.
Quello del tuo circuito è da paura come micro, solo che le microsaldature non sono alla portata di tutti, sai mica se cè lo stesso modello DIP.

Master Digit



---------------
Sono sempre disponibile...quando ci sono!





 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 6/6/2011,16:42

Di niente Master, sono solo quattro righe di codice... Per il micro ti consiglio un PIC per iniziare perchè è più semplice e non hai bisogno di JTAG, debugger... Il PIC del PPTEA, il 18F2550, è perfetto per quello che vuoi fare e fra l'altro un applicazione del PPTEA è proprio quella del voltmetro, facilmente adattabile a ciò che vuoi fare.

Kekko



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 6/6/2011,23:41

Stavo vedendo il linguaggio PPTEA che ha fatto Bolle, è fantastico per chi come mè e nato nelle'epoca del VIC20 e del COMMODORE64.
Con il commodore 64 ed il suo basic, facevo pure i cappuccini a 12 anni....che bei tempi!!!

Devo studiarmelo per bene!!!

Master Digit



---------------
Sono sempre disponibile...quando ci sono!





 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 7/6/2011,02:49

Si guarda ha fatto un lavorone, davvero un capolavoro! E la cosa più bella è che è semplice e alla portata di tutti. Per questo infatti ti avevo detto di vedere il voltmetro del PPTEA.

Kekko



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 7/6/2011,11:27

Scusa un domanda Kekko, il codice che hai postato è per il 18F2550?

Il fattore correzione dell'amplificatore amperaggio penso sia 100 e non 10 vero?

Nel PPTEA, non trovo i comandi per pilotare un display LCD, ci sono?

Master Digit



---------------
Sono sempre disponibile...quando ci sono!





 

kekko.alchemi

Avatar
GigaWatt


Utente
Msg:5226

Stato:



Inviato il: 7/6/2011,12:13

Il codice che ho postato è per gli atmel, ma è facilmente adattabile a un PIC. Il PPTEA prevede che il dato venga inviato e visualizzato direttamente sul PC, ma se vuoi mettere un display ti bastano 7 pin liberi per pilotarlo e con il 18F2550 ce la fai di sicuro.
Per il fattore correzione lo puoi cambiare come vuoi, con un fattore 10 hai un limite di 50A, ma a secondo degli utilizzi lo puoi modificare senza problemi.

Kekko



---------------
L'universo è dominato dagli estremi, l'infinitamente grande e l'infinitamente piccolo.
 

Severo 39 96
KiloWatt


Utente
Msg:199

Stato:



Inviato il: 14/7/2011,18:14

avevo pensato a qualcosa di simile ma non digitale ma a led.
forse può sembrarvi stupido per esempio prendo tre led uno rosso, verde, giallo

allora ogni led viene collegato alla sua resistenza in serie che viene collegata alla batteria.
La resistenza viene calcolata con la semplice regola in base alla tensione.

per esempio il led rosso si dovrà accendere a 10.5 volt, e viene calcolata la resistenza da mettere in serie. il led giallo a 11 volt e il led verde a 12 volt.
diciamo che ad ogni tensione si accenderà un led diverso grazie alla resistenza in serie.

so che forse è un'idea impossibile da realizzare oppure troppo meccanica ma penso che se funzioni possa essere una buona alternativa.

ciao severo.

 

mixtrb

Avatar
GigaWatt


Utente
Msg:835

Stato:



Inviato il: 14/7/2011,19:04

CITAZIONE (Severo ' 96 @ 14/7/2011, 19:14)
avevo pensato a qualcosa di simile ma non digitale ma a led.
forse può sembrarvi stupido per esempio prendo tre led uno rosso, verde, giallo

allora ogni led viene collegato alla sua resistenza in serie che viene collegata alla batteria.
La resistenza viene calcolata con la semplice regola in base alla tensione.

per esempio il led rosso si dovrà accendere a 10.5 volt, e viene calcolata la resistenza da mettere in serie. il led giallo a 11 volt e il led verde a 12 volt.
diciamo che ad ogni tensione si accenderà un led diverso grazie alla resistenza in serie.

so che forse è un'idea impossibile da realizzare oppure troppo meccanica ma penso che se funzioni possa essere una buona alternativa.

ciao severo.

sono esperimenti gia fatti da tutti gli smanettoni
vuoi sapere come funziona o preferisci provare?

se prima vuoi provare, pensa cosa potrebbe succedere se metti anche qualche diodo polarizzato direttamente in serie con led e resistenza

comunque se leggi il primo post della discussione ti puoi rendere conto che gli obiettivi che sono stati posti
sono più ambiziosi della semplice visualizzazione del raggiungimento delle soglie di tensione prefissate.

ciao e .... sperimenta.

 

Severo 39 96
KiloWatt


Utente
Msg:199

Stato:



Inviato il: 14/7/2011,22:26

sto sperimentando
spero che funzioni so che le ambizioni del progetto erano e sono altissime
ma ho voluto dare un mio minuscolo ma proprio minuscolo contributo e poi diciamo questo progetto per me alle prime armi e super ambizioso.


 

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 9/8/2011,17:34

Neanche troppo con il codice che ci ha mandato kekko.
Finite le ferie e tempo disponendo inizierò la costruzione cercando di visualizzare tutto passo passo.

Buone Ferie

Master Digit



---------------
Sono sempre disponibile...quando ci sono!





 

Master Digit

Avatar
GigaWatt


Utente
Msg:1425

Stato:



Inviato il: 18/8/2011,17:44

Salve,
ho corretto il primo post con la spiegazione del progetto in quanto non era propio ben spiegato.
Spero che ora sia di più facile comprensione sia il modo operativo che il funzionamento e applicazioni di questo circuito.

Master Digit



---------------
Sono sempre disponibile...quando ci sono!





 
 InizioPagina
 

Versione Completa!

Home page     TOP100-SOLAR    Home page forum