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