Spannung messen (maximal 15V)

Moin Leute,

mal wieder das Thema Spannung Messen.

Ich bin dran, die Spannung von 12 KFZ Batterien zu messen.

Ich weiss, dass die Batterien beim Laden nie 15V erreichen werden, aber ich dachte, 15V als maximale Spannung festzulegen, ist nicht schlecht, so kann ich den Spannungsteiler mit 10kOhm zu 5kOhm auslegen.

So habe ich die Schaltung auch aufgebaut (siehe Schaltplan).

Als Spannungsquelle nutze ich momentan einen DCDC Wandler den ich auf 12V eingestellt habe. Jetzt messe ich ja 0-5V an dem 5kOhm Widerstand was ja 0-1023 entspricht.

Habe mir folgenden Code zusammengebaut:

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F, 16, 2);

const int messungen = 20;

int batterie1Pin = A0;
float messung[messungen];
float spannung = 0.0;
float gesammtmessung = 0.0;


void setup()
{
  Serial.begin(9600);
  pinMode(batterie1Pin, INPUT);

  lcd.begin();          // LCD Starten
  lcd.backlight();      // LCD backlight aktivieren
  lcd.clear();          // LCD Säubern

}

void loop()
{
  for (int i = 0; i < messungen; i++)
  {
    messung[i] = analogRead(batterie1Pin); // anstatt i dann den Sensorwert rein
  }

  for (int i = 0; i < messungen; i++)
  {
    gesammtmessung = gesammtmessung + messung[i];
  }

  gesammtmessung = gesammtmessung / messungen;

  //  gesammtmessung = (messung[0] + messung[1] + messung[2] + messung[3] + messung[4]) / messungen;



  spannung = gesammtmessung * 15 / 1023;

  Serial.print("AR: ");
  Serial.println(gesammtmessung);
  Serial.print("Spannung: ");
  Serial.print(spannung);
  Serial.println("V");
  LCD();
  delay(2000);
}

void LCD()
{
  lcd.setCursor(0, 0);
  lcd.print("B1: ");
  if (spannung < 10)
  {
    lcd.print(" ");
    lcd.print(spannung);
    lcd.print("V");
  }
  else
  {
    lcd.print(spannung);
    lcd.print("V");
  }
}

Der Code ist nur zum Testen, sonst würde ich niemals delay benutzten.

