Ansteuerung eines 5-V-versorgten Relaismoduls von einem 3V3-versorgten Mikrocontroller

Was ich versuche zu tun

Bei dieser Frage geht es um die Verwendung eines beliebigen 3V3-Versorgungsmikrocontrollers zum Ansteuern von 5-V-Relaismodulen, die von vielen Anbietern erhältlich sind. Ich habe unten Details zu den Mikrocontrollern und Modulen angegeben, die ich speziell verwende, aber die Frage ist allgemein.

In meiner Anwendung habe ich einen Raspberry Pi Zero und einen Arduino, die ich für ein Automatisierungsprojekt verwenden möchte. Ich habe zwei der SSR-Module (HCMODU0115), wie das im Bild unten.

SSR

Ich habe sie mit meinen GPIO-Pins verbunden, ähnlich wie im Bild unten, und sie aktiviert, aber ich habe festgestellt, dass beide LEDs unabhängig von der Ausgabe meiner Controller leuchteten. Nur dass die LED im aktiven Zustand zu 100% hell waren und im inaktiven Zustand auf halber Helligkeit, aber immer noch eingeschaltet.

Verdrahtung

Aus Neugier entschied ich mich, ein Paar Dioden in die Kanaleingänge zu schalten, wie im Bild unten, aber dann würden die Relais überhaupt nicht aktivieren.

Prüfung 1

Dann entschied ich mich, die Dioden zu invertieren und plötzlich begann das Relaismodul wieder zu arbeiten, aber diesmal funktionierten die LED1 und LED2 so, wie sie sollten, nur wenn sie aktiv waren.

Prüfung 2

Daraus ergeben sich für mich zwei Fragen.

Erstens, ist es sicher, dieses Relaismodul direkt an meine Steuerungen anzuschließen? Warum leuchten die LEDs immer?

Zweitens, warum funktionierte es nur, wenn ich die Dioden umkehrte? Hat es etwas mit der Richtung des Elektronenflusses zu tun?

Dies hat wahrscheinlich mit nicht übereinstimmenden Logikpegeln zu tun, bei denen ein 3v3-MCU-Ausgang für einen 5-V-Optokopplerantrieb immer noch etwas "niedrig" aussieht (bis Sie einen zusätzlichen Diodenabfall hinzugefügt haben, der verhindert, dass die LED ihr Durchlassspannungsknie erreicht). Aber Fragen zu nicht dokumentierten Produkten sind hier kein Thema. Sie könnten versuchen, sie mit einem Open-Collector- oder Open-Drain-Schaltkreis anzutreiben, aber die eigentliche Lektion besteht darin, keine Dinge zu kaufen, es sei denn, sie werden entweder a) mit Dokumentation geliefert oder b) Sie sind zuversichtlich, dass Sie persönlich das nachbauen können, was Sie wissen müssen .
Hallo @Mauker, willkommen und schön dich kennenzulernen. Jetzt lass mich sehen. Ihre SSR-Spezifikation von Hobby Components besagt, dass Sie zum Ausschalten des SSR 3,5 V oder mehr benötigen. Rpi's High (auch der neuere 3V3 Arduino Mini Pro) beträgt jedoch nur 3 V < 3,3 V. Daher lässt diese Art Arduino-kompatibles Gerät (nicht nur Relais, sondern viele ähnliche Aktuatoren) so viele Rpi-Neulinge im Dunkeln weinen. Lesen Sie meine (nur halbfertige Antwort) für weitere Details. Übrigens, Ihre Frage ist sehr gut, mit allen Details und einer Problemumgehung. Beifall.

Antworten (2)

Frage

Das OP verfügt über ein auf niedrigem Pegel getriggertes SSR für 5-V-Arduino .

Das OP stellte fest, dass der 3V3 Raspberry Pi Zero (und 3V3 Arduino Mini Pro usw.) ihn einschalten, aber nicht ausschalten kann (wobei nur die Status-LED von hell auf gedimmt umschaltet).

Das OP stellte fest, dass das Hinzufügen einer Reihendiode am Eingangsanschluss das Problem löst. Warum?

/ weitermachen, ...


Antworten

Kurze Antwort

Teil 1 – Grundursache des Problems „Gerät kann nicht ausgeschaltet werden“.

Die Hauptursache ist die folgende.

Das Arduino-kompatible Gerät ist so konzipiert, dass es sich bei einem hohen Pegel von > 3,5 V ausschaltet (Anhang A).

Der High-Pegel von Rpi < 3,3 V ist jedoch nicht hoch genug , daher ist SSR immer eingeschaltet.


Teil 2 - Problemumgehungen

sr 2

Es gibt ein paar Problemumgehungen, darunter die folgenden:

(1) Fügen Sie einen seriellen Widerstand 4k7 am Eingangsanschluss (IN/CH1) hinzu

Problemumgehung 4k7

Erklärung: Das 4k7 verursacht einen zusätzlichen Abfall von 5 V auf Rpis 3 V (was konstant ist). Dieser zusätzliche Spannungsabfall macht die Spannung am IN/CH1-Anschluss höher als 3 V, sagen wir 3,5 V. Problem also gelöst.


(2) Wandeln Sie die 3.3-Logik von Rpi in 5 V um

Es gibt ein paar Möglichkeiten, einschließlich der folgenden:

(a)  Using a NPN BJT (eg 2N2222) in open collector mode, to pull up the 0V/3V signal to 0V/5V.  This method is only one directional, ie, output only.  

(b)  Using any MOSFET logical level converter module which is auto detect bidirectional (Ref 4).  

(3) GPIO in den Eingabemodus schalten, um SSR/Relais/Summer auszuschalten (Anhang C)

Wie oben erläutert, ist Rpi's High nicht hoch genug, um die Optokoppler-LED oder den Basis- / Emitter- / Kollektorstrom von PNP BJT abzuschalten. Eine Problemumgehung besteht darin, den GPIO einfach in den Eingangsmodus zu schalten, sodass kein Basisstrom sinkt, daher alles aus. Siehe Anhang C für die Summer-Fallstudie.

Warnung - Diese Problemumgehung, den GPIO-Pin in den Eingangsmodus zu schalten, um den SSR auszuschalten, birgt das Risiko, dass der GPIO-Schaltkreis blockiert , was früher oder später dazu führt, dass der Rpi fritiert oder die Lebensdauer des Rpi/s verkürzt wird.


Teil 3 – Diskussion, Schlussfolgerung und Empfehlung

Diskussion

/ weitermachen, ...


Abschluss

/ weitermachen, ...


Empfehlung

(1) Arduino-kompatible High-Level-ausgelöste Geräte haben fast immer nicht das High-Level-Signal-nicht-hoch-genug-daher-kann-das-Gerät-Problem-nicht-ausschalten.

Auf der anderen Seite haben Arduno-kompatible Low-Level-gesteuerte Geräte oft das obige Problem.

Daher ist für verwirrende Neulinge eine schnelle und schmutzige Empfehlung die folgende:

Um auf Nummer sicher zu gehen, besorgen Sie sich immer ein hochgradig ausgelöstes Gerät, wenn Sie die Wahl haben.


(2) Verwenden Sie nicht das Umschalten von GPIO in den Eingabemodus, um ein Latchen zu vermeiden

Um zu vermeiden, dass Ihr Rpi/3v3 Arduino Mini Pro verriegelt und fritiert, verwenden Sie nicht die Problemumgehung, indem Sie den GPIO-Pin in den Eingabemodus schalten (Einstellung durch Moduseinstellung oder Reinigungsfunktion), um das Gerät auszuschalten.

/ weitermachen, ...


Lange Antwort

/ weitermachen, ...


Verweise

Teil A - Allgemeines

(1) 5-V-Low-Level-Trigger (Omron G3MB-202P x 2) 2-Kanal-240-V-AC-Halbleiterrelais - HobbyComponents

(2) 5-V-Low-Level-Trigger (Omron G3MB-202P x 2) 2-Kanal-240-V-AC-SSR-Schema – HobbyComponents

(2.1) Halbleiterrelais G3MB – Omron

(3) Aktiver Arduino-kompatibler Summer, bei dem das High-Pegel-Signal von Rpi nicht hoch genug ist, um es auszuschalten


Teil B - Logischer Level Shifter (3V bis 5V)

(4) TXB0108 Bidirektionaler 8-Kanal-Logikpegelwandler – AdaFruit US$8

(5) HCT125 3 V bis 5 V Quad Level-Shifter – AdaFruit 1,50 US-Dollar

(6) HC03 Quad NAND Gartes mit Open-Drain-Ausgang (3 V bis 5 V logischer Pegelumsetzer)

