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.
Der ADC ist sehr genau, die ungenauigkeiten entstehen beim Umrechnen in Dezimalwerte.
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
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.
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.
Hi Siehe: http://www.atmel.com/dyn/resources/prod_documents/doc2559.pdf http://www.atmel.com/dyn/resources/prod_documents/doc8003.pdf MfG Spess
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 ?" ...
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.
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.
Du kannst gerne Oversampeln und was alles vorgeschlagen wurde: Solange die Referenz nicht stimmt, wirst Du dieselbe Abweichung haben, bloß genauer ...
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.
@ 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.
@ 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.
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.
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.
@ 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
@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.
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?" ...
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.