Bei 12,65V eingestellt am DCDC Wandler (mit Multimeter eingestellt), misst der Arduino aber 15.54V (wenn das Poti auf 5kOhm gestellt wird.

Drehe ich das Poti jetzt runter, bis mir Arduino und Multimeter das selbe anzeigen, hat das Poti einen Wert von 3,66kOhm (mit Multimeter gemessen).

Kann man in dem falle sagen, dass ich das ganze so verlöten und verbauen kann, oder ist das pfusch?

  1. Punkt: wird das mit Schaltplan und Board so funktionieren? (Habe keinerlei erfahrung mit Eagle und PCB design)

Danke!

Zum Testen kannst Du das mit Potis machen, zum realen Betrieb würde ich es nicht machen.
Potis neigen im Laufe der Zeit dazu, den Wert zu ändern (z.B. durch Oxydation am Schleifer).

Die Abweichungen kommen wohl von den Toleranzen der Widerstände. Lieber durch geeignete Widerstandskombinationen den Wert mit Festwiderständen optimieren.

Ich weiß nicht, wie belastbar Deine Quelle ist (ist es direkt die Spannung im Fahrzeug?). Wenn sie das ab kann, würde ich die Widerstände um den Faktor 10 niedriger nehmen, das verringert die Störanfälligkeit.

Gruß Tommy

Danke für die Antwort.

Also es sind 2 Batterien im Boot. 120Ah und.. 100Ah wenn ich mich nicht irre.

Also sollte ich Widerstände mit 0.1% Toleranz wählen? 1k und 500Ohm wäre ja Faktor 10 kleiner.

Das wären 10 mA Dauerstrom. Wie lange bleiben die Batterien ohne dass sie geladen werden?
Ich war von Auto/Motorrad ausgegangen, die ja öfter benutzt und dabei geladen werden.
Wobei Du die Akkus wahrscheinlich in der Winterpause sowieso ausbaust.

Entweder präzise Widerstände nehmen oder aus der Bastelkiste ausmessen und evtl. kombinieren (also z.B. noch 10 Ohm in Reihe, wenn da was fehlt).

Dir ist auch bewußt, dass die Betriebsspannung des Arduino mit in die Messung eingeht, weil sie im Normalfall als Referenz genommen wird und rechnerisch mit 5V betrachtet wird.

Wenn es genauer sein soll, die interne Referenz benutzen oder eine externe Referenzspannungsquelle benutzen. Du kannst den Unterschied auch in der Software rausrechnen.

Das hängt stark davon ab, wofür Du den Messwert brauchst. Wenn es nur eine Info sein soll, reicht +-0,5V durchaus. Das wissen wir aber nicht.

Gruß Tommy

Nun, die Batterie wird im Hafen (bei nichtbenutzung) permanent über ein Ladegerät am leben erhalten. Bei fahrt wird sie klar durch den Motor geladen, und ansonsten steht das Boot höchstens eine Nacht irgendwo ohne geladen zu werden irgendwo rum.

Das mit der Betriebsspannung ist mir auch bewusst, allerdings verstehe ich nicht wie. Die erklärungen dazu im Netz finde ich merkwürdig.

Das ich die Aref irgendwie nutzen muss, ist mir bewusst. Nur wie?

Mein Schwager hat mich beauftragt, eine Spannungsanzeige für seine 2 Batterien zu bauen. Also soll nur die aktuell anliegende Spannung anzeigt werden.

Ein Tiefenentladeschutz ist separat verbaut (ein Kaufteil, da mir schon bewusst war, dass das nicht so einfach ist).

Ok, dann sind die 10 mA kein Problem.

Der Arduino benutzt (ohne besondere Einstellungen) seine Betriebsspannung als Referenzspannung und definiert diese als 5V.

Das klappt auch meistens, wenn die Messignale aus dieser Betriebsspannung abgeleitet werden (z.B. Fotowiderstand am Spannungsteiler, aber aus 5V Arduino gespeist).

Du hast das Problem, dass die zu messnde Spannung eine Fremdspannung ist, also nicht von der Arduino-Betriebsspannung abhängt.

Du gehst also entweder

  1. -- auf die interne Referenz von 1,1V = 1023 und dimensionierst Deinen Spannungsteiler darauf,
  2. -- schließt eine externe 5V-Referenz an (da gibt es spezielle IC/Platinen mit Temperaturkompensation)
  3. -- misst die reale Versorgungsspannung des Arduino ond setzt diese in die Berechnung ein (nicht Temperaturstabil)
  4. -- nimmst die Spannung so, wie sie ist und rechnest die ermittelte Differenz raus (nicht temperaturstabil)

Für eine Anzeige der Batteriespannung halte ich die Variante 3 für ausreichend.

Gruß Tommy

Achso, verstehe!

Von den 4 Wegen gefällt mir der 3. weg sehr gut, wie du es ja auch schon gesagt hast.

Kommt meine nächste frage: Wie rechne ich die reale Versorgungsspannung mit ein? Ich messe zwischen Aref und GND von der Platine 4,33V. Das ist also meine Versorgungsspannung?

Dreisatz?

1024 Schritte entsprechen 4,33 V
input (0-1023 also 1024 Schritte) entspricht Spannung

Spannung = input * 4,33 /1024

Gruß Tommy

Ich hab ja

  spannung = gesammtmessung * 15 / 1023;

Also ersetze ich die 15 mit 4,33, und Teile wieder durch 1024?

Ich steh gerade auf dem schlauch.

  1. -- auf die interne Referenz von 1,1V = 1023 und dimensionierst Deinen Spannungsteiler darauf,

Das halte ich für das Mittel der Wahl!
100nF Kerkos an den A Pins erlauben dann hohe Messwiderstände.
z.B: 10K zu 150K
Die Kombination hält Störpulse außen vor.
Die Betriebsspannung spielt keine Rolex mehr.

Wenigstens eine 1 Punkt Kalibrierung ist sinnvoll
Damit sind dann auch die konkreten Widerstandswerte egal, solange sie im Rahmen bleiben.
Und auch die 10%ige Toleranz der 1,1V Referenz wird gleich mit erschlagen.

Den Kalibrierwert(Steigung) kann man im EEPROM ablegen.

Einfacher und genauer bekommt man es nicht.
persönliche Ansicht

Dann so, den Spannungsteiler habe ich ignoriert.

Das Ergebnis musst Du noch mit Deinem gemessenen Spannungsteilerverhältnis multiplizieren.

Also Umess (am Arduino) = R2 (am Arduino) /(R1+R2) * Ubatterie

Spannung = input * 4,33 /1024

mit input = Umess

Spannung = R2 / (R1+R2) * 4,33/1024

Ich hoffe, ich habe mich nicht verhauen. Da korrigiert mich aber jemand.

Gruß Tommy

@combie: Das ist auf jeden Fall genauer und auch nicht mehr Aufwand.

Gruß Tommy

Hallo,

ich muss den derzeitigen Mess- und Testaufbau kritisieren. Egal welche Umrechnungsformel du verwendest, sobald du am 5k Poti drehst verstellst du alles. Das geht so nicht. Der Messspannungsteiler am analogen Eingang muss fest sein. Ansonsten verstellst du permanent das Teilerverhältnis und es muss Mist rauskommen. Bleibe meinetwegen bei den 10k und 5k (oder andere wie vorgeschlagen) aber mit Festwiderständen. Am Eingang des Messspannungsteiler, also oben am 10k, dort kannste mit einem Poti drehen wie die lustig bist. Dann ändert sich nur die Eingangsgröße am festen Teiler.

Nochwas. Du misst die Batteriespannung nicht im Auto? Die Batterien stehen wo rum und die willst du messen.

Tommy56:
Dann so, den Spannungsteiler habe ich ignoriert.

Das Ergebnis musst Du noch mit Deinem gemessenen Spannungsteilerverhältnis multiplizieren.

Also Umess (am Arduino) = R2 (am Arduino) /(R1+R2) * Ubatterie

Spannung = input * 4,33 /1024

mit input = Umess

Spannung = R2 / (R1+R2) * 4,33/1024

Ich hoffe, ich habe mich nicht verhauen. Da korrigiert mich aber jemand.

Gruß Tommy

Das Teste ich morgen mal, danke.

Doc_Arduino:
Nochwas. Du misst die Batteriespannung nicht im Auto? Die Batterien stehen wo rum und die willst du messen.

Nein, im Boot. Bei Betrieb, weil die anzeige ja egal ist, wenn das Boot im Hafen steht.

Ich hab mir jetzt 1% Widerstände in allen Größen geordert. Damit baue ich den Messaufbau erneut auf.

Hallo,

das mit dem Festspannungsteiler haste hoffentlich gelesen.
Wenn du im Boot misst, also bei laufenden Motor und damit laufender Lichtmaschine, wirst du sicherlich wie im Auto Störungen auf dem Bordnetz haben. Dann funktioniert die Schaltung so nicht bzw. nur kurze Zeit.
a) Spannungsversorgung für den Arduino schützen
b) Messeingang schützen
c) damit musst du auch den Spannungsteiler größer wählen, womit für mich die interne 1,1V Referenz unbrauchbar wird

