Resistenza interna batteria polimeri di litio (lipo)

Ciao a tutti
ho fatto qualche ricerca in rete ma non ho trovato nulla.
Uso batterie chiamate lipo per modellini radiocomandati (nella fattispecie elicotteri) per le quali la resistenza interna è un parametro molto importante.
Non tutti i carica batterie la misurano e molti di quei pochi la misurano solo totale e non cella per cella.

C'è un modo di usare Arduino per misurare tale parametro?
Ho curiosato un pò in rete ma non ho trovato nulla di utile...
Sarebbe il mio primo progetto e non ho intenzione di fermarmi qui ma questo è un punto di partenza per me abbastanza importante.

Grazie :slight_smile:

LIPO RI.txt (13.6 KB)

Per il progetto in questione non ti sò dare risposte, però, vedendo la tua presentazione mi pare di capire che sei a digiuno di programmazione su MCU tipo Arduino. Io ti suggerirei di partire dagli esempi base.

Si, non sono digiuno di programmazione (anche se sono passati degli anni) ma di arduino totalmente si.
E' che come suggerito, prima ho cercato in rete sperando di trovare qualcosa di già pronto ma non ho trovato nulla.
Quindi eccomi qui
Quali passi mi suggeriresti di curiosare per primi?
Le varie introduzioni qui sul sito le ho lette ma non si tratta, per la mia richiesta, di progettare un tester che legge una tensione o una resistenza ma di leggere la resistenza interna di una batteria. La qual cosa è anche un pò incasinata e nonostante le mie nozioni di elettronica, non saprei come farglielo fare pur sapendo che cos'è una resistenza interna.

Ho capito come fare esattamente per calcolare la resistenza interna quindi volevo chiedervi un consiglio per come realizzare il progetto.

Le batterie lipo per modellismo sono composte da un certo n° di celle che hanno Vmax di 4,20V e Vnominale di 3,70
Il loro uso rispecchia questi valori quindi in genere quando finisce la sessione di volo (per me che volo con elicotteri), tipicamente le celle sono ad un valore di 3,80V.
Le lipo che uso io sono da 3S (cioè 3 celle) per quello piccolo, 6S per quello medio e 2 lipo 6S in serie per l'elicottero grande.

La Ri si deve misurare leggendo la tensione ai capi della lipo a vuoto e quella sotto carico (anche solo di una piccola resistenza). A questo punto con le 2 tensioni faccio la differenza e divido per la corrente ed ho la Ri.
In pratica Ri= (Vriposo-Vcarico)/I.

Quindi il progetto dovrebbe leggermi le 2 tensioni e la corrente assorbita durante il carico.

Sapete più o meno indicarmi come poter procedere? Siccome le lipo che uso hanno 3 o 6 celle ma potrei usarne anche di altro tipo da 7 oppure 8 celle, volevo usare Arduino Leonardo che ha 12 IN analogici anzichè Arduino Uno che ne ha solo 6.
Ma per applicare un carico per leggere la Vcarico come faccio?

La Ri si deve misurare leggendo la tensione ai capi della lipo a vuoto e quella sotto carico (anche solo di una piccola resistenza).

piccola non direi, meglio usare un carico che corrisponde poi all'effettivo prelievo.
La Ri a 1Amp ti dara' sicuramente un valore di molto inferiore a quella a 10Amp

Ma per applicare un carico per leggere la Vcarico come faccio?

Prima di tutto ti prendi una bella resistenza da 1,2Ohm ( circa 10A di assorbimento )
Poi ti realizzi un bel partitore resisitivo
( ad esempio per le 3S , resistenze almeno 1% 4750 Ohm, 2940 Ohm Su un fondo scala di 13V ne ottieni 4,97 )
Quindi prendi un bel Rele'

  1. Misuri la tensione presente sul partitore resistivo ( Vriposo )
  2. Accendi il rele' e connetti la resistenza da 1,2 Ohm
  3. Misuri la tensione presente sul partitore resistivo ( Vcarico)
    la corrente la conosci da I=V/R ( chiaramente la R del carico, oltre che di potenza, deve essere preventivamente misurata )

Problemi:
Vista la bassa risoluzione dell'ADC di Arduino, la precisione e' di una cifra decimale, che vuol dire +-10 mOhm
Ottieni solamente la Ri interna cumulata

Innanzitutto grazie per la risposta.
Però forse qualche precisazione ti può aiutare ad aiutarmi. A me serve misurare la Ri di ogni singola cella quindi stiamo parlando di celle collegate in serie tra loro ma di soltanto 4,20V al massimo o al minimo 3,20V.
Come ordine di grandezza degli Ampere invece siamo nell'ordine di 5A (ma la lipo è capace di scaricare fino a 40C ovvero 200A in continuazione sotto carico durante i voli più aggressivi) per una lipo 6S e difficilmente andrò su amperaggi superiori.
Però ti faccio una contro domanda : non è possibile fare il tutto senza relè? Mi spiego : un aggeggino che misuri la Ri c'è già in commercio ed è questo http://www.modelquartier.com/acme-lipo-voltage-monitor-con-misura-resistenza-interna-cella-a-diversi-carichi.html?___store=inglese&___from_store=default

Ovviamente all'interno non ha di sicuro un relè per collegare il carico resistivo ed è un aggeggino che nel giro di pochi secondi effettua la misurazione.
Come faccia non lo so ma di sicuro non fa tutte le manovre da te gentilmente indicate.
Io avevo capito che Arduino avesse delle resistenze interne che si possono attivare o disattivare. Magari ho capito male, anzi malissimo. IN tale ipotesi, non sarebbe possibile effettuare le misurazioni semplicemente mettendo una resistenza per ogni cella che attivo o disattivo per leggere prima e dopo la tensione e leggere non so come la corrente che la attraversa duramte la lettura della tensione?

Sorry, pensavo al pacco batteria nel suo insieme e non m'e' venuto in mente il connettore per il bilanciamento
Ora mi torna anche quello che dicevi sul numero dei pin analogici

Comunque il ragionamento e' lo stesso, anche se non devi usare un partitore.
La r di carico devi mettercela comunque, se non ti piace il rele' ( scomodo ) puoi usare un Mosfet (quindi va tenuto conto anche della caduta di tensione che provoca )
Alla fine la procedura e' sempre quella

  1. Misuri la tensione presente sui capi dell'elemento ( Vriposo )
  2. connetti la resistenza da 8,2 Ohm
  3. Misuri la tensione presente sul capi dell'elemento ( Vcarico)

Io avevo capito che Arduino avesse delle resistenze interne che si possono attivare o disattivare

Le resistenze di Arduino , che sono solo di PullUp, hanno mi pare un valore di 20K. Troppo alto per questo scopo

Nota; Come collegare la resistenza
Abbiamo detto di usare Mosfet invece del rele'
Quindi, o un'unica resistenza e un Mosfet per ogni elemento
o una resistenza per ogni elemento e un solo Mosfet

poi ci sarebbe anche da verificare l'errore, che in questo caso mi pare alto

EDIT: Ho detto una mezza cavolata, il GND e' unico hanno un solo comune e gli elementi sono in serie, finisco una cosa e mi correggo

Facciamo un po' di chiarezza (spero!)...
Un generatore di tensione IDEALE ha un resistenza interna nulla e, quindi, può erogare qualsiasi corrente.
I generatori REALI hanno invece un resistenza interna non nulla ed in particolare per quelli LiPO vale un centinaio di millesimi di ohm.
Ovviamente più bassa è questa resistenza più elevata è la corrente che la LiPO può erogare. Diciamo perciò che la resistenza interna è un parametro che indica la qualità della batteria, il suo stato di carica e la sua "anzianità".
Il LiPO voltage monitor da te indicato misura la corrente erogata dalla intera batteria con un carico di 1 ohm, di 0.1 ohm e di 1 ohm applicato impulsivamente con duty cycle al 50% (credo)
Infatti, le uscite per il bilanciatore (connesse alle singole celle della batteria) non possono sopportare grandi correnti a causa del diametro dei fili e di conseguenza il test deve essere molto breve (ritengo dell'ordine del centinaio di millisecondi), ammesso che venga fatto cella per cella.
E' più probabile che sia invece fatto sull'intero pacco di celle ed i valori che si leggono siano mediati.

cyberhs:
Facciamo un po' di chiarezza (spero!)...
Un generatore di tensione IDEALE ha un resistenza interna nulla e, quindi, può erogare qualsiasi corrente.
I generatori REALI hanno invece un resistenza interna non nulla ed in particolare per quelli LiPO vale un centinaio di millesimi di ohm.
Ovviamente più bassa è questa resistenza più elevata è la corrente che la LiPO può erogare. Diciamo perciò che la resistenza interna è un parametro che indica la qualità della batteria, il suo stato di carica e la sua "anzianità".
Il LiPO voltage monitor da te indicato misura la corrente erogata dalla intera batteria con un carico di 1 ohm, di 0.1 ohm e di 1 ohm applicato impulsivamente con duty cycle al 50% (credo)
Infatti, le uscite per il bilanciatore (connesse alle singole celle della batteria) non possono sopportare grandi correnti a causa del diametro dei fili e di conseguenza il test deve essere molto breve (ritengo dell'ordine del centinaio di millisecondi), ammesso che venga fatto cella per cella.
E' più probabile che sia invece fatto sull'intero pacco di celle ed i valori che si leggono siano mediati.

Giustissima delucidazione sulla Ri delle lipo ma l'aggeggino che ho postato misura la Ri per singola cella e non quella totale dividendola. Ne sono sicuro perchè chi ce l'ha e lo usa vede bene che le varie Ri sono abbastanza eterogenee da cella a cella e da lipo a lipo. Cosa che non potrebbe essere se fosse una Ri totale suddivisa. Soprattutto ciò si nota quando una cella è particolarmente "sbelinata" per svariati motivi e quindi si hanno valori davvero totalmente scombinati.
Io a casa ho questo Radio Control Planes, Drones, Cars, FPV, Quadcopters and more - Hobbyking ma bisogna misurare la Ri cella per cella quindi è una rottura unica.
Ok invece per il discorso che il test deve essere molto breve ma anche le correnti in gioco sui connettori di bilanciamento. Normalmente i cb usano correnti nell'ordine massimo dei 250 mA per il bilanciamento fine proprio su quei cavi.

Uffff mi sembra che non ne esco...pensavo fosse quasi una passeggiata di salute....

Brunello:
Sorry, pensavo al pacco batteria nel suo insieme e non m'e' venuto in mente il connettore per il bilanciamento
Ora mi torna anche quello che dicevi sul numero dei pin analogici

Comunque il ragionamento e' lo stesso, anche se non devi usare un partitore.
La r di carico devi mettercela comunque, se non ti piace il rele' ( scomodo ) puoi usare un Mosfet (quindi va tenuto conto anche della caduta di tensione che provoca )
Alla fine la procedura e' sempre quella

  1. Misuri la tensione presente sui capi dell'elemento ( Vriposo )
  2. connetti la resistenza da 8,2 Ohm
  3. Misuri la tensione presente sul capi dell'elemento ( Vcarico)

Io avevo capito che Arduino avesse delle resistenze interne che si possono attivare o disattivare

Le resistenze di Arduino , che sono solo di PullUp, hanno mi pare un valore di 20K. Troppo alto per questo scopo

Nota; Come collegare la resistenza
Abbiamo detto di usare Mosfet invece del rele'
Quindi, o un'unica resistenza e un Mosfet per ogni elemento
o una resistenza per ogni elemento e un solo Mosfet

poi ci sarebbe anche da verificare l'errore, che in questo caso mi pare alto

EDIT: Ho detto una mezza cavolata, il GND e' unico hanno un solo comune e gli elementi sono in serie, finisco una cosa e mi correggo

Essendo tutte collegate in serie non credo si possa usare un solo mosfet e cmq come ho postato prima, anche qui non so se ci sia un mosfet s quegli aggeggi.
Cosa sono le resistenze di "pull up"? Perchè non si possono usare se di valore così alto?

Cosa sono le resistenze di "pull up"? Perchè non si possono usare se di valore così alto?

Le resistenze di PullUp, come dice il nome, sono delle resistenze poste tra l'ingresso da misurare e il positivo
Nel caso di Arduino sono inseribili anche da un comando, ma alla fine e' come se le ponessi tu fisicamente

Non si possono usare, perche' un valore di 20 KOhm avrebbe una corrente circolante di circa 0,2 mA, quindi irrisoria.

Ho guardato le foto dell'oggetto che avevi messo nel primo link.e in effetti le misure le fanno con 1 Ohm e 0,5 Ohm, ma contrariamente a quanto detto da Cyberhs

Il LiPO voltage monitor da te indicato misura la corrente erogata dalla intera batteria con un carico di 1 ohm, di 0.1 ohm e di 1 ohm applicato impulsivamente con duty cycle al 50% (credo)

Il calcolo viene fatto sulla cella singola. Basta guardare i valori di corrente viualizzati nella colonna accanto.
Secondo me e' stato distrato dal fatto che in quella videata non c'e' l'indicazione della cella sotto misura

Essendo tutte collegate in serie non credo si possa usare un solo mosfet e cmq come ho postato prima, anche qui non so se ci sia un mosfet s quegli aggeggi.

In qualche modo dovranno pur collegare la resistenza di carico, visto che le misure vanno fatte con e senza carico
Quindi o un BJT o un Mosfet. ( e' avvallato anche da fatto che c'e' pure una misura in PWM )

Comunque anche se ho detto una resistenza per ogni elemento e un solo Mosfet guardando bene, con un solo Mosfet si complica di molto il circuito. Servirebbe un partitore diverso per ogni elemento etc etc.

e' tardi, vado a letto, volevo solo farti notare una cosa
Non si potrebbe fare come dici tu, di mettere ogni contatto del connettore ad un ingresso diverso di Arduino.
Ogni elemento e' si di circa 4V e quindi collegabile direttamente, ma ti sei dimenticato che gli elementi della Li-Po sono in serie.
Quindi sul primo pin avresti 4V, sul secondo 8V, sul terso 12V etc etc

Grazie Brunello delle spiegazioni.
Dici quindi che devo abbandonare l'ipotesi di questo progetto?
Speravo di poter avere la soddisfazione di fare un qualcosa di simile all'aggeggino postato e sarebbe stata la mia prima realizzazione con Arduino, quindi di grande successo per me.

Non è produttivo che abbandoni l'idea del progetto, basta che alimenti il tuo strumento di Test con un alimentazioni separata e trovi un sistema per commutare i 2 fili di ingresso (ground e ingresso analogico) su egni elemento della batteria non occorre che misuri la corrente di scarica, avendo il valore noto della resistenza di scarica R si calcola V/R

Ma così non sarebbe solo un valore teorico? E che per altro cambia spesso perchè la tensione a fine carica è 4,2 ma poi basta un giorno senza usarla che eprde già anche 5 o 6 centesimi di V che per i fini del calcolo di una Ri di pochi milliohm ovviamente influisce.
Stavo in effetti pensando ad una serie di partitori resistivi esterni per ricondurre la tensione al di sotto dei 5 V per non bruciare Arduino...ma poi se collego quelli non riesco a misurare la tensione senza c arico e la tensione senza carico va da se che supera i 5V già dalla 2* cella.
Esempio di una lipo 3S carica : 4.20V/cella quindi 1° cella 4.2, 2° cella 8.4, 3° cella 12.6V ....e così via fino alle 6S....

Combinazione in questi giorni sto testando un caricabatteria di mia progettazione per LiPO 4S con Arduino MICRO.

Uno dei primi problemi che ho dovuto affrontare è stato proprio quello di leggere la tensione delle singole celle ed ho risolto con un quadruplo operazionale in configurazione amplificatore differenziale a guadagno 1.

Hai voglia di spiegarmi meglio? Gli operazionali mi ricordano qualcosa ma sono ricordi degli studi e sono passati un pò di anni :roll_eyes:

Ogni operazionale serve la singola cella ed essendo nel mio caso 4 celle, ho scelto un quadruplo operazionale.

In pratica, ogni operazionale serve ad ottenere il valore della tensione cella rispetto a massa, superando il problema delle celle in serie.

Guarda su Google "Amplificatore Differenziale" e troverai lo schema.

Grazie. Le linee di principio di un amplificatore differenziale ora me le sto pian piano ricordando ma sono ancora decisamente lontano dal poter progettare una cosa simile....

Pensavo anche che visto che la Ri si ottiene a quanto pare SOLO misurando la differenza di tensione a riposo e con carico inserito, io su Arduino la tensione a riposo non riuscirò mai a leggerla quindi tanto vale che quetso tipo di progetto si abbandoni davvero.
Che ne dici?

Non credere che gli altri dispositivi siano molto più sofisticati.
Riguardo al tuo problema, con l'artificio che ti ho illustrato, riesci a conoscere la tensione della singola cella.
Applicando un unico resistore di carico al connettore DEAN si confrontano le tensioni sulle singole celle prima e dopo dell'applicazione del carico. Poiché la corrente è misurabile ed è unica per tutte le celle, è facile determinare la Ri