-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: Photodiode wie Taster auswerten

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Ort
    Sande (bei Reichelt)
    Alter
    28
    Beiträge
    663

    Photodiode wie Taster auswerten

    Anzeige

    Hallo!

    Es geht um die Photodiode BPW 34.
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Ort
    Sande (bei Reichelt)
    Alter
    28
    Beiträge
    663
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltskizze.jpg  

  3. #3
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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, LM35 und keine Komperator.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.07.2006
    Ort
    Mannheim
    Beiträge
    454
    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.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Ort
    Sande (bei Reichelt)
    Alter
    28
    Beiträge
    663
    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

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    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-magazi...ed-lichtsensor
    (weitere Beispiele bei google)

    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:
    Code:
    // 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

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Ort
    Sande (bei Reichelt)
    Alter
    28
    Beiträge
    663
    Zitat Zitat von Besserwessi
    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?
    Zitat Zitat von Besserwessi
    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

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    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.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.02.2005
    Ort
    Sande (bei Reichelt)
    Alter
    28
    Beiträge
    663
    Zitat Zitat von Besserwessi
    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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •