Forum: Mikrocontroller und Digitale Elektronik Abweichung am Eingang vom AD-Wandler des Arduino Nano


von Peter S. (mkhl77)


Lesenswert?

Hallo,

ich lese ein DC Signal an dem PIN A0 des uC ein.
Danach rechne in den Wert um in eine Spannung und lass sie mir über den 
Serial-Monitor ausgeben.

5V = 1024
0V = 0

Ich messe die Werte zum verlgeich auch noch mit einem Multimeter.
Und stelle leider eine abweichung jeder messung fest.

Mehr als 20 mV, da der Kontrolloer ja keine genaueren abweichungen 
feststellen kann.

als zb.:

uC       Multimeter
3,11     2,91

1,90     1,76

3,38     3,14


Die Werte von dem uC sind gemittelt aus 500 Messungen.

Kann es sein das ich da die Referenzspannung oÄ berücksichtigen muß um 
da exakte Werte zu bekommen ?


Vielen Dank

MFG

von Max H. (hartl192)


Lesenswert?

Peter Stein schrieb:
> Kann es sein das ich da die Referenzspannung oÄ berücksichtigen muß um
> da exakte Werte zu bekommen ?
Das kann nicht nur sein, das ist so.

von Ulrich F. (Gast)


Lesenswert?

Die Nanos haben keine Induktivität (Tiefpass) vor Vadc.
Arduino schaltet nicht den halben Chip aus, um das Rauschen zu mindern.

Da kann man also noch nacharbeiten.
Auch auf die interne Referenz wechseln, die ist meist viel stabiler, als 
die Versorgungsspannung.

von Klaus (Gast)


Lesenswert?

Peter Stein schrieb:
> uC       Multimeter
> 3,11     2,91
>
> 1,90     1,76
>
> 3,38     3,14

Wenn du jetzt noch deine µC-Werte durch 1,07 teilst, sieht das doch 
recht gut aus.

MfG Klaus

von Peter S. (mkhl77)


Lesenswert?

Vielen Dank für die schnellen Antworten.

Klaus, wie kommen sie auf 1.07, dass passt ja tartsächlich , aber wieso 
:-) ?

Die interne Ref.spannung ist ja 2.5V wie kann ich die denn nutzen bzw. 
wie bring ich die in meinen quellcode mit ein?

Aber angenommen ich lege 5 V an meinen AD eingang an, und bekomme 1023 
ausgegeben und bei 0V, 0  dann müßte doch alles passen oder irre ich 
mich ?

von Ulrich F. (Gast)


Lesenswert?

Peter Stein schrieb:
> Die interne Ref.spannung ist ja 2.5V
1,1V
Oder eben Vcc also 5V(eher 4,5V über USB) als default Einstellung

http://www.arduino.cc/en/Reference/AnalogReference

von Peter (Gast)


Lesenswert?

Peter Stein schrieb:
> Klaus, wie kommen sie auf 1.07, dass passt ja tartsächlich , aber wieso
> :-) ?

Die USB Spannung (die du als Referenz verwendest) hängt vom verwendeten 
Computer ab. Manche USB Ports liefern 4,75V andere 5,1V. Das als 
Referenzspannung zu verwenden kann natürlich nicht wirklich gut gehen.

von Karl H. (kbuchegg)


Lesenswert?

Und nein.
Die Referenzspannung ist NICHT 2.500000V und auch nicht 1.100000V

Die interene Referenzspannung bewegt ich in der NÄhe der genannten 
Spannungen (welche steht im Datenblatt zum Prozessor) und ist 
hauptsächlich eines: sie ist stabil
Aber sie hat nicht exakt den von dir angenommenen Wert sondern muss für 
jeden Prozessor individuell ermittelt werden.

'in der Nähe' bedeutet, dass zb die 2.56V Referenzspannung nicht 3.5V 
sein wird und auch nicht 1.8V. Aber sie könnte zb 2.54V oder 2.58V sein. 
Also ein Wert, der nicht sehr viel vom nominellen Wert abweicht. Wie 
gross die Abweichungen bei einem konkreten µC-Exemplar sein können steht 
ebenfalls im Datenblatt.

von Peter S. (mkhl77)


Lesenswert?

Okay aber wie kommen SIe da auf 1.07?

Vielen Dank für die Antworten , aber jetzt weiß ich leider immer noch 
nicht, was ich in meinem Code verändern muß, das ich eine genauere 
Messungen durchführen kann.

Könnte mir jemand ein Bsp. hier zeigen, was ich in meinem Quellcode 
verändern müßte. wenn ich mal annhemen ich hätten den wert schon für 
meine ref spannung vom prozessor.

Vielen dank

von Karl H. (kbuchegg)


Lesenswert?

Peter Stein schrieb:
> Okay aber wie kommen SIe da auf 1.07?

Er wird halt durchdividiert haben:
Was soll rauskommen, was kommt raus, um welchen Faktor unterscheidet 
sich das eine vom anderen? Ist der Faktor in allen Beispielen konstant?

> Vielen Dank für die Antworten , aber jetzt weiß ich leider immer noch
> nicht, was ich in meinem Code verändern muß, das ich eine genauere
> Messungen durchführen kann.

andere Referenzspannung nehmen. Zb die interne
Aber: dann musst du auch die EIngangsbeschaltung ändern.

Denn der ADC macht ja nur Spannungsvergleiche und sagt dir wie gut die 
beiden Spannungen übereinstimmen (als Zahlenwert von 0 bis 1023).
Wenn du also eine Referenzspannung von 2.5V hast, aber bis 5V messen 
willst, dann musst du die 5V runterteilen, bis du im Bereich deiner 
Referenzspannung bist.
Stichwort: Spannungsteiler.
Den kann man auch als Poti ausführen.

> Könnte mir jemand ein Bsp. hier zeigen, was ich in meinem Quellcode
> verändern müßte.

Weiter oben hat doch schon jemand einen Link auf eine Arduino Funktion 
gepostet!

von Tom Thomsen (Gast)


Lesenswert?

Peter Stein schrieb:
> aber jetzt weiß ich leider immer noch nicht, was ich in meinem Code
> verändern muß. wenn ich mal annhemen ich hätten den wert schon für
> meine ref spannung vom prozessor.

Und hier weiß keiner, wie dein Code bisher aussieht. Da sind Änderungen 
schwierig zu beschreiben.

Ganz allgemein wird man mit dem klassischen Dreisatz schon recht weit 
kommen. Wenn das noch nicht reicht, kann man sich über Offset und/oder 
Korrekturen höherer Ordnung Gedanken machen.

von Joachim B. (jar)


Lesenswert?

Peter Stein schrieb:
> Klaus, wie kommen sie auf 1.07, dass passt ja tartsächlich , aber wieso
> :-) ?

weil 3,11/2,91 oder 1,90/1,76 oder 3,38/3,14 eben 1,07 ergibt

Peter Stein schrieb:
> uC       Multimeter
> 3,11     2,91
>
> 1,90     1,76
>
> 3,38     3,14

aber wer sagt denn das dein Multimeter stimmt?
Die echte Ref Spannung aus der internen Wahl kannst du am AREF Ausgang 
messen ob die 2,5V oder 2,56V oder 2,57V beträgt!

Ist dein Multimeter dir genau genug kannst du das als Maßstab nehmen.

Üblicherweise haben die meisten ADC auch noch einen Offset

Erg nehme ich 2 Messpunkte

eine Spannung 3,6V gibt ADC 900 und eine 1,8V gibt z.B. 450

schon können wir m die Steigung ausrechnen
https://de.wikipedia.org/wiki/Geradengleichung

aber wären da Werte
eine Spannung 3,6V gibt ADC 910 und eine 1,8V gibt z.B. 460 so shen wir 
dieselbe Steigung aber mit einem Offset b

also y = m * x + b

y wäre die Spannung die es zu finden gilt
x wäre der ADC digit Wert
b ist der Offset der irgendwie draufliegt (kann ja auch mal 0 sein, 
meist aber nicht)

für m gilt dY/dX als m = (y1-y2)/(x1-x2)

und b ergibt sich wenn ich y messe und x auf 0 setze oder anders besser 
gesprochne ich schliesse den ADC Eingang auf GND = 0V messe die 0V und 
schaue was für digits vom µC geliefert werden.

von Peter S. (mkhl77)


Lesenswert?

Guten Morgen,


okay ich werde das Mal ausprobieren.
Danke für die hilfreichen Tips.

MfG

von Kurt B. (kurt-b)


Lesenswert?

Peter Stein schrieb:
> Guten Morgen,
>
>
> okay ich werde das Mal ausprobieren.
> Danke für die hilfreichen Tips.
>
> MfG

Naja, hört sich nicht besonders überzeugend an.


Beispiel (ohne Bezug auf irgendeinen bestimmten Typ)
Wenn du eine Referenz (egal wo die herkommt) von 3V hast, und 3V 
anlegst, dann bekommst du eine Zahl von 1023 geleifert.

Hast du eine Referenz von 5V dann kommt bei angelegten 5V 1023 raus.

Hast du eine Referenz von 3V und legst 1,5V an dann bekommst du 512(511) 
geliefert.

Es geht also immer um das Verhältnis zwischen Referenz und angelegter 
Spannung, 100% ergibt immer 1023 (10 Bit halt).


 Kurt

(Du bekommst keinen Spanungswert geliefert, sondern immer einen 
Verhältniswert!!)

(Auflösung: 10 Bit, also 0..1023)

.

von Falk B. (falk)


Lesenswert?

Das Zauberwort lautet "Kalibrierung".

https://www.mikrocontroller.net/articles/Aufl%C3%B6sung_und_Genauigkeit#Eichen.2C_Kalibrieren.2C_Justieren

UA = ADC * k = UE

UE = Eingangsspanung, gemessen mit Multimeter
UA = angezeigte Spannung
ADC = ADC Messwert
k = Kalibrierfaktor

-> k = UE / ADC

von Peter S. (mkhl77)


Lesenswert?

Das habe ich ja schon getestet, ich habe 5 V angelegt und 1023 
rausbekommen.
bei 0 V 0. Demnach müßte es ja stimmen.
Ich werde es jetzt aber mit der Internen Ref. Spannung von 1.1V 
ausprobiere, folglich habe ich ja auch eine höhere Auflösung.
Da ich morgen aber erst wieder vor der Apperatur sitzte, werde ich das 
testen und meine Ergebnisse hier mal reinstellen.

von Dietrich L. (dietrichl)


Lesenswert?

Peter Stein schrieb:
> Das habe ich ja schon getestet, ich habe 5 V angelegt und 1023
> rausbekommen.

Damit ist aber noch nicht klar, welchen genauen Wert die Referenz hat.
Denn: bei Bereichsüberschreitung (Eingangsspannung >= Referenz) liefert 
der AD-Wandler auch 1023!

Gruß Dietrich

von Joachim B. (jar)


Lesenswert?

Falk Brunner schrieb:
> Das Zauberwort lautet "Kalibrierung".
>
> UA = ADC * k = UE
>
> UE = Eingangsspanung, gemessen mit Multimeter
> UA = angezeigte Spannung
> ADC = ADC Messwert
> k = Kalibrierfaktor
>
> -> k = UE / ADC

wie willst du mit einem Faktor den Offset reinrechnen?

Ohne das jetzt nachprüfen zu wollen halte ich mich lieber an die 
Geradengelichung,

UA = ADC * m + b

mit m = (y1-y2)/(x1-x2)
und b = UA (für UE -> ADC = 0)

von Peter S. (mkhl77)


Lesenswert?

Hallo,

habe jetzt die Internet Ref-Spannung von 1.1V genommen, und das Signal 
aus meiner schlatung über einen spannungsteiler an den an AD Wandler 
eingang verbunden. jetzt passt es.

von Uwe (Gast)


Lesenswert?

Hi,
> Das habe ich ja schon getestet, ich habe 5 V angelegt und 1023
mehr geht ja auch nicht. lege mal 2,5V an. Bekommst du dann 512?
Vermutlich nicht weil deine Ub = Ref nicht 5V sein wird.

Viel Erfolg, Uwe

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.