Forum: Mikrocontroller und Digitale Elektronik wie genau ist der adc eigentlich?


von r4m0n (Gast)


Lesenswert?

Hallo Community,

Ich versuche jetzt schon länger eine Regressionskurve für meinen 
Temp-Sensor zu erstellen. Die dazugehörige Funktion möchte ich dann dazu 
verwenden um die Temperatur möglichst genau auszugeben. Allerdings habe 
ich ein kleines Problem mit der Genauigkeit des ADC.

Wenn man die Formel ADC = (Vin x 1024) /2.56V nach Vin umstellt
sprich die Spannung die am Sensor anliegt dann habe ich bei manueller 
Rechnung mit dem eigenen Taschenrechner immer leicht andere Werte als 
der ADC mir Werte auf den LCD bringt.

Berechne ich manuell die Spannung am Sensor komme ich bis auf die 2 
Stelle nach dem Komma auf den gleichen Wert den mir mein Multimeter 
ausspuckt.

Wie bekomme ich den ADC noch genauer? Ich benutze in meinem Source 
double Werte mit 2Stellen nach dem Komma. Ich gehe davon aus das es 
nicht an den Variablen und der Ausgabe am LCD liegt.

btw. µc = Atmega8, ADC mit interner Referenzspannung von 2,56V

Wär für einen Tipp sehr dankbar!


Gruß R.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Der ADC ist sehr genau, die ungenauigkeiten entstehen beim Umrechnen in 
Dezimalwerte.

von Axel R. (axelroro)


Lesenswert?

Hallo,
zu der Rechnung etc. kann ich jetzt nichts beitragen, aber vielleicht 
zum Thema Genauigkeit/Auflösung. Schaue mal in google nach den Begriffen
adc avr oversampling

Mag hilfreich sein oder nicht.
Grüsse
Axel

von Hc Z. (mizch)


Lesenswert?

Die interne Referenz streut ziemlich.  Miss' sie mal an Vref nach und 
setze diesen Wert statt der 2,56 in Deine Formel.  Das Ergebnis sollte 
um Einiges genauer sein.

von r4m0n (Gast)


Lesenswert?

Hallo,

Heißt das ich müsste noch mehr Nachkommastellen nehmen?

Es ist schon merkwürdig. Ich berechne und bekomme auch mit dem 
Multimeter beispielsweise 1,33Volt für den Sensor, der ADC aber zeigt 
mir am LCD 1,21 an.  Vielleicht würde man sagen das ist nicht wirklich 
ungenau aber später bei der Umrechnung un in der Anzeige der Temperatur 
schlägt sich das locker mit +- 1,2°C etwa nieder...


Gruß

R.

von spess53 (Gast)


Lesenswert?


von Hannes L. (hannes)


Lesenswert?

Schau mal ins Datenblatt, die interne Referenz ist zwar recht stabil, 
unterliegt aber nicht zu vernachlässigenden Fertigungstoleranzen. 
Desweiteren gibt es im Datenblatt Hinweise auf die ADC-Fehler. Bei Atmel 
gibt es glaube auch eine Appnote zur ADC-Fehlerkorrektur 
(ADC-Calibration).

Mit Fließkommazahlen (Double) würde ich da nicht herangehen. Der ADC 
liefert nur 10-Bit-Ganzzahlen. Zum Skalieren halte ich 
Festkomma-Arithmetik für besser geeignet. Das kann aber auch daran 
liegen, dass ich in ASM werkele und immer bestrebt bin, unnötigen 
Aufwand zu vermeiden. Mein kleines Voltmeterchen mit Tiny24 geht z.B. 
erfreulich genau:
Beitrag "Re: 13 Bit Genauigkeit mit Atmega messen ?"

...

von Hc Z. (mizch)


Lesenswert?

r4m0n schrieb:
> Ich berechne und bekomme auch mit dem
> Multimeter beispielsweise 1,33Volt für den Sensor, der ADC aber zeigt
> mir am LCD 1,21 an.

Das liegt innerhalb der 10%, die die interne Referenz etwa streuen kann.

von r4m0n (Gast)


Lesenswert?

Vielen Dank an alle Antwortenden!!!

Werde mir jetzt mal die PDF und google Links zu den Atmel ADC 
Calibration zu Gemüte führen.

Melde mich dann wieder wenn ich ne Temp. bis auf die 90zigste Stelle 
genau hinter dem Komma anzeigen kann (kleiner Spaß :O)... )


Gruß

R.

von Hc Z. (mizch)


Lesenswert?

Du kannst gerne Oversampeln und was alles vorgeschlagen wurde:  Solange 
die Referenz nicht stimmt, wirst Du dieselbe Abweichung haben, bloß 
genauer ...

von Marc M. (bytewood) Benutzerseite


Lesenswert?

Ich hatte mal ein ähnlich gelagertes Problem.
Bei mir ging es um eine Wochenend-Selbstbau-Kühlschranksteuerung.
Ich habe mir einen Temperatur-Sensor herausgesucht, der im gewollten 
Bereich einigermaßen linear verläuft.
Im Programm habe ich den ADC min-Wert und max-Wert vorgegeben und durch 
die beiden Punkte eine "virtuelle" Gerade gelegt.
Mein ADC berechnete in 10 Dürchläufen mit anschließender 
Mittelwertbildung einen Wert, der irgendwo auf der Geraden liegen musste 
-> das war dann umgerechnet mein Temperaturwert.
Als Referenz habe ich ein Digitalthermometer verwendet.
Mit Veränderung von min- und max-Wert konnte ich die Gerade entsprechend 
verschieben, bis alles soweit passte.
Ist zwar alles recht grob (ca. +- 0,5 °C) aber für meinen Anwendungsfall 
ausreichend (Nichtlinearität des analogen Temperatursensors).

Meine Erfahrung mit dem ADC generell ist, dass ein aufgenommener Wert 
alleine absolut nicht taugt. (1.Messung sollte eh verworfen werden -> 
Datenblatt)
Also min. 10 Werte aufnehmen und den Mittelwert bilden + eine 
Möglichkeit einbauen, etwas offset einzustellen.

von r4m0n (Gast)


Lesenswert?

@ Marc Meise,

ich verwende 4 Messungen und bilde den Mittelwert. Der erste VOR der 
eigentlichen Messung wird natürlich verworfen. da mein Temp-Sensor auch 
nicht linear ist habe ich eine Wertetabelle gefüllt von 0 - 80°C.

Aus den gemessenen Spannungen bilde ich dann eine Regressionskurve 
mittels Office. Die dazugehörige Funktion (annährend Mittelwert) nehme 
ich dann zur Berechnung. Funktioniert wie Dein Verfahren und ist recht 
genau.

gruß R.

von r4m0n (Gast)


Lesenswert?

@ Zimmerer,

Dein Tipp war Gold Wert!!!!

Statt 2,56 liegen 2,72 Volt an. Eingebaut in die Formel ergibt das EXAKT 
bis auf eine Nachkommastelle den Wert am Sensor an den auch das 
Multimeter misst.

Wow darauf wär ich so schnell nicht gekommen.

VIELEN DANK!!!


Gruß an Alle!

R.

von Hc Z. (mizch)


Lesenswert?

Na prima.  Der eingebaute ADC ist schon nicht schlecht, nur die Referenz 
taugt wenig.  Man sollte schon auf den tatsächlichen Wert kalibrieren 
oder eine externe Referenz verwenden.

Eins noch:  Der erste eingelesene Wert nach Umschalten der Referenz 
(also auch der allererste nach Reset) sollte verworfen werden, ansonsten 
kann ich die Ratschläge, vielfach zu messen, nicht ganz nachvollziehen 
-- es sei denn, das Signal ist von Störungen überlagert.

von r4m0n (Gast)


Lesenswert?

Ja das erste Signal wird jedesmal verworfen bevor es richtig los geht.

Ich habe den ADC sowie die gemessene Spannung gleichzeitig auf dem 
Display stehen um das "Springen" zu beobachten. Dein Einwand / Frage mit 
den Mehrfachmessungen ist berechtigt. Habe das so aus dem GCC-Tutorial 
hier entnommen. Ich nehme auch an das man mit dem Mittelwert 
irgendwelche Spannungsspitzen, Schwankungen etc. aus dem Weg räumen 
möchte.

Gruß

R.

von Falk B. (falk)


Lesenswert?

@ r4m0n (Gast)

Und weil jetzt dein ADC so schön genau ist, kannst du gleich noch was 
lernen. Nämlich dass man Fließkommazahlen und Rechnung oft nicht 
braucht, Festkommaarithmetik tuts meist deutlich einfacher und 
resourcenschonender.

MFG
Falk

von r4m0n (Gast)


Lesenswert?

@Falk

Dank Dir für den Tipp! Hatte selbst auch schon die Vermutung das das 
Rechnen mit Floats nicht gerade das Beste ist was man dem µc antun 
kann....

Gruß R.

von Hannes L. (hannes)


Lesenswert?

Das zeigt, dass Du die Antworten recht oberflächlich liest, denn das 
wurde Dir weiter oben auch schon empfohlen:
Beitrag "Re: wie genau ist der adc eigentlich?"

...

von Micha (Gast)


Lesenswert?

hat der Attiny26 den genauesten ADC unter den Attinys und Atmegas?
im Datenblatt 
(http://www.atmel.com/dyn/resources/prod_documents/doc1477.pdf) auf 
Seite 131 steht unter "Absolute Accuracy (Including INL, DNL, 
Quantization Error, Gain and Offset Error)" nur 1 bis 2 LSB - bei allen 
anderen Datenblätter der Attinys/Atmegas habe ich nur größere Werte 
gefunden...

von Micha (Gast)


Lesenswert?

schieb

von Hc Z. (mizch)


Lesenswert?

Das sind typische Werte, keine garantierten.  Die kannst Du den Hasen 
geben oder wahlweise glauben oder nicht.

Bei anderen AVRs sind worst-case-Werte angegeben - nur darauf kannst Du 
aufbauen.

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.