www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 ADC mit Spannungsteiler sehr ungenau


Autor: Max E. (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

Autor: Max E. (Gast)
Datum:

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

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dim adcvlaue as byte
                ^^^^
adcvalue = getadc(0)            'ADC auslesen

Der ADC hat doch 10 Bit die passen nicht in 8 Bit

Gruss Helmi

Autor: Max E. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@helmi
Sorry, hab mich vertippt beim Abschreiben. Lautet natürlich:
Dim adcvalue as word

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du denn mal hinter dem Spannungsteiler gemessen mit einem 
Multimeter ?

Autor: Tobi (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allerdings ist eine Gleitkommaoperation bei einem 8-Bitter Atmega8 
meiner Meinung nach möglichst zu verhindern :-)

Autor: Max E. (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2.56V*6=15.36V

Autor: Jan M. (mueschel)
Datum:

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

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Jan,

ganau! Das geht ja sogar auf, hab ich gar nicht gesehen :-)

Autor: Michael U. (amiga)
Datum:

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

Autor: Helmut Lenzen (helmi1)
Datum:

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

Autor: Jan M. (mueschel)
Datum:

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

Autor: Paul Baumann (Gast)
Datum:

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

Autor: Max E. (Gast)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Max E. (Gast)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vermutlich an den Toleranzen von deinem Messgerät, denn irgendwie passen 
deine gemessenen Werte nicht zusammen.

Autor: Max E. (Gast)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Max E. (Gast)
Datum:

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

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

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

Autor: Max E. (Gast)
Datum:

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

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du auch nen kleinen C an Vref?

Autor: Der Stack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst Du ein Bild von Deinem Aufbau machen?

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PullUp am ADC-Eingang ausgeschaltet?

Autor: Helmut Lenzen (helmi1)
Datum:

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

Autor: Mensch_Z (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist der Spannungsteiler nun 6:1 oder 5:1 ?

Autor: Mensch_Z (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na klar 6:1

Autor: Analog (Gast)
Datum:

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

Autor: Max E. (Gast)
Datum:

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

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.