Forum: Mikrocontroller und Digitale Elektronik Spannungsmessung an LIPO Akkus


von Andreas E. (andreas_e660)



Lesenswert?

Hallo Elektronikexperten,

das Thema Spannungsmessung an Akkus( in meinem Fall Lipos) ist natürlich 
nicht neu, auch nicht hier im Forum.

Ich möchte zum Üben aber selbst eine kleine Meßplatine entwickeln.
Der derzeitige Status der Schaltung ist als Bild angehängt.

Überlegungen/Komponenten:

1) Die Zellen werden einzeln über den Balancer Stecker abgegriffen 
(JST-EH für 6S)

2) 8 Kanal analog multiplexer/demultiplexer um jede Zelle separat 
weiterleiten zu können

3) OP AMP als Impedanzwandler (74HC4051BQ) --> Schaltung soll 
Spannungsquelle möglichst nicht belasten um

4) Referenzspannung (LM4040) zur Erhöhung der Meßgenauigkeit

5) 10-bit ADC am Mikrocontroller (ATTINY85) zur Spannungsmessung

6) später noch Ausgabe auf Display (Keystudio 2004A)

Die Spannungsversorgung ist noch offen, sollte vorerst nicht aus dem 
Akku kommen, um nicht die Messung zur verfälschen.

Die Zellspannungen liegen ty­pi­scher­wei­se zwischen 3.1 und 4.2 Volt.

Nun die Fragen ans Forum:

1) Funktioniert die Schaltung in dieser Form?
2) Reichen 5V VCC für den OP AMP? Oder muss da mind. 1-2V mehr 
Versorgungsspannung als Eingangsspannung anliegen?
3) Wird es rauchen, hähäh ...

Vielen Dank für alle Kommentare im Voraus.

Andi

von Karl M. (Gast)


Lesenswert?

Hallo Andreas E. schrieb:
> LM4040

zum LM4040 gibt es auch ein Datenblatt:
http://www.ti.com/lit/ds/symlink/lm4040-n.pdf

Das im Bild 1 einen einfachen Aufbau des LM4040 zeigt.

Wie passt das zu deiner Schaltung.

Dann fehlen wie immer Kondensatoren an unterschiedlichen Stellen.

Auch wäre es spannend mal die Auflösung solch einer Beschaltung, ohne 
Spannungsteiler am Eingang, zu bestimmen.

Auflösung je Bit = 5000mV /1023 = 4,888mV

von Karl M. (Gast)


Lesenswert?

Und noch etwas,

man muss auch die Bezugspegel der Messung mit umschalten, sonst
misst man nicht 6x 4,3V = 25,6V, sondern jeweils die Reihenspannungen am 
Stecker.

Das kann so ein Attiny / Atmega nicht mit dieser Beschaltung, denn Vcc 
muss kleiner gleich des Messspannung sein.
Mehr steht im Datenblatt des Attiny85.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Die Pins werden ja auch knapp, denn du möchtest den Demultiplexer ja 
auch umschalten, wodurch nochmal 3 Pins des ATTiny fällig werden. Dann 
bleibt dir am Tiny praktisch kein Pin mehr, um das Ergebnis der Messung 
der Aussenwelt mitzuteilen.
(Reset zähle ich mal nicht mit, weil man sich da schnell aussperrt, wenn 
was schiefgeht).

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Andreas E. schrieb:
> 1) Funktioniert die Schaltung in dieser Form?

Nein.

Es kommen ja bis 25.2 V rein an Y5.

Sie könnte funktionieren, wenn sie eine 5V Versorgung hat die galvanisch 
unabhängig von der Akkuspannung ist und nicht nur der Messeingang mit 
einem 4051 umgeschaltet wird, sondern auch die GND Verbindung an den 
Minuspol der entsprechenden Zelle umgeschaltet wird. Aber VEE und VDD 
des 4051 müssen an minus und plus des Akkus und der 4051 hält keine 
25.2V aus. Es müsste ein DG409 oder so sein, mit GND und VCC an die 5V 
des uC.

