Hallo, ich habe ein Signal zwischen 0 und 5 Volt am Eingang des AD Wandlers liegen und rechne die Spannung durch Division durch 1024 auf 2 Stellen aus. Leider ist die Abweichung zwischen der gemessenen angelegten Spannung und der Spannungsausgabe des µM mit zunehmender Spannung sehr hoch (bis 0,5 Volt). Was muß man tun um die Genauigkeit hinzubekommen oder den AD-Wandler abzugleichen ? Danke für jede Hilfe
'Abgleichen' kann man den AD-Wandler nicht. Was für eine Referenzspannung benutzt Du denn?
Macht es vielleicht Sinn die Eingangspannung über einen Spannungswandler runterzurechnen und anschließen wieder hoch ?
Spannungswandler? ist das denn keine Gleichspannung? Wenn Du es genau willst, solltest Du vielleicht einen Spannungsteiler nehmen und die interne Referenz von 2,56V benutzen. Die von Dir angesprochene Differenz von bis zu 0,5V ist bei mir bisher nie aufgetreten! Schaltungsfehler? Gruß Johnny
Habs mir fast gedacht. Aber wie gesagt, ich hab hier grad ne Schaltung laufen (zwar mit nem Mega16, aber das sollte sich bei nem Mega8 ähnlich verhalten), die mir sauber den kompletten Wertebereich wandelt (bei externer Referenzspannung VREF = VCC und einem Poti zwischen VCC und GND am Analog-Eingang). Eine Differenz von 10% ist mir noch nicht untergekommen. Ist an Deiner Berechnung vielleicht was falsch? Rein informativ: U_mess = (U_ref / 1024) * ADC wobei ADC der Wert im Datenregister vom AD-Wandler ist... Übrigens: Wenn Du mit floats rechnest und nicht aufpasst, kann alles Mögliche rauskommen. Gruß Johnny
Habe auch noch nie dermaßen große Abweichungen gehabt, habe mit meinen LM335 z.B. eine Abweichung von vielleicht 2°C, das entspricht ca. 20mV!! Also bei dem 10Bit A/D-Wandler dann in etwa 4 / 1024, also so ca. 0,4% Ist ganz OK für die einfache Schaltung die ich habe...
Falls Du AVcc als Referenz nimmst musst Du auf folgendes achten: Zwischen Vcc und AVcc ein 10uH bis 47uH Spule Zwischen AVcc und GND einen 100nF keramischen Kondensator Zwischen VRef und GND einen 100nF keramischen Kondensator Damit erziele ich sehr gute Ergebnisse.
Hallo, danke für die Hilfestellung. Werde noch einmal meinen Aufbau kontrollieren.
Wenn ich nicht mit FLOATS rechnen: Mit welchem Datenformat soll ich rechnen (BASCOM). Bernd
schreib doch mal, wie Du rechnest. Es ist nicht ganz klar, wie Du den Wert ausrechnest auf 2 Stellen: Wenn 5 Volt anliegen, sollte ca. 1024 bei der Wandlung 'rauskommen. geteilt durch 1024 gibt 1, nicht 5? Schalte doch einfach mal ein Poti an den A/D - Eingang, dreh es hoch und wieder 'runter und laß Dir in einer Schleife die Werte von der Wandlung (ohne Umrechnung) anzeigen, um einzugrenzen, ob es an Deiner Rechnung oder an der Wandlung liegt.. Viel Spaß beim Basteln!
Dann rechne mal statt U_mess = (ADC_Wert / 1024) * 5 einfach mit U_mess = (ADC_Wert * 5) / 1024 Gruß Hagen
Also, U_mess = adc_wert * 5 U_mess = U_mess /1024 Die Abweichung its im mittleren Spannungsbereich vorhanden. 5 Volt kommen vom ADC 1024 und bei 0 Volt kommen auch 0. Keine Ahnung warum ich so hohe Abweichungen bekomme.
Gehe mal davon aus, dass U_mess bei Dir als float deklariert ist??? Du könntest es alternativ mal mit einem ausreichend bemessenen Integer versuchen, und zwar die Ausgabe nicht in Volt sondern in Millivolt machen, also nicht adc_wert 5 sondern adc_wert 5000. Dann dürfte auch bei einer Division durch 1024 was sinnvolleres rauskommen. Gruß Johnny
Ja U_mess ist als float deklariert. Werde heute den mV Ansatz mal versuchen. Nur aus meiner Sicht handelt es sich nicht um einen Rechenfehler, da wenn ich den ADC Wert per Hand umrechne genauso eine hohe Abweichung erhalte. Sprich: Der ADC-Wert ist schon zu hoch. Gruss BS
So funktionierts unter Bascom: '#### Variablen Dim Spg_result As Long 'der gemessene Wert 0...1023 Dim Spg_wert As Single ' errechneter Spg-Wert Dim Spg_reference As Single 'z.B. 5Volt Dim LCD_String as String*22 Start Adc Adchannel = 1 Spg_result = Getadc(1) Spg_wert = Spg_result * Spg_reference Spg_wert = Spg_wert / 1024 Lcd_string = Fusing(spg_wert , "#.#") 'runden auf eine Nachkommastelle Stop Adc Funktioniert ziemlich genau! ;-)
Danke, den mittleren Teil habe ich genauso. Nur den Befehl Adchannel = 1 nicht. Werde ich mir heute abend noch einmal anschauen. Danke bernd
Das Ganze war geschrieben für nen ATMega 128 mit mehreren AD-Eingängen, der "Adchannel" selektiert nur jeweils den entsprechenden Eingang.
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.