- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 31

Thema: Arduino AD-Wandler abgleichen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von Moppi Beitrag anzeigen
    Arduino AD-Wandler abgleichen
    Hi Moppi,

    na der Titel ist wohl irreführend. Du willst nicht den AD-Wandler abgleichen sondern den Spannungswandler ausmessen - nicht wahr? (Abgleichen setzt ja immer Variationsmöglichkeit/en voraus).

    Der AD-Wandler sitzt bei meinen Platinen immer im Controller, zu dem gibts das Datenblatt und darin steht das "Übersetzungsverhältnis" - jedenfalls die Gleichung nach der man aus dem digitalen Output einer AD-Wandlung den am AD-Wandler anstehenden Spannungwert ermitteln kann. Ein Abgleich ist dafür nicht möglich. Voraussetzung ist auch, dass man sich auf die Controller-Versorgungsspannung der Platine verlassen kann - zumindest wenn man als Spannungsreferenz AREF nimmt. Bei Wandlungen mit der controllerinternen Spannungsreferenz ist das etwas anders.

    Du willst den Spannungsteiler genau ausmessen. Dazu reicht eine (später zu messende) Stromzelle oder ähnliche kleine Stromquelle, ein Poti, > 5k , z.B. ein Steckbrett, ein DMM, Papier und Bleistift. Poti auf Steckbrett, Stromquelle zwischen die beiden Potienden und Abgriff vom Poti auf den ADC-Eingang. Oder was am arduino so genannt wird. WENN zwischen Arduinoplatine und Arduinochip kein Bauteil hängt, dann kann man mit dem DMM direkt am Platineneingang messen, andernfalls am Controllerpinn des betrachteten ADC.

    Jetzt noch schnell ein Miniprogramm das den ADC-Wert ausliest (am Besten ein paarmal, die letze Messung gilt) und z.B. über UART ausgibt. Alles ein, leicht am Poti drehen bis die vermutet maximale Eingangsspannung ansteht und ADC auslesen. Notiere Spannung und ADC-Wert. (Eigentlich reicht das schon). Dann weit runter drehen bis etwa vermutet minimale Eingangsspannung ansteht und ADC auslesen. Notiere Spannung und ADC-Wert.

    Der Rest ist einfache Rechnerei, die Kennlinie des ADC ist wohl linear (bis auf die Toleranzen). Die ADC-Toleranzen stehen im Datenblatt - nach Umrechnung auf Spannung hast Du Deine möglichen Abweichungen.

    Wenn Du Deine Spannungsteiler nicht genau kennst machst Du das Gleiche für alle Spannungsteiler.
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Natürlich nicht den ADC auf dem Chip abgleichen.
    Abgleichen mit einer externen Spannung ist schon gemeint.

    Ich habe gerade mal etwas gerechnet. Das gibt bei meinen R-Werten eine Spannung am AD-Eingang zwischen 2.25V und 2.29V, je nach Toleranz der Widerstände, des Spannungsteilers. Würde ich das nicht irgendwie ausmessen, müsste ich in Kauf nehmen, dass ich pro Zelle 0.1V daneben liege. Weiß jetzt nicht, ob das sooo schlimm wäre. Ich meine, ich habe ja irgendwo eine Schwelle nach unten, ob die jetzt pro Zelle bei 3.5, 3.6 oder 3.8V liegt, wäre ja gar nicht mal so sehr wichtig. Wichtiger wäre es nach oben, bis 3.9V oder 4V würde ich jede Zelle schon laden wollen. Problematischer ist, glaub ich, dass ich die Spannung einer Zelle nur berechnen kann, indem ich die drei Anschlüsse messe. Dann könnten sich im schlimmsten Fall die Fehler summieren und es wäre noch ungenauer.

    Jetzt sind die Widerstände eingelötet auf der Platine. Wie ist es denn, wenn ich die nochmal einzeln ausmesse, kann ja den ATmega328P-PU aus dem Sockel ziehen, dann kann ich doch die Widerstände einzeln ausmessen? Dann rechne ich mit den gemessenen Widerstandswerten die Spannung aus, die am ADC anliegt, wenn ich eine Max-Spannung voraussetze (i.R. 12.6V). Laut Datenblatt haut das mit der Linearität des ADC halbwegs hin.
    Das mit dem Poti ist keine schlechte Idee, ich habe da noch ein paar Spindeltrimmer, da kann ich mir sicher was bauen, was die Spannung der drei Zellen imitiert. Ich denke drüber nach, wie. Ich muss im Grunde ja nur 4.2V am ersten Abgriff/Spannungsteiler einstellen, 8.4V am Zweiten und 12.6V am Dritten. Und dann unten rum genau dasselbe, angefangen mit 3.5V oder 3.7V. Dazwischen (3.7 und 4.2) wäre mir halbwegs egal.

    MfG

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.310
    Schliess anstatt der Akkus ein Labornetzteil an, miss dessen Spannung mit einem Multimeter und laß dir den ADC-Wert ausgeben. Das machst du bei mehreren Spannungen. Wenn dein Compiler eine sog. LookUp-Tabelle unterstützt, nur noch eine eben solche mit den ermittelten Werten erzeugen und verwenden. Fertig.
    Aus eigener Erfahrung ..... 10Bit sind zu wenig und linear ist es nicht. Akkuspannungen habe ich bisher entweder mit einem externen ADC gemessen oder einen XMega mit 12Bit verwendet.
    Ich programmiere mit AVRCo

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.237
    10Bit sind zu wenig und linear ist es nicht. Akkuspannungen habe ich bisher entweder mit einem externen ADC gemessen oder einen XMega mit 12Bit
    Genau das gleiche hätte Ich auch geantwortet.
    Ich würde sogar so weit gehen und auf einen externen 16Bit A/D wandler setzen.
    Wenn die Messung nicht gerade superschnell gehen muss sind die Teile auch bezahlbar - Beispielsweise mal den schnell mal Gegoogelten ADS1115 ( Hatte Ich aber selber noch nicht im Einsatz! ).
    Bei 15V und 10 Bit bedeutet ein Bit 15mV ohne die Fehler, die der A/D ohnehin noch zusätzlich macht.

  5. #5
    HaWe
    Gast
    Ich habe mehrere davon, am Raspi und am esp8266, und auch der ads1115 braucht eine absolut zuverlässige, stabile Vref., sonst misst der auch Mist.
    Nimmt man für ihn als Vref die, die der µC-Pin bietet (5V/3v3 am Arduino oder 3v3 beim Raspi) führen schon kleine Schwankungen, die der DC/DC Wandler per Versorgungs-Netzteil oder USB produziert, zu unsauberen Werten - ansonsten wäre er OK.
    ads1115 geht also, braucht dann aber eine andere, externe, saubere, superstabile Vref, plus eine Eichtabelle.
    Geändert von HaWe (07.10.2020 um 08:59 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Ein BMS ist keine Audioanwendung. Die einzigen relevanten Spannungen sind Ladeschluss und Entladeschluss. Die kann man bei drei Zellen auch mit 10 Bit gut mit zwei Punkten kalibrieren. Was dazwischen abläuft, interessiert eigentlich niemanden (Ober- und Unterhalb erst recht nicht, weil dann ist der Akku kaputt). In den Randbereichen verliert man durch den Quantisierungsfehler <20mV (vor dem Spannungsteiler) vielleicht 1% der nutzbaren Akkukapazität. Aber wenn man mit einem handelsüblichen 3,5-stelligen DMM kalibriert, kommt man in der Regel auch nicht weiter als 11..12 Bit (je nach Ausführung schalten die bei 2.048V oder 4.096V den Bereich um). Und man schont den Akku, wenn man von den Grenzen wegbleibt.

    Aber mal eine ganz andere Frage:
    Moppi, bleiben die 12k Spannungsteiler im Dauerbetrieb an den Akkus? Dann achte mal darauf, ob die oberen Zellen nach einiger Zeit anfangen, zu balancieren.
    (Ich kann's nur vermuten, den Fehler hab ich auch bei meinem ersten BMS gemacht. Das lässt sich aber relativ einfach kompensieren.)
    Geändert von Holomino (07.10.2020 um 09:31 Uhr)

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ja, die Spannungsteiler bleiben immer dran. Ich habe mir mit den Zellen untereinander da bis jetzt
    keine Gedanken gemacht, dass die über die Widerstände miteinander verbunden sind.
    Daher habe ich keine Idee, wie sich das auswirkt. Ebenso, wie die zu einer dauernden Entladung,
    von einigen Milliampere, führen. Aber da habe ich mich diesmal vom Datenblatt leiten lassen und bin
    an die 10k-Ohm-Grenze gegangen (wegen dem ADC), sonst habe ich 10fach größere Werte verwendet.
    Kann natürlich sein, dass die Widerstände den Ladevorgang stören. Weiß ich noch nicht, hoffe ich nicht.

    Also ich habe ja - wenn - dann ein automatisches Ladegerät, dass ich anschließen will, nur will ich
    den Akku nicht so stark belasten, bzw. will ich den lange erhalten, deshalb die Überwachung der
    einzelnen Zellen. Habe ich noch nie gemacht, mein erstes Mal.

    Meine Erkennung am unteren Ende soll bei 3.4 bis 3.7V liegen, oder etwas höher: 3.8V wären auch
    kein Problem, nur niedriger wäre ein Problem, wegen Tiefentladung. Die untere Schwelle würde ich
    bei 3.7V ansetzen wollen. Mit einem Fehler von 0.2V käme ich im schlimmsten Fall bei 3.5V raus,
    die die erste Zelle hätte, wenn ich 3.7V als Digitalwert ermittelt hätte. Das würde gerade passen,
    ungenauer sollte es nicht sein. Falls es doch ungenauer wäre, müsste ich die untere Schwelle nach
    oben verschieben. Dann 3.8V, dann nach 3.9V und irgendwann ergibt das dann keinen Sinn mehr.


    Ein Überladen der Zelle ist praktisch ausgeschlossen, weil ich einen Automatiklader mit Balancer anschließe.
    Ziel ist aber, den Balancer möglichst nicht zu nutzen. Nur dann, wenn die Zellen zu weit auseinander
    liegen, in ihrer Spannung. Das heißt ich würde etwa bei 4.0V pro Zelle die Ladung abbrechen. Sobald
    also eine Zelle die 4.0V erreicht hätte. Liegen die Zellen zu weit auseinander, würde ich länger laden
    wollen, so dass die Zellen angeglichen werden. Würde eine Zelle die 3.7V erreichen, würde ich nachladen
    wollen.


    Ich habe ein Testprogramm laufen lassen, um zu sehen, was der A/D-Wandler für Werte ausgibt.
    Die Werte schwanken +/-5.

    Nachtrag:
    -----------

    Ich habe eine Funktion nachgeschaltet, welche die Werte nochmals stabilisiert. Jetzt habe ich
    bei den ausgegebenen Werten keine Schwankungen mehr. Allerdings habe ich dazu die Funktion
    auf Schwankungswerte +/-7.5 umgestellt. +/-5 waren noch was zu wenig.

    Auf der zweiten Nachkommastelle, wenn ich den Wert per Taschenrechner umrechne, sehe ich,
    dass es nicht linear ist, was da gemessen wird. Da gibt es noch Kompensationsrechnungen
    (s. Datenblatt), die ich aber nicht anwende, weil mir sind die zu kompliziert für den Zweck.
    Aber die erste Nachkommastelle, der ausgerechneten Spannung, ist sehr zuverlässig.
    Da bin ich schon mal froh. Einen zuverlässigen oberen und unteren Punkt zu ermitteln und
    stabile Werte zu messen, die diese Punkte der Ladezustände repräsentieren,
    sollte damit nun kein Problem sein.

    Im Anhang, mein Traffic-Log, unter ASCII die Werte, die 12.xxV entsprechen.
    Die Werte sinken, weil die Akkuspannung sinkt.

    trafficlog.txt
    Geändert von Moppi (07.10.2020 um 15:36 Uhr)

Ähnliche Themen

  1. STM32 contra ARM Cortex M3 (Arduino Due, Teensy): Performance per Arduino vs. nativ C
    Von HaWe im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 14
    Letzter Beitrag: 22.11.2017, 11:53
  2. Antworten: 13
    Letzter Beitrag: 07.11.2015, 01:21
  3. Mit Näherungssensor Drehzahlen abgleichen und anzeigen?
    Von blubb111 im Forum Sensoren / Sensorik
    Antworten: 1
    Letzter Beitrag: 12.06.2010, 20:56
  4. 6DOF: Gyro, Beschleunigung, GPS was mit was abgleichen?
    Von reflection im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 03.02.2009, 17:39
  5. I/0 Ports ; A/D Wandler ; D/A Wandler am Laptop?
    Von jojo.glaser im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 31.05.2006, 19:15

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test