Ungenaue Spannungs Messung Atmega644

OP #4833418
Lesenswert?

Guten Abend,
Ich habe ein kleines Problem, und zwar möchte ich nebenbei auf mein 
Server noch die Spannungen von denn einzelnen Geräten messen. Dafür habe 
ich mir ein Spannungsteiler gebastelt, der es mir ermöglicht bis zu 20 
VDC am Atmega zu messen.

Als Formel habe ich diese verwendet:
Vout = (R2 / (R1 + R2)) * Vin

Vout = (10K / (30K + 10K)) * 20v

Vout = 5V

Zum Messen nutze ich denn ADC des Atmega644. Der ADC hat ja 1024 Steps(0 
- 1023). Das wäre dann ja 0,00488v je Step die ich an Spannung messe.

Wenn ich also eine Spannung von 12 V anlege dann bekomme ich am ADC eine 
Spannung von 3V

12 Volt / 4 Ratio(Vin / Vout = 4) =  3 Volt am ADC Eingang.

Um dieses wider umzurechnen habe ich die 3 Volt die ja vom ADC kommen 
mal 0,00488 genommen, und dann noch mal denn Ratio genommen:

3v / 0,00488 = 615(ADC Value aufgerundet)

pinVoltage = 615 * 0,00488;
totalVoltage = pinVoltage(3,0012) * Ratio(4);
totalVoltage = 12,0048 Volt.

Wenn man dann nur zwei Stellen nimmt dann kommt da in der Theorie 12.00 
Volt wieder raus.

Wenn ich das aber in der Praxis anwendete bekomme bei 12.02 
Volt(Eingang) ca. 12.27 Volt raus. Also immer mehr.

R2 hat ein gemessen Widerstand von 9.93 Kiloohm(bei 10K).
R1 hat ein gemessen Widerstand von 29.7 Kiloohm(bei 30K).

Als Referenzspannung beim ADC nutze ich Avcc mit 100 nF Kondensator an 
ARef.

Auch wenn ich z.B die Mess Leitung an eine 5V Schiene des TFT Displays 
anklemme. Die Leitung hat ca. 4,11 Volt am TFT. Der Atmega sagt aber es 
wäre 4,57 Volt. Also mehr.

Liegt das daran das die Widerstände nicht exakt 10K und 30K Ohm haben?.

Mfg jan.
Gast #4833426
Lesenswert?

#4833522
Lesenswert?

benutze lieber eine interne Referenz, die ist dann wenigstens von VCC 
unabhängig und einemal ausgemessen auch stabil als Ref abzuspeichern.

Ich mache das immer so, Referenz intern wählen, Spannungsteiler 
berechnen und an 2 Messpunkten mit Labornetzteil einstellen und DVM 
messen und ADC ausgeben an 2 Punkten habe ich eine Geradengleichung mit 
Steigung m = dY/dX und den Offset +b

Damit kann ich aus jedem ADC Wert rel. genau die Spannung rechnen.

Wer es noch genauer will macht mehrere Bereiche oder maximal eine 
Tabelle aus 0-1023 ADC Werten zu gemessener Spannung.
#4833539
Lesenswert?

Jan N. schrieb:
> Liegt das daran das die Widerstände nicht exakt 10K und 30K Ohm haben?.

Hats Du mal mit den gemessen Werten für die Widertände nachgerechnet?

Außerdem ist der ADC bei Atmegas vergleichsweise niederohmig (~15kOhm 
IIRC) und belastet deinen Spannungsteiler. Ich würde dem auf jeden 
Fall mal 100nF parallel zum ADC Eingang spendieren.
Gast #4833553
Lesenswert?

Jan ,

hat schon abgeschaltet. Ich setze meisten noch einen sot23 Puffer OPV 
mit Zero Offset vor den ADC Eingang.
Damit wird die Spannungsquelle so gut wie nicht belastet.

Dann noch eine Referenzspannungsquelle, je nach Aufgabenstellung und
wenn man noch 4-8 Messungen nacheinander macht, dann "steht" auch der 
Messwert.

Ein 2 Punkt Abgleich muss man noch machen, wie schon geschrieben, evtl. 
auch mit mehr als 2 Messpunkten.
#4833596
Lesenswert?

Jan N. schrieb:
> Liegt das daran das die Widerstände nicht exakt 10K und 30K Ohm haben?
Eher daran dass die Vref nicht bei dem idealen Wert liegt.


Wo hast du die Referenzspannung von 1.1V/2.56V mit einbezogen?
Wie hoch ist deine Referenzspannung eigentlich?

Bei meinem letzten ATmega644 lag sie bei 1,114V.

Du solltest direkt an den ADC-Pin einen 10nF bis 100nF Kondensator 
setzen, damit dort einen Tiefpass entsteht und sich der 
Sample&Hold-Kondensator immer direkt aus dieser Quelle bedienen kann.

Die Rechnung ist eigentlich ganz einfach.

(Spannungsteilerverhältnis x Referenzspannung x ADC-Wert) / Max-ADC-Wert

also:
4 x 1100mV x (615/1024) = 2642mV
oder
4 x 2560mV x (615/1024) = 6150mV

Die Referenzspannung ist zwar extrem stabil und ganz toll, allerdings 
nicht sehr genau. So können die "2,56V" auch mal bei 2,79V oder 2,33V 
liegen, daher musst du die auch ein mal kallibrieren und den ermittelten 
Wert im AVR abspeichern. (der Wert ändert sich ja dann nicht mehr, wenn 
er ein mal auf 2,49V ĺiegt, dann bleibt das auch so)
(Firma: matzetronics) #4833919
Lesenswert?

