Optischer Geschwindigkeitssensor

somann88

Level-1
Beiträge
38
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich versuche gerade zu verstehen, wie ich den optischen Geschwindigkeitssensor der Schlauchpumpe anschließen muss.

Siehe Datenblatt: https://www.boxerpumps.com/fileadmin/dateien/peristaltic/25K/Schlauchpumpe_25K.pdf

Optionale Sensoren -> 1 Optischer Geschwindigkeitssensor


Aus der Pumpe kommen vier Kabel raus mit den, bei der Schaltung angegebenen Farben Schwarz, Rot und Weiß, Grün.

Aus der Tabelle darunter kann ich nur die Stromaufnahme der Diode, den Kollektorschaltstrom und die max. Kollektor-Emitter-Spannung von 30V sehen.

Woher weiß ich jetzt, wieviel Spannung die Diode braucht? Und was muss ich jetzt allgemein wo anschließen?


Wäre super, wenn mir da jemand auf die Sprünge helfen könnte.
 
Das ist anscheinend eine Lichtschranke mit einer LED und einem FotoTransistor.
Die Anode der LED über einen VorWiderstand an "plus" einer Gleichspannung (z.B. 24 V) anlegen, Cathode an -.
VorWiderstand = (24 V - a V)/ b mA; a ca. 2V, b ca. 20 mA, also ca. 1,2 kOhm, 0,5 W.

Collector an +24 V, Emitter an Digital-Eingang.

Impulse am DigitalEingang (ggfs - je nach max. Drehzahl - einer ZählerKarte) zählen (12 pro Umdrehung).
Laut Abbildung würde ich ziemlich kurze Impulse erwarten mit relativ langen Pausen zwischen den Impulsen.
Das spricht auch für die Verwendung einer ZählerKarte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Heinileini,

danke für deine schnelle und ausführliche Antwort.

Dachte mir auch schon, dass es eine Lichtschranke sein muss, aber mit der Diodenspannung war ich mir nicht sicher.

Hab jetzt mal ca. 2V an die Diode und an den Collector 5V angelegt. Dann hab ich die Pumpe erstmal von Hand langsam gedreht und konnte sehen, dass die 5V immer wieder durchgelassen und wieder gesperrt wurden - also funktioniert bestens so.

Wie ich die Impulse dann registriere, muss ich mir noch überlegen, da die Pumpe ungefähr mit 500Upm laufen wird und pro Umdrehung 12 Impulse gegeben werden => 6000 Impulse/min => 100 Impulse/s
 
Hab jetzt mal ca. 2V an die Diode und an den Collector 5V angelegt.

Wie ich die Impulse dann registriere, muss ich mir noch überlegen, da die Pumpe ungefähr mit 500Upm laufen wird und pro Umdrehung 12 Impulse gegeben werden => 6000 Impulse/min => 100 Impulse/s
Bitte Vorsicht mit den "ca. 2 V an der Diode"! Das ist nur ein PiQuadratMalDaumen-Wert, um den SpannungsAbfall an der Diode bei der Berechnung des Vorwiderstandes nicht gänzlich zu ignorieren.
Kleine Schwankungen der Spannung an der Diode (in DurchlassRichtung) sind schon der Unterschied zwischen "Leben" (= leuchten) und "Tod" (= unumkehrbarer Defekt) einer Diode!
Bitte immer einen VorWiderstand benutzen (oder eine hochohmige "StromQuelle" im Gegensatz zu einer niederohmigen "SpannungQuelle").
Welche Spannung sich an der LED beim gewünschten Strom einstellt, das kann von LED zu LED recht unterschiedlich sein, je nach LichtFarbe und je nach dem verwendeten Material (GaAs u.s.w.).

Zu den am Collector angelegten 5 V:
Das hängt davon ab, welche Spannung die Eingänge der von Dir verwendeten Eingangs- bzw. Zähler-Karte verlangen. Aber unter den angegebenen 30 V bleiben.

Welche ZyklusZeit hat Deine PLC? Sie muss kürzer als die minimale ImpulsDauer (und kürzer als die minimale PausenDauer zwischen zwei Impulsen) der LichtSchranke sein, damit die Impulse direkt von der PLC (d.h. ohne Verwendung einer ZählerKarte) gezählt werden können. Das könnte schon "sportlich", also grenzwertig sein. Am besten mal die Impulse bei der maximal vorkommenden Drehzahl oszilloskopieren, um keine unliebsamen Überraschungen erleben zu müssen.
 
