CD4066 come "switch" per partitore

Ciao a tutti,
in un precedente post avevo chiesto aiuto (grazie a tutti per le dritte) su come realizzare un sistema per poter monitorare un pacco 3S di 18650 e con il vostro aiuto sono arrivato a fare il partitore e il programma per controllare le singole celle... e fin qui tutto bene...
solo che se le celle sono sempre collegate al partitore pian piano si scaricano quindi mi è stato consigliato di utilizzare un CD4066 (4066, ) come interruttore
ma facendo varie prove non riesco a farlo funzionare...

gentilmente potete aiutarmi nella sua configurazione?

considerate che il connettore del pacco 3S avrà questa disposizione:
3s Balance Connector

e quindi su ogni capo c'è una tensione differente...
grazie a qualsiasi dritta
Roberto

Mi viene un sospetto ... ma tu alimenti il 4066 con la tensione massima del pacco batterie ? ... perche' come e' indicato sul datasheet, gli switch interni possono commutare fino a 15V, ma NON possono accettare tensioni che siano piu alte della tensione di alimentazione dell'integrato, per cui se lo alimenti con i 5V, non ci puoi commutare piu di 5V, ovviamente ...

Come alternativa, potresti usare dei banali mosfet, ma serve fargli un circuitino apposito ...

Considerando che gli ingressi analogici dell'ATmega328 cono CMOS, ad impedenza praticamente infinita, puoi realizzare i partitori usando nel partitore una resistenza serie di uno o due Megaohm, con un assorbimento di un paio di uA che, da solo, consumerebbe 2,4Ah in 2400000/2=1200000 ore, che sono tante!... :slight_smile:

E' vero che l'impedenza di ingresso degli ic cmos è decine di mega ohm, però questo è valido solo condizioni statiche, ovvero segnali che che non cambiano il loro stato, non appena vai in condizioni dinamiche devi sempre fare i conti con la capacità parassita presente tra gate e source dei cmos e questo abbassa notevolmente l'impedenza d'ingresso, si arriva all'equivalente di poche decine di kohm con segnali a frequenze elevate.
Nel caso del ADC le cose sono ancora peggio perché è necessario caricare il condensatore del sample and hold e questo richiede una impedenza d'uscita non superiore a 10 k altrimenti il condensatore non riesce a raggiungere la tensione applicata al pin analogico.
Per ovviare al problema impedenza d'uscita troppa alta ci sono due strade, ridurre al velocità di campionamento del ADC, su Arduino è impostata a circa 10 kHz, in questo modo aumenta il tempo a disposizione per la carica/scarica del condensatore, oppure fare più letture successive sullo stesso pin prendendo per valida solo l'ultima, ovviamente la velocità di variazione del segnale in ingresso deve essere nettamente minore del tempo richiesto per i campionamenti successivi, nel caso della batteria questo non è certo un problema.
Però per poter usare una impedenza d'uscita molto alta, Mohm, occorre fare almeno 100 letture consecutive del ADC, altrimenti non si ottiene un campione valido, cosa che richiede del tempo cpu, circa 10 ms, ovvero è l'equivalente del mettere un delay(10) nel codice, questo perché l'acquisizione da ADC su Arduino non è gestito da interrupt e la analogRead() è una istruzione bloccante.

Ma dovendo semplicemente leggere una tensione dalla batteria ogni tot tempo, non gli basterebbe fare al massimo 3 o 4 letture al secondo, risolvendo cosi il problema dell'alta impedenza ?

... che poi per un'uso simile ... potrebbe pure fare - attiva ingresso - aspetta 500ms - leggi - attiva altro ingresso - eccetera ... in fondo la tensione di carica o scarica della batteria mica varia cosi velocemente da richiedere un campionamento a 10KHz :smiley:

Infatti dobbiamo misurare tensioni continue, quindi basta mettere un condensatore al poliestere da 100nF o simile dopo il partitore, sull'ingresso dall'ATmega. Non si può usare un elettrolitico, perché la corrente di perdita è relativamente elevata.

Le letture possono essere fatte anche ogni 5 secondi, con un semplice
if(millis()-t>4999){t=millis(); analogRead...;}

Infatti per la tensione batteria basta fare una lettura ogni 10-20 secondi, a meno che non si tratta di un uso ad elevata corrente, p.e. su un drone, dove la batteria viene scaricata in 10- 15 minuti, in questo caso è meglio leggere la tensione almeno 10 volte al secondo, è importante monitorare anche i picchi di bassa tensione, ovviamente drenare 1-2 mA per il partitore è irrilevante a fronte di assorbimenti elevati.

Etemenanki:
Ma dovendo semplicemente leggere una tensione dalla batteria ogni tot tempo, non gli basterebbe fare al massimo 3 o 4 letture al secondo, risolvendo cosi il problema dell'alta impedenza ?

... che poi per un'uso simile ... potrebbe pure fare - attiva ingresso - aspetta 500ms - leggi - attiva altro ingresso - eccetera ... in fondo la tensione di carica o scarica della batteria mica varia cosi velocemente da richiedere un campionamento a 10KHz :smiley:

