NPN-Transistor hochziehen (während des Einschaltens des Mikrocontrollers)

Ich verwende einen ESP8266-01, um ein 3,3-V-Relais über einen 2N2222A-NPN-Transistor zu steuern. Die ESP8266 GPIOs verwenden einen 3,3-V-Logikpegel.

Geben Sie hier die Bildbeschreibung ein

Die Idee ist, dass ich durch Setzen von GPIO2 auf hi/lo den Transistor sättigen/abschalten und das Relais steuern kann. Dies funktioniert gut - solange ich GPIO2 nach dem Start an den Transistor anschließe, da GPIO2 während des Einschaltens auf Hi gehalten werden muss, um normal vom Flash zu booten ( http://robertoostenveld.nl/esp-12-bootloader-modes/ ). Ich habe ein Konzept, dass ich wahrscheinlich einen Pull-up am Pin haben muss, aber ich bin verwirrt darüber, wie GPIO2 auf Hi gehalten werden kann, ohne dass der Transistor immer im gesättigten Zustand ist (dh wie kann ich dann GPIO2 niedrig machen ... ). Was ist hier die beste Vorgehensweise?

Außerdem habe ich - unabhängig davon - festgestellt, dass in vielen Diagrammen von Relaistreiberschaltungen mit Transistoren ein Widerstand zwischen GPIO und Transistor vorhanden ist. Irgendein guter Grund dafür? Alles funktioniert wie es ist, aber vielleicht fehlt mir etwas.

BEARBEITEN: Zur Verdeutlichung besteht das Problem darin, dass die Schaltung wie beabsichtigt funktioniert, wenn ich das ESP booten lasse und dann GPIO2 mit Q1 verbinde. Das Problem tritt auf, wenn ich versuche zu booten, während GPIO2 verbunden ist (dh wie in dem von mir bereitgestellten Diagramm gezeigt). In diesem Fall wird GPIO2 vermutlich auf einen niedrigen Wert gezogen, was zu einem falschen Boot-Modus führt.

GPIO2 ist wahrscheinlich irgendwo auf diesem Modul hochgezogen (für den normalen Betrieb). Sie müssen also mit dieser Tatsache leben. Wenn Sie diesen Pin zum Ansteuern eines BJT verwenden möchten, müssen Sie damit rechnen, dass er "inaktiv hoch" und "aktiv niedrig" ist. Sie müssen also die Dinge so arrangieren, dass das Gehen auf LOW das Relais aktiviert. Sie können ein PNP verwenden, um dies zu erreichen. Es wäre hilfreich zu wissen, welche Art von Klimmzügen sie verwenden. Sie können jedoch einen Widerstand zur Masse hinzufügen und den Strom darin (oder die Spannung darüber) messen, um die Details dort auszuarbeiten.
Nun, die einfachste Lösung ist, den anderen Pol des Relais zu verwenden. OP hat das SPDT-Relais gezeigt, also benutze es einfach "rückwärts".
Bitte sehen Sie sich meine Bearbeitung an, das erste Problem ist der Boot-Modus.
Einfacher + effektiver Weg: Ersetzen Sie den Draht durch eine Diode

Antworten (3)

Sie müssen einen Widerstand zwischen dem GPIO-Ausgang und der Basis des Transistors hinzufügen. Wenn die Basis des Transistors mit 3,3 V angesteuert würde, würden einige Ampere abfließen und entweder der Transistor oder die MCU würde durchbrennen. Wenn es nicht durchgebrannt ist, bedeutet dies wahrscheinlich, dass etwas den Strom am GPIO-Ausgang begrenzt, aber ich würde es nicht empfehlen, davon abhängig zu sein.

Wenn Ihre MCU dies benötigt, können Sie GPIO2 natürlich einen Pull-up-Widerstand hinzufügen. Solange sein Wert hoch genug ist (10k ist Standard für mich), kann die MCU den Pin auf Anfrage leicht nach unten treiben.

Der Schaltplan wäre in etwa so:

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Bearbeiten: R2 sollte viel niedriger als R1 sein, aber immer noch hoch, also habe ich die Werte festgelegt und den einzelnen Transistor durch eine Darlington-ähnliche Struktur ersetzt, um eine ausreichend hohe Verstärkung zu haben, um das Relais richtig anzusteuern.

schematisch

Simulieren Sie diese Schaltung

Ich vermute, dass sein Problem darin besteht, dass das Relais nur für einen Moment ausgelöst wird, während die CPU hochfährt. Es ist ein Modul, das verschiedene Betriebsmodi ermöglicht, wenn eine externe Schaltung während der Einschaltsequenz einige Leitungen steuert. Ich denke also, dass das Modul einen externen Widerstand gegen Vcc enthält, um sicherzustellen, dass GPIO2 im normalen Betrieb hochgezogen wird. (GPIO2 wird als Eingang eingeschaltet und von der CPU überwacht, um Modi zu bestimmen.) Er kann es in Software umkehren. Das ist aber nicht sein Problem, wie ich es gelesen habe. Bevor er sich beherrschen kann, hat er Probleme.
@jonk Du hast vielleicht Recht, aber so lese ich die Frage des OP nicht. Mal sehen, wie er auf Ihren Kommentar und meine Antwort reagiert…
Ich ging zu seinen Links und schaute. Ich vermute, dass ich Recht habe und die Worte des OP jetzt noch einmal sorgfältiger gelesen habe. Aber ja, ich könnte projizieren.
Hey, mit der gemäß Ihrem Beispiel konfigurierten Schaltung erhalte ich immer noch den falschen Startmodus. Also wird GPIO2 in dieser Schaltung irgendwie niedrig gezogen, denke ich? Ich stelle auch fest, dass das direkte Anschließen von GPIO2 an Vcc (3,3 V) ebenfalls zu einem korrekten Start führt, also sollte es auf jeden Fall hi sein.
Eigentlich ... mit R1 vorhanden, kann ich das Relais nicht auslösen. Wenn ich den GPIO2 direkt an die Basis anschließe, kann ich das tun. Der Strom von GPIOs beträgt meiner Meinung nach ~ 12 mA. Dies ist wieder der Fall, wenn ich R1 nach dem Booten einsetze, damit der richtige Boot-Modus eingegeben wird.
Machen Sie r1 200 Ohm für 12 mA Antrieb.
@guywhoneedsahand Wie Passerby sagte, ist R1 möglicherweise zu hoch, um den Transistor das Relais ansteuern zu lassen. Mit 1 kΩ erhalten Sie ungefähr 2,6 mA Basisstrom, was ungefähr 200 mA Kollektorstrom zulassen sollte. Wenn dies nicht ausreicht, um das Relais anzusteuern, müssen Sie einen kleineren Widerstand verwenden oder (besser) eine Darlington-ähnliche Konfiguration verwenden.
@guywhoneedsahand Was den Boot-Modus angeht, blöd! R2 sollte (deutlich) kleiner als R1 sein. Aber R2 sollte auch etwas hoch sein, um den Leckstrom zu begrenzen, wenn GPIO2 niedrig ist. Daher ist es richtig, eine 2-Transistor-Verstärkung zu verwenden, entweder in einer Darlington(-ähnlichen)-Konfiguration oder in einer Inverter-Konfiguration, wie von Michael Karas vorgeschlagen.

Was Sie tun möchten, ist, Ihren GPIO2 mit dieser Schaltung an das Relais anzuschließen. Dadurch kann GPIO2 beim Einschalten auf fast 3,3 V hochziehen, aber nicht auf das Relais klicken. Dann, wenn die Software in der MCU bereit ist, das Relais zu aktivieren, muss es eine '0' an den GPIO2-Pin ausgeben. Das Widerstandspaar R1/R2 muss wie gezeigt im Verhältnis dimensioniert werden, damit der GPIO2 tatsächlich hochgezogen werden kann. (Die Schaltung in der anderen Antwort hat diese rückwärts und erlaubt GPIO2 nicht, in die Nähe eines gültigen Hochs zu gelangen).

Geben Sie hier die Bildbeschreibung ein

Ich werde das bald versuchen. Also "invertieren" die Doppeltransistoren das GPIO-Signal im Grunde? In dem Sinne, dass ein niedriger GPIO dazu führt, dass Q1 abgeschaltet wird, was bedeutet, dass Q2 gesättigt ist? Oder verstehe ich das falsch?
Du verstehst genau. Der zusätzliche Transistor invertiert das Signal vom GPIO, sodass der Einschaltzustand mit dem Pullup als inaktiver Relaiszustand fungiert.
Ich habe die Schaltung gesteckt. Das Booten funktioniert einwandfrei, aber ich kann das Relais nicht zum Umschalten bringen. Führt die Tatsache, dass Vcc am Relais = +3,3 V ist, dazu, dass Q2 nicht richtig funktioniert ...?
Ich kann nicht erraten, was falsch ist. Es scheint, dass Sie die Ärmel hochkrempeln und die Schaltung debuggen müssen. Es besteht die geringe Möglichkeit, dass der GPIO2-Ausgang der MCU oder der ursprüngliche 2N2222, den Sie in der ursprünglichen Schaltung verwendet haben, beeinträchtigt oder verbrannt wurden, weil Sie keinen Basiswiderstand zur Strombegrenzung haben. Außerdem scheint die Relais-Teilenummer in Ihrem Schaltplan auf eine 9-V-Relaisspule hinzuweisen, die wahrscheinlich nicht richtig funktioniert, wenn Sie versuchen, sie mit 3,3 V zu betreiben.
Das Relais hat 3,3 V, ich habe nur nicht das eigentliche Teil in den Eagle-Schaltplänen, also habe ich ein ähnliches Relais mit den gleichen Stiftabmessungen ausgewählt. Guter Punkt zum Burnout - ich werde versuchen, sowohl die MCU als auch die 2n2222s auszutauschen.
Gut zu hören, dass es sich um eine 3,3-V-Relaisspule handelt. Irgendeine Ahnung, wie hoch die Stromaufnahme der Spule bei 3,3 V ist? Viel Erfolg beim weiteren Testen.
@MichaelKaras Ich mag diese Schaltung sehr, da ich das gleiche Problem wie OP habe. Aber ich verstehe es nicht - können Sie mir bitte sagen, warum Q1 das Eingangssignal „invertiert“? Warum also Q2 sättigen, wenn Q1 abschneidet? Besten Dank!
@ alve89 - Q1 invertiert, denn wenn der GPIO hoch ist, schaltet er Q1 ein und der Kollektor von Q1 geht auf einen niedrigen Wert in der Nähe von GND. Im umgekehrten Zustand, wenn der GPIO niedrig ist, schaltet sich Q1 aus und der Kollektor wird über R3 hochgezogen. Da die Basis von Q2 direkt mit dem Kollektor von Q1 verbunden ist, erreicht die Spannung am Boden von R3 nicht das, was normalerweise als "hoher" Spannungspegel angesehen wird; dh der Basis-Emitter-Übergang von Q2 klemmt die Spannung auf etwa 0,7 V bis 0,8 V. (Fortsetzung)
(Fortsetzung von oben) Nichtsdestotrotz ist das Schwingen des Q1-Kollektors zwischen nahe GND und dem geklemmten "High"-Pegel mehr als geeignet, um Q2 ein- und auszuschalten.

Offensichtlich zieht der Basis-Emitter-Übergang {Lesediode} des NPN GPOI2 auf Masse. UND wenn der GPIO-Ausgang hoch ist, gibt es keine ordnungsgemäße Strombegrenzung für diesen Ausgang.

Selbst bei 10k Pullup hätte der 1k-Serienwiderstand nur ca. 0,3 V darüber (vorausgesetzt, er ist geerdet), es wird jedoch auch eine Basis-Emitter-Spannung von ca. 0,5 V vorhanden sein, sodass das Endergebnis immer noch ca. 0,8 V am IO-Pin beträgt. Wird das immer noch das Startproblem verursachen? Es ist sicherlich nicht das, was ich hochgezogen nennen würde.

Der Vorschlag, einen PNP-Transistor zu verwenden, könnte sinnvoll sein, wenn Sie mehr Spannung zum Spielen haben, aber dennoch einen Vorwiderstand zur Strombegrenzung einbauen möchten, was jedoch weniger Spannung zum Ansteuern des Relais bedeutet.

Am Ende wäre es besser, einen FET zu verwenden, da kein Gate-Strom fließt und kein Vorwiderstand erforderlich ist. Sie müssen sich nur entscheiden, ob Sie High-Side- oder Low-Side-Schaltung und damit P- oder N-Kanal-FET verwenden möchten.

Da Sie den GPIO-Pin zuerst High wollen, aber das Relais nicht aktiviert ist, sollten Sie einen P-Kanal-FET in High-Side-Schaltkonfiguration verwenden und das Gate auf Low ziehen, um das Relais anzusteuern. Den Pullup-Widerstand nicht vergessen

OK. Ich habe noch nie einen FET verwendet - können Sie auf ein geeignetes Beispiel oder eine Ressource verweisen, in der ich lernen kann, wie man als Schalter verwendet? Danke!
Nun, electronic.stackexchange.com/questions/67343/… sieht so aus, als würde es dies ansprechen.
Wäre dies: cdn.sparkfun.com/datasheets/Components/General%20IC/… ein geeigneter Teil zur Verwendung? Bitte sehen Sie sich die Schaltung an: imgur.com/TGPP0Te . Ist ein Vorwiderstand zwischen GPIO2 und Gate notwendig? Und ist die Flyback-Diode noch notwendig?
(Offensichtlich unter der Annahme, dass ich meine Programmierung der MCU umkehre, bleibt GPIO2 auf Hi, bis ich das Relais einschalten möchte.)
Serien-Gate-Widerstände auf MOSFETs können für große Leistungs-FETs benötigt werden, die eine enorme Gate-Kapazität haben, um die Stromstöße zu begrenzen, die auftreten, wenn versucht wird, das Gate schnell zwischen verschiedenen Spannungspegeln zu schwingen. Kleinsignal-MOSFETs können oft ohne Serien-Gate-Widerstände verwendet werden. Sie benötigen immer noch die Flyback-Diode, um die schnellen induktiven Spitzen zu verhindern, die Transistoren töten können.