> 2) Reichen 5V VCC für den OP AMP?

Bei einem R2R rail-to-rail OpAmp ja.

von Andreas E. (andreas_e660)


Lesenswert?

Danke für die schnellen Antworten.
Ich wusste es raucht ...

Denkfehler Nummer 1 war dass der Balancer je Pin die 
Einzelzellenspannung abgreift. Also muss ich jeweils die 
Differenzspannung zwischen 2 Zellen messen oder die Schaltung 
anderwertig anpassen. OK?

Kondensatoren habe ich vergessen stimmt. 100nF zwischen VCC und GND 
möglichst nah am AVR. Und dann zur Unterdrückung kleiner Schwankungen am 
Spannungssignal. Richtig?

Spannungsteiler für höhere Auflösung auch verstanden. Kalibrieren (wegen 
Toleranz der Widerstände) muss man dann ja entsprechend in der Software.

Zu wenig Pins. OK. Dann nehme ich den ATTINY84A.
Zur Info: ich hab eh etliche dieser MCs von ATTINY13 bis ATMEGA328 bzw. 
auch Rasperrys und Arduinos zur Verfügung. Hier geht es nur ums Üben und 
wie man sieht hab ich das nötig :)

Den LM4040 habe ich mir als externe Referenzspannung (weil genauer) 
statt der internen Spannungsreferenz gedacht. Die muss halt höher als 
das zu messende Signal sein. Falsch?

Gruß und Danke für die Hilfe!

von Ralf (Gast)


Lesenswert?

MaWin schrieb:
> Bei einem R2R rail-to-rail OpAmp ja.

Warum Sollte ein Rail2Rail verwendet werden? Die Eingangs- und 
Ausgangsspannung geht weder an die 0V noch an die 5V ran.

Man könnte aber mit einem R2R OpAmp die Auflösung erhöhen wenn man man 
bei von 3,0V -> 0V ausgibt und bei 4,2V -> 5V ausgibt.

von MaWin (Gast)


Lesenswert?

Ralf schrieb:
> Warum Sollte ein Rail2Rail verwendet werden? Die Eingangs- und
> Ausgangsspannung geht weder an die 0V noch an die 5V ran.

Er will/muss 4.2V messen bei 5V Versorgung, das schafft ein single 
supply OpAmp wie LM358/LT1013 nicht.

von bla (Gast)


Lesenswert?

Wenn du eh einen Zweikanal-Analogschalter verwendest könntest du 
genausogut gleich eine diferentielle Messung über einen Kondensator 
machen.

Einfach einen "genügend großen" Kondensator zwischen die beiden Ausgänge 
(X,Y) des Multiplexers, und an die Eingangspaare schaltest du deine 
Zellen (X1,Y1; X2;Y2;...) und den ADC (Xn,Yn). Um die Spannung einer 
Zelle zu messen, schaltest du den Schalter erst auf die Zelle, dadurch 
wird der Kondensator parallel zur Zelle geschaltet und lädt sich auf die 
Spannung der Zelle auf. Dann schaltest du den Schalter auf die ADC-Pins, 
dadurch wird der Kondensator dessen Spannung die Batteriespannugn ist an 
den ADC angeschlossen und du kannst offsetfrei und 
spannungsteilerfrei deine Zellspannung messen.

Braucht halt a) einen Analogschalter der die Eingangsspannung ab kann.
Der Kondensator muss groß genug sein damit Charge Injection und 
ADC-Ladungsenthnahmen vernachlässigbar sind und genügend gering 
eLeckströme haben dass die Spannung weniger als die geforderte 
Genauigkeit absinkt während der ADC misst.
Die Schaltung muss langsam genug schalten dass sich der Kondensator über 
die Analogschalterwiderstände genau genug auflädt.

