Forum: Mikrocontroller und Digitale Elektronik LDR am ADC: logarithmieren, Temperatur kompensieren?


von Jörg H. (idc-dragon)


Lesenswert?

Ich baue gerade einen Helligkeitssensor mit uC, für draußen. Die Optik 
habe ich grad fertig, ein diffuser (Halb)Ellipsiod vor dem LDR sammelt 
von vorn wie von der Seite etwa gleich viel Licht ein, bin recht 
zufrieden damit.

Nun geht es an die Analogtechnik vor dem ADC. Ich will möglichst den 
ganzen Dynamikbereich erfassen können, von pralle Sonne bis Mondlicht. 
Der LDR ändert seinen Widerstand enorm, 300 Ohm bis Megaohm, gibt es 
eine passende Schaltung um das zu logarithmieren oder so? Soll im 
hochohmigen Fall auch nicht störanfällig sein. Mit Bereichsumschaltung 
möchte ich ungern arbeiten. So furchtbar genau brauche ich es auch 
nicht, sondern halt nur die gesamte Skala. Ich möchte allerdings schon 
zwischen praller Sonne und leicht bewölkt unterscheiden können.
Ich habe eine Schaltung mit Transistor in OP-Rückkopplung 
gesehen(http://www.elexs.de/messen6.html), weiß aber nicht wie 
praxistauglich sie ist. Vielleicht geht's auch irgendwie primitiv ohne 
OP?

Ferner mache ich mir Gedanken, ob eine Temperaturkompensation nötig ist 
und wie ich sie ausführe. Ginge auch in Software, aber vielleicht fällt 
das in einer trickreichen Schaltung ja bereits ab.

Danke für Tipps!

von 2920 (Gast)


Lesenswert?

Die logarithmische Lichtskala ist was fuer Wissenschaftler. Fuer 
pragmatische Energietechniker ist weniger als 20% eher uninteressant, 
daher ist die lineare Skala vorzuziehen.

von Andreas K. (a-k)


Lesenswert?

Was sehr viel einfacher funktioniert als solche Spannungsmessung oder 
Logarithmierung: Den LDR als frequenzbestimmendes Bauteil an einem NE555 
Oszillator (besser:TLC555) verwenden und mit dem Controller diese 
Frequenz messen (z.B. per Timer Capture). Das funktioniert in sehr 
weitem Bereich, auch wenn man bei 16bit Timer u.U. dynamisch den 
Prescaler umschalten muss (ein 32bit Timer ist hier im Vorteil).

von Jörg H. (idc-dragon)


Lesenswert?

Ja, eine Zeitmessung erscheint vielversprechend, weitere Recherche 
gestern brachte mich auch in die Richtung.

Einen externen Oszillator brauche ich wohl nicht: Mein uC (Atmel Mega8) 
hat einen Komparatoreingang, der auch einen Timer Capture und Interrupt 
auslösen kann. Damit sollte man es recht genau "fangen" können. Bei 
großen Zeiten läuft mir der Timer über, da muß ich extern zählen.

Also den Kondensator zwischen Masse und Komparatoreingang (den kann ich 
auch als Ausgang betreiben und den Kondensator so gezielt aufladen oder 
entladen), den LDR von dort an einen weiteren Ausgang, den ich zur 
Messung auf High oder Low setze.

Im Moment denke ich gerade darüber nach, ob ich eine Art "dual Slope" 
machen könnte, um die Toleranz des Kondensators und der Betriebsspannung 
rauszukürzen.

Das Thema Temperaturkompensation des LDR ist noch offen.

von Jörg H. (idc-dragon)


Lesenswert?

Nachtrag: "dual Slope" ist ja ganz einfach, ich hatte grad ein Brett vor 
dem Kopf: Ich kann ja in einem zweiten Durchgang alternativ zum LDR den 
Kondensator über einen bekannten Widerstand laden und wiederum die Zeit 
messen. Dann brauche ich nur damit normieren, Größe des Kondensators und 
Betriebsspannung fallen raus.

Die einzige Fehlerquelle bleibt jeweils der Innenwiderstand des 
Ausgangstreiber, der addiert sich zum LDR oder Kalibrierwiderstand. Und 
ich hoffe, die Ausgänge sind im tri-state hochohmig genug.

Aber schon ganz nett, was mit mit Software und nur 2 externen Bauteilen 
(hoffentlich) an Genauigkeit hinkriegen kann. Sollte für die Anwendung 
dicke ausreichen.

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.