Mike J. schrieb:
> Wo hast du die Referenzspannung von 1.1V/2.56V mit einbezogen?
> Wie hoch ist deine Referenzspannung eigentlich?

Jan N. schrieb:
> Als Referenzspannung beim ADC nutze ich Avcc mit 100 nF Kondensator an
> ARef.

Deswegen schrieb ich

Matthias S. schrieb:
> muss dann auch VCC sehr genau bei 5V liegen, sonst
> stimmen deine Rechnungen nicht.
#4834557
Lesenswert?

Matthias S. schrieb:
> Deswegen schrieb ich
... dann war mein Text da oben unnütz.

Er sollte es aber so machen wie im Datenblatt des AVR beschrieben, also 
einen Tiefpass 2. Ordnung aufbauen um Avcc vor HF-Störungen aus dem 
Digitalteil zu schützen.

Ich nehme immer 10µH und 100nF+4,7µF+4,7µF.
fg = 1/(2*pi*sqrt(0,00001*0,0000095)) = 16,3kHz

10µH + 100nF sind im Datenblatt als empfohlener Wert angegeben.
fg = 160kHz
#4834657
Lesenswert?

Joachim B. schrieb:
> warum FG bei 16kHz

Ich gehe einfach davon aus dass die interne Referenzspannungsquelle dazu 
fähig ist diese recht niedrigen Frequenzen raus zu filtern.

Joachim B. schrieb:
> also ein PI Filter?
Eigentlich nur einen einfachen LC-Filter der die HF von der Vcc in 
Richtung Vref dämpfen soll, aber auf der anderen Seite der Spule gibt es 
natürlich auch Kondensatoren (Kerkos+Elkos).

Joachim B. schrieb:
> ich würde bei L und C großzügiger sein

Ich mach das alles in SMD und von den 10µH Spulen habe ich günstig eine 
ganze Rolle bekommen.
Von den 4.7µF Kerkos habe ich auch noch ein paar Rollen und könnte die 
Platinen damit zupflastern, aber der Platz ist dann doch limitiert.
#4834956
Lesenswert?

Mike J. schrieb:
> Ich gehe einfach davon aus dass die interne Referenzspannungsquelle dazu
> fähig ist diese recht niedrigen Frequenzen raus zu filtern.

der erste gemachte Fehler ist stets eine falsche Annahme, aber ich 
akzeptiere das mal so.

Mike J. schrieb:
> Ich mach das alles in SMD und von den 10µH Spulen habe ich günstig eine
> ganze Rolle bekommen.
> Von den 4.7µF Kerkos habe ich auch noch ein paar Rollen

das ist ein nachvollziehbares Argument, aber wer eh kaufen muss und 
Platz hat könnte ja auf niedrigere FG gehen.
#4835311
Lesenswert?

Jan N. schrieb:
> Liegt das daran das die Widerstände nicht exakt 10K und 30K Ohm haben?

Hier musst du einfach nur mal Nachrechnen:

Du hast also deinen Spannungsteiler:

Zu R1 liegt aber noch der Widerstand des ADCs parallel

Deine Referenzspannung sei Vcc, die Auflösung bestimmt sich dann zu

Und jetzt rechnen wir uns die Counts mal aus:

Ideal angenommen strebt der Innenwiderstand des ADC gegen Unendlich, Vcc 
ist konstant auf 5 V, R1 bei 10 kΩ und R2 bei 30 kΩ. Dann erhält man bei 
12.02 V am Eingang 615,4... Counts, mit Runden durch Abschneiden also 
615 Count müsste der Atemega auf 12.01 V kommen.
Jetzt lassen wir erstmal Vcc um 1 V sinken, außerdem nehmen wir an, dass 
wir Vcc fest einprogrammiert haben, der Atmega also gar nicht merkt, 
dass Vcc nicht mehr 5 V sondern nur noch 4 Volt sind.
Jetzt bekommen wir 769 Counts, der Atmega glaubt, dass die Spannung nun 
15,02 V beträgt (obwohl wir immer noch 12,02 V am Eingang haben). Das 
muss man also offenbar auf jeden Fall abfangen, der Fehler ist riesig.
Gleiches Spiel, nur statt Vcc setzten wir nun die richtigen Werte für 
die Widerstände ein. Wir erhalten so 616 Counts und der Atmega misst 
12,03 V. Ist ja praktisch nicht erwähnenswert, kann man natürlich 
dennoch berücksichtigen.
Nun berücksichtigen wir noch den internen Widerstand des ADC-Eingangs, 
wir nehmen ihn mal zu 50 kΩ an. Hier kommen nun statt 615 Counts nur 535 
Counts heraus, die gemessene Spannung beträgt 10,45 V. Das sollte man 
auch abfangen, am besten durch einen Puffer-OPV, man kanns aber auch 
rechnerisch auffangen.

Betrachten wir uns also diese drei Fehlerfälle ist am 
wahrscheinlichsten, dass dein Vcc falsch ist. Du hast wahrscheinlich 
nicht 5 V als Vcc sondern nur 4,9 V, gff. in Kombination mit dem 
Innenwiderstand des ADCs. Noch nicht betrachtet wurden hier Offsetfehler 
des ADCs sowie dessen Linearität, die beide ebenfalls für signifikante 
Abweichungen sorgen können.

Jan N. schrieb:
> Als Referenzspannung beim ADC nutze ich Avcc mit 100 nF Kondensator an
> ARef.

Das ist übrigens ein Fehler. An ARef gehört nur ein Kondensator gegen 
GND und, falls vorhanden, eine externe Referenzspannungsquelle. AVcc und 
auch Vcc gehören nicht an den ARef-Pin, die haben da nichts zu suchen.

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