von Alex W. (Gast)


Lesenswert?

Gibt es einen Grund weshalb du einen ATTiny und Multiplexer für 6S einem 
normalen ATMega8 mit 6(8) Analogeingänge vorziehst?

Bedenke das du am Eingang bei 6S bis zu 25,2 Volt hast, welche dir alle 
Bauteile grillen werden. Du musst also von Zelle zu Zelle durchschalten 
und dabei den jeweils vorletzten Pin als Masse verwenden um die 3,7/4,2V 
nicht zu überschreiten.

von Ralf (Gast)


Lesenswert?

Andreas E. schrieb:
> Die Spannungsversorgung ist noch offen, sollte vorerst nicht aus dem
> Akku kommen, um nicht die Messung zur verfälschen.

Hast du dafür auch eine Begründung? Das Wichtigste ist die Ref-Spannung 
und die kommt vom LM4040.

von Karl (Gast)


Lesenswert?

MaWin schrieb:
> Er will/muss 4.2V messen bei 5V Versorgung, das schafft ein single
> supply OpAmp wie LM358/LT1013 nicht.

Der OPA ist hier eh sinnlos: Der AVR hat hochohmige Eingänge, die können 
direkt über einen Spannungsteiler am Akku hängen.

Ach, da war ja noch was: Der AVR möchte für den Sample&Hold einen 
Eingangswiderstand von 10kohm sehen, um den Sample-Kondensator laden zu 
können. Dafür packt man einfach einen Kondensator 10-100nF an den 
Eingang, aus dem sich der Sample&Hold bedienen kann.

Der Multiplexer ist auch sinnlos: Jeder AVR hat einen Analogschalter 
drin. Und ein ATtiny84 nimmt nicht mehr Platz weg wie ein ATtiny85 plus 
ein Multiplexer.

6 Analogeingänge, an jeden Eingang ein Spannungsteiler plus 
Pufferkondensator. Bei Runterteilen der Spannung 1:20 und 10bit ADC 
erreicht man eine Auflösung von etwa 20mV. Die Frage ist schlichtweg: 
Reicht das?

von Michael B. (laberkopp)


Lesenswert?

Karl schrieb:
> Bei Runterteilen der Spannung 1:20 und 10bit ADC
> erreicht man eine Auflösung von etwa 20mV. Die Frage ist schlichtweg:
> Reicht das?

Man müsste mindestens 0.1% Widerstände verwenden, und die Belastung 
durch den Analogeingang (Fehlerstrom 1uA) bei 1/1000 des 
Spannungsteilerstroms halten, also 1mA ziehen. Als Dauerbelastung zu 
hoch.

von Karl (Gast)


Lesenswert?

Michael B. schrieb:
> Man müsste mindestens 0.1% Widerstände verwenden, und die Belastung
> durch den Analogeingang (Fehlerstrom 1uA) bei 1/1000 des
> Spannungsteilerstroms halten, also 1mA ziehen. Als Dauerbelastung zu
> hoch.

Ach, der Laberkopp mal wieder: Nein, müsste man nicht.

Man kann stinknormale 1% Widerstände nehmen und klemmt alle Eingänge 
einmal an die Referenzspannung, dann kann man die Eingänge kalibrieren.

Abgesehen davon sind 0.1% Widerstände in SMD 0805 inzwischen so 
spottbillig, dass das auch egal wäre.

Datenblätter lesen ist out? Der ADC hat einen Rin von 100Mohm. Da kann 
man locker mit einem Spannungsteiler 2,2 Mohm / 100kohm bei einer Vref 
von 1,1 V rangehen, selbst 10 Mohm / 1 Mohm bei einer Vref von 2,56 V 
wären kein Problem. Das sind dann 2 µA bei 22V Akkuspannung.

von Karl M. (Gast)


Lesenswert?

Hallo,

