ATmega8 ADC mit Spannungsteiler sehr ungenau

Gast #1008408
Lesenswert?

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
Gast #1008436
Lesenswert?

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
Gast #1008452
Lesenswert?

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.
Gast #1008456
Lesenswert?

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.
Gast #1008462
Lesenswert?

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!
#1008497
Lesenswert?

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.
Gast #1009158
Lesenswert?

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
Gast #1009174
Lesenswert?

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
Gast #1009197
Lesenswert?

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
Gast #1009214
Lesenswert?

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
Gast #1009219
Lesenswert?

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
#1009329
Lesenswert?

>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
Gast #1009453
Lesenswert?

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 ?
Gast #1009460
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren