Batteriespannung messen mit Spannungsteiler

Hallo zusammen,

ich möchte mit dem Arduino UNO die Spannung einer 12V Batterie (100Ah, Gel) messen. Und habe es mit einem Spannungsteiler und dem A4 Pin des UNOs probiert. Leider kommen bei der Messung keine gescheiten Werte raus und die Werte schwanken auch sehr stark. Könnte sich das bitte jemand von euch anschauen und mir damit Helfen? Vielen Dank im Voraus!

Spannungsteiler Berechnung
Da die Spannung beim Laden der Batterie mit der Lichtmaschine mehr als 12V beträgt, habe ich als maximale Eingangsspannung U=15V gewählt und den Spannungsteiler so berechnet, dass er diese Eingangsspannung auf die U2=1,1 V der internen Referenz des Arduino herunterbricht.
Für Widerstand R2 habe ich 1100 Ohm gewählt. Der Widerstand R1 ergibt sich somit zu:
image

Schaltplan
Das ganze habe ich so aufgebaut:

Code
Und folgenden Code verwendet:
(Zu beachten ist, dass ich bisher nur auf die gemessenen Byte Werte und auf die Spannung geachtet habe. Der constrain Befehl und der map Befehl für die Prozentausgabe sind noch mit willkürlichen Zahlenwerten versehen, da ich soweit leider noch gar nicht gekommen bin. )

int mess1 = 0;
void setup() {                
  Serial.begin(9600);
  analogReference(INTERNAL); //interne Arduino UNo 1,1V Referenz
  // analogReference(INTERNAL1V1) //für interne MEGA Referenz 
  }

void loop() {
  char volt_string[5];
  getCurrentVolt(volt_string);
  delay(1000);
  Serial.println(volt_string);
  }

void getCurrentVolt(char *temp)
{
  int mess1 = analogRead(A4); //Spannung an Analog Pin A4 wird gemessen
  Serial.println(mess1);
  float Spannung = map(mess1, 0, 1024, 0 , 1500)/100.00;
  float perc = constrain(mess1, 815, 898);
  float Prozent = map(perc, 809, 898, 0 , 100); // 736=12,8V=100% - 616=9V=Leer - Muss noch auf 11,8 V
  Serial.println(Spannung);
  Serial.println(Prozent);
  Serial.println("----");
  char volt[5];
  printf(volt,"%-.2f",Spannung);
}

Für den Test habe ich zuerst die Batteriespannung mit einem Multimeter gemessen, dabei wurden 11,46V angezeigt.

Dann habe ich die Messung mit dem Arduino durchgeführt und im seriellen Monitor leider nur Quatsch rausbekommen.

Im seriellen Monitor wurde folgendes ausgegeben:

---
762
11.16
6.00
----
749
10.97
6.00
----
737
10.79
6.00
----
728
10.66
6.00
----
719
10.53
6.00
----
711
10.41
6.00
----
703
10.29
6.00
----
696
10.19
6.00
----
690
10.10
6.00
----
684
10.01
6.00
----
678
9.93
6.00
----
673
9.85
6.00
----
669
9.79
6.00
----
665
9.74
6.00
----
661
9.68
6.00
----
658
9.63
6.00
----
655
9.59
6.00
----
652
9.55
6.00
----
651
9.53
6.00
----
649
9.50
6.00
----
647
9.47
6.00
----
646
9.46
6.00
----
646
9.46
6.00
----
646
9.46
6.00
----
646
9.46
6.00
----
646
9.46
6.00
----
646
9.46
6.00
----
646
9.46
6.00
----
647
9.47
6.00
----
647
9.47
6.00
----
647
9.47
6.00
----
648
9.49
6.00
----
648
9.49
6.00
----
649
9.50
6.00
----
649
9.50
6.00
----
649
9.50
6.00
----
650
9.52
6.00
----
651
9.53
6.00
----
650
9.52
6.00
----
651
9.53
6.00
----
651
9.53
6.00
----
652
9.55
6.00
----
652
9.55
6.00
----
652
9.55
6.00
----
652
9.55
6.00
----
653
9.56
6.00
----
653
9.56
6.00
----
653
9.56
6.00
----
653
9.56
6.00
----
653
9.56
6.00
----
654
9.58
6.00
----
654
9.58
6.00
----
654
9.58
6.00
----
655
9.59
6.00
----
654
9.58
6.00
----

Ich habe im Anschluss noch eine 2. Messung durchgeführt, dabei fielen die Werte ähnlich aus. Gestartet sind die Bytewerte mit 743 bzw. 10,88 V. Nach und nach sind die Werte dann abgesunken bis auf 652 Byte und 9,55 V, danach sind die wieder etwas angestiegen auf 657 Byte und 9,62 V.

Vielen Dank im Voraus für die Hilfe!

Liebe Grüße

Maja

Wieso brauchst Du Strings?
Der Spannungsteiler ist zu hochohmig. So kann der interne Sample and Hold Kondensator nicht sicher auf Endwert geladen werden. Schalte einen 0,1µF Kondensator zwischen Analogeingang und Masse. Dieser gibt den notwendigen Strom um den S&H Kondensator genügend zu laden.
Grüße Uwe

Ich habe gerade erst angefangen mit dem Programmieren, deshalb hatte ich mich an einem Referenzcode zu einem ähnlichen Projekt bedient. Die Zeichenketten sind noch ein Überbleibsel davon :sweat_smile: a ich war mir nicht sicher, ob das notwendig ist, werde es dann aber noch löschen. Danke!

Wäre das Problem mit den hochohmigen Widerständen auch gelöst, wenn ich kleinere Widerstände verwende?
Ich hatte z.B. noch ausgerechnet: R1= 6950 Ohm, R2= 550 Ohm
Der Strom, der dann durch den Spannungsteiler geht, wäre mit 2 mA noch vertretbar.

Ich werde mir den Kondensator auf jeden Fall mal bestellen und melde mich dann sobald er da ist! Vielen Dank!

Es ist ziemlich egal, welchen Wert der Kondensator hat. 100 nF heißt auf deutsch "Standard-Kondensator". Da es um Gleichspannung geht, kannst du genausogut einen 100 fach größeren 10uF Elko (Polarität beachten) nehmen, falls du sowas in der Bastelkiste findest, oder irgendwas dazwischen.

Dass der Messwert so deutlich abnimmt, ist übrigens einigermaßen merkwürdig.
15 k an 15 V und davon 1100 Ohm für 1,1 V ist jetzt nicht so weit weg von optimalen Werten.
1mA sollte für den Analogeingang ok und für die Widerstände nicht zu viel sein.

Hast du mal mit dem Multimeter an A4 gemessen?
Sinkt der Wert dort in einer Minute von 0,7 V auf 0,6 V?
Hängt sonst noch was an der Batterie?

Ich vergas zu sagen.
Beim Arduino UNO R3 auf A4 und A5 liegt die I2C Schnittstelle. Die würde ich für spätere Benutzung frei lassen. Nimm einen analogen Eingang von A0 bis A3.

Zur zu erwartenden Spannung:
Im Boardnetz eines PKW kann es Spannungsspitzen bis 90V geben. Auf dem Analogen Eingang kann bis zu 5V Spannung daherkommen ( genaugesagt Versorgungsspannung + 0,5V) . Beim Spannungsteiler 15:1,1 entprechen 68V dann 5V .

Grüße Uwe

Hallo Uwe,

über diese Aussage solltest Du evtl. nochmal eine Nacht schlafen!

Ein Spannungsteiler, bestehend aus 1100 Ohm und 13900 Ohm hat eine Impedanz von 1019 Ohm, also ist der Querstrom schon 10x höher als die im Datenblatt geforderten 10k Impedanz! Der S&H-Kondensator lädt sich bei 1k Impedanz in 0.104µs auf 5*Tau auf ... also mehr als schnell genug.

Gruß André

Ein hochohmiger Spannungsteiler hat noch einen 2. entscheidenden Vorteil: Bei Überspannungen können die Clamping Dioden diese sicher ableiten.

Aus der Doku: Anmerkungen und Warnungen

