Forum: Mikrocontroller und Digitale Elektronik Problem mit Genauigkeit des ADC


von Bri (Gast)


Angehängte Dateien:

Lesenswert?

Ich baue grad einen Solarladeregler, der einen Bleiakku über eine 
Solarzelle läd und wenn es dunkel ist einen LED Strahler einschaltet. 
Der Mikrocontroller überwacht die Akkuspannung und misst über einen 
Fotowiderstand die Helligkeit. Der Schwellwert für das Ein- und 
Ausschalten der LED Strahler wird über ein Poti eingestellt. (siehe 
Anhang) Zusätzlich soll noch der Strom gemessen werden, der von der 
Solarzelle geliefert wird. Für das Einlesen der Werte per ADC habe ich 
den "noise canceler" Modus genommen. D.h. ich schalte vor der Messung 
die Timer ab und den MCU in den sleep mode, so dass er eine ungestörte 
Messung machen könnte. Soweit so gut.

Das Problem ist nun, dass der ADC nur stark schwankende Messwerte 
liefert. Der ADC liefert z.B. Werte von 700 bis 950! Ich mach schon 8 
Messungen und bilde den Mittelwert. Die Frequenz des ADC ist auf 62.5kHz 
per prescalar eingestellt. Vor der eigentlichen Messung wird auch noch 
eine dummy Messung gemacht. Die Spannung des Mikrocontrollers wird 
einmal durch den L200 vorgeregelt (der erzeugt die Ladespannung für den 
Bleiakku) und mit einem 7805 auf 5V stabilisiert. Kann es sein, dass 
diese starken Schwankungen dadurch zu standen kommen, weil ich das 
LC-Glied vor der Referenzspannung für den ADC vergessen habe? Oder liegt 
es daran, dass die Spannungsteiler einen relativ großen Widerstand 
haben? (Der Einganswiderstand des ADC des ATmega 168 ist lt. Handbuch 
100MOhm, sollte doch eigentlich kein Problem sein.)

von Bri (Gast)


Angehängte Dateien:

Lesenswert?

Mikrocontroller

von Bri (Gast)


Angehängte Dateien:

Lesenswert?

Spannungsregelung

von Magnus Müller (Gast)


Lesenswert?

1. AVCC über LC-Glied mit VCC verbinden

2. Poti für Schwellwert zwischen AVCC(!) und GND

3. ADC-Eingänge ggf. über RC-Tiefpass beliefern

4. Versorgungsspannung nah am µC mit 100nF puffern!

5. Welcher der Werte zeigt bei dir diese extremen Schwankungen?

Gruß,
Magnetus

von Chrisi (Gast)


Lesenswert?

Ist nicht der Strom aus der Solarzelle ein Mass für die Helligkeit?

Ich sehe am ATmega88 zu wenige (gar keine) Blockkondensatoren. Es 
scheint auch nicht zwischen AVCC und DVCC unterschieden zu werden. VREF 
ist auch nicht geblockt.

von Gerhard. (Gast)


Lesenswert?

Das Datenblatt sagt uebrigens auch dass die Eingangskanaele eine 
Ausgangsimpedanz von 10KOHM oder weniger haben sollen.

Vielleicht liegt der Hund dort begraben.

Wenn der ADC nicht im Interruptbetrieb laeuft muss man auch aufpassen 
dass der ADC genug Zeit hat die Konvertierungen zu Ende zu fuehren.

von AC-DC (Gast)


Lesenswert?


von Tcf K. (tcfkat)


Lesenswert?

Wohin geht die Leitung "current" aus Plan2 (µC)? Auf "solar_shunt" von 
Plan3? Die Spannung dort ist negativ gegen GND! Kann sein, dass das den 
ADC ins Schleudern bringt...

@Chrisi: Wenn die Solarzelle erst bei Dunkelheit einschalten soll, muss 
es ein LDR sein... die Solarzelle bringt da schon lange nichts mehr.

von Bri (Gast)


Lesenswert?

Danke für die vielen Antworten.

@Magnus Müller
Das der LC-Filter bei AVcc fehlt ist mir zu spät aufgefallen, nun ist 
die Platine leider schon fertig. Ich möchte nur wenn es gar nicht anders 
geht eine neue machen. Es zeigen dummerweise alle Spannugnen, die ich 
über den ADC einlese, sehr große Schwankungen. Ich möchte ja keine 10 
Bit Auflösung, 8 Bit wären in Ordnung. Im Moment sieht es aber eher nach 
3 signifikanten Bits aus.

@Chrisi
Du hast recht. Es könnten ein paar mehr Kondensatoren ran. Ich dachte 
aber, die kann ich mir sparen, weil ich ja keine hoch präzise Messung 
machen möchte.

@Gerhard
Das mit den 10kOhm hatte ich auch noch irgendwie im Hinterkopf. Beim 
ATmega 168 habe ich unter electrical characteristics nur die 100MOhm für 
R_AIN gefunden. Kannst du mir sagen, wo das im Handbuch steht?

