1S Lipo Spannung messen - ohne Spannungsteiler möglich?

Hallo,

ich möchte gern eine Lipo-Zelle (3,7V) messen, brauch ich dafür auch einen Spannungsteiler oder kann ich (da unter 5V; auch wenn sie voll ist) direkt an einen Analogen Input? Wie schütze ich den Pin am Atmel?

Mach einen 10k Widerstand in Reihe, das reicht.

Es sein denn, du baust ein Ladegerät, aus dem Akku rausgenommen werden kann, und die Spannung dann über 5V ansteigt. Dann wäre Schutzbeschaltung nötig.

Ich gehe noch auf eine Nummer sicher weil nur mit Widerstand immer noch ein Strom in Richtung Eingang gegen über 5V fließen kann wenn du z.B. aus versehen an 24V kommst.
Siehe Bild.
So fießt der Strom wenn Spannung über 5,1V hinter dem Widerstand ist gegen Masse und der Rest fällt am Widerstand ab.
Gruß
Der Dani

Ich hab nun einen Wert um 848. Der Akku hat eine Spannung (voll) von 4.09V - muss ich jetzt den Akku entladen und dann nochmal messen und mittels einer Range die Werte zuweisen, oder gibt's einen Trick?

Das kannst du verhältnismäßig leicht umrechen
Aus der Refrence:

Die Funktioniert aber nur wenn die 5V Versorgung des Arduinos auch exakt 5V ist ist sie kleiner muss du anders rechenen z.B. 4,8 volts / 1024 units aber diese Genauigkeit wirst du nicht hinbekommen.

analogRead()
Description

Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts / 1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference().

It takes about 100 microseconds (0.0001 s) to read an analog input, so the maximum reading rate is about 10,000 times a second.

Und dann auch noch 5 Werte hintereinader nehemen und mittelwert bilden, dann gibt es weniger Unterschiede zwischen den Messungen

  for(i = 0;i<4;i++){
    inValTotal = inValTotal + analogRead(inPin);
    }

  inValTotal = inValTotal /5;
  float Volt=(inValTotal*4.9)/1000;
  Serial.println(Volt,2);  // Gibt die Spanung als Reale (gemessene) Spannung aus  mit 2 Nachkomastellen

Gruß
Der Dani

volvodani: Ich gehe noch auf eine Nummer sicher weil nur mit Widerstand immer noch ein Strom in Richtung Eingang gegen über 5V fließen kann wenn du z.B. aus versehen an 24V kommst. Siehe Bild. So fießt der Strom wenn Spannung über 5,1V hinter dem Widerstand ist gegen Masse und der Rest fällt am Widerstand ab. Gruß Der Dani

Diese Schutzbeschaltung ist für AD-Eingänge leider völig untauglich. der Gedanke dahinter ist, dass eine Diode, die "5.1" im Namen trägt erst bei 5.1V anfängt zu leiten. Dem ist leider nicht so. Eine Zenerdiode "5.1" hat zum einen Toleranzen, (z.B. Uzmin=4.8V) zum anderen ist diese nominelle Arbeitsspannug bei einem Strom von 5mA angegeben. Bei z.B. 4.2V fließt aber auch schon 1mA. Diese Diode beeinflußt also deine Messung ganz erheblich und du mißt falsche Werte!

Besser ist ein Klemmung auf die Versorgungsspannugen mittels Schottky-Dioden.

Hallo,

möchte an der Stelle mal auf die http://pgdev.pighixxx.com/ABC/SET/s13.pdf verweisen. Das mit der Z-Dioden Schutzschaltung funktioniert nur an digitalen Eingängen. Wie Gunther schon beschrieben hat.

Die einzelnen Seiten http://www.pighixxx.com/abc-arduino-basic-connections/ kann man als .pdf herunterladen und ausdrucken. Sind gute Ideen dabei.

Dann wird's ja lustig - die Zelle soll den Arduino versorgen!

Es gibt eine einfache Möglichkeit die Betriebsspannung gegen die Bandgap Referenz zu messen: http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

Damit misst man die feste 1.1V Referenz mit der Variablen Betriebsspannung als Referenzspannung. Wenn man das dann umrechnet hat man die Betriebsspannung.

Hi,

danke - funtkioniert wohl aber noch nicht ganz bei mir! :frowning:

Ich hab die Zelle mal Testweise an AREF und GND angeschlossen und folgenden Code durchlaufen lassen:

for (int i = 0; i < 5; i++) {
    RawVcc = RawVcc + readVcc();
    delay(5);
  }
 
  RefVcc = 0;
  RefVcc = (RawVcc / 5);
   Serial.println(RefVcc);
  if(RefVcc < 3100) {
   Serial.println("Unterspannung"); 
  }
  RawVcc = 0;

