Forum: Mikrocontroller und Digitale Elektronik ADC-Messung optimieren


von cookie (Gast)


Lesenswert?

Ich möchte die Messgenauigkeit des ADCs eines ATmega88a optimieren. Die 
Spannungsversorgung kommt dabei von einem 7805 Regler, ist vermutlich 
nicht so optimal, wenn man möglichst genau messen will, kann ich jetzt 
aber nicht ändern.
Deswegen hatte ich mir gedacht, dass ich als AREF die internen 1.1V 
nehme, die ja recht stabil sein soll. Zusätzlich wird im Datenblatt ein 
Kondensator von Aref an GND empfohlen. Es wird keine Kapazität genannt, 
100nF sind OK oder?
Zur Stabilisierung von AVCC wird ja ein Schwingkreis mit 100nF an GND 
und 10uH an VCC vorgeschlagen. Habe gerade keine 10uH Induktivität da, 
würde daher, wie es hier im Wiki Artikel zum ADC steht, stattdessen 
47Ohm nehmen.

Bin ich auf dem richtigen Weg? Mit zusätzlich gemittelten Messwerten und 
Festkommaarithmetik hätte ich gerne den absoluten maximalen Messfehler 
auf <=10mV beschränkt. (Input ist <=12.6V, natürlich per Spannungsteiler 
auf 1.1V skaliert) Ist das so realisisch?

von Karl H. (kbuchegg)


Lesenswert?

cookie schrieb:
> Ich möchte die Messgenauigkeit des ADCs eines ATmega88a optimieren. Die
> Spannungsversorgung kommt dabei von einem 7805 Regler, ist vermutlich
> nicht so optimal, wenn man möglichst genau messen will, kann ich jetzt
> aber nicht ändern.
> Deswegen hatte ich mir gedacht, dass ich als AREF die internen 1.1V
> nehme, die ja recht stabil sein soll.

Stabil schon. Aber nicht sehr genau.
Das heißt im Klartext: die interne Referenzspannung ändert zwar über 
weite Bereiche ihren Wert nicht (der 'steht' wie eine 1), aber dieser 
Wert ist nicht exakt 1.1V
Um ein Ausmessen des Wertes, der für dein Exemplar gilt, wirst du also 
nicht herum kommen.

> Zusätzlich wird im Datenblatt ein
> Kondensator von Aref an GND empfohlen. Es wird keine Kapazität genannt,
> 100nF sind OK oder?

sind fürs erste ok.

> Bin ich auf dem richtigen Weg? Mit zusätzlich gemittelten Messwerten und
> Festkommaarithmetik hätte ich gerne den absoluten maximalen Messfehler
> auf <=10mV beschränkt. (Input ist <=12.6V, natürlich per Spannungsteiler
> auf 1.1V skaliert) Ist das so realisisch?

Ist realistisch.
Du nimmst eine bekannten Messwert her, den du mit anderen Mitteln 
ermittelt hast, lässt deine Aufbau den von ihm ermittelten Messwert 
ermitteln und kriegst dann einen Korrekturfaktor, in dem alle anderen 
Faktoren enthalten sind. Denn die Widerstände in deinem Spannungsteiler 
haben ja auch nicht exakt die Werte, die aufgedruckt sind.

von Ulrich H. (lurchi)


Lesenswert?

Ohne extra Abgleich kriegt man den Absoluten Fehler kaum so klein. 
Selbst unter guten Bedingungen (externe 4 V ref.) sind 2 LSB als Fehler 
angegeben. Oversampling kann gegen Rauschen helfen und den 
Quatisierungsfehler reduzieren, gegen Nichlinearitäten hilft es aber nur 
sehr begrenzt, und gegen einen Offset oder Gain Fehler gar nicht.

47 Ohm statt der Induktivität sind schon recht viel. Wenn sonst keine 
Last an Port A hängt kann es aber noch gehen.

von Amateur (Gast)


Lesenswert?

Pass' bitte bei der Dimensionierung des Spannungsteilers auf. Ich stehe 
da ja mehr auf Spannungsteiler + OP.

Allzu hochohmig sind die eingebauten Wandler nämlich nicht. Steht aber 
im Datenblatt.

Einen beliebigen Querstrom wirst Du ja wohl kaum einstellen können - 
sonst bekommst Du Ärger mit Heinz dem Heizer.

von Thomas E. (thomase)


Lesenswert?

cookie schrieb:
> Bin ich auf dem richtigen Weg? Mit zusätzlich gemittelten Messwerten und
> Festkommaarithmetik hätte ich gerne den absoluten maximalen Messfehler
> auf <=10mV beschränkt. (Input ist <=12.6V, natürlich per Spannungsteiler
> auf 1.1V skaliert) Ist das so realisisch?

