Wie kann ich die Genauigkeit meines Spannungsteilers verbessern?

Ich entwerfe eine kostengünstige SoC-Evaluierungssoftware (State of Charge) für eine LiFePo 4- Batteriezelle bei Nullstrom (eigentlich nur ein niedriger Strom aufgrund von Selbstentladung). Für diese besondere Anwendung bedeuten niedrige Kosten hier, dass wir wahrscheinlich kein Strommessgerät/Coulomb-Messgerät verwenden werden.

Ich führe meine Software auf einem BeagleBone AI auf Pin AIN4 aus, der maximal 1,8 V aushält, an den ich meinen Spannungsteiler angeschlossen habe. Der Pin hat einen 12-Bit signierten ADC.

Der BeagleBone AI wird an eine 1S24P-Batteriekonstruktion angeschlossen, die eine Nennspannung von 12 V und eine Kapazität von 51 Ah liefert.

Mein Teiler verwendet 10 kOhm 100 kOhm, was mir einen Skalierungsfaktor von 11 (AKA (10 + 100)/10) gibt.

Bei einer Lesespannung von 13,1 V liest AIN4 1384 AKA 1,217 V

v = 1384/(1<<11 - 1)*1.8 V

Was nach Anwendung der Skala zu 13,387 V wird:

Vbat = v*11

Ich stelle fest, dass die Genauigkeit für meinen Zweck nicht so groß ist, da ich die Spannung verwende, um die Soc / Spannungszellenkurve abzugleichen, da die Kurve zwei Plateaus hat.

Was sollte ich tun, um meine Genauigkeit zu verbessern?

Kalibrieren? Engere Toleranz Ihrer Widerstände bei geringerer Temperaturdrift? Mehr Bits in Ihrem ADC?
Haben Sie sich die angegebene Genauigkeit des ADC selbst angesehen? Bis Sie sicher sind, dass der ADC die benötigte Genauigkeit hat, macht es keinen Sinn, über den Teiler zu sprechen. Bitte geben Sie einen Link zu den ADC-Spezifikationen an.
Haben Sie den Spannungsteiler nur direkt an den ADC-Eingangspin Ihres Beagle angeschlossen? Wenn ja, haben Sie den Strom berücksichtigt, der vom Beagle an diesem Pin aus dem Teiler gezogen wird, wenn er eine ADC-Konvertierung durchführt, und welche Auswirkungen hat dies auf den Teiler? Wenn Sie viele schnelle Messungen vornehmen, müssen Sie die Spannung möglicherweise mit einem Operationsverstärker puffern, oder wenn Sie nur gelegentlich Messungen vornehmen, würde ein Kondensator mit angemessener Größe (wahrscheinlich größer als 100 nF) wahrscheinlich gut genug funktionieren.
Ist die Verwendung des Spannungsteilers erforderlich? Es gibt ICs auf dem Markt, die die Spannung genau messen. Es gibt auch ICs, die Batterieüberwachungsfunktionen bereitstellen. Wenn es eine Möglichkeit gibt, würde ich ein Tochterboard für den Beaglebone mit einer solchen Funktionalität in Betracht ziehen. Es bietet einen Puffer zwischen Ihrer Batterie und der Platine und gibt Ihnen mehr Informationen, mit denen Ihre Verwaltungssoftware arbeiten kann (z. B. den Zustand einzelner Zellen).
100% stimmen mit @brhans überein .... Sie vernachlässigen wahrscheinlich die Eingangsimpedanz des ADC. Hoffentlich sagt Ihnen Ihr Datenblatt, was es ist. Das Puffern mit einem Operationsverstärker mit Einheitsverstärkung kann hilfreich sein. Ein Kondensator am Eingangspin ist "obligatorisch"
Welche Spannung messen Sie bei 13,1 V Eingangsspannung an AIN4 (also am Ausgang des Spannungsteilers) mit einem Multimeter? Übrigens, (1<<11 - 1) = 1 << 10 = 1024. Das ist wahrscheinlich nicht das, was Sie gemeint haben. Probieren Sie es selbst aus .

Antworten (3)

Es gibt mehrere Dinge, die getan werden können, um die Genauigkeit Ihrer Messungen zu verbessern:

  1. Versuchen Sie, mehr vom vollen Skalenbereich des ADC zu verwenden. Wenn das Maximum 1,8 V beträgt und Ihre maximale Batteriespannung 16,4 V beträgt, versuchen Sie es mit einem Skalierungsfaktor von 9,5 anstelle von 11.

  2. Verwenden Sie Widerstände mit engeren Toleranzen (versuchen Sie es mit 0,1 % oder besser) und besseren Spezifikationen für die Temperaturdrift.

  3. Kalibrieren Sie den ADC-Ausgang. Die meisten ADCs haben einen nicht idealen Offset und eine Nichtlinearität, die Sie in Hardware oder Software kalibrieren können. Eine Möglichkeit, dies in der Software zu tun, besteht darin, Messungen über den gesamten Bereich der ADC-Eingänge durchzuführen und die Messkurve an eine Interpolationsfunktion anzupassen. Verwenden Sie dann die Interpolationsfunktion, um den ADC-Ausgang zu skalieren.

Denken Sie daran, dass Toleranz hier nicht so wichtig ist wie Matching ; Widerstandsnetzwerke sind mit viel besserer Anpassung als Toleranz erhältlich, normalerweise für weniger Geld als zwei Widerstände mit enger Toleranz.
0,1 % Toleranz sind für diese Anwendung sinnlos. Li-Batterien sind in Bezug auf V vs. SoC viel weniger reproduzierbar

12 Bit = 2 12 = 4096 Zählungen/Skala.

Wenn vorzeichenbehaftet und 0b = 0 V, dann 1,8 V = 4096/2 = 2048 (und -1,8 V = -2048, wobei das letzte Bit ignoriert wird.)
1,8 V/2048 = ~88 µV/Bit. Das ist die kleinste „Schrittgröße“, die in dieser Konfiguration erkennbar ist (unter Verwendung des gesamten verfügbaren Dynamikbereichs).

Da der Teiler durch 11 "teilt", sind 88 µV / Bit * 11 = 9,7 mV "Schritt" -Größe der Batteriespannung, im besten Fall.

Um eine höhere Auflösung zu erreichen, verwenden Sie entweder nicht vorzeichenbehaftete 0-1,8-V-Vollaussteuerung, falls verfügbar (doppelte Auflösung, 44 µV/Bit), mehr Bits (besserer (langsamer) ADC) und/oder Mittelwertbildung (Oversampling). sowieso zu überabtasten, da Rauschen bei diesen niedrigen Spannungen ein größeres Problem darstellt.

Kann das Abtastrauschen etwas reduzieren, indem die Werte der Teilerwiderstände (mindestens eine Größenordnung) reduziert und nur bei Bedarf in die Schaltung geschaltet werden. Höherer Teilerstrom = geringeres Rauschen.

Untersuchen Sie auch die mathematische Gleitkommabibliothek, die in Ihrem MCU verwendet wird. Einige verwenden das 24-Bit-Exponenten-Mantissen-Format, was bei nur wenigen Operationen zu erheblichen Rundungsfehlern führen kann. Erstellen Sie eine Testroutine, um diesen Fehler zu quantifizieren.

Schließlich ist das Messen der Batteriespannung möglicherweise nicht der beste Indikator für den Ladezustand, insbesondere bei Lithium-Typen. Untersuchen Sie „Coulomb-Zählung“ und ähnliche SoC-Geräte. Diese verfolgen/berechnen die Ladungsmenge in der Batterie, indem sie den Stromeingang, den Stromausgang und sogar die Anzahl der Zyklen (Degeneration) verfolgen.

Danke! Dieser Anwendungsfall ist nur für eine kostengünstige Lösung, daher das Voltmeter.

Der BeagleBone verwendet nur die 1,8-V-Digital-Vdd als Referenz, sodass jeder Fehler darin einen proportionalen Fehler im ADC-Messwert verursacht. Die Datenblattgrenzen bei Raumtemperatur liegen dafür bei +/-2%.

Hinzu kommen Ihre Widerstandstoleranz und etwaige Fehler aufgrund der ADC-Eingangsimpedanz. Und ADC-Fehler selbst.

Sie könnten eine genauere externe Referenz angeben (dafür gibt es auf dem Board keine Möglichkeit, aber es gibt eine 0 Ω Widerstand, der entfernt werden könnte). Oder stellen Sie eine Referenzspannung bereit und messen Sie diese und skalieren Sie den Messwert durch die gefilterte Referenz. Zum Beispiel eine 1,225 V 0,1 % Referenz .

Sie könnten den Messwert einfach kalibrieren, indem Sie einen Bereichskalibrierungsfaktor speichern, aber das würde driften, wenn sich der LDO im PMIC erwärmt und abkühlt. Ich sehe keine Angabe zur Temperaturdrift.

Wenn Sie Dünnfilm-Widerstände mit 0,1 % 25 ppm/°C und eine externe Referenz verwenden und den Messwert kalibrieren (Einpunktkalibrierung), sollten Sie in der Lage sein, eine oder zwei Größenordnungen Verbesserung für ein Teilekosten-Delta von etwa 1,50 $ zu erzielen.