Zusätzlich hab ich die Zelle an einem Multimeter hängen. Dort immer konstant 4.06V

So sieht die Konsole aus (Auszug):

3216
5174
3492
4751
2822
Unterspannung
3182
6081
3527
2983
Unterspannung
2799
Unterspannung
3278
5486
4343
5992
7111
6700
6192
2903
Unterspannung
4699
6217
5193
6047
6103
5658
3109
2969
Unterspannung
4838
5991
2915
Unterspannung
5496
3240
3446
4182

nitromethan: Hi,

danke - funtkioniert wohl aber noch nicht ganz bei mir! :(

Ich hab die Zelle mal Testweise an AREF und GND angeschlossen und folgenden Code durchlaufen lassen:

Du hast also die LiPo auf AREF geschaltet aber den Analogeingang frei gelassen? Wie mißt Du dann?

Grüße Uwe

Ich nutze diese Methode: http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

Dort finde ich nichts über Analoge Eingänge!

nitromethan: Ich nutze diese Methode: http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

Dort finde ich nichts über Analoge Eingänge!

Hallo,

dann solltest Du in Deinem Link nochmal genau lesen. ;) Zudem solltest Du auch mit der Referenzspannung im Code rechnen und die analoge Eingangsspannung darf nicht größer werden wie die Referenzspannung.

lWenn ich das richtig verstehe, willst du den Arduino mit der LiPo Zelle versorgen, und gleichzeitig die Spannung der Zelle (=Versorgungsspannung) messen. Da ist der Link von Serenifly genau der richtige.

Aber damit wird eben die Spannung am Versorgungspin gemessen! Wenn du den Arduino über USB betreibst, dann wirst du etwa 5V messen. Und wenn du den Arduino über LiPO betreibst (LiPo an 5V) dann darfst du nicht die USB anstecken!

Hallo,

bei Benutzung eines Lipos muss man beachten, dass der Ladezustand proportional zur Spannung ist. Mit max 4,2V ist er voll, 3,7V ist Nennspannung und bei 3,0V ist er leer. Bei 3V muss eine (Not-)Abschaltung erfolgen, weil sonst der Akku beschädigt wird. Wegen Feuergefahr darf keinesfalls eine höhere Spannung als 4,2V an den Akku angelegt werden.

Du musst dir also Gedanken um das sichere Laden, die nötige Betriebsspannung des Arduinos und Unterspannungsabschaltung Gedanken machen.

Doc_Arduino: dann solltest Du in Deinem Link nochmal genau lesen.

Es ist schon korrekt, dass die externen Analogeingänge dabei nicht verwendet werden. Man misst die 1.1V Referenzspannungsquelle mit der Betriebsspannung als Referenz. Das macht der ADC alles intern.

Wieso das so schwankt ist mir nicht klar, aber wie guntherb hat man ein kleines Problem wenn man den Wert dann über die serielle Schnittstelle ausgeben will. Hier würde sich zum Test vielleicht ein LCD anbieten wenn das man den 4V läuft.

Da steht aber auch, dass die 1.1V Referenz +/- 10% Toleranz hat. Also bietet sich auch die Kalibrierung an wenn man mal stabile Werte hat.

Serenifly: Da steht aber auch, dass die 1.1V Referenz +/- 10% Toleranz hat. Also bietet sich auch die Kalibrierung an wenn man mal stabile Werte hat.

Stimmt! Jetzt fällt es mir wieder ein! Deshalb habe ich die 3,3V als Referenz verwendet, die hat eine Genauigkeit von 1,5%. Allerdings hat die 3,3V bei 3V Eingangsspannung auch keine 3,3V mehr. :~

Vielleicht würde eine externe Referenz helfen: LT1004 oder LM185? Die würde ich einfach an einen AD anschliessen und über den gemessenen Wert die Versorgung rückrechnen.

Es ist ja nicht so, dass die Bandgapreferenz schwankt (Temperatur-Einflüsse mal außen vor). Sondern sie streut von Controller zu Controller. Bei einem µC ist sie schon konstant, aber nicht unbedingt exakt 1.1V.

Da steht auch eine Möglichkeit das zu umgehen:

To do so, simply measure your Vcc with a voltmeter and with our readVcc() function. Then, replace the constant 1125300L with a new constant:

scale_constant = internal1.1Ref * 1023 * 1000

where

internal1.1Ref = 1.1 * Vcc1 (per voltmeter) / Vcc2 (per readVcc() function)

Den Teil habe ich aber nicht nicht selbst ausprobiert.

Eine externe Referenz ist natürlich auch eine gute Option :slight_smile:

Ah, danke! Mir war nicht klar , dass es sich bei der internen 1,1V Referenz um eine echte BandGap handelt! (Jetzt, wo ich nochmal nachgelesen habe, fällt es mir natürlich ins Auge!)