Forum: Mikrocontroller und Digitale Elektronik Lastwiderstand Solarzelle


von solarzelle (Gast)


Lesenswert?

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

von Timo80 (Gast)


Lesenswert?

ich würde sie kurzschließen und den Strom messen.

von solarzelle (Gast)


Lesenswert?

Timo80 schrieb:
> ich würde sie kurzschließen und den Strom messen.
>
warum und was sehe ich dadurch?

von Floh (Gast)


Lesenswert?

Der Strom einer Solarzelle ist direkt proportional von der Anzahl 
einfallender (aureichend energetischer) Photonen.

von Helmut S. (helmuts)


Lesenswert?

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.

von solarzelle (Gast)


Lesenswert?

..was sagt mir das nun alles?

von holger (Gast)


Lesenswert?

>..was sagt mir das nun alles?

Du misst falsch.

von solarzelle (Gast)


Lesenswert?

...ä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

von Timo80 (Gast)


Lesenswert?

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.

von arno (Gast)


Lesenswert?

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

von arno (Gast)


Lesenswert?

Bei max Sonne messen und Wiederstand eventuel aufrunden

von Wolfgang (Gast)


Lesenswert?

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.

von MaWin (Gast)


Lesenswert?

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

von Uwe B. (boerge) Benutzerseite


Lesenswert?

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

von M. B. (Firma: TH Nürnberg) (ohmen)


Lesenswert?

Nimm eine (grüne) LED an einem ADC, die erzeugte Spannung langt für die 
Abstufung locker aus und Du brauchst keinerlei Zusatzschaltung...

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Uwe B. (boerge) Benutzerseite


Lesenswert?

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

von Anon Y. (avion23)


Lesenswert?

Vielleicht hilft dir schon ein Spannungsteiler.
Was ist die Versorgungsspannung deines AVRs?
Was ist A_ref?

von Uwe B. (boerge) Benutzerseite


Lesenswert?

Anon Ymous schrieb:
> Was ist die Versorgungsspannung deines AVRs?
> Was ist A_ref?

beides 5V

von nemon (Gast)


Lesenswert?

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.

von Achim M. (minifloat)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Werner (Gast)


Lesenswert?

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.

von Uwe B. (boerge) Benutzerseite


Lesenswert?

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

von Uwe B. (boerge) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.