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.)
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
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.
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.
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.
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.
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
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?
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
> 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.
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.
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.
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?
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.