www.mikrocontroller.net

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


Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nils S. (kruemeltee) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der ADC ist sehr genau, die ungenauigkeiten entstehen beim Umrechnen in 
Dezimalwerte.

Autor: Axel Ro. (axelroro)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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 ?"

...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

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

Autor: Marc Meise (bytewood) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: r4m0n (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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?"

...

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat der Attiny26 den genauesten ADC unter den Attinys und Atmegas?
im Datenblatt 
(http://www.atmel.com/dyn/resources/prod_documents/...) 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...

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schieb

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.