(7) Darlington-Transistor-Arrays ULN2803A (Pegelumsetzer von 3 V auf 5 V) – TI

(8) UDN2981 8-Kanal-Quellentreiber (3 V bis 5 V logischer Pegelumsetzer – AllegroMicro

(9) Tutorial zur logischen Ebene – SparkFun

(10) Rpi GPIO Elektrische Spezifikationen – Mosiac Industries

(11) Bipolartransistor-Tutorial - Elektronik-Tutorials

/ weitermachen, ...


Anhänge

Anhang A – HobbyComponents Low Level Triggered SSR Spec

(1) Eingangsspez

Versorgungsspannung (DC- & DC+): 5V

Spannung des Eingangsschalters: 0 V bis 2,4 V

Eingangsfreigabespannung: 3,5 bis 5 V - Fehlerursache!

(2) Ausgangsspez

Nennlastspannung: 100 V bis 240 V AC

Laststrom: 0,10 bis 2A

Stoßstrom: 30 A (60 Hz, 1 Zyklus)


Anhang B – Das Problem „Hoch“ des Rpi/3v3Arduino ist nicht hoch genug

Die sehr traurige Geschichte begann in den guten alten glücklichen Tagen, als wir Bastler mit nur 5 V Arduino spielten und alle logischen Pegel eine Art 5 V TTL sind, war das Leben einfach.

Erst als 3V3 Raspberry Pi auftauchte und später auch 3V3 Arduinos (z. B. Pro Mini 328 3V3 8MHz) wurde das Leben unübersichtlich, besonders für die Oldies/Newbies, die nur die Arduino/TTL 5V Logik kennen.

Um zu verstehen, warum alle (na ja, fast) Neulinge verwirrt sind, müssen wir uns das folgende logische Pegeldiagramm genau ansehen, das die Grundursache der 3V/5V-Sorgen von Neulingen zeigt.


Diagramm der logischen Ebene

Drehzahl hoch


Konzentrieren wir uns auf die beiden Spalten ganz links, TTL und Arduino. Damals dachten meine Arduino-Freunde, dass das imperiale Arudino-Imperium glücklich bis ans Ende seiner Tage leben würde, und hätten nie gedacht, dass einige große Jungs wie Rpi bald auftauchen würden. Die Geschichte besagt also, dass die Arduino-Ingenieure einen neuen Standard/eine Spezifikation auf logischer Ebene entwickelt haben:

High level means at least 4.2V

Low level means at most 0.8V

Das Ergebnis ist, dass die meisten Geräte, z. B. Aktuatoren, einschließlich Relais, Solenoide, Summer usw., diese Spezifikation erfüllen, mit der (letzteren Rpi-Jungs beängstigenden) Anforderung, dass Sie 4,2 V oder mehr geben müssen, um etwas mit High-Pegel zu tun .

Natürlich macht das das Leben später geborener Rpis sehr elend, denn sie sind schwache 3V3-Typen, und ihr High-Pegel beträgt normalerweise 2,4 V bis höchstens 3,2 V. Dies bezeichne ich normalerweise als die

Das Problem „RPI ist hoch ist nicht hoch genug“.


Anhang C - Schalten Sie GPIO in den Eingabemodus, um den Summer auszuschalten

Summer immer an

Warum der aktive Summer immer eingeschaltet ist.

Die Hauptursache ist die Verwendung eines Arduino-kompatiblen aktiven Summers für Rpi. Für diesen Arduino-kompatiblen Summer ist er so konzipiert, dass er niedrig aktiv ist, dh wenn das Eingangssignal niedriger als etwa 1,0 V ist, wird der Summer eingeschaltet. Und wenn das Eingangssignal höher als etwa 3,5 V ist, wird der Summer ausgeschaltet. Jetzt hat Arduino kein Problem, denn sein High liegt bei etwa 4,2 V, deutlich über 3,5 V.

Jetzt ist Rpi in großen Schwierigkeiten, weil sein High nur etwa 3 V beträgt, keine Hoffnung, die erforderlichen 3,5 V zum Abschalten zu erreichen.

Problemumgehung

Einfach - fügen Sie einen 4k7-Widerstand (oder eine Diode, wie das OP vorschlägt) zwischen den Rpi-GPIO-Pin und den Eingang des aktiven Summers ein.

Schnelle und schmutzige Erklärung

Das Eingangs-Frontend der Summerschaltung ist sehr wahrscheinlich ein PNP BJT. Es ist so vorgespannt, dass, wenn das Eingangssignal zur Basis über einen Vorspannungswiderstand 3,5 V oder mehr beträgt, der Transistor abgeschaltet wird (Glückspilz Arduino High ist 4,2 V, daher eine saubere Abschaltung), kein Basisstrom fließt, also nicht genug Kollektorstrom, um den Piezo-Summer zu aktivieren.

Jetzt ist Rpi's High nur 3 V, daher nicht hoch genug, um eine saubere Unterbrechung zu haben, was zu einem gewissen Basisstrom und daher zu einem gewissen Kollektorstrom führt, um den Piezo teilweise / schwach zu aktivieren, daher das kleinere Summen.

Die Umgehung des Einfügens eines 4k7 zwischen Rpi GPIO und Eingang besteht darin, nicht einmal einen kleinen Basisstrom fließen zu lassen, um sauber abgeschnitten zu werden, also kein Ton.

Für den Aktivierungs- / Einschaltfall haben sowohl Arduino als auch Rpi einen niedrigen Pegel von weniger als 1 V, daher haben beide keine Probleme beim Einschalten.

Tatsächlich hat Rpi das gleiche Problem mit ein paar anderen Arduino-Geräten, einschließlich 5-V-Low-Level-Triggerrelais. Ebenso kann Rpi nur einschalten, aber nicht ausschalten. Der gleiche Trick beim Hinzufügen eines 4k7-Widerstands ist die schnelle Heilung. Eine andere Umgehung ist die folgende:

Um das Relais auszuschalten, anstatt GPIO High zu setzen,

Setzen Sie GPIO in den Eingabemodus

/ weitermachen, ...


Anhang D - Das Latching-up-Problem, das Rpi durchbrennt oder seine Lebensdauer verkürzt

Die Verwendung der Problemumgehung, den GPIO-Pin in den Eingangsmodus zu schalten, um das SSR oder Relais auszuschalten, birgt das Risiko, dass der Rpi-GPIO-Pin-Schaltkreis verriegelt oder die Lebensdauer von Rpi verkürzt wird. Der Grund dafür ist, dass das Anschließen eines GPIO-Eingangspins an 5 V, selbst über einen Widerstand, fatal sein kann, wie im folgenden Artikel erläutert wird.

Verriegelungsproblem

Latch-up-Problem


Anhang E – Warum verursachen Low-Level-Triggergeräte oft Probleme, aber nie High-Level-Geräte?

Problem mit niedrigem Auslöserelais

/ weitermachen, ...


Ende der Antwort

Die von mir verwendete Diodenumgehung funktionierte also aus demselben Grund wie die von Ihnen bereitgestellte Widerstandslösung? Danke auch für diese ausführliche Antwort :)
@Mauker, sorry für die späte Antwort. Ich habe Ihre Frage übersehen, weil ich zwischen ein paar Foren hin und her gesprungen bin und normalerweise vergesse, zurückzukommen, um nachzufassen. Wenn Sie das nächste Mal ein "@" vor meinem Benutzernamen einfügen , benachrichtigt mich das System sofort. Über die Verwendung der Diode anstelle eines Widerstands zur Problemumgehung. (1) Der Widerstand kann den Strom auf den vorgesehenen Wert reduzieren. (2) Eine Diode kann einen Spannungsabfall verursachen, um die ursprünglich vorgesehene Spannung zu erreichen. (3) Eine LED am Eingangsende könnte jedoch nur als Statusanzeige verwendet werden, die den Eingangsstatus anzeigt (und auch die Stromstatus-LED spart).

Hier ist der einfachste Weg, diese Arbeit zu erledigen – fügen Sie nur einen Teil hinzu (pro Ausgabe):

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Geben Sie hier die Bildbeschreibung ein

Das interne Schema des Moduls sieht ungefähr so ​​​​aus (von hier ):

Geben Sie hier die Bildbeschreibung ein

Das Omron SSR erhält etwa 0,7 oder 0,8 V weniger als die Versorgungsspannung und benötigt mindestens 4 V, um zuverlässig zu arbeiten, sodass es wirklich eine 5-V-Versorgung benötigt. Es beginnt ein paar Diodenabfälle unterhalb der Versorgung einzuschalten, also mehr als die maximale Ausgangsspannung der 3,3-V-MCU.

Hey! Danke für die internen Schaltpläne. Deine Lösung werde ich auf jeden Fall auch ausprobieren.