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.
Hallo, zum einen der Innenwiderstand deiner Spannungsquelle, dazu steht etwas im Datenblatt. Dann gibt es eine Menge von AP bei Atmel; hier sind einige verlinkt: http://www.atmel.com/Images/Atmel-2559-Characterization-and-Calibration-of-the-ADC-on-an-AVR_ApplicationNote_AVR120.pdf http://www.atmel.com/images/doc8003.pdf http://www.atmel.com/images/atmel-8456-8-and-32-bit-avr-microcontrollers-avr127-understanding-adc-parameters_application-note.pdf
Jan N. schrieb: > Als Referenzspannung beim ADC nutze ich Avcc mit 100 nF Kondensator an > ARef. Zusätzlich zu den Fehlern durch die o.a. Innenwiderstände der Spannungsteiler muss dann auch VCC sehr genau bei 5V liegen, sonst stimmen deine Rechnungen nicht.
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.
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.
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.
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)
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.
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
Mike J. schrieb: > Ich nehme immer 10µH und 100nF+4,7µF+4,7µF. > fg = 1/(2*pi*sqrt(0,00001*0,0000095)) = 16,3kHz also ein PI Filter? warum FG bei 16kHz? ich würde bei L und C großzügiger sein, wüsste nicht warum 16kHz Impulse noch mit 70,7% f(U/fg) durchkommen sollen?
Joachim B. schrieb: > ich würde bei L und C großzügiger sein, wüsste nicht warum 16kHz Impulse > noch mit 70,7% f(U/fg) durchkommen sollen? Ich nehme meistens 100µH, aber hauptsächlich deswegen, weil ich die als Schüttgut in rauen Mengen habe. Damit sinkt die Grenzfrequenz dann nochmal deutlich ab und der ADC dankts einem.
Matthias S. schrieb: > Ich nehme meistens 100µH, aber hauptsächlich deswegen, weil ich die als > Schüttgut in rauen Mengen habe. Damit sinkt die Grenzfrequenz ja ist klar, da bin ich voll bei dir, fg sollte so tief wie möglich sein, optimal bei 0 Hz Die Frage ging ja an: Mike J. schrieb:
:
Bearbeitet durch User
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.
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.
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.
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.