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.
ad-wandler richtig angeschlossen http://bascom-forum.de/index.php?PHPSESSID=90219c7bc51e18ca24c5255f09a31546&topic=11.msg13#msg13
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.
Doch, ein Medianfilter. Der filtert Ausreißer raus. Ist schon fertig programmiert und funktioniert gut.
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.
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.