<=10mV?
Bei Umax von 12,6V hast du mit einem 10-Bit-Wandler eine Auflösung von 
12,6V/1023 = 12,3mV. Das liegt schon über deiner geforderten 
Genauigkeit. Denn der Wert, den der ADC liefert, bedeutet immer kleiner 
als der folgende oder größer als der letzte.

Soll der gesamte Bereich zwischen 0 und 12,6V erfasst werden oder gibt 
es einen "interessanten Bereich" zwischen z.B. 11V und 12,6V? Mit einem 
einfachen Spannungsteiler misst du immer zwischen 0 und Umax.

mfg.

von cookie (Gast)


Lesenswert?

Danke für die zahlreichen Antworten!

Karl Heinz schrieb:
> Um ein Ausmessen des Wertes, der für dein Exemplar gilt, wirst du also
> nicht herum kommen.

OK, ist ja kein großes Problem. Wenn ich das Datasheet und VBg als 
interne Referenz richtig interpretiere variiert es zw. 1.0V und 1.2V...

Ulrich H. schrieb:
> Ohne extra Abgleich kriegt man den Absoluten Fehler kaum so klein.
> Selbst unter guten Bedingungen (externe 4 V ref.) sind 2 LSB als Fehler
> angegeben. Oversampling kann gegen Rauschen helfen und den
> Quatisierungsfehler reduzieren, gegen Nichlinearitäten hilft es aber nur
> sehr begrenzt, und gegen einen Offset oder Gain Fehler gar nicht.

Werde es erstmal so probieren, falls ich nicht zufrieden bin werde ich 
mir mal den Code von Bernd N. anschauen, und damit vlt. den Offset/Gain 
Fehler noch zu reduzieren. Beitrag "ADC und Fixed-Point Arithmetik"
Noch eine Frage zu der LSB - Angabe im Datenblatt: Da steht immer etwas 
von ADC-clock, das ist wohl die Frequenz in der man MessWerte abfrägt?

Thomas Eckmann schrieb:
> <=10mV?
> Bei Umax von 12,6V hast du mit einem 10-Bit-Wandler eine Auflösung von
> 12,6V/1023 = 12,3mV. Das liegt schon über deiner geforderten
> Genauigkeit. Denn der Wert, den der ADC liefert, bedeutet immer kleiner
> als der folgende oder größer als der letzte.

Diese 12.3mV habe ich mir auch ausgerechnet, hatte gehofft mit der 
Programmierung (Mittelwerte usw.) noch ein wenig genauer zu werden, hab 
da aber auch meine Zweifel.

Thomas Eckmann schrieb:
> Soll der gesamte Bereich zwischen 0 und 12,6V erfasst werden oder gibt
> es einen "interessanten Bereich" zwischen z.B. 11V und 12,6V? Mit einem
> einfachen Spannungsteiler misst du immer zwischen 0 und Umax.

Wie könnte man das dann für so einen "interessanten Bereich" besser 
realisieren?

von Thomas E. (thomase)


Lesenswert?

cookie schrieb:
> Wie könnte man das dann für so einen "interessanten Bereich" besser
> realisieren?
Mit einem Differenzverstärker. Ein Eingang kommt auf Umin, der andere an 
Umess. Der Ausgang liefert dann (Umess - Umin) * Gain. Wenn du Gain 
nicht auf 1000 setzt, sondern z.B. auf 2, dann bekommst du, um bei 
meinem obigen Beispiel zu bleiben, bei Umess = 11,7V am Ausgang 1,4V.
Beispielschaltungen für Differenzverstärker findest du unter "Typical 
Applications" in vielen OpAmp-Datenblättern.

mfg.

: Bearbeitet durch User
von Ulrich H. (lurchi)


Lesenswert?

Die Angaben im Datenblatt sind für 200 kHz ADC Takt. Das ist der Takt 
mit dem der ADC arbeitet - davon bracht es 13 Zyklen (bzw. 25 beim 
ersten mal). Die Abtastrate liegt dabei also bei rund 15 kHz.

Je nach Quarz kriegt man da auch einen ggf. etwas anderen Takt (Teiler 
:2^N). Die Fehler sollten sich aber nicht wesentlich ändern wenn man im 
Vorgesehenen Bereich (50-200 kHz ADC Takt) bleibt. Drunter und drüber 
wird es wohl schlechter.

Für wirklich 10 mV Genauigkeit reicht der 10 Bit ADC einfach nicht - da 
liegt die Fehlergrenze eher so bei 25 mV oder mehr. 10 mV Auflösung sind 
aber mit Oversampling / mitteln relativ leicht drin.

Für einen Ausgewählten Bereich ginge es ggf. mit einer 
Differenzverstärkerschaltung. Es kann aber gut sein, das ein externer AD 
mit mehr Auflösung (oder ein xmega µC mit 12 Bit ADC) einfacher ist.

Was sollt den überhaupt gemessen 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.