- SF800 Solar Speicher Tutorial         
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 Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von Holomino Beitrag anzeigen
    Man kann durch regelmäßiges Balancen dagegenhalten, aber das Zellungleichgewicht ist systematisch durch den permanenten Anschluss der Spannungsteiler bedingt.
    Das ist mir klar geworden. Bloß, ich denke, das ändert nichts an der Sache, dass ich alle 2 bis 5 Tage diese 0.2V an der untersten Zelle verliere. Und dass, wenn viel Strom fließt und die Zellen schnell geleert werden,
    diese Ministröme weniger ins Gewicht fallen. Trotzdem altert dann die unterste Zelle am schnellsten, weil die mehr belastet wird. Wenn ich zwei Spannungsteiler weg lasse, habe ich dieses Problem nicht.
    Es ist ja durchaus üblich, bei LiPos, mit mehreren Zellen, nur die Gesamtspannung zu messen. Was ist besser? Ausgleichswiderstände sehe ich nicht, wie ich an diese Werte kommen soll, um die nachzurüsten.

    Wenn das Ladegerät mit den Spannungsteilern nicht zurecht kommt, werde ich zwei ausbauen. Ich muss das ausprobieren...



    Zitat Zitat von Holomino Beitrag anzeigen
    Wegen dem Gewackel der Messwerte (das bekommt man bestimmt besser hin):
    ...
    Hast Du mal eine Mittelwertbildung über mehrere Messungen probiert (16 mal aufaddieren und anschließend durch 16 teilen)?
    Antwort:

    Zitat Zitat von Moppi Beitrag anzeigen

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

    Ich habe eine Funktion nachgeschaltet, welche die Werte nochmals stabilisiert. Jetzt habe ich
    bei den ausgegebenen Werten keine Schwankungen mehr.
    Noch eine kurze Erklärung dazu:

    Ich mache sowas ähnliches, wie Du mit dem Kondensator außen, Holomino.
    Bloß in der Software eben. Ich betrachte nicht einen einzelnen Messwert,
    ich addiere auch nicht mehrere Messungen. Da der verrauschte Bereich
    bekannt ist (habe ich mir angesehen), muss ich einen stabilen Wert
    daraus generieren, ich brauche irgendeinen Filter dafür. Die Verteilung
    der Werte ist recht gleichmäßig, ab und an schlägt ein Wert mehr nach oben
    aus, dann nach unten. Daraus bspw. den Mittelwert zu bilden würde,
    aufgrund der letzten Tatsache, wieder zu Schwankungen führen. Ich nehme
    einen Wert, aus dem verrauschten Bereich, den ich verwerte, die andern Werte
    ignoriere ich. Hinzu füge ich einen Wert, der mir bekannt ist, aber aus den
    Messungen nicht unmittelbar von Anfang an hervor geht (den Wert könnte ich
    th. auch im Betrieb, über eine längere Zeit, ermitteln). Das ist die Spanne, also
    diese +/-5 bzw. +/-7.5, die es um den idealen Messwert schwankt. So erhalte
    ich einen Bereich, in dem sich alle Meßwerte eines kurzen Zeitraums befinden.
    Natürlich ändern sich die Messwerte, weil sich die gemessene Spannung ändert.
    Beim Akkupack aber voraussehbar, nämlich stetig nach oben oder nach unten.
    Aufgrund dessen führe ich meinen berechneten Bereich nach, aus dem ich
    einfach den Mittelwert nehme. Die Nachführung entnehme ich den Grenzwerten
    des Rauschens.



    MfG

    PS:

    Die Werteschwankungen sind bei einfachen Wandlern normal.
    Es mag bessere Wandler geben, die stabilere Werte liefern.
    Ich hatte mal einen 12Bit-Wandler in den 90gern gekauft.
    Funktionierte nach dem Prinzip, wie die in den ATmega328P.
    Der hatte Schwankungen, die sich mindestens über die
    untersten 4 Bit erstreckten. Ich habe das Teil an jemand
    verschickt, der sich das auch angesehen hat. Hat den selbst
    beschaltet. Der kam zu dem gleichen Ergebnis.
    Geändert von Moppi (08.10.2020 um 09:24 Uhr) Grund: Erläuterung Funktion nach ADC

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Wie gesagt: Für das durch die Messteiler verursachte Ungleichgewicht sind jeweils ein Widerstand parallel zu oberer und mittlerer Zelle eine Lösung. Wenn Du die Widerstände nicht da hast, ist es ja kein akutes Problem, kann man später nachrüsten.

    Zum Flirren in den AD-Werten ist meine Erfahrung, dass alleine durch den Controller (eigentlich ein richtig fettes Schaltwerk, das man da einbaut) so ziemlich alle Eingangs-Pins einen Ripple von etwa 20..30mV abbekommen. Das fällt bei der Verwendung in der Regel erst beim ADC und beim Komparator negativ auf. Mit einem Kondensator parallel zum unteren Widerstand des Teilers und nicht zu weit vom Controller weg bekommt man diesen Ripple recht gut gedämpft. Aber auch das ist eine Sache, die Du bei entsprechender Laune (Lust) einfach mal ausprobieren kannst: Kondensator einlöten, Filter weg und den Hub des AD-Wertes bei konstanter Eingangsspannung beobachten.

    Muss man nicht tun, aber interessant wird's ja vielleicht für die nächste Schaltung.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ich kann ja mal einen Kondensator dran halten, mal sehen, was passiert.

    Habe es versucht:

    Mit einem Kondensator parallel zum unteren Widerstand des Teilers und nicht zu weit vom Controller weg
    Kein besseres Ergebnis, also ohne C. Habe 100nF genommen. Manchmal springen die Werte sogar noch stärker.
    Geändert von Moppi (08.10.2020 um 12:28 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Ich kann leider keine Ferndiagnosen stellen, aber +/-5 Gezappel im ADC sind recht viel. Wenn Du Lust hast: Nimm Dir eine Arduino-Platine, häng eine saubere Versorgung dran und simuliere mithilfe eines Potis eine Analogspannung (in der Regel passt das ganz gut mit den Pinleisten. Mittlerer Potipin an AD-Eingang, die beiden Controllerpins drumrum kannst Du als Ausgang Low/High einstellen, damit das Poti eine Spannung zum teilen hat).
    (Ich hab in meinen Anfängen auch gedacht, das sei wohl so beim AVR. Nee, ist es nicht. Da rüpelt irgendetwas in Deiner Schaltung herum. Normalerweise zappelt die Ausgabe beim AVR ADC gar nicht, im ungünstigen Fall zwischen zwei Werten. Das ist dann Quantisierungsrauschen zwischen zwei Schritten.)

    Ansonsten: Die Standardbeschaltung (Kondensatoren) von VCC, AVCC und AREF hast Du/der Arduino? Und über die Masseleitung vom Akku zum Controller entnimmt niemand anders wesentlich Strom? Irgendwelche LED-Blinkereien an den benachbarten Ports finden während der Messung auch nicht statt?

    Wenn Du ein schnelles Oszi hast: Masseklemme an Akku, VCC, AVCC, AREF und GND am Controller checken. Wibbelt da etwas mit mehr als 5 mV?
    Geändert von Holomino (08.10.2020 um 13:45 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Ja, ich nehme mal das Oszi und schaue. Aber ich denke, dass dort nichts ist. Wahrscheinlich wird es die Referenz sein, die herangezogen wird. Allerdings ist die Versorgungsspannung mit einem LDO-Regler erzeugt. Vielleicht ist dort ein wenig drauf. Aber davon abgesehen, bei dem 12Bit-Wandler damals, der auch so schwankte, war nur die Batteriespannung angelegt, frei von Verunreinigungen. Wenn an dem Pin nichts ist, kann der C nichts bringen.

    Ich finde, die +/-5 sind recht wenig. Manche haben da +/-10, habe ich gelesen. Ich schaue mal.

    ....

    Da ist minimal Störung auf der Versorgungsspannung, offenbar von den Treibern A4988. Aber extrem wenig. Weniger, als wenn ich einen DC/DC-Wandler einsetzen würde. Die Treiber+Motoren werden ja direkt vom Akku gespeist. Dennoch habe ich dann die Schwankungen, auch wenn die Motoren nicht drehen, sondern nur gehalten werden. Kann das aber mit meinem Oszi nur erahnen, weil so genau ist es nicht, es produiziert normal schon selber gewisse Störungen im angezeigten Signal. Nach dem 10k-Widerstand vom Spannungsteiler, sind die nicht mehr zu sehen; an der Stelle gemessen wird die AC-Linie auf dem Oszi richtig glatt gezogen (wird vielleicht der Grund sein, dass dann an der Stelle ein C nichts mehr bringt). Ich habe 10k vom LiPo-Anschluss bis an den AD-Eingang, von dort 2.2k gegen GND.

    Interessant ist, wenn ich die Treiber herausnehme, dass dann die ADC-Werte absolut stabil sind. Auch ohne Korrektur per Software oder so. Insofern scheine ich also viel richtig gemacht zu haben, was die Beschaltung des 328P-PU angeht (inkl. der 100nF-Kondensatoren am unbeschalteten AREF und der Versorgung des Kontrollers). So stabile Werte vom ADC habe ich noch nie gesehen. Selbst bei meinem originalen UNO nicht.

    Normal würde ich ja ohnehin messen, wenn die Treiber abgeschaltet sind. Das hatte ich aber noch nicht ausprobiert. Weil ein Fall bleibt, wo ich auch während der Fahrt messen müsste. Muss ja zwischendurch feststellen, ob die Akkus leer sind. Jetzt kann ich zwei Methoden anwenden. Während der Fahrt eine, mit Filter (diese Methode liefert stabile Werte, die aber von den tatsächlichen etwas abweichen), da muss ich nur den Entladeschluss abgleichen. Und ohne Fahrt die Messung, wenn also die A4988 auch ausgeschaltet wären. Im Ruhemodus muss ich auf Entladeschluss warten, damit dann aufgeladen wird, hier könnte ich den Punkt dann neu abgleichen (ohne Filter). Und beim Laden nach den 4.0V schauen, auch bei abgeschalteten Motortreibern. Auch das ohne nachgeschalteten Filter. Wenn die Werte dort auch so sauber wären, könnte ich mich auf die Messungen verlassen, gerade beim Laden.


    MfG

    - - - Aktualisiert - - -

    Und über die Masseleitung vom Akku zum Controller entnimmt niemand anders wesentlich Strom? Irgendwelche LED-Blinkereien an den benachbarten Ports finden während der Messung auch nicht statt?
    Das wäre der Zustand wenn die Kiste steht und nichts tut. Auch beim Laden wären nur drei Kontroller angeschaltet. Zwei für die Motortreiber, die dann nichts tun. Die Odometrie wäre abgeschaltet. Das nodeMCU wäre abgeschaltet, zusammen mit seinem Satelliten-ATmega328. Auch der Spannungsregler 7806 wäre ohne Versorgung. Nur die Relais für den Ladestrom zum Akkupack wären an. Aber in dem Zustand würde ich nicht messen. Messen würde ich nur, wenn kein Ladestrom fließt, also auch diese Relais nicht aktiv sind.
    Geändert von Moppi (08.10.2020 um 17:04 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    07.04.2015
    Beiträge
    903
    Schön, unter Laborbedingungen scheinst Du ja die Funktion hinzukriegen. Damit sind wir auch schon im prallen Leben.
    Du kannst mal nachschauen, wie Du die Masse zum Controller gezogen hast. Ist das nur ein Abzweig zwischen Akku und Treibern? Dann wird Dir wahrscheinlich die Controllermasse durch den Treiberstrom wegfloaten. Da reichen 20..30mV Spannungsabfall im Leiterbahnabschnitt zwischen Akku und Controller, um unschöne Effekte im ADC auszulösen.
    Wenn Du allerdings die Masse direkt sternförmig am Akkuanschluss einmal in Richtung Controller und einmal in Richtung Treiber geführt hast, bist Du auf der sicheren Seite. Mehr kann man kaum tun.

    An VCC sollte es eigentlich nicht liegen, wenn da der LDO zwischensitzt. Der LDO ist in der Regel schnell genug, hat eingangs-/ausgangsseitig auf die Regelgeschwindigkeit angepasste Siebkondensatoren und frisst damit Ripple ganz gut. Er regelt aber immer in Bezug auf seine Masse und wie gesagt, wenn die driftet, hat der ADC ein Problem.

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Bei der Masseführung habe ich aufgepasst , dass die Leitungen möglichst breit sind, die engste Stelle, zum LDO-Regler für den ATmega328 (der die Messung durchführt), ist eine Bahn mit vielleicht 3cm Länge und 1.5mm Breite. Auch bei den Treibern sind die schmalsten Bahnstücken 1.5mm breit. Die Masse zu den Treibern und die Masse zu dem LDO-Regler führen in entgegengesetzten Richtungen vom Akkupack weg und sind auf der Platine außen umlaufend durch eine 1.5mm-Bahn verbunden. Wo Platz war, sind die Masseflächen größer und überall auf der Platine verteilt, teils aber nur durch diese 1.5mm-Bahnstücken verbunden.

    Spannungsregler regeln diese hochfrequenten Signale nicht weg, dafür sind die nicht gemacht. Damit hatte ich mich schon mal beschäftigt. Die Signale kommen durch den Regler dann durch. Ich habe schon im Netz darüber gelesen. Viele meinen, das ist das Chopper-Signal von den Treibern. Von der Frequenz könnte es hinkommen, das Oszi hatte da auch was von 20 bis 30kHz angezeigt, meine ich.

    Nachtrag zu der Masseführung auf der Platine:

    Ich habe vergessen, beide Layer anzuschauen. Sowohl Bottom als auch Top führen die Masse. Auf dem Top-Layer sieht es sogar noch besser aus: min. 1.5mm breite, wesentlich kürzere Bahnen (wenige Millimeter), die auf große Masseflächen treffen.
    Geändert von Moppi (09.10.2020 um 07:35 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
  •  

12V Akku bauen