Hallo zusammen, ich habe eine Solarzelle (aus einer alten LED-Gartenleuchte) direkt an den ADC-Eingang eines ATtiny25 angeschlossen, um für meine Wetteraufzeichnung das Tageslicht qualitativ zu messen. Dabei beobachte ich, dass nach einiger Zeit (mehrere Stunden/Tage) die ermittelten Werte plötzlich unsinnig werden (entweder das Maximum von Aref überschreiten oder sich irgendwo in der Mitte einpendeln). Da ich (erst mal) ein Fehler in meinem Programm ausschliesse (sind ja auch nur ein paar Codezeilen), vermute ich ein schaltungstechnisches Problem. Frage: muss noch ein Lastwiderstand in die Schaltung rein und wenn ja in welcher Dimension (bei starker Sonneneinstrahlung messe ich Werte von ca. 4,5V)? Grüße & Danke
Timo80 schrieb: > ich würde sie kurzschließen und den Strom messen. > warum und was sehe ich dadurch?
Der Strom einer Solarzelle ist direkt proportional von der Anzahl einfallender (aureichend energetischer) Photonen.
Der Kurzschlussstrom ist genau proportional zum einfallenden Licht und das über viel Zehnerpotenzen der Intensität der Sonneneinstrahlung. Alle anderen Methoden wie Spannungsmessung sind dagegen unbrauchbar.
...ähmm, nach kurzem Überlegen ahne ich was ihr meint... Wie muss die Schaltung dazu aussehen? (Bin nicht der Elektroniker, sondern mehr der Softwareentwickler...;-)) Grüße & Danke
Am einfachsten wäre es, Du nimmst einfach einen Lastwiderstand, so dass die Spannung recht klein wird. Also max. 0.1V. Und dann schaltest Du einen OPV als Verstärker danach. Bei Verstärkung 50 kommst Du dann wieder auf die 0.. 5V.
oder du wählst den Wiederstand passend wenn du messen willst Multimeter -> Kurzschlußstrom -> R=U/I sollte dich dem nahe bringen (Messbereich des Multimeter muss natürlich passen) oder falls dir Licht ja oder nein reicht einfach nur einen hohen Wiederstand
Timo80 schrieb: > Am einfachsten wäre es, Du nimmst einfach einen Lastwiderstand, so dass > die Spannung recht klein wird. Also max. 0.1V. Und dann schaltest Du > einen OPV als Verstärker danach. Bei Verstärkung 50 kommst Du dann > wieder auf die 0.. 5V. Falls die Zelle nicht zuviel Strom liefert, gibt es nichts einfacheres als einen richtigen Transimpedanzverstärker. Im Forum gibt's genug Beispiel. Bei der Schaltung mit dem Lastwiderstand ist man immer auf die Nachverstärkung angewiesen und die Zelle arbeitet trotzdem nicht mehr im Kurzschlußbetrieb.
> ich habe eine Solarzelle (aus einer alten LED-Gartenleuchte) direkt an > den ADC-Eingang eines ATtiny25 angeschlossen, um für meine > Wetteraufzeichnung das Tageslicht qualitativ zu messen. Welche Qualität willst du da messen ? Die Spannung einer Solarzelle sagt mehr über die Temperatur der Solarzelle aus, als über den Lichteinfall. Dummerweise geht Sonnenlicht von 0.0001 lux (Neumondnacht) bis 100000 lux (pralle Sommersonne), und wenn du das in eine Spannung von maximal umwandelst, bekommst du ein Messproblem mit den 0,000000005V die kein A/D-Wandler auflösen kann. Du musst dir also erst mal über den Messbereich und die gewünschten Ergebnisse einen Kopf machen. Vielleicht hilft bei der Lösung ein TSL230.
MaWin schrieb: > Welche Qualität willst du da messen? > halt die Qualität, nicht die Quantität. Deshalb habe ich (da war ich noch Gast...;-)) es explizit so in diesem Satz geschrieben... Mir reicht die Aussage: Nacht, dicke Wolken, bewölkt, leicht bewölkt, keine Wolken. Die Ergebnisse, die ich bisher mit der Solarzelle erreiche, wenn sie denn mal in meiner Schaltung funktioniert, sind schon mal gar nicht so schlecht und für meinen Zweck vollkommen ausreichend. Dein Vorschlag mit dem TSL230 ist zwar bestimmt nicht schlecht, aber über das Ziel hinausgeschossen, da die Geschichte auch ein "Abfallprodukt" bei ein paar Experimenten mit I2C an einem Linux-PC ist... (Der ATtiny25, dessen ADCs verwendet werden, arbeitet als I2C-Slave --> http://bralug.de/wiki/BLIT2008-Board_ADC) Ich werde mir mal die anderen Vorschläge durch den Kopf gehen lassen. Wenn jemand noch einen Vorschlag hat, immer her damit. Grüße & Danke Uwe
Nimm eine (grüne) LED an einem ADC, die erzeugte Spannung langt für die Abstufung locker aus und Du brauchst keinerlei Zusatzschaltung...
solarzelle schrieb: > Dabei beobachte ich, dass nach einiger Zeit (mehrere Stunden/Tage) die > ermittelten Werte plötzlich unsinnig werden (entweder das Maximum von > Aref überschreiten oder sich irgendwo in der Mitte einpendeln). Beschreibe mal genauer, warum du die Ergebnisses als unsinnig empfin- dest. Dass Aref überschritten wird, könnte ja auch daran liegen, dass die Sonne zu hell und die Spannung der Solarzelle zu hoch war. Dass sich der Wert irgendwo in der Mitte einpendelt, könnte ja bedeuten, dass die Sonne nur mäßig hell gescheint hat. Hast du mal gemessen, welche Spannung die Solarzelle bei maximaler Son- neneinstrahlung liefert? Vielleicht war das schon zu viel für den Mikro- controller, so dass er beschädigt wurde oder zumindest vorübergehend in einen undefinierten Zustand geraten ist. Auch wenn deine Methode, direkt die Spannung an der Solarzelle zu mes- sen, ungenau und temperaturabhängig ist, hat sie einen entscheidenden Vorteil: Sie hat selbst mit dem lausigen ADC des ATtiny einen Messbe- reich von vielen Größenordnungen, da die Solarzelle bei dieser Beschal- tung ihren Logarithmierer schon mitbringt. Da im Gegensatz dazu die Strommessung an der Solarzelle linear ist, kannst du mit dem 10-Bit-ADC maximal 3 Großenordnungen abzüglich Messrauschen abdecken, was u.U. zu wenig ist. Evtl. kannst du mit einer zusätzlichen Temperaturmessung und etwas Software den Temperaturfehler wenigstens teilweise kompensieren. Für ein "qualitative" sollte das reichen.
Yalu X. schrieb: > Beschreibe mal genauer, warum du die Ergebnisses als unsinnig empfin- > dest. > Deshalb: http://bergeruw.dyndns.org/~bergeruw/temp/adc_plot.png bis 19.05. 01:30 Uhr war alles schick. 21:00 Uhr habe ich den Tiny kurz stromlos geschaltet. (jetzt fällt gerade etwas Licht meiner Schreibtischlampe auf die Zelle.) Uwe
Vielleicht hilft dir schon ein Spannungsteiler. Was ist die Versorgungsspannung deines AVRs? Was ist A_ref?
Logarithmier doch das verstärkte Signal. Dann kannst du deinen ADC über einen sehr viel größeren Intensitätsbereich verwenden und mit deinen 10Bit nicht nur 3, sondern z.B. 6 Dekaden abdecken. Bei der bisherigen linearen Version wirst du 100% eh nicht erzielen können, da dein Shunt zu hohe Intensitäten nicht an den ADC-Eingang durchlassen darf. Zwischen 10 und bis zu deinem Maximum von 50% wirst du alles als "sehr hell" empfinden. Abstufungen, die du wahrnehmen kannst / die für dich wichtig sind, gehen dann nur noch von 0..10% und selbst da empfindet dein Auge die Intensität viel eher in einer logarithmischen Skala.
nemon schrieb: > Logarithmier doch das verstärkte Signal. Das Signal = gelieferter Strom der Solarzelle. 1. Gedanke: Da könnte man doch eine Diode hernehmen. Der Strom durch eine Diode gehorcht im positiven Bereich einer e-Funktion, die von der Spannung über der Diode abhängig ist. Also ist die Spannung eine Logarithmusfunktion des eingeprägte Stroms. 2. Gedanke: Da könnte man doch die in der Solarzelle enthaltene Diode diesen Job übernehmen lassen. Eine Solar-Einzelzelle entspricht in einem einfachen Ersatzschaltbild einer Stromquelle mit Paralleldiode. 3. Gedanke: Da könnte man doch die Schaltung lassen wie sie ist, vielleicht einen etwas hochohmigeren Spannungsteiler, um den ADC-Eingamg nicht zu überfahren. 4. Dioden haben einen unschönen Nachteil: Temperaturabhängigkeit. Aber die Temperatur der Diode kann man ja messen (DS18B20 oder DS18S20 oder LM35 oder LM335), daraus die Thermospannung berechnen und so den Fehler der Diodengleichung ausgleichen. mfg mf
5. Wenn schon eine Diode als Logarithmierer, dann muß eine zweite dazu die mit dem maximalen Strom durchflossen wird den die Solarzelle bei maximaler interessierender Beleuchtung bringt, und aus dieser AREF gewonnen werden (oder durch mit-messen rechnerisch kompensieren). Damit hätte man die Temperaturabhängigkeit der Diode ausgeglichen. Wenn nun diese zweite Diode einfach eine weitere Solarzelle wäre, müsste man sie in thermischem Kontakt mit der ersten bringen, z.B. auf der Rückseite abkleben, und gegen Sonnenlicht lackieren. TSL235 wäre einfacher.
Uwe Berger schrieb: > Deshalb: > > http://bergeruw.dyndns.org/~bergeruw/temp/adc_plot.png Uwe Berger schrieb: >> Was ist die Versorgungsspannung deines AVRs? >> Was ist A_ref? > > beides 5V Offensichtlich hat die Spannung der Solarzelle die Versorgungsspannung des Controllers tatsächlich erreicht und vermutlich sogar deutlich über- schritten. Das tut dem Controller nicht gut. Abhilfe: Anon Ymous schrieb: > Vielleicht hilft dir schon ein Spannungsteiler. Dazu misst du am besten die Spannung der Solarzelle bei maximaler Son- neneinstrahlung mit dem Voltmeter und dimensionierst den Spannungsteiler entsprechend. Wenn du für den kleineren der beiden Widerstände des Span- nungsteilers etwa 10 kΩ nimmst, ergibt das — zusammen mit den internen Clamping-Dioden des ATtiny — eine Schutzschaltung für den Fall, dass die Sonne irgendwann noch etwas heller als erwartet scheint.
Yalu X. schrieb: > Offensichtlich hat die Spannung der Solarzelle die Versorgungsspannung > des Controllers tatsächlich erreicht und vermutlich sogar deutlich über- > schritten. Das tut dem Controller nicht gut. Auch bei der Spannungsmessung ließen sich böse Dinge, wie Überlastung der Eingangsschutzdioden des µC natürlich verhindern, indem man einen Widerstand zur Strombegrenzung in Serie schaltet. Dann schadet auch eine höhere Spannung nicht. Eine einzelne Solarzelle liefert aber nur 0.5 Volt. Eine Überspannung (> VCC) kann nur auftreten, wenn ein ganzes Modul mit einer Serienschaltung mehrerer Zellen dranhängt.
MoinMoin, derzeit ist das Modul wieder ausgestiegen, habe die Schaltung aber noch nicht modifiziert: http://bergeruw.dyndns.org/~bergeruw/temp/adc_plot.png Das Problem hat diesmal kurz vor 02:00 Uhr angefangen, da war es definitiv dunkel.... Wenn man sich die Werte genau ansieht, scheint der ADC-Wert derzeit zwischen Maximum (wahrscheinlich sogar mehr als 1023), 512 und 768 zu pendeln. Das sind relativ markante Werte, wenn ich mit Informatiker-Augen hinsehe... Neben den messtechnischen Problem, was oben bereits diskutiert wurde, habe ich vielleicht doch ein programmtechnisches Problem? Hier mal der Quelltext des ADC-Moduls: http://bralug.de/wiki-common/images/a/a0/I2c_adc.tar.gz Grüße & Danke Uwe
MoinMoin, ich will noch mal das Thema hoch holen und von meinen gemachten Änderungen berichten und eine Frage stellen... Die Schaltung habe ich bisher noch nicht geändert, vielmehr haben mich die "informatiker-markanten" Werte interessiert, die der Tiny im Fehlerfall ausgespuckt hat. Dazu habe ich mich nun doch mal etwas mhr in Sachen ADC belesen und (endlich mal) die Theorie, die hinter ADCL/ADCH, ADCW etc. steckt möglicherweise verstanden...:-) Nachdem ich die Zeilen:
1 | ADCSRA |= (1<<ADSC); |
2 | while (ADCSRA & (1<<ADSC)); |
3 | adc_val = ADCW; |
4 | ADCSRA=0; |
5 | USI_TWI_Transmit_Byte(adc_val%256); |
6 | USI_TWI_Transmit_Byte(adc_val/256); |
durch:
1 | ADCSRA |= (1<<ADSC); |
2 | while (ADCSRA & (1<<ADSC)); |
3 | ADCSRA=0; |
4 | USI_TWI_Transmit_Byte(ADCL); |
5 | USI_TWI_Transmit_Byte(ADCH); |
ersetzt habe, scheint die Geschichte wieder stabil zu sein (zumindestens in den letzten fast 21h). Sieht so auch schicker aus und spiegelt das besser wider, was ich eigentlich weiter brauche... Und nebenbei werden auch ein paar Bytes im RAM und Flash gespart. Was ich nicht ganz verstehe ist, warum es dies gewesen sein könnte? Der ADC läuft nicht im "Freerunning"-Mode, sondern wird erst wieder mit dem Setzen von ADSC im Programm angestossen. Hat jemand eine Erklärung für mich (falls es das wirklich gewesen sein sollte)? Grüße & Danke Uwe
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.