@Tcf Kat
Die negative Spannung wird mit einem OPV negiert und um Faktor 30 
verstärkt. Die Spannung am ADC ist positiv.

von Ingo E. (ogni42)


Lesenswert?

Ohne LC-Entkopplung wird das schwierig. (Abschnitt 22.5.2 im Handbuch 
des Mega168)

Auf jeden Fall brauchst Du die 100nF zwischen GND und Vcc.

10kOhm Impedanz: Abschnitt 22.5.1 im Handbuch des Mega168

von Bri (Gast)


Lesenswert?

Ich hab grad nochmal etwas ausprobiert. Ich hab das eine Poti ganz auf 
Anschlag gedreht, also liegen jetzt 5V sehr niederohmig am ADC an. Damit 
ist die Fehlerquelle mit der hohen Impedanz erstmal ausgeschlossen. Die 
Messwerte schwanken zwischen 910!!! und 1023. Demnach ist der ADC ohne 
den LC-Filter überhaupt nicht zu gebrauchen, oder? Kann ich sicher sein, 
dass mit dem LC-Filter vernünftige Werte rauskommen oder muss ich 
unbedingt noch digital und analog ground trennen?

von Magnus Müller (Gast)


Lesenswert?

Na ja, wer weiss wie dein Layout aussieht... Kannst es ja gerne mal 
posten.

Wie bereits gesagt:

- keramische Cs (100nF) nahe an die Versorgungspins
- AREF mit Kondensator stabilisieren (danke Chrisi)
- Analogeingänge mit RC-Glied filtern
- AVCC mittels LC-Glied von VCC trennen

von Otto (Gast)


Lesenswert?

Hallo bri,

versuche es mal mit der internen Referenz...

Otto

von Magnus Müller (Gast)


Lesenswert?

> versuche es mal mit der internen Referenz...

Ui... sehe ich jetzt erst... der hat ja AREF auch direkt an VCC 
hängen... auch die Analogeingänge hat er bereits von haus aus mit Cs 
entkoppelt...

Interne Referenz wäre natürlich nicht verkehrt. Dann aber unbedingt den 
AREF-Pin von VCC trennen und mit besagtem C stabilisieren!

Ausserdem muss er dann ggf. die zugeführten Analogpegel anpassen, da 
eingeschränkter Eingangsspannungsbereich.

von Bri (Gast)


Lesenswert?

Ok, nach einer kleinen Bastel Viertelstunde mit dem Teppichmesser und 
dem Lötkolben, habe ich nun ARef und AVcc über ein LC-Glied (100uH und 
100nF) an +5V gehangen. Es ist schon viel viel besser geworden. Dass die 
Eingänge ziemlich hochohmig mit den Spannungsteilern beschaltet sind, 
scheint nicht viel auszumachen. Also das LC-Filter muss offenbar 
unbedingt ran, wenn man etwas sinnvolles messen will. Die Genauigkeit 
reicht jetzt aus, denk ich. Den Rest kann ich noch mit einem z.B. 
Medianfilter glätten. (Rechenzeit spielt keine Rolle.)

Danke für eure Hilfe.

von Seth (Gast)


Lesenswert?

Medianfilter - eher nicht,

von Bri (Gast)


Lesenswert?

Doch, ein Medianfilter. Der filtert Ausreißer raus. Ist schon fertig 
programmiert und funktioniert gut.

von Johannes M. (johnny-m)


Lesenswert?

Bri wrote:
> Ok, nach einer kleinen Bastel Viertelstunde mit dem Teppichmesser und
> dem Lötkolben, habe ich nun ARef und AVcc über ein LC-Glied (100uH und
> 100nF) an +5V gehangen.
NEIN! AREF ist nur mit einem Kondensator nach Masse zu beschalten. Sonst 
nichts! Die Verbindung nach AVCC geschieht intern.

von Bri (Gast)


Lesenswert?

Im Handbuch auf Seite 255 steht, dass ARef intern mit AVcc verbunden 
werden KANN. Da die Platine schon fertig ist und ARef und AVcc verbunden 
sind, habe ich das so gelassen und auf externe ARef geschalten. Bringt 
es Vorteile bei der Genauigkeit, wenn ARef intern statt extern mit AVcc 
verbunden ist? Wenn ja, um wieviel Bits oder Prozent erhöht sich die 
Genauigkeit?

von Johannes M. (johnny-m)


Lesenswert?

Auf die Genauigkeit an sich hat es vermutlich direkt keine Auswirkung, 
jedoch kann es zu unerwünschten Effekten kommen, wenn man "versehetlich" 
intern eine andere Quelle auswählt, als das, was außen anliegt. Deshalb 
sollte der Pin nur dann mit etwas anderem als einem C gegen Masse 
beschaltet werden, wenn man wirklich eine externe Referenzspannung 
benötigt, die nicht intern verfügbar ist. Dient der Vermeidung von 
ungewollten Kurzschlüssen. Außerdem ist so sichergestellt, dass die 
Referenzspannung direkt am Chip entkoppelt wird.

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.