No. Non é cosí.
Il tempo della carica del condensatore sample and hold non dipende dal tempo tra una misura e l' altra ma dal clock con cui viene gestito il ADC. Se si fa una conversione veloce che permette 125k sample a l secondo ma si misura ogni secondo il tempo di carica restano sempre quei pochi µS.

Un condensatore tra Pin e massa risolve il problema.

Dei mosfet secondo me non risolvono perché devono essere pilotate con tensioni superiori ai 5V e percui prendi corrente dalla batteria.

Ciao Uwe

Mettendo un condensatore in parallelo a ogni partitore, si può fare la lettura velocemente, perché il condensatore fornisce rapidamente l'energia necessaria per caricare il gate del mosfet della porta dell'ATmega.

uwefed:
Un condensatore tra Pin e massa risolve il problema.

Solo se la frequenza di lettura è molto bassa, < 1Hz, sempre nell'ipotesi di usare un partitore di elevato valore resistivo, Mohm, questo perché l'energia assorbita dal ADC dal condensatore va reintegrata e con alti valori resistivi il tempo necessario diventa rilevante.

Ciao a tutti,
e grazie mille per l'intervento...

il mio "progetto" prevede un Arduino Pro Mini, un Display Touch da 3,2" una Driver (DRV8825) e un Motore passo passo da 17...

il tutto per far muovere una slitta a tempi regolari e ad una misura prefissata i cicli sono ripetitivi e possono durare a seconda dai 2 ai 3 minuti...

fin ora usavo al posto del Display da 3,2 uno piccolo Oled e al posto del pacco 3S con delle 18650 un pacco Cinese da 12 Volt con un "ipotetica" capacità di 5800 mah
il tutto mi garantiva un'autonomia di qualche ora che è più che sufficiente al mio scopo...
Solo che ora con il cambio di display e l'introduzione delle batterie avrò ridotto la mia autonomia ed inoltre non saprò quando sarò alla frutta con la carica residua...

ho optato per queste due scelte perché:
display... beh il Touch è molto più comodo per cambiare i vari settaggi ed impostazioni
batterie.... così facendo avrò tutto in un unico "box"

quindi la lettura delle 3S è solo per valutare a che punto mi trovo e non andare sotto il limite del non ritorno nulla di particolarmente preciso e sofisticato...

spero di non avervi annoiato e confido in qualche dritta
grazie
Roberto

Vista l'applicazione ti consiglio di misurare solo la tensione totale del pacco e non quella delle singole celle, cosa che ha un suo motivo solo se usi elevate correnti di scarica, tanto poi ci pensa il caricatore ad equalizzare le celle.
Se misuri solo la tensione totale diventa semplicissimo disattivare l'assorbimento del partitore ad apparecchiatura spenta, basta che metti un mos canale N tra l'ultima resistenza del partitore e GND, in questo modo con il mos spento non scorre corrente, prevedi una pulldown da 100 k tra il gate del mos e GND così da garantire che rimane spento anche se il pin che pilota il gate non è attivo.

astrobeed:
... un mos canale N tra l'ultima resistenza del partitore e GND ...

Aspetta ... ma in questo modo quando il mos e' aperto gli arriva la tensione della batteria sul pin analogico ... e se e' piu di 5V ... puff ... addio pin ...

Non sarebbe meglio un canale P fra il + della batteria ed il partitore ? ... magari pilotato da un NPN in open collector ? ... cosi scolleghi la batteria dal partitore quando non la leggi ...

Hai ragione con il mos spento tutta la tensione della batteria arriva sul pin, in realtà non succede nulla perché passa attraverso la prima resistenza del partitore, che è quella maggiore, e ricircola attraverso i diodi di clamping, il pin non si brucia però la corrente scorre lo stesso e la batteria si scarica.
Meglio usare un mos canale P sul positivo, però serve anche un transistor, o un mos canale N, per pilotare il gate altrimenti il problema della tensione maggiore di 5V sul GPIO che lo pilota rimane visto che per tenere spento il mos il gate si trova a Vbat tramite la relativa pullup.

NTR4502PT1G (ben 35 centesimi l'uno :D) 250 milliohm in SOT23 ... pilotato da un qualsiasi 2N7002 o simile ... direi che con poco piu di un'euro ed un minimo di saldatura SMD, si risolve il problema in pochi millimetri di spazio ... :wink:

Etemenanki:
NTR4502PT1G (ben 35 centesimi l'uno :D) 250 milliohm in SOT23 ... pilotato da un qualsiasi 2N7002 o simile ... direi che con poco piu di un'euro ed un minimo di saldatura SMD, si risolve il problema in pochi millimetri di spazio ... :wink:

Aiutooooooo....
ricordate che sono un semplice appassionato e che quindi difficilmente vi stò dietro...

per favore avresti uno schema o un esempio su come faresti tu la cosa ?

una cosa tipo questa, molto al volo ...

Le resistenze senza valore sono il tuo partitore ...

Buon giorno a tutti,
grazie mille per lo schema... non ci sarei mai arrivato...

quindi mi dite che non c'è speranza di far "funzionare il CD4066 per questo scopo?

grazie ancora
Roberto

Ecco il mio schema

Ehm ... una foto dei componenti e del montaggio, non dello schema elettrico ... :wink: