Hallo! Ich will eine Spannung am ADC eines ATmega8 über einen Spannungsteiler mit 7.5K/1% und 1.5K/1% von 9.0V bis 15.0V messen. Soweit läuft der AVR auch aber die Messergebnisse sind sehr ungenau. Als Referenzspannung verwende ich die internen 2.56V. Wenn ich 15V am Spannungsteiler habe, dann ist die Spannung über den Spannungsteiler am ADC bei 2.5474V, was in Ordung ist. Ich rechne das ganze folgendermassen um: dim adcvlaue as byte dim adcvoltage as single dim voltage as single adcvalue = getadc(0) 'ADC auslesen adcvoltage = adcvalue * 0.0025 'ADC-Wert in Spannung umrechnen (Ergenis stimmt, nachgemessen) voltage = adcvoltage * 6 'gemessene Spannung im Verhältnis des Spannungsteiler multiplizieren (*6) Wenn ich jetzt 10.0V Spannung habe, dann kommt als Ergebnis 10.4V raus. Bei 15.0V Spannung habe ich 13.6V als Ergebnis. Einen ELKO (1µF) und Kerko (100n) habe ich auch schon am ADC Eingang gegen Masse versucht, hat aber nichts gebracht. Weiß jemand an was das liegen könnte? Max
Hi! Die Spannung berechnet sich mit (bei 8 Bit Auflösung): (ADC-Wert/256)*Umax wobei Umax die Spannung ist, bei der 2,56V am ADC-Eingang liegen. Bei dir ist Umax also 15.36V
Hallo! Kannst du mir das mal genauer erläutern? Ich versteh das irgendwie nicht. Ich rechne meine Spannung im Moment wie folgt aus: 1024 / 2.56 = 0.0025 ADC-Spannung = ADC-Wert / 0.0025 Spannung = ADC-Spannung * 6 wobei Spannung gleich die Spannung am Spannungsteiler ist (z.B. 15V) und Faktor 6 weil der Spannungsteiler das Verhältnis 6:1 hat (7.5K zu 1.5K) Müsste doch so stimmen oder? Max
dim adcvlaue as byte ^^^^ adcvalue = getadc(0) 'ADC auslesen Der ADC hat doch 10 Bit die passen nicht in 8 Bit Gruss Helmi
@helmi Sorry, hab mich vertippt beim Abschreiben. Lautet natürlich: Dim adcvalue as word
Hast du denn mal hinter dem Spannungsteiler gemessen mit einem Multimeter ?
OK, du hast also 10 Bit Auflösung :-) Jeder ADC-Wandler arbeitet immer mit einer Referenzspannung, die hier 2.56V beträgt. Man kann also nur Spannungen zwischen 0V und der Referenzspannung messen. Bei der Referenzspannung hat der ADC vollen Ausschlag, also bei uns den Wert 0x03FF. Genau genommen hat der ADC den obersten Digitalwert beim Atmega8 schon bei Uref-1Bit. Daraus folgt: Die Spannung, die am ADC anliegt (jetzt mal ohne Spannungsteiler) berechnet sich mit: U=(ADC-Wert/1024)*2.56V Das könnte man in der Tat auflösen zu: U=ADC-Wert*0.0025 Also '*' nicht '/' !!!! Der Schritt *6 stimmt dann wieder.
Allerdings ist eine Gleitkommaoperation bei einem 8-Bitter Atmega8 meiner Meinung nach möglichst zu verhindern :-)
Ja hab ich mit einem Multimeter nachgemessen. Die Spannung passt auch mit der überein, die mit der ADC des ATNELs ausgibt. Nur die Berechnung der Spannung, die an dem Spannungsteiler anliegt stimmt nicht. Die Widerstände sind in Ordnung und habe auch den richtigen Wert mit dem ich rechne. Ist die Toleranz mit 1% der Widerstände evtl. zu groß? Das Verhältnis von 6:1 passt ja auch bei 7.5K und 1.5K. Dann muss ich ja nur die Spannung, die der ADC liefert mit 6 multiplizieren.
Nein, die Toleranz passt! Die Berechnung ist nur noch nicht ganz richtig: Nimm einfach die Formel: U=(ADC-Wert/1024)*15.36V Vorrausgesetzt natürlich es kommt ein 10Bit Wert bei dir im Programm an. Siehe Helmut's Beitrag!
Wie Tobi schon sagte, float-Operationen solltest du vermeiden. Mach doch deine komplette Rechnung in Millivolt, dann hast du das Problem nicht. Also Voltage = ADC*(2560/1024) * 6; bzw. Voltage = ADC * 15; Sieht doch schon viel einfacher aus, oder?
@ Jan, ganau! Das geht ja sogar auf, hab ich gar nicht gesehen :-)
Hallo, miß auch mal die Referenzspannung Deines AVR am AREF-Pin. Die Spannung ist zwar recht stabil, der Wert selbst kann aber exemplarabhängig ziemlich weit abweichen. Gruß aus Berlin Michael
>Voltage = ADC*(2560/1024) * 6;
^^^^^^^^^
Was rechnet der Compiler da fuer eine Konstante aus ?
Wenn alles Integer gemacht wird kommt da 2 raus .
Voltage = ADC* (2560*6)/1024
Vieleicht sollte Max erstmal den ADC wert direkt ausgeben bevor er den
umrechnet.
Helmut Lenzen wrote: >>Voltage = ADC*(2560/1024) * 6; > ^^^^^^^^^ > > Was rechnet der Compiler da fuer eine Konstante aus ? > Wenn alles Integer gemacht wird kommt da 2 raus . Richtig, dem Compiler darf man das natuerlich nicht so geben. Also entweder 2560.0/1024*6 oder (2560*6)/1024, wenn man es ausfuehrlich in den Code schreiben moechte.
Man muß noch einen Zwischenschritt rechnen lassen, da nur 2 Terme pro Rechenoperation benutzt werden können, d.h. die Formel muß noch in 2 Teilaufgaben gespalten werden. MfG Paul
Hallo! Erstmal vielen Dank für Eure Hilfe. Leider funktioniert das ganze immernoch nicht so wie es sein soll. Ich habs jetzt so in Bascom: Dim Adcvalue as Word Dim Adcvoltage as Word Dim Voltage as Word Adcvalue = Getadc(0) Adcvoltage = Adcvalue * 25 Voltage = Adcvalue * 15 Print Voltage ; Adcvoltage ; Adcvalue Bei 12V Am Spannungsteiler kommt raus: Voltage = 12555 ; Adcvoltage = 20925 ; Adcvalue = 837 Die Spannung von 2.09V liegt am ADC an. AREF gemessen liegt bei 2.6V. Wo liegt der Fehler das ich eine Abweichung von mehr als 0.5V habe (12555) ? Danke schonmal Max
Wie kommst du auf 0,5V Abweichung? Wenn du 2,09V am ADC misst, dann liegen am Eingang mit deinem oben beschrieben Spannungsteiler 2,09V/0,166667=12,54V an. Wenn die Software jetzt 12,555 anzeigt, dann sind das doch nur 0,015V Abweichung.
Rein rechnerisch schon. Aber wenn ich am Spannungsteiler vor dem 7.5K Widerstand mit einem Multimeter nachmesse, dann sind da genau 12.01V. Am Spannungsteiler hab ich dann komischerweise 2.09V. Die Widerstände sind richtig, hab ich auch Spannungslos mit einem Multimeter nachgemessen. 7.52K und 1.49K haben die als gemessenen Wert. Ich hab keine Ahnung woran das liegen könnte das ich dann 12.555V rausbekomme. Max
Vermutlich an den Toleranzen von deinem Messgerät, denn irgendwie passen deine gemessenen Werte nicht zusammen.
An dem Messgerät kanns nicht liegen. Ist ein Fluke, das ist sehr genau. Ausserdem verwende ich noch ein hochwertiges Netzteil, das mit auch genau 12.0V als Ausgangsspannung liefert und anzeigt. Ich hab jetzt mal alles Spannungen von 9V bis 15V am Spannungsteiler gemessen und musste folgendes feststellen: Spannung - ADC-Spannung - Verhältnis Spannungsteiler (alles gemessen) 15.05V - 2.57V - 5.86 12.04V - 2.09V - 5.76 11.04V - 1.93V - 5.72 10.04V - 1.77V - 5.67 9.03V - 1.60V - 5.64 Es nimmt also das Verhältnis des Spannungsteiler mit niedrigerer Spannung auch ab. Ich vermute da liegt der Fehler. Aber wie kann ich ihn beseitigen? Alternative zu dem Spannungsteiler ausser Operationsverstärker? Max
Ich bleibe dabei: Deine Messungen passen nicht: Wo misst du die Spannung, bzw. wo ist deine Masseleitung vom Messgerät? Direkt am 1,5k Widerstand oder wo anders?
Ich messe direkt am Spannungsteiler. Also vor dem 7.5K Widerstand die Spannung, nach dem 7.5K Widerstand die ADC-Spannung bzw. direkt am Mikro und nach dem 1.5K Widerstand hab ich meine Masse vom Messgerät, die mit der Masse des Netzteils und allen anderen Massen verbunden ist. Max
Max E. wrote: > ich meine Masse vom Messgerät, die mit > der Masse des Netzteils und allen anderen Massen verbunden ist. Wo verbunden? Am Netzteil oder am Spannungsteiler? Wenn die am Netzteil verbunden ist, würde der Spannungsabfall an der Zuleitung diesen Unterschied erklären.
Vom Netzteil gehe ich mit Plus und Masse auf eine Klemme an der Platine. Von dort geht es zum Spannungsregler für die Elektronik. Direkt von der Klemme an der Platine geht es zum Spannungsteiler, einmal Plus und einmal Masse mit ca. 4cm langen Leitungen. Max
>Es nimmt also das Verhältnis des Spannungsteiler mit niedrigerer >Spannung auch ab. Ich vermute da liegt der Fehler. Aber wie kann ich ihn >beseitigen? Alternative zu dem Spannungsteiler ausser >Operationsverstärker? Mach doch mal testweise die Widerstaende kleiner. Mal sehen ob der Teilerwert sich dann auch aendert. Hast du das mit einem oder mehren AVR mal getestet. Es konnte ja auch noch ein defekt am Controller vorliegen. Gruss Helmi
Hast Du Vref über ein C an Masse, wie Bastler schon gefragt hat. - Spannungsversorgung ? - Block-Kondensatoren ausreichend eingesetzt ? Woran mißt Du letztendlich, vielleicht ist auch eine galvanische Trennung nötig ?
Hallo! Problem gelöst :-) Habe leider vergessen den Pullup am ADC-Pin wieder auszuschalten. Deswegen kamen die krumen Werte raus. Rausgefunden habe ich das ganze, ind em ich den Mikro aus der Fassung gezogen habe und dann den Spannungsteiler gemessen habe. Da passten die Spannungen dann auf einmal, aber mit einer Differenz von 10mV zu den gemessenen Werten wenn der Mikro in der Fassung war. Danke an alle die mir geholfen haben. Max
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.