Ich hab jetzt nochmal mit dem Hersteller Rücksprache gehalten. Die gehen von 1,5 V aus.

Ich verwende keine SPS, sondern ein Raspberry Pi 3B+

Die Diode bekommt jetzt 1,5 V und am Collector liegen 3,3V vom Raspberry Pi an. An sich funktioniert das jetzt auch gut.

Ich habe ein Python-Script geschrieben, was mit Hilfe der GPIO Library und der Funktion "add_event_detect" auf eine Änderung am GPIO Pin achtet und dann bei einer steigenden Flanke den Zähler eins hochzählt. Die Impulse kann der Pi auch alle erfassen - mein Problem ist jetzt nur noch, dass zuviele Impulse erkannt werden. Habe es schon mit der bouncetime versucht und dann funkioniert es schon besser, aber richtig zufriedenstellend ist es nicht, da die bouncetime dann auch noch in Abhänigkeit der Drehzahl angepasst werden muss und die Drehzahl auch nicht von Anfang an bei 100% liegt, also auch hier wieder falsch gezählte Impulse.

Wahrscheinlich bin ich hier jetzt nicht mehr ganz richtig, da es in diesem Forum ja weniger bis garnicht um Raspbery Pi geht, aber vielleicht hast du / jemand ja trotzdem einen Tipp dazu.

Ich hab auch schon was von Zähler-ICs oder Kondensatoren davor schalten gelesen...

Falls es von Interesse ist, hab ich hier mal mein Python-Script:

Code:
[COLOR=#D4D4D4][FONT=Menlo][COLOR=#6a9955]#!/usr/bin/python[/COLOR]
[COLOR=#c586c0]import[/COLOR] RPi.GPIO [COLOR=#c586c0]as[/COLOR] GPIO
[COLOR=#c586c0]import[/COLOR] math, time, sys, json

[COLOR=#6a9955]# Status-Variable, die angibt, ob die Füllmenge erreicht wurde[/COLOR]
DesiredFillingLevelReached = [COLOR=#569cd6]False[/COLOR]

[COLOR=#6a9955]# Impuls-Zähler-Variable[/COLOR]
CurrentFillingLevelImpulses = [COLOR=#b5cea8]0[/COLOR]

[COLOR=#6a9955]# Füllmenge pro Impuls[/COLOR]
FillingLevelPerImpulse = [COLOR=#b5cea8]0.35[/COLOR] [COLOR=#6a9955]# 4,20ml pro Umdrehung (12 Impulse) => 4,20ml/12 = 0,35ml[/COLOR]

[COLOR=#6a9955]# Startzeit in ms[/COLOR]
StartTime = [COLOR=#4ec9b0]int[/COLOR]([COLOR=#dcdcaa]round[/COLOR](time.time() * [COLOR=#b5cea8]1000[/COLOR]))

[COLOR=#569cd6]def[/COLOR] [COLOR=#dcdcaa]get_desired_filling_level_as_impulses[/COLOR]([COLOR=#9cdcfe]DesiredFillingLevel[/COLOR]):
    [COLOR=#569cd6]global[/COLOR] FillingLevelPerImpulse
    [COLOR=#c586c0]return[/COLOR] math.ceil(DesiredFillingLevel / FillingLevelPerImpulse)

[COLOR=#569cd6]def[/COLOR] [COLOR=#dcdcaa]main[/COLOR]():
    [COLOR=#dcdcaa]print[/COLOR]([COLOR=#ce9178]'Warte auf Impulse...'[/COLOR])

    [COLOR=#6a9955]# Anzahl Impulse für die gewünschte Füllmenge ermitteln[/COLOR]
    DesiredFillingLevelImpulses = get_desired_filling_level_as_impulses([COLOR=#b5cea8]100[/COLOR]) [COLOR=#6a9955]# in ml[/COLOR]

    [COLOR=#6a9955]# Pinreferenz waehlen[/COLOR]
    GPIO.setmode(GPIO.BCM)

    [COLOR=#6a9955]# GPIO als Eingang definieren und Pull-Down Widerstand aktivieren[/COLOR]
    GPIO.setup([COLOR=#b5cea8]18[/COLOR], GPIO.IN, [COLOR=#9cdcfe]pull_up_down[/COLOR] = GPIO.PUD_DOWN)

    [COLOR=#6a9955]# Callback-Funktion[/COLOR]
    [COLOR=#569cd6]def[/COLOR] [COLOR=#dcdcaa]Interrupt[/COLOR]([COLOR=#9cdcfe]channel[/COLOR]):
        [COLOR=#569cd6]global[/COLOR] CurrentFillingLevelImpulses
        [COLOR=#569cd6]global[/COLOR] DesiredFillingLevelReached
        [COLOR=#6a9955]# CurrentFillingLevelImpulses um eins erhöhen[/COLOR]
        CurrentFillingLevelImpulses = CurrentFillingLevelImpulses + [COLOR=#b5cea8]1[/COLOR]
        [COLOR=#dcdcaa]print[/COLOR] ([COLOR=#ce9178]'FillingLevelImpulses: '[/COLOR] + [COLOR=#4ec9b0]str[/COLOR](CurrentFillingLevelImpulses) + [COLOR=#ce9178]' / '[/COLOR] + [COLOR=#4ec9b0]str[/COLOR](DesiredFillingLevelImpulses))
        [COLOR=#c586c0]if[/COLOR] CurrentFillingLevelImpulses >= DesiredFillingLevelImpulses:
            DesiredFillingLevelReached = [COLOR=#569cd6]True[/COLOR]


    [COLOR=#6a9955]# Interrupt-Event hinzufügen, steigende Flanke[/COLOR]
    GPIO.add_event_detect([COLOR=#b5cea8]18[/COLOR], GPIO.RISING, [COLOR=#9cdcfe]callback[/COLOR] = Interrupt, [COLOR=#9cdcfe]bouncetime[/COLOR]=[COLOR=#b5cea8]10[/COLOR])

    [COLOR=#c586c0]while[/COLOR] DesiredFillingLevelReached == [COLOR=#569cd6]False[/COLOR]:
        [COLOR=#c586c0]pass[/COLOR]

    GPIO.cleanup()
    EndTime = [COLOR=#4ec9b0]int[/COLOR]([COLOR=#dcdcaa]round[/COLOR](time.time() * [COLOR=#b5cea8]1000[/COLOR])) - StartTime
    [COLOR=#dcdcaa]print[/COLOR]([COLOR=#ce9178]'CurrentFillingLevelImpulses = '[/COLOR] + [COLOR=#4ec9b0]str[/COLOR](CurrentFillingLevelImpulses) + [COLOR=#ce9178]', Time = '[/COLOR] + [COLOR=#4ec9b0]str[/COLOR](EndTime))

[COLOR=#6a9955]# Prozess starten[/COLOR]
[COLOR=#c586c0]if[/COLOR] [COLOR=#9cdcfe]__name__[/COLOR] == [COLOR=#ce9178]'__main__'[/COLOR]:
    main()
[/FONT][/COLOR]
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... mein Problem ist jetzt nur noch, dass zu viele Impulse erkannt werden. Habe es schon mit der bouncetime versucht und dann funkioniert es schon besser, aber richtig zufriedenstellend ist es nicht, da die bouncetime dann auch noch in Abhänigkeit der Drehzahl angepasst werden muss und die Drehzahl auch nicht von Anfang an bei 100% liegt, also auch hier wieder falsch gezählte Impulse.
Ja, das Dilemma ist, dass Du die "richtigen" und die "falschen" Impulse nicht unterscheiden kannst. Kommen (zu) häufig Impulse, so gehst Du von einer höheren Drehzahl aus und verringerst dementsprechend die "bouncetime" und schon erfasst Du noch mehr Impulse, ohne aber zu wissen, ob dies "ernstzunehmende" Impulse sind oder irgendwelche "StörImpulse".

Es kann sein, dass die Lichtschranke eine tatsächlich vorhandene Bewegung meldet, obwohl eigentlich Stillstand herrscht. Ein Zittern oder Vibrieren der Lochscheibe, die durch die Lichtschranke abgetastet wird, kann dazu führen. Egal, ob durch Erschütterungen aus der Umgebung oder Hin- und Her-Zucken des Motors durch die Regelung des Motors erzeugt.

Es kann aber auch sein, dass Schwankungen (z.B. "Welligkeit") der BetriebsSpannung den Unterschied machen zwischen der Erkennung eines (scheinbar) eindeutigen 1-Signals und der Erkennung eines (scheinbar) eindeutigen 0-Signals.

Nicht Hysterie, aber Hysterese ist hier angesagt. Betreibst Du die LED und den FotoTransistor an derselben BetriebsSpannung?
Dann wäre es ziemlich einfach, die Helligkeit der LED bzw. den Strom durch die LED in Abhängigkeit des vom FotoTransistor empfangenen Signals zu steuern.
Eine Mitkopplung in dem Sinne, FotoTansistor empfängt ein Signal und erhöht den Strom durch die LED ein wenig, FotoTransistor empfängt kein Signal und vermindert den Strom durch die LED ein wenig.
Damit erhältst Du eine Hysterese in dem Sinne, dass der FotoTransistor bei weniger Abdeckung des Lichtstrahls als zuvor auf 1-Signal schaltet und bei mehr Abdeckung als vorher auf 0-Signal.

Ein weiterer positiver Effekt ist, dass durch die Mitkopplung schneller zwischen den beiden Pegeln (1-Signal und 0-Signal) umgeschaltet wird.
Ein längerer "Aufenthalt" im Bereich zwischen eindeutig als 1-Signal erkannt einerseits und eindeutig als 0-Signal erkannt andererseits, sollte unbedingt vermieden werden, da ein Digital-Signal in genau dieser Phase am störanfälligsten ist. Deshalb sollte man es auch vermeiden, digitale Signale über TiefPässe (RC-Glied) zu "verlangsamen". Es führt oft nicht zur beabsichtigten Verringerung der StörAnfälligkeit, sondern zum genauen Gegenteil.

Durch Verdrillen der Leitung und durch Abschirmung lässt sich die Empfindlichkeit gegen StörImpulse ausserdem verringern.
 
Betreibst Du die LED und den FotoTransistor an derselben BetriebsSpannung?

Ja, die LED und der FotoTransistor werden beide von der 3,3 V Spannung vom RPi versorgt.
Vor der LED ist ein 39 Ohm Widerstand.
Der FotoTransistor bekommt die vollen 3,3 V.

Dein Idee mit der Mitkopplung hört sich interessant an, aber ich bin mir nicht ganz sicher, wie du dir die Umsetzung davon vorstellst.

Meinst du, dass der Transistor die LED "selbstständig" mitsteuert, oder sollte das beispielsweise per Digital/Analog-Converter geregelt werden?
 
Skizziere doch mal bitte deine Schaltung wie du den Fototransistor an den Raspberry angeschlossen hast "Der FotoTransistor bekommt die vollen 3,3 V" hört sich etwas seltsam an.
Der Pulldown-Widerstand im Raspberry selber hat 50 kOhm, das bekommt mal u.U. mit einem kleineren Widerstandswert etwas störfester
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Skizziere doch mal bitte deine Schaltung wie du den Fototransistor an den Raspberry angeschlossen hast "Der FotoTransistor bekommt die vollen 3,3 V" hört sich etwas seltsam an.
Der Pulldown-Widerstand im Raspberry selber hat 50 kOhm, das bekommt mal u.U. mit einem kleineren Widerstandswert etwas störfester

Ja, war vielleicht etwas zu Umgangssprachlich ausgedrückt...

Hier der Schaltplan auf die schnelle erstellt:

Schaltplan-Skizze.jpg
 
Ich würde testweise vom GPIO Pin mal einen externen Widerstand von 10 kOhm (als Anfangswert) nach Masse schalten, damit etwas mehr Strom durch den Transistor fließt. Den internen Pull-Down könntest du dann abschalten, oder auch aktiv lassen. Du kannst theoretisch mit dem Wert auch noch weiter runter gehen, weil bis zu 30 mA erlaubt sind. Ich würde aber auch bei der LED wenn nicht notwendig an den Maximalwert gehen, das geht auf die Lebensdauer.
 
Ich würde testweise vom GPIO Pin mal einen externen Widerstand von 10 kOhm (als Anfangswert) nach Masse schalten, damit etwas mehr Strom durch den Transistor fließt. Den internen Pull-Down könntest du dann abschalten, oder auch aktiv lassen. Du kannst theoretisch mit dem Wert auch noch weiter runter gehen, weil bis zu 30 mA erlaubt sind. Ich würde aber auch bei der LED wenn nicht notwendig an den Maximalwert gehen, das geht auf die Lebensdauer.

Ich hab jetzt mal einen 10 kOhm Widerstand als externen Pull-Down an den GPIO Pin geschalten und den internen deaktiviert. Es scheint etwas besser zu sein, aber es werden trotzdem noch mehrere Impulse erkannt, wenn sich ein Schlitz durch die Lichtschranke bewegt. Ich kann die Pumpe erst morgen früh wieder laufen lassen - zu laut. Wenn ich mit dem Finger die Scheibe mit den Schlitzen ein Stück, schnell drehe, sodass ein Schlitz durch die Lichtschranke geht, werden 2 Impulse erfasst.

Werde ich auf jeden Fall morgen nochmal weiter testen...

Die LED ist mit 39 Ohm nicht ganz am Limit. 46 mA ungefähr, aber ja, stimmt schon, da kann ich auch noch einen größeren Widerstand verwenden.

Was meinst du genau mit "Du kannst theoretisch mit dem Wert auch noch weiter runter gehen, weil bis zu 30 mA erlaubt sind." ?

Im Datenblatt steht ja, dass der Kollektorschaltstrom 30mA beträgt, aber das bedeutet ja, dass er ab 30mA schaltet und nicht, dass max. 30mA fließen dürfen, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meinst du, dass der Transistor die LED "selbstständig" mitsteuert, ...?
Ja, genau daran hatte ich gedacht. Möglichst nah an der Quelle einzugreifen.
Habe nach 'OPB8340W datasheet Optek Technology' geguckelt und ... nichts gefunden, was der Bezeichnung OPB8340W allzu nahe kommt. Habe mich auf 'OPB830_OPB840' eingeschossen und das Datenblatt heruntergeladen. Leider hilft mir das auch nicht weiter. Auch mit RasPi-Erfahrung bin ich leider nicht "vorbelastet".
Hast Du denn schon eine Vorstellung oder Beispiele, wie Du den FotoTransistor am RasPi anschliessen willst/müsstest? Irgendwie irritiert mich Deine Formulierung "Der FotoTransistor bekommt die vollen 3,3 V.". ;)

Gruss Heinileini

PS:
Da haben sich ja schon von mir unbemerkt diverse Beiträge angesammelt, die ich, als ich schrieb, noch nicht sehen konnte. :oops:
 
Zuletzt bearbeitet:
Ja, genau daran hatte ich gedacht. Möglichst nah an der Quelle einzugreifen.
Habe nach 'OPB8340W datasheet Optek Technology' geguckelt und ... nichts gefunden, was der Bezeichnung OPB8340W allzu nahe kommt. Habe mich auf 'OPB830_OPB840' eingeschossen und das Datenblatt heruntergeladen. Leider hilft mir das auch nicht weiter. Auch mit RasPi-Erfahrung bin ich leider nicht "vorbelastet".
Hast Du denn schon eine Vorstellung oder Beispiele, wie Du den FotoTransistor am RasPi anschliessen willst/müsstest? Irgendwie irritiert mich Deine Formulierung "Der FotoTransistor bekommt die vollen 3,3 V.". ;)

Gruss Heinileini

PS:
Da haben sich ja schon von mir unbemerkt diverse Beiträge angesammelt, die ich, als ich schrieb, noch nicht sehen konnte. :oops:

Nach dem Datenblatt hab ich am Anfang auch gleich gesucht, aber nichts gefunden.

Mir ist nur noch nicht ganz klar, wie ich diese Mitkopplung umsetzen könnte...

Dich irritiert die Aussage also auch? :) War wohl etwas unglücklich formuliert... ich meinte damit einfach, dass im Gegensatz zur LED, am Fototransistor die vollen 3,3 V (also ohne Vorwiderstand) anliegen.

Mit Vorwiderstand = nicht die vollen 3,3 V
Ohne Vorwiderstand = die vollen 3,3 V

Nachvollziehbar? ;)


Gesendet von iPhone mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich will mich nicht davor drücken, aber es fällt mir schwer, zumal dies nur auf dem Papier (bzw. in Excel) entstanden ist:

LS-MitKoppl.jpg

So in etwa würde ich anfangen zu experimentieren.
Im Gegensatz zu Deiner Schaltung wird hier das Signal invertiert. Wäre das ein Problem ... oder könntest Du dies im RasPi "kompensieren"?
 
Zuletzt bearbeitet:
Erstmal danke für deine intensive Hilfe!

Das Problem ist, dass ich gerade nur NPN Transistoren da hab. Muss ich also erst bestellen.

Die einzigen zwei PNP Transistoren, die ich hab, sind welche, die ich mal irgendwo aus nem Verstärker oder so ausgebaut hab:

https://datasheetspdf.com/datasheet/B772P.html

und

https://datasheetspdf.com/pdf/545690/WuxiYoudaElectronics/D882P/1

Die Widerstandswerte bekomme ich ungefähr hin.


Wie meinst du "das Signal ist invertiert"?


Jetzt noch was Neues:

Ich hab heute nochmal viel getestet. Unter Anderem mit meinem Arduino Uno, ob er das besser macht, aber auch hier bekam ich erstmal zu viele Impulse. Dann hab ich mal statt einem 10 kOhm Pull-Down Widerstand, einen 5 kOhm Widerstand genommen und die Werte waren um einiges besser. Keine doppelten Impulse mehr. Danach hab ich noch weitere Versuche mit dem Pull-Down gemacht und kann jetzt sagen, dass unter 5 kOhm nichts mehr erkannt wird.

Also hab ich alles wieder umgebaut und das Ganze mit dem Raspberry Pi probiert. Und es funktioniert echt gut mit dem 5 kOhm Pull-Down.

Werde jetzt nochmal die Pumpe laufen lassen und checken, ob auch wirklich alle Impulse erkannt werden und melde mich dann nochmal zurück.
 
Wie meinst du "das Signal ist invertiert"?
Ursprüngliche Schaltung: Schlitz in der Scheibe wird mit Hi-Signal gemeldet, sonst Lo-Signal am GPIO.
Also positive Flanke zu Beginn des Impulses und negative Flanke am Ende des Impulses.

Mein SchaltungVorschlag: Schlitz in der Scheibe wird mit Lo-Signal gemeldet, sonst Hi-Signal am GPIO.
Also negative Flanke zu Beginn des Impulses und positive Flanke am Ende des Impulses.

Du schriebst:
"... was mit Hilfe der GPIO Library und der Funktion "add_event_detect" auf eine Änderung am GPIO Pin achtet und dann bei einer steigenden Flanke den Zähler eins hochzählt ..."
Du zählst somit nach der SchaltungsÄnderung mit der negativen Flanke des Lichtstrahls. Ich weiss nicht, ob man das im RasPi - falls überhaupt erforderlich - anpassen könnte.
Dürfte aber keinen "lebenswichtigen" Unterschied machen.

Das Invertieren ist übrigens von mir nicht beabsichtigt, sondern nur eine "Nebenwirkung".

Nachtrag zu meiner Schaltung:
Spannung am Collector des PNP gegen Masse (GND) messen, um sehen zu können, ob der PNP so wirkt, wie er soll:
- ca. 1,5 V (LED-Spannung), wenn der PNP nicht durchschaltet (wenn LichtSchranke unterbrochen = kein Schlitz)
- ca. 3 V, wenn der PNP durchschaltet (wenn LichtSchranke nicht unterbrochen = Schlitz)

Mit Deinen Links zu den PNPs bin ich nur mühsam voran gekommen, sah den Wald vor lauter irrelevanter Werbung etc. kaum noch.;)
1-A-Typen. Die brauchst Du nicht wirklich. BC557B o.ä. sollte gehen. Oder benötigst Du SMD-Typen (die Winzlinge ohne Beinchen, zum Auflöten)?

Auf das Thema PullUp-/PullDown-Widerstände kommen wir dann später zurück ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ursprüngliche Schaltung: Schlitz in der Scheibe wird mit Hi-Signal gemeldet, sonst Lo-Signal am GPIO.
Also positive Flanke zu Beginn des Impulses und negative Flanke am Ende des Impulses.

Mein SchaltungVorschlag: Schlitz in der Scheibe wird mit Lo-Signal gemeldet, sonst Hi-Signal am GPIO.
Also negative Flanke zu Beginn des Impulses und positive Flanke am Ende des Impulses.

Du schriebst:

Du zählst somit nach der SchaltungsÄnderung mit der negativen Flanke des Lichtstrahls. Ich weiss nicht, ob man das im RasPi - falls überhaupt erforderlich - anpassen könnte.
Dürfte aber keinen "lebenswichtigen" Unterschied machen.

Das Invertieren ist übrigens von mir nicht beabsichtigt, sondern nur eine "Nebenwirkung".

Nachtrag zu meiner Schaltung:
Spannung am Collector des PNP gegen Masse (GND) messen, um sehen zu können, ob der PNP so wirkt, wie er soll:
- ca. 1,5 V (LED-Spannung), wenn der PNP nicht durchschaltet (wenn LichtSchranke unterbrochen = kein Schlitz)
- ca. 3 V, wenn der PNP durchschaltet (wenn LichtSchranke nicht unterbrochen = Schlitz)

Mit Deinen Links zu den PNPs bin ich nur mühsam voran gekommen, sah den Wald vor lauter irrelevanter Werbung etc. kaum noch.;)
1-A-Typen. Die brauchst Du nicht wirklich. BC557B o.ä. sollte gehen. Oder benötigst Du SMD-Typen (die Winzlinge ohne Beinchen, zum Auflöten)?

Auf das Thema PullUp-/PullDown-Widerstände kommen wir dann später zurück ...

Ich hab jetzt mal ein paar Bauteile bestellt. Kommt leider erst am Freitag an.

Also wenn ich dich richtig verstanden hab, muss ich ja dann nur auf die fallende Flanke achten, anstatt auf die steigende. Somit wäre das doch schon gelöst, oder? Und das geht ja im Programmcode.

Und die ganze Schaltung stellt dann einen Schmitt-Trigger dar?

Ja die Webseite für die Datenblätter ist wirklich mit Werbung zugemüllt. Gut, dass du dich trotzdem zurecht gefunden hast ;)

SMD-Bauteile müssen es nicht sein. Wird erstmal ein Prototyp, Ich löte dann später alles auf eine Lochrasterplatine.

Ich bin schon gespannt wie die Schaltung sich verhält.
 
Also der Raspberry hat sicherlich auch genug Rechenleistung um das alles in Software zu machen. Bevor ich da eine große Schaltung drumzustricke, würde ich mal sehen was in Software geht. Die Softwarelösung kostet dich einmal Zeit/Geld, wenn du es raus hast dann kannst du das so immer wiederverwenden.
Sinnvoll wäre hier aber mal mit einem Oszilloskop nachzuschauen, woher diese Fehl-Signale überhaupt kommen. Das ist schon etwas seltsam, dass eine optische Schaltung so viele Fehl-Signale ausgeben soll. Prellen kann dort schließlich nichts.
 
1. Also wenn ich dich richtig verstanden hab, muss ich ja dann nur auf die fallende Flanke achten, anstatt auf die steigende. Somit wäre das doch schon gelöst, oder? Und das geht ja im Programmcode.

2. Und die ganze Schaltung stellt dann einen Schmitt-Trigger dar?

3. Ich bin schon gespannt wie die Schaltung sich verhält.
Zu 1.: "Im Prinzip ja". Ich habe mich durch den Begriff "Event" verleiten lassen, zu denken, dass vielleicht der RasPi (und nicht Dein Programm) auf eine positive Flanke prüft und dann einen Interrupt auslöst bzw. eine Task startet. Falls das so wäre, aber der RasPi dasgleiche nicht für negative Flanken könnte, dann ...

Zu 2.: Ja, das ist der Plan. Wobei aber ausnahmsweise die Mitkopplung auf optischem (Um-)Wege wirkt.

Zu 3.: Rat mal, wer noch. ;) Kann immerhin recht knifflig werden. Aber das Prinzip hast Du offensichtlich durchschaut.

Thomas' Vorschlag mit dem Oszilloskop lag mir schon länger auf der Zunge, hab's irgendwie immer wieder verdrängt ...
Seinen Ansatz, die Störungen per SW zu unterdrücken, halte ich nicht für aussichtslos. Das hängt sehr stark von der Art und der Ursache der Störungen ab.

Ich vermute die Ursache darin, dass wir eigentlich ein analoges Signal in ein digitales wandeln: das am FotoTransistor einfallende Licht dürfte zwischen 2 Pegeln wechseln mit an- und absteigenden Rampen. Und die Rampen sind ein Problem, erst recht, wenn der Motor mitten in so einer Rampe steht und das ausgegebene Signal irgendwo zwischen Hi und Lo steht.
Bei A/B-Signalen von "richtigen" Gebern bin ich übrigens weniger skeptisch. Dort sind die StörImpulse entweder so kurz, dass sie vom der SW gar nicht erst wahrgenommen werden, oder sie sind lang genug und führen dann zu einem Hin- und Her-Zählen, so dass die Störungen sich nicht nur in einer einzigen ZählRichtung auswirken, sondern "gegenseitig kompensieren".
 
Zurück
Oben