Karl schrieb:
> Datenblätter lesen ist out? Der ADC hat einen Rin von 100Mohm. Da kann
> man locker mit einem Spannungsteiler 2,2 Mohm / 100kohm bei einer Vref
> von 1,1 V rangehen, selbst 10 Mohm / 1 Mohm bei einer Vref von 2,56 V
> wären kein Problem. Das sind dann 2 µA bei 22V Akkuspannung.

Es geht nicht direkt um das Rin, sondern um dem Strom für Sample and 
Hold Kondensator.

So dass ich immer eine Spanungsquelle verwende, die <= 10kOhm hat.
Sonst ergeben sich Messfehler mit mehr als 5%.
Auch diese !10kOhm) findet man im Datenblatt unter "ADC Wandler".

Wenn dass nicht geht, kommt ein OPV OPA334 zum Einsatz, der als 
Spannungsfolger geschaltet wurde.

http://www.ti.com/product/OPA334

von Michael B. (laberkopp)


Lesenswert?

Karl schrieb:
> Ach, der Laberkopp mal wieder: Nein, müsste man nicht.

Ach der Karl, dumm wie immer.

> Man kann stinknormale 1% Widerstände nehmen

Wenn die denn eine Stabilität über Lebensdauer und Temperatur wie 0.1% 
Widerstände hätten. Haben sie üblicherweise aber nicht.


Karl schrieb:
> Datenblätter lesen ist out? Der ADC hat einen Rin von 100Mohm.

Im Gegenteil, bei dir reicht aber offenbar dein Aufmerksamkeitsdefizit 
auch nur für die erste Seite.

Ich habe schon 1uA erwähnt, da hättest du merken können daß du noch was 
übersiehst, aber Karl ist dumm wie immer.

Um es mal mit Worten von jemand anderen zu sagen, mir glaubst du ja eh 
nicht:

The ADC is specified as having a 100 MΩ (that is MegaOhm) input 
impedance.
 However, this seems somewhat suspicious to me. Together with the fact 
that there is no analog input leakage specified, I would guess that this 
is the electrical characteristics of just the ADC, rather then the ADC 
together with the entire IO pin structure. I would guess that the ADC IO 
lines that are shared with digital IO have much more leakage current (1 
uA from the docs).

von Karl (Gast)


Lesenswert?

Karl M. schrieb:
> sondern um dem Strom für Sample and
> Hold Kondensator.

Der Sample&Hold Kondensator ist in der Größenordnung 10pF (Pico!). Der 
ist aus dem 10nF Pufferkondensator am Eingang lässig bedient.

Das schlägt Atmel selbst in einer App-Note zum ADC so vor. Aber Atmel 
ist ja nur der Hersteller, was weiß der schon...

von Karl (Gast)


Lesenswert?

Michael B. schrieb:
> However, this seems somewhat suspicious to me. Together with the fact
> that there is no analog input leakage specified, I would guess that this
> is the electrical characteristics of just the ADC, rather then the ADC
> together with the entire IO pin structure. I would guess that the ADC IO
> lines that are shared with digital IO have much more leakage current (1
> uA from the docs).

https://dict.leo.org/englisch-deutsch/guess

guess => raten, meinen, vermuten, annehmen, schätzen, ahnen

Dann guess mal schön weiter.

von Andreas E. (andreas_e660)



Lesenswert?

Habe den Schaltplan aktualisiert (siehe Anhang).

Korrektur der Schaltung für die Spannungsreferenz. Datenblatt gelesen.

Kein OPAMP.

Spannungsteiler für jede Zelle einzeln. Dabei ca. 10k Impedanz 
eingestellt. Datenblatt: "The ADC is optimized for analog signals with 
an output impedance of approximately 10kΩ or less."

Vielleicht reichen jetzt die Ströme nicht bzw. ich muss entsprechend 
lange warten.

Bitte wieder um Kommentare. Freu mich schon :)

Lg,
Andi

Ps.: ich lese immer die Datenblätter; ich verstehe halt bei weitem nicht 
alles bzw. bei den Mengen merke ich mir auch nicht was ich schon gelesen 
habe bzw. weiß ich nicht was jeweils für meinen Anwendungsfall relevant 
ist. Daher übe ich eben um mehr Sicherheit zu bekommen.

Und frage im Forum ...

von Karl M. (Gast)


Lesenswert?

Hallo Andreas,

zur Pufferung und als RC Tiefpassfilter, schalte bitte jeweils noch ein 
10nF Kondensator über R2 (Stellvertreter) und allen anderen auch noch.

von Andreas E. (andreas_e660)



Lesenswert?

Habe nun die RCs eingebaut. Hoffentlich richtig geschaltet.

Die Widerstände und Kapazitäten werde ich nochmals nachrechnen sodass 
ich möglichst viele gleiche Widerstände habe und je Zelle ähnliche 
Tiefpass-Grenzfrequenzen.

von Henrik H. (Firma: TU Chemnitz) (heha)


Lesenswert?

Die angegebenen Schaltungen belasten den 6S-Akku solange er angesteckt 
ist. Eine (nahezu) belastungsfreie und dabei genau messende Schaltung 
verwendet zwei billige CD4052-Analogmultiplexer (keine 74HC4052), die an 
verschiedenen Spannungspegeln angeschlossen werden, und einen 
Mikrocontroller an der 4. Zelle, also etwa in der Mitte.
Die beiden Multiplexer, die jeweils max. 20 V vertragen, laden einen 
Kondensator auf und schalten diesen danach an den Spannungsteiler vor 
dem ADC-Eingang. So genügt für die ganze Spielerei ein ATtiny13. Die 
Stromaufnahme wird nach unten allenfalls durch den Watchdog des 
Mikrocontrollers begrenzt; ein Software-Timeout kann diesen wegschalten 
(dann << 1 µA), und der Controller braucht ein externes Reset.
Schaltplan später.

Die gängige Lösung mit Hochvolt-Multiplexern, etwa TMUXxxxx, erscheint 
mir schlichtweg zu teuer. Und geschaltete Widerstände zu umständlich und 
zu ungenau. Für mehr als 6S muss man das Ganze allerdings anders lösen.

von Henrik H. (Firma: TU Chemnitz) (heha)


Angehängte Dateien:

Lesenswert?

Zunächst der Vorschlag für 3 LiPo-Zellen in Reihe. Man sieht den 4052 
„unten“ und den Mikrocontroller „oben“.
(Pardon, 2× hochgeladen bekomme ich den nicht wieder weg.)

Bei der Schaltung für 6 Zellen wird „oben“ noch ein 4052 draufgesetzt, 
für den es allerdings externe Digital-Pegelwandler braucht. Es arbeiten 
nun zwei A/D-Wandler des ATtiny13A.

Das Schaltregime ist Sache der Firmware. Der Reset-Anschluss ist frei 
zum ISP-Programmieren und zum Rücksetzen.

Die gestürzte Zuordnung der Kanäle „oben“ und „unten“ liegt an der 
Invertierung des Levelshifters: Der Standardfall „Transistoren gesperrt“ 
(R3 und R4 fressen keinen Strom) soll am längsten wirksam sein: Dann 
kann der Ladungsaustausch stattfinden und der A/D-Wandler arbeiten.

Statt Abschalten ist auch jede andere Reaktion an IC2:PB2 möglich.

Cleverer: Bei Verwendung besserer Kondensatoren (geringer 
Spannungsabhängigkeit der Kapazität) kann statt dem Widerstandsteiler 
ein kapazitiver Teiler zum Einsatz kommen: C2 wird 3× so groß wie C1 
dimensioniert, und die Spannung teilt sich durch 4. Vorher wird C2 
entladen, indem PB4 zum Lo-Ausgang wird.
Vorteil: Kein Entladevorgang durch Widerstände lassen dem A/D-Wandler 
viel Zeit.

