Mittelwert-Bildung

Gast #74216
Hallo,

ich messe mit einem 89C51AC2 und einem MAX1284 A/D-Wandler eine
Akkuspannung. Erst habe ich es mit der aufaddierung von Werten
versucht, einen Mittelwert zu bilden. Das ergebnis ist aber nicht so
befriedigend. Hab hier mal was von einem Ringbuffer gelesen. Könnte mir
einer das mal etwas genauer erklären?

Mfg sascha
Gast
Ein Ringbuffer hat zunächst einmal nichts mit Mittelwertbildung zu tun,
sondern ist eine Speicherverwaltungsstruktur (FIFO). Beschreibe doch
einmal genauer, was Dein Problem bei der Mittelwertbildung ist, bzw.
was nicht befriedigend funktioniert.

Gruß, Frank
Gast
Wieviele Messwerte hast du denn? Und wo liegt dein Problem?
256 Messwerte kann man doch addieren und dann acht mal nach rechts
schieben, was der Teilung duch 256 entspräche.
Ringpuffer werden IMHO meist für Datenkommunikation verwendet, wenn
mehr Daten zum Senden anstehen als gerade verschickt werden können.
Der Ring ist dann der Effekt, wenn Daten, die am Anfang des Puffers
stehen und schon verarbeitet wurden überschrieben werden.
Es gibt also eine Schreibpostion und eine Leseposition.
Gruß Rahul
Gast
Hallo,

mit der Mittelwertbildung habe ich kein Problem. Addier momentan 64
Meßwerte und dividiere anschließend durch 64. Geht auch einigermaßen.
Habe eine Referenzspannung von 2,5V. Am A/D-Eingang ist ein
Spannungsteiler von 8, da ich bis 20V messen möchte. Mein Messwert
schwankt bei einer Messspannung von 1,233V zwischen 1,211V und 1,243V.
OK, das Haptproblem liegt halt daran, das alles momentan auf Lochraster
aufgebaut ist. Hab es aber bei dem int. Wandler des 89C51AC2 auch
hingekriegt, das nur noch das letzte LSB "wackelt".

Mfg Sascha
Gast
Sorry, aber was heißt "geht einigermaßen"? Entweder die
Mittelwertbildung funktioniert oder sie funktioniert nicht. Das sollte
sich mit einem Taschenrechner doch sehr schnell herausfinden lassen.

Gruß, Frank
Gast
Versuch mal den GND anderss zu Verlegen. Ich würde den GND Anschluss des
MAX direkt an den Akku anschließen, ohne Schleife.
100 Ohm Widerstände vor den Digital-Inputs des Max helfen manchamal ein
wenig. Ausserdem vor die Versorgung einen 10 Ohm Widerstand und 10uF
Kondensator. Oder eine 100uH Spule statt des Widertands.

Bernd
Gast
Wie wäre es damit?

#define COEFF 7
...
value = (COEFF * previous_value + (10 - COEFF) * current_value) / 10;
previous_value = value;

Das ist ein Tiefpaßfilter welches die vorherig gemessenen Werte
kumulativ berücksichtigt und damit mittelt.  Die Wahl von COEFF
bestimmt, wie stark die alten Werte und der neue Wert berücksichtigt
werden.  "Ausreißer" und LSB-Fehler werden damit natürlich auch schön
eliminiert.

Mal in EXCEL o.ä. simulieren und graphisch anzeigen lassen.

Reiner

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.