Forum: Analoge Elektronik und Schaltungstechnik Referenzspannung beim AD-Wandler?


von Björn (Gast)


Lesenswert?

Hi,

hab gerade meine erste Platine fertig und hab nun festgestellt, dass ich 
den AD-Wandler nicht vernünfig funktioniert.

Der AD-Wandler ist an die Versorgungsspannung angeschlossen, und soll 
eigentlich bei kleiner werdender Spannung auch einen kleineren Wert 
wiedergeben. Krieg aber immer 255, egal wie klein die Versorgungspannung 
ist.

Liegt wohl daran dass der Controller die Versorgungsspannung auch als 
Referenzspannung nimmt.

Kann ich den Controller nicht als Referenzspannung 0V angeben?

Hab gerade mal im Datenblatt geschaut, da werd ich aber nicht wirklich 
schlau raus.

Atmega 48 mit GCC...

Gruß

von Aufreger deluxe (Gast)


Lesenswert?

0V als Referenzspannung macht wenig Sinn. Wenn du immer 255 bekommst, 
ist der Wandler nicht richtig konfiguriert. Sind die IOs richtig 
eingestellt, hast du auch die Referenzspannung richtig konfiguriert?

von rayelec (Christoph) (Gast)


Lesenswert?

Bei 0V Referenz wird der ADC nicht funktionieren. OV ist das eine, Vref 
das andere Ende des Wandlungsbereichs. Wenn Vcc stabil genug ist, dann 
reicht das aus, sonst kann mann spezielle Referenzdioden nehmen.

von Björn (Gast)


Lesenswert?

Der AD-Wandler ist als Eingang konfiguriert. Wenn ich das auf dem STK500 
mache und dem AD-Wandler eine andere Spannung als die 
Versorgungsspannung gebe und diese variire klappts.

Das Problem ist das der AD-wandler auf der Platine die 
Versorgungsspannung bekommt und diese aber gleichzeitig als 
Referenzspannung eingestellt ist.

Weiß jetzt nur nicht, was es noch für Möglichkeiten gibt beim AD-Wandler 
eine andere Referenzspannung zu einzustellen wobei ich dann bei kleiner 
werdender Versorgungsspannung einen anderen Wert bekomme.

Wie gesagt, aus dem datenblatt werd ich nicht richtig schlau.

von TravelRec. (Gast)


Lesenswert?

Der A/D muß 1. über ein L/C-Glied an die Versorgungsspannung geschaltet 
werden, und zwar an AVcc. Zweitens muß die Referenz oberhalb 2,2V liegen 
und kann bis Vcc reichen. Du kannst sie auch unbeschaltet lassen und 
intern über Einstellbits in ADMUX auf feste Referenzen legen. Die 
Referenzspannung gibt die obere Grenze dessen an, was am A/D-Pin 
gemessen werden kann. Je niedriger die Referenzspannung, desto kleiner 
sind die Spannungssprünge, die der A/D auflösen kann. Desto ungenauer 
wird aber auch das Meßergebnis, weil sich Störquellen stärker auswirken.

von Björn (Gast)


Lesenswert?

So hundertprozentig genau muss da ja nicht sein. Soll eine 
Akkuzustandsanzeige werden, bei welcher eine LED angeht wenn die 
Spannung unter einen bestimmten Wert geht. Ein paar mV machen dabei den 
Braten nicht fett.

Also könnte ich ich intern die "Internal 1.1V Voltage Reference with 
external capacitor at AREF Pin" einstellen.

Heißt das dann dass ich eine Referenzspannung von 1.1 V habe, welche 
beim ändern der Versorgungspannung von z.B. 5V - 3,9V Werte zwischen 0 
und 255 erzeugt?

von Aufreger deluxe (Gast)


Lesenswert?

Eine Referenzspannung von 1,1V bedeutet, dass du eine Auflösung von
1,1V/2^10 = 1,1V/1024 = 1,07mV hast.

Eine Spannung von 0V erzeugt somit einen Wert von 0, eine Spannung von 
Vref-1,07mV, also von 1,09893V erzeugt einen Wert von 1023.

von Profi (Gast)


Lesenswert?

Du hast 2 Möglichkeiten:
Vref = Vcc, Vin=konst  (Kehrwert bilden, um auf die Spannung zu kommen, 
da der ADC-Wert mit fallender Vcc ZUnimmt)

Vref = konst(intern), Vin=Vcc/x (Spannungsteiler)

Achtung: wenn auf eine interne Vref geschaltet wird, darf am Vref-Pin 
keine Spannung angelegt werden, sondern darf NUR ein C dran.

