Analizzatore accumulatori NiCd
Da molto tempo avevo in mente di realizzare un circuito che
valutasse la effettiva capacità di un accumulatore ma per
vari motivi avevo sempre rimandato . Ultimamente ho acquistato un
certo numero di accumulatori che , pur adeguatamente
caricati , non raggiungevano neppure un quarto della capacità
nominale .
Ho quindi deciso di costruire lo strumento rimandato per anni .
Era mia intenzione , considerato l'uso saltuario , dedicare a
questo progetto il minimo possibile sia in termini di spesa che
di tempo ; effettivamente la prima versione è stata
progettata e messa in opera in mezza giornata ; ma in seguito
sono state apportate varie aggiunte fino alla versione qui
presentata .
Le caratteristiche principali sono riportate nella sottostante tabella
Corrente di carica | regolabile tramite potenziometro da 50 a 2000mA |
Modalità carica 1 carica 2 |
a corrente costante ad impulsi freq. 5Hz duty cycle da 5% a 95% |
Corrente di scarica | regolabile tramite potenziometro da 50 a 1000mA |
N° elementi Soglia di scarica |
da 1 a 10 selezione tramite commutatore 0.99v per elemento |
Tempo di carica | programmabile da 1 a 65535 sec. (~18h.) |
Pausa a fine carica | programmabile da 1 a 3600 sec. |
Fine carica | per tempo scaduto o delta di temperatura (programmabile) |
Stop carica | per sovratemperatura (programmabile) |
Memorizzazione | tempi di scarica e profilo di carica conservati in eeprom |
Modo funzionamento | solo scarica scarica + carica + mantenimento analizza ( scarica + carica ciclicamente) stop ( configurazione parametri) |
Programmazione | tramite linea seriale e programma in QBASIC |
Descrizione hardware
Alimentatore
Ho utilizzato 2 trasformatori per il semplice motivo che li avevo disponibili ; inoltre utilizzando quasi esclusivamente singoli elementi era inutile utilizzare una alimentazione più alta e disperdere tutta la potenza eccedente in calore ; quando serve caricare più elementi si collega un alimentatore esterno alle boccole previste a tal scopo .
Circuito di carica
La configurazione utilizzata è un pò inusuale , ma necessaria per garantire il funzionamento dell'operazionale (LM358) nelle varie condizioni .
Circuito di scarica
Il circuito di scarica è praticamente uguale a
quello di carica con la differenza dell'uso del BUZ71 come
elemento dissipativo , questa scelta se da un lato semplifica il
circuito dall'altro ha un INCONVENIENTE dovuto al diodo di
protezione contenuto nel MOS ; ciò richiede la MASSIMA
ATTENZIONE nel collegare l'accumulatore con la giusta polarità
diversamente il diodo passa immediatamente in conduzione e dato
che gli accumulatori al NiCd anche piccoli possono fornire
elevate correnti è garantita la DISTRUZIONE del circuito ed il
rischio di INCENDIO.
Notare inoltre che per la lettura della corrente si
utilizza l'ingresso N.I .dell'operazionale in quanto la
corrente di scarica produce una caduta di tensione negativa ; ciò
significa che per aumentare la corrente occorre ruotare il
potenziometro verso massa .
I valori dei resistori collegati ai potenziometri
sono valori teorici ; in pratica ho utilizzato i valori
commerciali più vicini , come conseguenza le correnti min.e max.
di carica e scarica non corrispondono esattamente ai valori
indicati in tabella . Nella foto si vede uno strumento che non
risulta sullo schema elettrico ; era già presente nella
apparecchiatura che ho riciclato per costruire questa ; e dato
che una indicazione delle correnti di carica e scarica può
essere utile ho pensato di mantenerlo .
Rilevatore di scarica
Per la prima versione di questo progetto utilizzavo il comparatore presente all'interno del 89C2051 , poi visto che mi serviva comunque un comparatore ne ho utilizzato uno doppio , inoltre le informazioni presenti nel data-sheet del 89C2051 riguardo questo componente sono estremamente ridotte. Comunque per determinare quando l'accumulatore è scarico utilizzo il classico circuito trigger con la soglia fissata da 2 resistenze a circa 0.99V ( il valore esatto dipende dalla precisione delle resistenze e del 5V ) ; notare che il selettore del numero degli elementi da scaricare è configurato come moltiplicatore della tensione di soglia , questo per utilizzare resistenze di qualunque valore ( quelle che avevo disponibili ) e tutte uguali . La tensione non è prelevata direttamente dall'accumulatore ma tramite un stadio differenziale che garantisce una misura della effettiva tensione ai capi dell'accumulatore ; ovviamente occorre effettare un collegamento a 4 fili (2 per la misura e 2 per la corrente di scarica/carica) .
Convertitore A/D
Il convertitore è estremamente semplice e
di tipo a singola rampa ; ha tuttavia delle buone caratteristiche
e si può impiegare con qualunque mcu in quanto si tratta di
misurare la larghezza di un impulso .
A tal proposito ricordo ( a mio uso sopratutto ) come
dimensionare i valori del circuito .
Innanzitutto si fissano alcuni parametri , quali
la tensione massima da misurare ed il tempo necessario al
condensatore per caricarsi a questa tensione . Dato che i 2
transistor formano un generatore di corrente costante compensato
termicamente la tensione ai capi del condensatore sarà data da
Vc = I * T / C .
Per la mia applicazione serviva come T 17.78 msec e ho fissato Vc
a 3.5v da cui risulta una corrente di 92.5 uA . Con i
valori indicati a schema sulla resistnza che determina la
corrente di carica vi sono circa 0.65v ; occorre quindi una
resistenza di 7026 H ( 6K8 + trimmer) .
Per ottenere delle buone prestazioni occorre tenere in
considerazione le specifiche del comparatore impiegato in
particolare la corrente di polarizzazione e nel caso di singola
alimentazione se è in grado di operare con tensioni prossime a 0
.
La misura si effettua semplicemente misurando il tempo che
impiega il comparatore a cambiare stato (da H a L ) dal momento
che si inizia a caricare il condensatore (Reset = 0)
Termometro
Uno dei motivi di questa realizzazione era di
poter caricare rapidamente l'accumulatore ( quando servono sono
sempre scarichi ) . Un metodo per determinare la carica consiste
nel verificare l'aumento di temperatura che si determina quando l'accumulatore
è prossimo alla carica completa .
Il circuito è il classico ponte dove uno dei rami è l'elemento
sensibile alla temperatura ; il sensore presenta un
coefficiente di temperatura positivo ed ha una discreta linearità
. Il ponte è seguito da uno stadio amplificatore che amplifica
lo sbilanciamento fino a portarlo a 3.5v (valore di F.S. del
voltmetro) .
Avendo previsto una sola taratura occorre decidere quale
range di misura dare al termometro ; per questa applicazione ho
stabilito una scala da circa 5 a 60 gradi .
Per la calibrazione occorre verificare con un termometro di
riferimento due punti di taratura ed eventualmente variare i
valori nel file di calibrazione (calib.dat) ; il programma
utilizza questi valori per calcolare la temperatura reale .
Microcontrollore
La scelta del 89C2051 è dovuta all'uso del compilatore basic (8051 compatibile) ; inoltre ha qualche risorsa interna che si è rivelata estremamente utile per questa applicazione . La eeprom deve necessariamente essere una ST24C02 (SGS/THOMSON) in quanto si utilizza la modalità di scrittura a pagina che non viene supportata allo stesso modo da altri costruttori . La linea seriale non rispetta in trasmissione la specifica RS232 ma per brevi distanze non dovrebbe creare problemi . Tutto il software del micro si basa sull' INT1 che determina tutte le temporizzazioni ed utilizza la frequenza di rete sicuramente più precisa (per tempi lunghi) del quarzo ; a tal proposito occorre EVITARE di alimentare il circuito solo tramite le boccole esterne in quanto la mancanza della frequenza di rete blocca tutte le funzioni del micro .
Descrizione software
L'uso di un linguaggio più evoluto dell'assembler
permette di ridurre drasticamente i tempi di sviluppo ; e questo
era il motivo pricipale della mia scelta . Il compilatore basic
utilizzato (vedi riferimenti) è abbastanza efficiente e
sopratutto integra molte funzioni di utilità ( I2C , LCD ,
PRINT , ecc) ciò rende agevole la programmazione ,
ma ha come contropartita il rapido esaurimento dello spazio
disponibile in memoria , l'unico modo di
aggirare il problema consiste nell' utilizzare
nuovamente l'assembler .
Considerato l'uso saltuario dello strumento ho ritenuto più
conveniente ( e molto più comodo ) effettuare una programmazione
dei parametri tramite il P.C. e quindi inviarli allo strumento .
Lo strumento dal canto suo invia ogni 2.5 secondi una stringa di
caratteri esadecimali che danno lo stato in cui si trova , questo
permette di collegare il P.C. in qualunque momento ed avere tutte
le informazioni necessarie senza dover interrompere la fase di
carica o scarica .
Con la a funzione analizza viene ripetuto il ciclo di
scarica e carica per il numero di volte impostato ed il tempo di
scarica viene memorizzato in eeprom per la successiva
visualizzazione .
Per tutti i particolari relativi al software del micro fare
ferimento al file sorgente dell'89C2051 ( ANALYZER.BAS) .
Aggiungo ancora qualcosa relativamente al programma sul P.C.
. E' scritto in Quick Basic 4.5 che era fornito con le
ultime versioni di DOS ( la 5 e la 6.2 mi pare) e
funziona senza problemi (nel mio caso almeno) in una finesta DOS
di W95/98 .
Il programma è in versione preliminare , e tale resterà ( visto
che tutto sommato funziona ) ; alcune parti sono
piuttosto grezze e le protezioni ridotte al minimo o del tutto
assenti . I files che deve leggere ed eventualmente scrivere
devono essere nella directory corrente . La connessione allo
strumento avviene tramite COM1 ad una velocità di 9600
baud .
Puoi prelevare qua il pacchetto zippato (84
Kb)
Riferimenti
Informazioni su accumulatori NiCd e NiMh e
modalità di carica e scarica
http://www.cadex.com
http://www.vencon.com
Informazioni sul compilatore basic per 8051 e
derivati
http://www.mcselec.com
Si può scaricare una versione demo andando nella sezione
download
tra l'altro vi è pure una versione per i microcontrollori
della serie AVR
Informazioni sul microcontrollore AT89C2051
http://www.atmel.com