24V DC mittels Optokoppler an GPIO Eingang

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    ich hoffe Ihr könnt mir helfen, da ich so langsam mit meinem Latein am Ende bin. Ich habe bereits unzählige Forenbeiträge gelesen, aber verstehe nicht was bei meiner Schaltung das Problem ist.

    Ich bekomme ein 24V DC Signal einer SPS, welches durch ein Relais von der Benutzersteuerung geschalten wird. Der Raspberry soll das Signal sicher auslesen und nicht beschädigt werden. Dank einer Beiträge habe ich mich aufgrund der galvanischen Trennung beider Stromkreise für einen Optokoppler Typ 817-M der Marke Kingbright entschieden.
    Meine Schaltung sieht wie folgt aus: (Man ignoriere Punkt 3 und 6 in dem Aufbau)
    My circuit

    Das Problem ist nun, dass mein Raspberry durchgehend High erkennt und nie Low wird. Er erkennt immer nur falling edges und nie rising edges. Habe alle Konfigurationen bezüglich Pull Up/Down Widerständen probiert, wobei ich auf einen internen verzichten könnte (glaube ich). Interessanterweise schaltet der Raspberry auf Low, sobald ich mit einem Multimeter die Spannung zwischen GND und GPIO messe.

    Vielen Dank für eure Hilfe und habt Geduld mit mir, bin relativer Neuling auf dem ganzen Gebiet.

  • Moin,

    Diese Schaltung ist invertierend, was bedeutet das auf dem GPIO Input Pin über Vc 3,3V und die Widerstände immer eine Spannung von > 3,0 V anliegt, solange über den Phototransistor im Optokopller das Potential nicht auf Masse gezogen wird. Das heist, wenn der / LED im Optokoppler genügend Helligkeit erzeugt, und dann erst schaltet der Phototransistor und zieht das Signal / Pegel auf Masse, wobei eine Spannung von unter 0,8 V erreicht werden muss, damit das PI diesen Pegel sicher als LOW erkennt.
    Oder du fiemelst noch einen OPV dazwischen, mit einem Trimmer ( Poti ) und lässt diesen als Comparator arbeiten. Frage Google, es gibt 100 verschiedene Möglichkeiten mit einem Photowiderstand was dein Optokoppler darstellt, und einem OPV diesen als Schalter / Comparator zu benutzen.
    Oder du bringst den 10kOhm Widerstand nach unten zum Emitter, und zweigst dein GPIO Signal zwischen Emitter und diesem Widerstand ab. Dann arbeitet die Schaltung ohne Invertierung, erst wenn ein Strom durch den Transistor fließt, liegt auch eine Spannung größer 0 V am diesem Eingang an.
    Ich bin jetzt zu faul den genauen Widerstandswert des 10kOhm Widerstandes dann mit dem Emitter gegen Masse verbunden auszurechnen. Hier könnten auch 4,7 kOhm grob geschätzt ausreichen.

    Franky

  • Hi euch beiden,

    zum Vorwiderstand auf LED Seite: Die 2,7kOhm lassen rechnerisch 8mA durch, was reichen müsste für die LED. Ich werde aber mal einen kleineren Widerstand probieren, sodass ich mit den 1,2kOhm auf ca 19mA komme.

    Franky07: Dass die Schaltung invertiert ist habe ich verstanden. Nur müsste doch durch die LED und den Fototransmitter das Signal auf Masse gezogen werden und der GPIO müsste doch low werden. Interessanterweise wechselt der PIN auch auf LOW (bei anliegenden 24VDC auf Eingangsseite) sobald ich mit einem Multimeter die Spannung zwischen GPIO und GND messe (0,08V).

  • Oder du fiemelst noch einen OPV dazwischen, mit einem Trimmer ( Poti ) und lässt diesen als Comparator arbeiten.

    Man kann auch ein neuronales Netzwerk dahinter schalten, das dann mit künstlicher Intelligenz den Zustand des Optokopplers interpretiert. Das wäre noch besser. :wallbash:

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Habe innerhalb meines Codes beide Pull Widerstände konfiguriert und gemessen - mit Pull Up bekomme ich 3,3V mit Pull Down 2,7V. Trotzdem müsste doch bei einer Eingangsspannung des Optokopplers von 24V das Signal auf Masse gezogen werden und der Pin automatisch LOW erkennen. Wie gesagt beim Durchmessen hatte ich 0,08V gemessen - der PIN erkennt aber nur eine Rising Edge und schaltet, wenn ich mit einem Kontakt vom Multimeter auf die Jumperkabel-Kontakte gehe.

    Nachtrag: Nutze aktuell BCM Pin 16

  • Moin

    Man kann auch ein neuronales Netzwerk dahinter schalten, das dann mit künstlicher Intelligenz den Zustand des Optokopplers interpretiert. Das wäre noch besser. :wallbash:

    Das ein Comparator ein klar definiertes Ausgangssignal in der benötigten Pegelspannung liefert ist dir noch nicht aufgefallen ? Der TO kämpft damit das keine klare LOW / HIGH Erkennung erfolgt. Also wenn der Pegel über den Masse-Zug Schalten gegen GND nicht auf die erforderliche Spannung von unter 0,8 Volt abfällt, dann bekommt das der GPIO auch nicht als LOW Pegel gerafft !
    Auch digitale Signalpegel haben einen Wertebereich, in dem man sich bewegen muss, um eine eindeutige Signalauswertung zur erhalten. Aber lass gut sein, du bist hier ohnehin der Elektronik GURU. Präsentiere Lösung die dem TO helfen könnte, und fange nicht schon wieder an

    Franky

  • Lass DU mal gut sein mit deinen verqueren Ideen - ich glaube nicht, dass sich in diesem Forum jemand deiner Meinung anschließt, dass hier ein Optokoppler angeraten ist. Es sei denn, er ist auf deinem Niveau! Ich wüsste da zwei oder drei, die in Frage kommen. Ihr könnt euch je gegenseitig als Gurus anbeten, wenns euch dann besser geht.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Gnom dann muss der TO RaspPiNewbie die Schaltung noinverted betreiben.

    Da aber deine grundsätzliche Einstellung zu einer Fehler-toleranteren Außenbeschaltung nicht vorhanden ist, hier nur der Hinweis, wenn man wirklich an den Stromverbrauch denkt, wenn man wirklich auf eine Funktionssicherheit unter allen Umständen Wert legt, dann nimmt man einen Window-Komparator, setzt dessen Schaltspannung auf VHigh-max / 2 = 1,65 V. Damit hat man am Ausgang des Komparators immer eine Pegel-konforme Spannung für LOW 0-0,8 V oder High 3,0 -3,3 Volt weil der Komparator jede Spannung unter diesen 1,65 Volt mit einer Spannung von 0 V am Ausgang bereitstellt, ebenso jede Spannung oberhalb 1,65 Volt würde bei einem Rail-to-Rail OPAMP mit einer Spannung Vc des OPAMP = 3,3 V beantwortet werden. Diese Schaltspannung kann man sich bedarfs- oder anwendungsangepasst auch beliebig frei wählen. Das kostet den TO keine 80 Cent Material, kostet im Stromverbrauch nur 60µA und man kann den Stromfluß durch den Phototransistor im Optokoppler auf unter 100 pA reduzieren. Somit liegen die Pegelspannungen am Ausgang des OPAMP immer im definierten Bereich der von einer digitalen Schaltung klar und definiert erkannt wird.

    Franky

  • Habe innerhalb meines Codes beide Pull Widerstände konfiguriert und gemessen - mit Pull Up bekomme ich 3,3V mit Pull Down 2,7V. Trotzdem müsste doch bei einer Eingangsspannung des Optokopplers von 24V das Signal auf Masse gezogen werden und der Pin automatisch LOW erkennen. Wie gesagt beim Durchmessen hatte ich 0,08V gemessen - der PIN erkennt aber nur eine Rising Edge und schaltet, wenn ich mit einem Kontakt vom Multimeter auf die Jumperkabel-Kontakte gehe.

    Nachtrag: Nutze aktuell BCM Pin 16

    Wenn der Eingang nur beim Messen auf LOW geht, dann liegt das am Innenwiderstand von Deinem Meßgerät.

    Dadurch fällt mehr Spannung an dem 10k-Widerstand ab und es bleibt weniger für Deinen Eingang.

    0,08V ist mir ein bisschen wenig. Normaler Weise sollten am Fototransistor auf der CE-Strecke 0,2V abfallen, wenn er voll durchgesteuert ist.

    Ich vermute mal, das Dein Fototransistor nicht voll durchsteuert.

    Du könntest zum Einen die Basis (Pin 6) mit einem kleinen Strom vorspannen.

    Oder aber einen Widerstand zwischen pin 5 und 4 bauen, der Dir die Spannung weiter nach Masse zieht. Wenn Du nicht erst Datenblätter wegen Leckströmen und so wälzen willst, dann würde ich mit 40kOhm anfangen und mich langsam runter arbeiten.

  • Du könntest zum Einen die Basis (Pin 6) mit einem kleinen Strom vorspannen.

    Oder aber einen Widerstand zwischen pin 5 und 4 bauen, der Dir die Spannung weiter nach Masse zieht. Wenn Du nicht erst Datenblätter wegen Leckströmen und so wälzen willst, dann würde ich mit 40kOhm anfangen und mich langsam runter arbeiten.

    Im Datenblatt ist nicht erkennbar, dass die Pins 5 und 6 irgendeine Verbindung oder Funktion in dem Optokoppler haben. Kannst du mir erklären, was der Hintergrund deiner Empfehlung hier ist? Tatsächlich habe ich mit einigem Suchen einen Optokoppler gefunden, bei dem die Basis zugänglich ist. Aber für den hier im Thread verlinkten Optokoppler golt das wohl nicht.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Danke für die ganze Hilfe hunter_spike. Nun ist es so, dass mein Optokoppler keine 6 Pins hat - habe einen mit 4 Pins. Die Schaltung ist aber identisch zu der geposteten. Die 0,08V messe ich am GPIO, sobald ich die 24V freigebe in Richtung Optokoppler Diodenseite. Nur bleibt mein Pin bei 1 und wird wie gesagt nur LOW, wenn ich irgendeinen Kontakt berühre. Das einzige was mir noch einfällt ist, dass die Diode einen weg hat - habe heute die Diode gemessen und in beide Richtungen 0,8V abfallende Spannung gemessen - normalerweise (so ich mich nicht täusche), dürfte eine Diode nur in Flussrichtung etwas messbares zeigen.

  • Gnom dann muss der TO RaspPiNewbie die Schaltung noinverted betreiben.

    Da aber deine grundsätzliche Einstellung zu einer Fehler-toleranteren Außenbeschaltung nicht vorhanden ist, hier nur der Hinweis, wenn man wirklich an den Stromverbrauch denkt, wenn man wirklich auf eine Funktionssicherheit unter allen Umständen Wert legt, dann nimmt man einen Window-Komparator, setzt dessen Schaltspannung auf VHigh-max / 2 = 1,65 V. Damit hat man am Ausgang des Komparators immer eine Pegel-konforme Spannung für LOW 0-0,8 V oder High 3,0 -3,3 Volt weil der Komparator jede Spannung unter diesen 1,65 Volt mit einer Spannung von 0 V am Ausgang bereitstellt, ebenso jede Spannung oberhalb 1,65 Volt würde bei einem Rail-to-Rail OPAMP mit einer Spannung Vc des OPAMP = 3,3 V beantwortet werden. Diese Schaltspannung kann man sich bedarfs- oder anwendungsangepasst auch beliebig frei wählen. Das kostet den TO keine 80 Cent Material, kostet im Stromverbrauch nur 60µA und man kann den Stromfluß durch den Phototransistor im Optokoppler auf unter 100 pA reduzieren. Somit liegen die Pegelspannungen am Ausgang des OPAMP immer im definierten Bereich der von einer digitalen Schaltung klar und definiert erkannt wird.

    Warum müsste ich die Schaltung ansonsten non-invertiert betreiben? Kann dies gerne austesten, mich interessiert nur der Grund :)

  • Hatte mir nochmals 4 Kingbright Optokoppler bestellt und einen der neuen heute mal durchgemessen - nun ist es so, dass auf beiden Seiten des Optokopplers immer Durchgang ist - ich messe, wenn die Diodenseite nicht angesteckt ist auf der Transistorseite bei angelegter Spannung zwischen Punkt 3 und 4 Durchgang.. habe ich irgendwo einen krassen Denkfehler oder ist der Optokoppler hinüber?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!