von Guido (Gast)


Lesenswert?

Hey,

also es klapppt immer noch nicht! Hab auch nicht ganz verstanden, was du 
mit

>>Vref = konst(intern), Vin=Vcc/x (Spannungsteiler)

gemeint hast.

Also mein Vref ist nicht beschaltet, da hängt nen Kondensator geegen 
Masse dran. Mein Vin ist gleich VCC.

Nur wie muss ich nun die Bits setzen?

Gibt ja eigenlich nur 4 Varianten, hab gerade mal alle durchprobiert 
aber nichts hat geklappt.

von Karl heinz B. (kbucheg)


Lesenswert?

> aber nichts hat geklappt.

Das ist schlecht.
Und wenn du uns jetzt noch dein Program zeigen würdest, könnte
man dir sogar sagen was das Problem ist, wenn du uns noch sagen
würdest wie: 'aber nichts hat geklappt' zu interpretieren ist.

Ansonsten:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29

von Guido (Gast)


Angehängte Dateien:

Lesenswert?

Ok, das Programm ist angehängt.

>>wenn du uns noch sagen würdest wie: 'aber nichts hat geklappt' zu 
>>interpretieren ist.

Also es wird immer der Wert 255 gesendet, egal wie ich die Bits im 
Register ADMUX setze oder die Spannung Vcc verändere.


von Sonic (Gast)


Lesenswert?

Wieso benutzt du nicht die interne Referenz (2.56V) und führst das 
Messignal, wie oben angeführt, mittels Spannungsteiler an den Eingang? 
Die interne Referenz bleibt bis ca. 3.5V Versorgungsspannung stabil.

von Guido (Gast)


Lesenswert?

Hab es gerade mit der internen Referenz versucht, also das 
ADMUX-Register so gesetzt.

ADMUX |= ((1<<REFS1) | (1<<REFS0) | (1 << ADLAR));

Die interne Referenz beträgt nun laut Datenblatt 1,1V.


Die Versorgungspannung variiere ich mit einem Spannungsgenerator, jedoch 
ohne Erfolg. Der Wert bleibt immer 255.

Wozu genau soll ich den den Spannungsteiler verwenden? Die V_in Spannung 
ist gleich meiner Betriebsspannung.

von Sonic (Gast)


Lesenswert?

Wenn du das ADLAR - Bit gesetzt hast ist dein Ergebnis im ADCL und ADCH 
'left adjusted', also von links her ausgerichtet. Wenn du die Register 
jetzt herkömmlich ausliest kommt natürlich Mist 'raus! Probier's mal 
ohne ADLAR.

von André K. (andre-)


Lesenswert?

"Hab es gerade mit der internen Referenz versucht, also das
ADMUX-Register so gesetzt.

ADMUX |= ((1<<REFS1) | (1<<REFS0) | (1 << ADLAR));

Die interne Referenz beträgt nun laut Datenblatt 1,1V."


Wenn Aref extern auf VCC oder GND (siehe oben, sinnlos) gezogen ist, 
baust du dir einen Schlurzkuss, wenn du auf die Interne stellst. Die 
interne Referenz ist wesentlich hochohmiger, als die extern 
angeschlossene Spannung, womit dann immer noch die Externe Vorrang hat 
(+Kurzschluss...).

Beste Gruesse

von André K. (andre-)


Lesenswert?

Himmel, ich sollte wieder anfangen, ALLE Beitraege zu lesen bevor ich 
poste ;). Wenn an deinem Vref nur ein Kondensator haengt, ist 
obenstehender Beitrag natuerlich bedeutungslos.

Beste Gruesse

von Karl heinz B. (kbucheg)


Lesenswert?

Was auch nicht so toll ist:
Jedesmal bei einer Messung den ADC komplett neu
konfigurieren. Konfigurationen macht man einmal
und dann wird die Messung nur noch mittels setzen
des ADSC Bits in ADCSRA gestartet. Die erste Messung
nach der Konfiguration ist nämlich Mist und erst
die darauffolgenden sind ok.

Ich empfehle nochmal das Programm in
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#ADC_.28Analog_Digital_Converter.29
zu studieren.

von Guido (Gast)


Lesenswert?

Ohne ADLAR klappt es auch nicht.

Das Programm im GCC-Tutorial hab ich mir schon angeschaut und wenn ich 
das richtig verstanden hab, müsste es mit der internen Referenz von 1,1V 
funktionieren.

Wenn ich den AD-Wandler normal Betreibe, also mit einer variablen 
Spannung am V_in und einer festen Betriebsspannung V_cc, klappt alles 
wundebar. Ob intern extern oder mit ADLAR ohne ADLAR, es klappt.