Wenn die Referenzspannung geändert wird, können die ersten Messwerte von analogRead() fehlerhaft sein.

Bin nicht Deiner Meinung.

Der S&H Kondensator wird für eine gewisse Zeit aufgeladen. Aus der Kondensatorgröße und der Ladezeit ergibt sich daß die Spannungsquelle max 10kOhm Innenwiderstand haben darf. Ist die Spannungsquelle Innenwiderstandgrößer ist der Ladestrom zu klein um den S&H Kondensator zu laden.

Der Innenwiderstand ist in diesem Fall der obere Spannungsteilerwiderstand (13900 Ohm) . Davon ist dann auch noch der Strom über den zweiten Widerstand 1100 Ohm abzuziehen. Du hast also einen belasteten Spannungsteiler, wobei die Belastung in der Größenordnung des Querstroms ist.

Unabhängig davon ob meine Rechnug ganz richtig ist oder ob ich etwas daneben liege ist ein Kondensator (fast) immer hilfreich um fehler bei der analogen Messung von statischen Spannung zu verhindern.

Grüße Uwe

Dann kann der S&H Kondensator ja sogar aus dem externen Kondensator geladen werden.

Das ist ja auch der Zweck der Übung.

Gruß Tommy

genau

Hallo Uwe,

es geht um Physik, nicht um Meinungen.
Der ADC des µC "sieht" nur die Spannung zwischen einem analogPin und GND, zulässig bis maximal Betriebsspannung (*). Damit der 14pF S&H-Kondensator schnell genug geladen werden kann wird eine Impedanz von 10k Ohm oder kleiner erwartet. Die Impedanz entspricht in Annäherung dem unteren Widerstand des Spannungsteilers und dem oberen Widerstand an der Spannungsquelle in Parallelschaltung. Sobald Du einen unteren Widerstand zwischen GND und dem analogPin von 10k Ohm (oder kleiner) hast ist diese Bedingung erfüllt.
Je nach Spannung die gemessen werden soll, und je nach oberen Widerstand, stellt sich bei einem 10k Ohm Widerstand im unteren Zweig immer ein Strom durch den Spannungsteiler ein, der bei 1V am analogPin einen Wert von 100µA hat. Nach Deiner Meinung müsste bei jeder Verzehnfachung der zu messenden Spannung auch jeweils der 10fache Strom durch den Spannungsteiler fließen?!

Gruß André

Meinst Du mit den gleichen Widerständen oder mit auf die (konstante) Ausgangsspannung angeglichenen Widerständen?

Grüße Uwe

Nach Deiner Argumentation darf der obere Widerstand des Spannungsteilers nie größer sein als 10k Ohm sein. Als Beispiel wäre dann bei zu messenden 100V der untere Widerstand bei ca. 100 Ohm, also ca. ein Hundertstel. Da wäre der Querstrom fast 10mA, wo 100µA laut Datenblatt ausreichend sind.

Gruß André

Hallo alle zusammen,

ich habe tatsächlich in meinem Starterkit einen 10 uF Kondensator gefunden und ihn mal in die Schaltung eingebaut und eine neue Messung an A0 durchgeführt. Die Messwerte sinken aber immer noch nach und nach ab, pendeln sich dann aber etwas besser ein, allerdings immer noch viel zu niedrig.

Mit dem Multimeter hatte ich dieses mal 11,25V gemessen. Im seriellen Monitor habe ich folgende Werte erhalten:



729
10.67
6.00
----

725
10.62
6.00
----

711
10.41
6.00
----

699
10.23
6.00
----

688
10.07
6.00
----

678
9.93
6.00
----

669
9.79
6.00
----

662
9.69
6.00
----

657
9.62
6.00
----

653
9.56
6.00
----

651
9.53
6.00
----

650
9.52
6.00
----

650
9.52
6.00
----

650
9.52
6.00
----

650
9.52
6.00
----

650
9.52
6.00
----

650
9.52
6.00
----

651
9.53
6.00
----

651
9.53
6.00
----

650
9.52
6.00
----

651
9.53
6.00
----

651
9.53
6.00
----

651
9.53
6.00
----

652
9.55
6.00
----

651
9.53
6.00
----

652
9.55
6.00
----

652
9.55
6.00
----

652
9.55
6.00
----

652
9.55
6.00
----

652
9.55
6.00
----

652
9.55
6.00
----

653
9.56
6.00
----

653
9.56
6.00
----

653
9.56
6.00
----

653
9.56
6.00
----

653
9.56
6.00
----

654
9.58
6.00
----

654
9.58
6.00
----

653
9.56
6.00
----

653
9.56
6.00
----

653
9.56
6.00
----

654
9.58
6.00
----

654
9.58
6.00
----

654
9.58
6.00
----

654
9.58
6.00
----

654
9.58
6.00
----

655
9.59
6.00
----

654
9.58
6.00
----

654
9.58
6.00
----

655
9.59
6.00
----

655
9.59
6.00
----

655
9.59
6.00
----

655
9.59
6.00
----

655
9.59
6.00
----

655
9.59
6.00
----

655
9.59
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

656
9.60
6.00
----

657
9.62
6.00
----

657
9.62
6.00
----

656
9.60
6.00
----

657
9.62
6.00
----

657
9.62
6.00
----

657
9.62
6.00
----

657
9.62
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

658
9.63
6.00
----

659
9.65
6.00
----

658
9.63
6.00
----

659
9.65
6.00
----

659
9.65
6.00
----

659
9.65
6.00
----

659
9.65
6.00
----

659
9.65
6.00
----

659
9.65
6.00
----

659
9.65
6.00
----

660
9.66
6.00
----

660
9.66
6.00
----

659
9.65
6.00
----

660
9.66
6.00
----

660
9.66
6.00
----

660
9.66
6.00
----

660
9.66
6.00
----

660
9.66
6.00
----

660
9.66
6.00
----

661
9.68
6.00
----

661
9.68
6.00
----

660
9.66
6.00
----

Den Kondensator habe ich wie folgt in meine Schaltung eingebaut. Ich hoffe es ist so richtig, da ich gelesen hatte, dass er bei falschem Einbau auch kaputtgehen kann. Das kurze Beinchen (-) habe ich in Richtung GND eingebaut.

@michael_x
Ich habe aktuell für die Messung erstmal nichts weiter an die Batterie angeschlossen und der Arduino wird über den USB Anschluss betrieben. Später soll allerdings folgendes über die Batterie betrieben werden: Der Arduino selbst, ein LCD Display, Temperatursensor, RTC und 5 Lastausgänge über welche die Verbraucher in einem Wohnmobil geschaltet werden. (Das ganze ist für ein Projekt in meinem Studium. Alle Funktionen bis auf die Überwachung der Batteriespannung haben wir soweit auch schon zum laufen gebracht.)

Zwischen A4 und GND und zwischen A0 und GND habe ich konstant 0V gemessen mit dem Multimeter. Die Messung habe ich mit 2 Dupont Kabel F-F jeweils an den Ausgängen des Arduinos durchgeführt und daran jeweils die Messleitungen des Multimeters gehalten. Etwas unbeholfen, aber ich hoffe das war so korrekt. :sweat_smile:

@wwerner Ich bin auf die interne Referenz des UNOs gegangen, da der UNO aktuell über den USB Anschluss versorgt wird. Später soll er aber über die Batterie selbst versorgt werden. Ich dachte, genau dafür verwendet man diese interne Referenz von 1,1V, damit man unabhängig von der Stromquelle die gleichen Messwerte erhält.

Mess mal bitte sie Spannung an A0

11,25/15*1.1= 0,825V sollten da aber sein

Ohne den Spannungsteiler hatte ich die 0V gemessen. Ich mache das dann nochmal mit Spannungsteiler.

Das ist korrekt!
Die 1,1V Referenz ist sehr stabil, hat allerdings ab Werk eine Fehlpeilung von +/- 10%.
Darum erfordert es für jeden µC eine individuelle Kalibrierung.
Ich schlage eine 1Punkt oder 2 Punkt Kalibrierung vor.