Nebeneffekt: Permanentes Umschalten von C1 zwischen den Zellen führt zum 
Balancing.
Das wäre aber eher etwas für niederohmigere Multiplexer und Elkos.

: Bearbeitet durch User
von Andreas E. (andreas_e660)


Lesenswert?

Vielen Dank für eine alternative Schaltung und die extra Mühe!

LG/Andreas

von Mark S. (struberg)


Angehängte Dateien:

Lesenswert?

Ich habe in den letzten Tagen etwas ähnliches gebaut. Allerdings für 8S 
LiFePo4. Hier gibt es ebenfalls das Problem:CD4052 etc vertragen max 
20V. Für flying cap Messung könnte man anti-serielle p-ch mosfets nehmen 
und das händisch nachbauen. Aber braucht viel Platz auf der Platine.

Vorerst habe ich jetzt mal einen 100k/15k (1:7.67) Spannungsteiler mit 
10n genommen. Den Cap kann man sich ev sogar sparen. Ich bin einfach mit 
den ADC timings hoch gegangen. Dann bekommt man sogar damit brauchbare 
Werte.
Ich verwende dazu einen ATtiny1626. Das sind die neueren 2-series. Die 
haben einen 12 bit ADC, und eine Vref von uA 4.096mV (real pendelt er je 
nach chip zw 4V und 4.180V, aber dann ausreichend stabil). Also 1 
step==1mV.
Was mir noch aufgefallen ist: die unteren 10mV sind komplett tot, dann 
noch weitere 5mV non-linear. Ab dann geht es. Sprich man muß einen 
ordentlichen offset dazu rechnen. Hab 3 1626er (2x TSSOP und 1x SOIC) 
ausprobiert, und der Fehler scheint systematisch zu sein. Ich nehme an 
das kommt davon, weil die neuen 2-series auch diff ADC können (MUXPOS 
und MUXNEG auf jeden der Ain schaltbar, und ganz runter dürfte das Teil 
nicht kommen.

Zur Kalibrierung wollte ich ursprünglich eine 3.000V 
Referenzspannungsquelle die ich hier habe verwenden. Aber das gab wenig 
zufriedenstellende Ergebnisse aufgrund der 1:7.67. Deshalb habe ich 
schnell mit einem TL431 eine 10V ref gebastelt die ich mit meinem Fluke 
einstelle.
Der tiny1626 macht beim Einschalten eine Messung. Und wenn er auf allen 
8 inputs eine ähnliche Spannung im Bereich 10.00V +-200mV sieht, 
schaltet er sich in den Kalibriermodus und macht einen Abgleich auf die 
10.00V. Somit kann ich Toleranzen in den Spannungsteilern in der SW 
ausgleichen.
Soweit sieht es schon mal ganz ok aus. Die Spannungen stimmen bis auf ca 
20mV. Bei 26V Uin sind das immerhin ca 0.1%.

Was noch auf meiner Weihnachtsferien-TODO Liste steht: der Attiny1626 
kann auch differential input ADC und hat einen PGA (programmable gain 
amplifier). Man könnte also die heruntergesetzten Differenzspannungen 
mit dem PGA x8 verstärken und dann messen. Beim Kalibrieren liegen ja 
überall 10V an. Und auch hier kann man bereits die Differenz (pos und 
neg) messen und als Korrekturfaktor wegspeichern. Natürlich dann 
angepasst an die Spannungshöhe. Bei 20V -> doppelter Korrekturwert. 
Achtung: bei differential input gibt es effektiv 'nur' 11bit Auflösung 
weil es ja signed ist
So in der Richtung könnte es funktionieren, aber wie immer gilt: in der 
Praxis schlummern sicher noch etliche Stolperfallen.

LieGrue,
strub

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.