Nur sobald meine V_in Spannung gleich der Betriebsspannung ist, klappt 
nix und der Wert ist immer 255.

von Karl heinz B. (kbucheg)


Lesenswert?

> Nur sobald meine V_in Spannung gleich der Betriebsspannung ist, klappt
> nix und der Wert ist immer 255.

Kann sich irgendwer von den anderen einen Reim auf diese
Aussage machen?

Ich würde mal sagen, es ist nicht ungewöhnlich, dass der ADC
beim Anlegen der höchsten messbaren Spannung einen Maximal-
wert ausspuckt. Wenn du die interne Referenz benutzt, dann
liegt der maximal mögliche Messwert unterhalb von Vcc, d.h.
Vin ist dann höher als Vref und der ADC gibt ebenfalls den
höchsten Wert aus.

Mir scheint, du hast falsche Erwartungen. Was erwartest du?
Du willst nicht etwa mit dem ADC die Betriebsspannung Vcc
messen, oder? Das wäre etwa so als ob du die tatsächliche
Länge eines Meterstabes dadurch feststellst, indem du die
Hälfte des Stabes mit eben diesem Stab nachmisst. Klar dass
da immer 50 cm rauskommt, egal wie lang der Stab wirklich ist.



von Guido (Gast)


Lesenswert?

>>Mir scheint, du hast falsche Erwartungen. Was erwartest du?
>>Du willst nicht etwa mit dem ADC die Betriebsspannung Vcc
>>messen, oder?

Doch, eigentlich schon. Nur leider ist das wohl anscheinend nicht 
möglich. Hatte gedacht ich kann die Referenzspannung auf einen festen 
Wert einstellen und somit die Differenz zur Betriebsspannung nutzen.

Gibt es denn eine andere Möglichkeit die Betriebsspannung zu messen und 
diese vielleicht in einen Wert zu wandeln.

von Tom (Gast)


Lesenswert?

Hi,

ich glaube ich konnte nachvollziehen, wo dein Problem liegt. Du musst 
natürlich am AD-Eingang einen Spannungsteiler aufbauen!

pos. Spannungsversorgung - R1 - "Mittelabgriff in den AD-Wandler" - R2 - 
neg. Spannungsversorgung.
Die Summe aus R1 + R2 sollte meinetwegen bei 100k liegen, wobei R2 so 
gewählt wird, dass bei maximaler Versorgungsspannung genau 1,1V über ihm 
abfallen.

Heißt also im Klartext: Vcc = 5V, R1+R2=100kOhm --> I=5V/100k = 50uA
An R2 soll nun bei maximaler Versorgungsspannung 1,1V abfallen, also:
R2 = 1,1V / 50uA = 22k
Also wählst du R1= 78k und R2 = 22k. Warum? Nun, wenn du Vcc direkt an 
den AD legst, dann ist dein Vcc immer größer als deine interne Referenz 
und dein AD spuckt nun mal 255 bei einer Eingangsspanung >= 1,1V aus. 
Daher der Spannungsteiler. Nun hast du bei max. Vcc genau 1,1V am AD zu 
liegen, was ja deiner internen Referenz entspricht und bekommst 255 
ausgespuckt. Sinkt jetzt dein Vcc, dann sinkt auch die Spannung am AD, 
also bekommst du einen Wert kleiner 255. Verstanden?

Gruß

von Karl heinz B. (kbucheg)


Lesenswert?

In mir keinte schon so der Verdacht :-)

Das geht klarerweise so nicht.

Du könntest:
Interne Referenz mit einem kleinerem Wert als Vcc nehmen,
damit du erst mal einen stabilen Bezugspunkt hast.
Da die stabile Referenzspannung kleiner als Vcc ist (sein muss,
wird ja daraus gewonnen), musst du Vcc über einen Spannungsteiler
in den Bereich dieser Referenzspannung bringen. Zb. mit
einem Spannungsteiler.

von Sonic (Gast)


Lesenswert?

@ Karlheinz:
"Die erste Messung
nach der Konfiguration ist nämlich Mist und erst
die darauffolgenden sind ok."

Ist nicht ganz richtig. Wenn du die von Atmel vogegebenen 120µs von MUX 
einstellen bis zur Wandlung wartest (wird nur der MUX umgeschaltet 
genügen 40µs) ist auch das erste Ergebnis korrekt. Nur beim Umschalten 
der Messart (differentiell - singl-ended) muss 120µs gewartet werden.

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
Noch kein Account? Hier anmelden.