PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Photodiode wie Taster auswerten



Björn
18.08.2008, 12:08
Hallo!

Es geht um die Photodiode BPW 34 (http://www.reichelt.de/?;ACTION=3;LA=2;GROUP=A54;GROUPID=3045;ARTICLE=580 4;START=0;SORT=preis;OFFSET=1000;).
Diese ist in einem schwarzen Rohr montiert (zur Abdunklung) und wird mit einem Laserpointer "beschossen".
Jetzt würde ich die Diode gerne wie einen Taster auswerten können (Bascom), also die Zustände 1 und 0 für Laserbeschuss ja/nein.
Geht das oder ist das z.B. mit einem Schmitt-Trigger möglich?

Grüße, Björn

Björn
18.08.2008, 17:13
Hallo,

ich habe mir mal folgendes gedacht.
Es basiert darauf, dass man an der Photodiode folgende Spannungen messen kann:
Ohne Laser - U = 300mV
Mit Laser - U = 450mV
Deshalb dachte ich bei 400mV die Schaltgrenze zu legen. D.h. ich hätte gerne ab 0,4V die vollen 5V VCC am AVR-Eingang und bei unter 0,4V halt 0V.
Ist die angefügte Schaltung dafür geeignet?

Grüße, Björn

Besserwessi
18.08.2008, 17:51
Eine Photodiode liefert reltiv wenig Strom. Ohne extra Verstärkung wird das relativ langsam, geht aber gerade noch. Am einfachsten so verschalten: Photodiode mit der Kathode (Ring) an den Eingang, mit der Anode an GND. Dazu noch ein Pullup Widerstand passender größe. Mit etwas Glück geht da der interne Pullup im avr.

Mit einem Laserpointer kann man immerhin mit fast 0,1 mW rechen, was gut 0,05 mA entsprechen würde. Für 5 V Spannungs hub sollte der Widerstand dazu 5 V / 0.05 mA = 100 KOhm sein. Wenn es Empfindlicher sein soll, dann halt etwas mehr. Die "Verstärkerschaltung" ist falsch: wenn schon dann + und - Ausgang vertauschen und R2 müßte gerade den Pullup von oben ersetzen, also eher größer. AUßerdem die Photodiode andersherum. Dann sollte man auch einen OP nehmen, der mit Spannunge um GND arbeiten kann (z.B. TLC272, LM358) und keine Komperator.

JonnyP
19.08.2008, 15:56
Nutz mal den Photostrom der Diode aus und betreibe sie in Sperrichtung, also Ub-R-Kathode, Anode an gnd. Den Vorwiderstand musst du aus dem Datenblatt berechnen, über den Daumen so 150k bei 5V. Dann mess mal an der Kathode was du bei Lichtwechsel raus bekommst. Was die Verstärkung betrifft hat Besserwessi schon Hinweise gegeben.

Björn
20.08.2008, 10:40
Irgendwie gefällt mir das ganze so nicht. Ich habe nur 100mV Differenz zwischen draußen-Normallicht-bewölkt (ca. 350mV) und Laser (ca. 450mV). Das heißt wenn ich das ganze im Schnee habe (wo es später eingesetzt werden soll), wird diese Differenz wohl immer kleiner.
Ich suche schon länger nach einer Fotodiode die eher auf den Spektralbereich des Lasers empfindlich ist (ca. 640-660nm), bisher habe ohne Erfolg.

Grüße, Björn

radbruch
20.08.2008, 11:27
Hallo

Ich hoffe, dieser Beitrag ist nicht zu sehr offtopic:

Man kann auch normale LEDs als Fotosensor verwenden. Das funktioniert, weil eine in Sperrichtung geschaltete LED eine von der Beleuchtungsstärke abhängige Kapazität besitzt (~5pF?). Nur mit einem Mikrokontroller und einer LED (ohne zusätzliche Bauteile!) ist die Auswertung, auch in Bascom, sehr einfach:

Die LED wird zwischen Vcc (Kathode) und einem Pin (Anode) angeschlossen. Im normalen Zustand wird der Pin auf Eingang-High geschaltet, die LED liegt dann beidpolig an Vcc. Um die Messung einzuleiten setzt man den Pin kurz auf Ausgang-Low um die LED "aufzuladen", dann schaltet man den Pin auf Eingang (ohne PullUp) und misst die Zeit die vergeht bis die LED über den Pin soweit entladen ist dass am Pin ein High erkannt wird. Diese Zeit ist direkt abhängig von der Beleuchtungsstärke mit der die LED bestrahlt wird.

Hier zwei Beispiele in Bascom:
http://www.b-kainka.de/kosmos/microelec3.htm
http://www.franzis.de/elo-das-magazin/mikrocontroller-und-programmierung/bascom-avr/led-lichtsensor
(weitere Beispiele bei google (http://www.google.de/search?num=20&hl=de&q=led+als+lichtsensor+bascom&meta=))

Möglicherweise beeinflußt die Wellenlänge der LED auch ihre Empfindlichkeit für Lichtquellen unterschiedlicher Wellenlängen. Das habe ich aber noch nicht untersucht. Die Auswertung der zwei eingebauten ACS-IR-LEDs als Lichtsensoren bei meinem RP6 sieht in C so aus:

// LED-Sensor Die ACS-LEDs werden kurz in Sperrichtung "geladen" 4.4.2008 mic
// und dann wird die Entladezeit gemessen. (Anode gegen GND geschaltet)

#include "RP6RobotBaseLib.h"

int main(void)
{
initRobotBase();

// Beide ACS-LEDs allpollig auf 5V legen
DDRB |= ACS_PWRH | ACS_L; // Pins als Ausgang
DDRC |= ACS_R;
DDRD |= ACS_PWR;
PORTB |= (ACS_PWRH | ACS_L); // alle auf 5V
PORTC |= ACS_R;
PORTD |= ACS_PWR;
while(1)
{

DDRD |= ACS_PWR; // Pins als Ausgang
DDRB |= ACS_PWRH;
PORTD &= ~ACS_PWR; // Anoden gegen GND schalten
PORTB &= ~ACS_PWRH;
sleep(10); // Kurz warten und Stopuhren starten
setStopwatch1(0);
setStopwatch2(0);
startStopwatch1();
startStopwatch2();
DDRD &= ~ACS_PWR; // Anoden als Eingang
DDRB &= ~ACS_PWRH;
// Entladung messen
while((!(PIND & ACS_PWR)) || (!(PINB & ACS_PWRH)))
{
if(PIND & ACS_PWR) stopStopwatch1();
if(PINB & ACS_PWRH) stopStopwatch2();
}
stopStopwatch1(); // sicher ist sicher!
stopStopwatch2();
// Debug
writeInteger(getStopwatch1(), 10);
writeString_P(" - ");
writeInteger(getStopwatch2(), 10);
writeString_P("\n\r");
mSleep(300);
}
return(0);
}


Gruß

mic

Besserwessi
20.08.2008, 17:15
Wenn man die Photodiode im fast Leerlauf betreibt, hat man tatsächlich nur 100 mV Spannungshub. Wenn man abermit Spannung in Sperrichtung arbeitet kann man ein sehr viel größeres Signal bekommen. Da sollte sich der Laser gut von der hintergrundhelligkeit unterscheiden. Um nur auf rotes Licht empfindlich zu sein kann man eine Filterfolie oder ein Stück rotes Pelxiglas nehmen, wie man es sonst für rote LED anzeigen nimmt.

Ein Rote LED wäre auch eine Möglichkeit, wobei die genau wie eine normale Photodiode arbeitet, nur nicht mehr auf IR-Licht reagiert. Damit wäre schon mal ein großer Teil des Sonnenlichtes unterdrückt.
Auch bei einer LED sollte man den Strom auswerten. Vielen Schaltungen, die behaupten die Kapazitätsänderung zu messen, reagieren auch mehr auf den Strom.

Björn
20.08.2008, 17:23
Wenn man abermit Spannung in Sperrichtung arbeitet kann man ein sehr viel größeres Signal bekommen. Da sollte sich der Laser gut von der hintergrundhelligkeit unterscheiden.

Meintest du das damit?

Photodiode mit der Kathode (Ring) an den Eingang, mit der Anode an GND. Dazu noch ein Pullup Widerstand passender größe. Mit etwas Glück geht da der interne Pullup im avr.
Da ist die Diode ja auch in Sperrichtung oder nicht?

Grüße, Björn

Besserwessi
20.08.2008, 17:38
Stimmt, da ist die Diode auch in Sperrichtung. Die Methode mit der Zeitmessung wird benutzt um sehr kleine Ströme ohne extra Verstärker zu messen. Der interne Pullup ist dabei sogar unnötig.
Mit einem Laserpointer hat man viel mehr Licht und kann die Photodiode wie sonst einen Phototransistor anschließen. Bei so viel Licht wird die Zeitmessung vermutlich ohne extra Kondensator auch kaum noch funktionieren.

Björn
20.08.2008, 17:49
Stimmt, da ist die Diode auch in Sperrichtung. Die Methode mit der Zeitmessung wird benutzt um sehr kleine Ströme ohne extra Verstärker zu messen. Der interne Pullup ist dabei sogar unnötig.
Mit einem Laserpointer hat man viel mehr Licht und kann die Photodiode wie sonst einen Phototransistor anschließen. Bei so viel Licht wird die Zeitmessung vermutlich ohne extra Kondensator auch kaum noch funktionieren.

Ja, die Zeitmessung wäre vermutlich ja auch relativ zeitintensiv (10ms?). Das wäre eher ungünstig, weil mit den zwei Lichtschranken auch eine Zeitmessung zur Geschwindigkeitsbestimmung durchgeführt werden soll.
Jetzt habe ich gerade Probleme die von euch beschriebenen Varianten zu trennen.
Habe ich das richtig verstanden: Wenn ich die Diode in Sperrichtung, also der Kathode an den AVR-Eingang und der Anode an GND - dazu noch der PullUp gegen VCC - verschalte, dann reicht die Differenz zwischen Normal- und Laserlicht aus um am AVR-Eingang ein Low bei Normallicht und ein High bei Laserlicht anliegen zu lassen?

Oder habe ich da etwas vermischt?

Grüße, Björn

JonnyP
20.08.2008, 20:22
Ja, aber das kannst du doch mal messen, oder?

Besserwessi
20.08.2008, 22:07
Hängt etwas vom laser und der Fotodiode ab, aber die Chancen sind gut, das es mit dem Internen Pullup schon reicht. Wenn nicht, dann müßte man den Pullup etwas anpassen (wohl im Bereich 20 ... 500 K Ohm). Die Eingänge wären aber wohl andersherum: low bei Laserlicht und high ohne.

Björn
20.08.2008, 22:07
Ja, aber das kannst du doch mal messen, oder?
Ja, allerdings weiß ich grad nicht wie ich die Größe des PullUp-Widerstands berechnen muss.

Grüße, Björn

JonnyP
21.08.2008, 06:05
Könnte es sein, das man sich dazu mal das Datenblatt besorgt?

Björn
21.08.2008, 14:08
Könnte es sein, das man sich dazu mal das Datenblatt besorgt?
Entschuldigung, wenn ich nicht weiß wie ich ihn berechne, dann nützen mir die Werte der Diode auch nichts.
Ich fürchte ich kann physikalisch noch nicht ganz nachvollziehen was bei der Photodiode in Sperrrichtung passiert. Ich habe von einer Photodiode immer das Bild, dass eine Spannung entsteht weil die auftreffenden Photonen eine Ladungstrennung erzeugen. Aber das hat hiermit ja nichts zu tun, oder?

Grüße, Björn

Besserwessi
21.08.2008, 18:57
Hier kommt man ausnahmsweise auch ohne Datenblatt aus. Bei den Typischen 650 nm von laserpointern geben normale Photodioden (oder Solarzellen) ca. 0,5 mA Strom je mW optische Leischtung. Wie viel Leistung tatsichlich auf der Fotodioden ankommt wäre eventuell im datenblatt des Lasers zu finden, aber auch da eher nur ein grober ein Schätzwert. Den genauen Wert des Widerstandes wird man also nur ausmessen / Probieren können.
Wenn man mal von 0,1 mW vom Laser aus geht, dann gäbe das etwa 50 µA photostrom. Die obere Schaltschwelle bein AVR liegt bei etwa 3 V. Der Passende Widerstand wäre dann 3 V / 50 µA = 60 K Ohm. Wegen der Unsicherheiten könnten die ca. 40 KOhm des internen Pullups also gerade noch gehen, sonst eher etwas mehr. Gegen zu viel Fremdlich kann man den Einfallsbereich, aus dem Licht akzeptiert wird einschränken (Rohr oder Lochblende). Passende Pandpassfilter sind eher etwas teuer und ein einfacher Rotfilter wird nicht viel bringen, denn der meiste Photostrom kommt aus dem roten und IR Bereich. Normalerweise sollte der Unterschied Laser / Tageslicht aber recht groß sein.

Björn
21.08.2008, 20:05
Gegen zu viel Fremdlich kann man den Einfallsbereich, aus dem Licht akzeptiert wird einschränken (Rohr oder Lochblende).
Ja, die Diode ist in einem Rohr angebracht. Die Messwerte oben beziehen sich ebenfalls auf Messungen im Rohr.

Passende Pandpassfilter sind eher etwas teuer
Ja leider, hab ich auch schon nach geschaut.

und ein einfacher Rotfilter wird nicht viel bringen, denn der meiste Photostrom kommt aus dem roten und IR Bereich.
Achso...

Grüße, Björn

Besserwessi
21.08.2008, 21:23
Die Messwerte oben helfen noch nicht viel. Ein besserer test wäre es einfach da Multimeter im Strombereich (am besten was kleine, ca. 0,2 mA oder 20µA) an die Photodiode zu halten und dann noch mal messen. Wenn keine so kleiner Strombereich am Multimeter vorhanden ist, dann einfach einen Widerstand von ca. 1 Kohm parallel zur Fotodiode und dann die Spannung (200 mV Bereich) messen.
Die meisten einfachen Rotfilter, z.B. für LED anzeigen, lassen auch IR-licht durch.

Björn
21.08.2008, 21:29
Die Messwerte oben helfen noch nicht viel. Ein besserer test wäre es einfach da Multimeter im Strombereich (am besten was kleine, ca. 0,2 mA oder 20µA) an die Photodiode zu halten und dann noch mal messen. Wenn keine so kleiner Strombereich am Multimeter vorhanden ist, dann einfach einen Widerstand von ca. 1 Kohm parallel zur Fotodiode und dann die Spannung (200 mV Bereich) messen.
Die meisten einfachen Rotfilter, z.B. für LED anzeigen, lassen auch IR-licht durch.
Ja, mein Multimeter hat nur 200µA als kleinsten Messbereich - werde es morgen trotzdem mal ausprobieren.

Vielen Dank!

Grüße, Björn

Björn
22.08.2008, 13:50
So... für mich sehen diese Messungen schon vielversprechender aus:
- Diode im Rohr in normalen Raum: I = 0µA
- Diode im Rohr nach draußen in den (bewölkten) Himmel gerichtet: I = ca. 20µA
- Diode im Rohr mit Laserpointer aus ca. 20cm beschossen: I = ca. 250µA

//EDIT: Jetzt kam gerade die Sonne raus:
- Das Rohr direkt in die Sonne richten: I = ca. 2,2mA (nicht µA)
- Das Rohr horizontal: I = ca. 40µA

Ich habe die Anode der Diode an den "Plus-Pol" Des Messgeräts angeschlossen und die Kathode an die Masse das Messgeräts.
Der Stromunterschied ist so also bei über 100%.
Müsste ich nicht, wenn ich die Spannung an einem Widerstand messe, die an ihm abfallende Spannung dann auch 100% Unterschied haben (U ~ I)?

Grüße, Björn

//EDIT: Jetzt wäre die Frage, wie stark die Schnee-Reflektionen beeinträchtigen. Aber man könnte sonst das Rohr auch noch verlängern bzw. verdünnen.

Björn
22.08.2008, 16:40
Ich habe ein bisschen auf meiner Steckplatine experimentiert und gemessen.
Die Schaltung sah so aus:


GND-----|>|---[ R ]----VCC (5V)

Die gemessene Spannung über dem Widerstand bei Laserlicht lag bei R=10kOhm bei gut 2,5V und bei R=20kOhm bei 5V. Ohne Laser nur 0,1V.
Jetzt möchte ich ja nicht mit dem A/D-Wandler arbeiten und die Spannung über dem Widerstand messen.
Geht das auch anders?

Grüße, Björn

Besserwessi
22.08.2008, 16:45
Der Unterschied zwischen 0,1 V und fast 5 V ist schon ein gutes Digitalsignal. Das kann man direkt an einen normalen Portpin anschließen, so wie einen Taster mit Pullup.
Wenn die 20 KOhm gut funktionieren, sollte auch der interne Pullup von ca. 40-50 Kohm reichen. Der Laser scheint also doch etwas kräftiger zu sein, also nicht mehr Laser- Klasse I.

Björn
22.08.2008, 18:08
Der Unterschied zwischen 0,1 V und fast 5 V ist schon ein gutes Digitalsignal. Das kann man direkt an einen normalen Portpin anschließen, so wie einen Taster mit Pullup.
Wenn die 20 KOhm gut funktionieren, sollte auch der interne Pullup von ca. 40-50 Kohm reichen. Der Laser scheint also doch etwas kräftiger zu sein, also nicht mehr Laser- Klasse I.

Habs! Besten Dank! Funktioniert (auf meiner Testplatine ;) ) super mit dem internen Pull-Up. Werde morgen noch den "Sonnenlicht" Test machen ;)

Grüße, Björn

Björn
22.08.2008, 23:29
Eine Frage noch:
Ich verwende die Diode als Auslöser eines externen Interrupts. Sollte ich ihn eher auf "Low Level" oder "Falling" konfigurieren? Es funktioniert beides. So primitiv überlegt müsste die Methode mit der fallenden Flanke ja eigentlich minimal schneller gehen, oder ist das kein Unterschied?

Grüße, Björn

markusj
23.08.2008, 00:29
Hi Börn,


When the INT0 or INT1 interrupts are enabled and are configured as level triggered, the interrupts
will trigger as long as the pin is held low.

Ich nehme mal an, dass du keinen Dauer-Interrupt willst (was dein Programm vermutlich so richtig gründlich interrupten würden ;)) und deshalb die Flanken detektieren solltest.

mfG
Markus

Björn
23.08.2008, 09:15
Hi Börn,


When the INT0 or INT1 interrupts are enabled and are configured as level triggered, the interrupts
will trigger as long as the pin is held low.

Ich nehme mal an, dass du keinen Dauer-Interrupt willst (was dein Programm vermutlich so richtig gründlich interrupten würden ;)) und deshalb die Flanken detektieren solltest.

mfG
Markus

Danke Markus! Das ist mir gestern Nacht im Bett auch noch eingefallen ;) - Gut, dass ich jetzt die Bestätigung habe :)

Wie ist das denn, wenn ich steigende bzw. fallende Flanke detektiere - wird die Interrupt schleife dann nur einmal ausgeführt? Aus dem Datenblatt ging das für mich nicht eindeutig hervor.

Grüße, Björn