Forum: Mikrocontroller und Digitale Elektronik Arduino Spannungsmessung


von Hans (Gast)


Lesenswert?

Hallo Leute,

ich bastle grad an einem Projekt bei dem ich mit dem Arduino eine 
Spannung messe (0-5V) über den AnalogIn.
Die Spannung wird dann auf einer LCD-Anzeige ausgegeben.

Es funktioniert, aber die Genauigkeit mit analogRead ist ziemlich 
ungenau.
Deshalb habe ich eine Mittelwertbildung in einer for-Schleife mit 10.000 
Durchläufen programmiert.
Die Messung ist jetzt genauer, allerdings gibt es immer noch Schwanken 
an der letzten Stelle und vorletzten Nachkommastelle.
Hinzu kommt, dass die Messung viel träger wird durch die 10.000 
Schleifendurchläufe.
Messwerte werden erst nach etwa einer Sekunde aktualisiert.
Deshalb ist einer Erhöhung der Messschleifen keine Option mehr.

Hat jemand ne Ahnung wie ich es sehr genau und zusätzlich auch noch 
schnell hinbekomme?

Danke!

von Cyblord -. (cyblord)


Lesenswert?

Hans schrieb:
> Hat jemand ne Ahnung wie ich es sehr genau und zusätzlich auch noch
> schnell hinbekomme?

Du hast "billig" noch vergessen.

von Thomas E. (thomase)


Lesenswert?

Hans schrieb:
> Hat jemand ne Ahnung wie ich es sehr genau und zusätzlich auch noch
> schnell hinbekomme?

Bestimmt.

: Bearbeitet durch User
von Harald W. (wilhelms)


Lesenswert?

Hans schrieb:

> Hinzu kommt, dass die Messung viel träger wird durch die 10.000
> Schleifendurchläufe.

Etwas besser wird das, wenn Du einen "gleitenden Mittelwert"
verwendest. Das heisst, das Du bei der Mittelwertbildung nach
jeder Messung jeweils den ältesten Wert "wegwirfst" und den
aktuellen Wert einfügst. 10.000 Werte halte ich auch für etwas
übertrieben. Irgendwas zwischen 10 und 100 erscheint mir sinn-
voller. Es ist übrigens eine Illusion, das Du so genauer misst.
Du hast zwar eine höhere Auflösung und eine bessere Filterung
von Störungen; die höhere Auflösung bringt aber keine Verrin-
gerung der sonstigen Fehler des Wandlers.

von M. K. (sylaina)


Lesenswert?

Hans schrieb:
> Es funktioniert, aber die Genauigkeit mit analogRead ist ziemlich
> ungenau.

Definiere das bitte genauer. Mit Zahlenwerten. Die generellen Fehler des 
ADCs hast du berücksichtigt (Offset, „Verstärkung“, Gang usw.)

von Sieben Gescheiter (Gast)


Lesenswert?

Hans schrieb:
> Hat jemand ne Ahnung wie ich es sehr genau und zusätzlich auch noch
> schnell hinbekomme?

Thomas E. schrieb:
> Bestimmt.

Ich hab auch Ahnung.

von Harald W. (wilhelms)


Lesenswert?

Sieben Gescheiter schrieb:

> Ich hab auch Ahnung.

Ich auch, immer wenn aus der Küche Essensdüfte kommen,
ahne ich, das es gleich Mittag gibt. Mahlzeit!

von svensson (Gast)


Lesenswert?

Moin,

welche Genauigkeit erwartest Du denn?

Der AD-Wandler im Arduino hat 10 Bit, daher ist die maximale Auflösung 
5.000mV/1023 = 4,88mV.

Und das ist die Auflösung, nicht die Genauigkeit. Die dürfte so eher bei 
8 Bit liegen.

Stark schwankende Werte könnten auch daran liegen, daß die äußere 
Beschaltung nicht optimal ist.

von Wolfgang (Gast)


Lesenswert?

Hans schrieb:
> Messwerte werden erst nach etwa einer Sekunde aktualisiert.
> Deshalb ist einer Erhöhung der Messschleifen keine Option mehr.

Diese Mittelung über eine so große Zahl von Messwerten ist nur 
Augenwischerei.
Wie sauber ist dein Signal und wie sauber deine Referenzspannung.
Ist bei deinem µC AVCC ordentlich abgeblockt?

von Harald W. (wilhelms)


Lesenswert?

Wolfgang schrieb:

> Diese Mittelung über eine so große Zahl von Messwerten ist nur
> Augenwischerei.

Das würde ich nicht sagen. Man kann damit manchmal ein
Antialiasingfilter vermeiden.

von Falk B. (falk)


Lesenswert?

Hans schrieb:
> Hallo Leute,
>
> ich bastle grad an einem Projekt bei dem ich mit dem Arduino eine
> Spannung messe (0-5V) über den AnalogIn.
> Die Spannung wird dann auf einer LCD-Anzeige ausgegeben.
>
> Es funktioniert, aber die Genauigkeit mit analogRead ist ziemlich
> ungenau.

Wie stellt du das fest?

> Deshalb habe ich eine Mittelwertbildung in einer for-Schleife mit 10.000
> Durchläufen programmiert.

Jaja, immer feste drufff.

> Die Messung ist jetzt genauer,

Keine Sekunde. sie schwankt bestenfalls weniger, sprich, das Rauschen 
oder die Störungen sind weniger.

> allerdings gibt es immer noch Schwanken
> an der letzten Stelle und vorletzten Nachkommastelle.

Das ist bei den meisten ADCs so.

> Hinzu kommt, dass die Messung viel träger wird durch die 10.000
> Schleifendurchläufe.

Ach was?

> Messwerte werden erst nach etwa einer Sekunde aktualisiert.
> Deshalb ist einer Erhöhung der Messschleifen keine Option mehr.

In der Tat.

> Hat jemand ne Ahnung wie ich es sehr genau und zusätzlich auch noch
> schnell hinbekomme?

Du musst dich mal von deiner irrigen Formulierung "genau" trennen. Was 
du meinst ist rauscharm bzw. stabil.

Wie sieht denn deine Schaltung und dein Aufbau aus?

von Bernadette (Gast)


Lesenswert?

C=100nF an den Analogeingang und interne Uref verwenden.

C=100nF und C=10uF Tantal an die Versorgungsspannung.

Korrekte Spannungsversorgung für den ADC verwenden!

von Joachim B. (jar)


Lesenswert?

Hans schrieb:
> Die Messung ist jetzt genauer, allerdings gibt es immer noch Schwanken
> an der letzten Stelle und vorletzten Nachkommastelle.

was ist bei dir die letzte und vorletzte Nachkommastelle?
ist deine Quelle stabil?

Jeder ADC darf mindestens im letzten Bit schwanken.

gehts um 4,8V/4,9V oder um 4,7000000V/4,7000001V?

Fragen über Fragen :)

von M. K. (sylaina)


Lesenswert?

Joachim B. schrieb:
> Jeder ADC darf mindestens im letzten Bit schwanken.
>
> gehts um 4,8V/4,9V oder um 4,7000000V/4,7000001V?

Also bei diesem Beispiel und der Beschreibung des TEs würde es bei 4.8V 
"Nennspannung" bei der Anzeige auch durchaus mal 5.8V oder 4.7V 
anzeigen. ;)

Ich finde es aber auch merkwürdige, dass die letzte Stelle und die 
vorletzte Nachkommastelle schwanken soll...die letzte Nachkommastelle 
schwankt nicht?

Deine Frage ist also durchaus berechtigt. Ich tippe derzeit auf einen 
Bereich zwischen 10.00V und 99.00V, in dem der TE misst bzw. messen 
will. Und ich behaupte mal (in erster Linie aus eigener Erfahrung), das 
kann man auch mit einem Arduino (bzw. AVR) bis auf die erste 
Nachkommastelle genau messen und anzeigen.

von Wolfgang (Gast)


Lesenswert?

Harald W. schrieb:
> Das würde ich nicht sagen. Man kann damit manchmal ein
> Antialiasingfilter vermeiden.

Wenn der Wert trotz Mittelung über 10000 Messungen immer noch deutlich 
wackelt, wird es Zeit für quantitative Angaben ...

Mittelung statt Antialiasingfilter funktioniert ist nur sinnvoll, wenn 
die Abtastrate erst ausreichend hoch ist und die Mittelung verwendet 
wird, um die Datenrate für Ausgang/Datenspeicherung zu reduzieren.

Bei zu niediger Abtastrate, bei der noch Aliasing auftritt, kann das 
schnell nach hinten losgehen. Nur, wenn man "Zeit ohne Ende" hat, d.h. 
wenn man es sich leisten kann, erst die höherfrequenzen Störungen durch 
Unterabtastung in den Frequenzbereich 0..f/2 zu transferieren und 
anschließend so lange zu mitteln, dass sich trotzdem ein ruhiges Signal 
ist das machbar, mit niedriger Ursprungsabtastrate noch etwas 
rauszuholen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.