c) damit musst du auch den Spannungsteiler größer wählen, womit für mich die interne 1,1V Referenz unbrauchbar wird

Einspruch!

Solange man keine sehr schnellen Änderungen zeigen muss:

100nF Kerkos an den A Pins erlauben dann hohe Messwiderstände.
z.B: 10K zu 150K

Das geht allerdings nicht, wenn man Vcc als Referenz wählt.

Ich tendiere auch für Lösung 1 mit 1,1V interne Referenz. Die ist zwar nicht sonderlich genau aber stabiel. Kalibrieren kannst Du ja mittels eines Multimeters.

Der Vorteil ist daß:

  1. die Störspannungen im Bordnetz bei ein bzw ausschalten von Lasten und langsames Nachregeln der Lichtmaschiene nicht den Arduino kaputtmachen. Ein Eingang kann egal von der Referenz 5V vertragen. Bei einem Spannungsteiler für 14V zu 1,1V sind Spannungen an der Batterie bis ca 60V Spitzenspannung für den Arduino ungefäkrlich. Zusätzlich kann am analogen Eingen deine Zenerdiode für 3V und eine Transzendensdiode für 5V geschaltet werden und so den Eingang schützen. Auch Scottkydioden zwischen Eingang und Masse/Versorgungsspannung (in Sperrrichtung gepolt) leiten Überspannungsspitzen ab. Ein Kondensator von 0,1µF am analogen Eingang zu Masse verbessert die Auslesegenauigkeit der ersten Messung (der interne sample and Hold Kondensator wird sofort auf endwert geladen).

Natürlich muß die Spannungsversorgung auch gegen
Grüße Uwe

Doc_Arduino:
Bleibe meinetwegen bei den 10k und 5k (oder andere wie vorgeschlagen) aber mit Festwiderständen.

Wo hast Du gängige feste Widerstände gefunden, die als Spannungsteiler (z.B. 1:10) taugen?
Dummerweise braucht man dazu ein Verhältnis R zu 9R.

Das gibt die Standardwiderstandsreihe nicht her.
Wo gibt es 5KΩ Widerstände?

Ich muss etwas nehmen, das ungefähr passt und in Software anpassen.

RIN67630:
Ich muss etwas nehmen, das ungefähr passt und in Software anpassen.

Dann nimm doch Werte, die in den Widerstandsreihen vorkommen. Oder spricht etwas dagegen?

Gruß

Gregor

Ich muss etwas nehmen, das ungefähr passt und in Software anpassen.

Die Kalibrierung.
(mein reden seit dem jahr 1855)