Transistorschaltung zum Ein-/Ausschalten des Motors funktioniert nicht (Arduino)

Ich habe versucht, eine einfache Transistorschaltung mit einem 2N3904 zu erstellen, die einen Gleichstrommotor mit Getriebe ein- und ausschaltet, ohne Strom aus dem Arduino zu ziehen - ich bin dem Schema im zweiten Bild gefolgt.

(Breadboard-Ansicht)

(Schematisch)

Die Schaltung verhält sich nicht so, wie ich es erwarte. Zu Testzwecken habe ich die 5 V vom Arduino in den Basisstift (vor dem Widerstand) eingespeist, um den "Schalter" des BJT zu aktivieren. Dies treibt den Motor nur an, wenn ich einen niederwertigen Widerstand an der Basis habe (~ 10 Ohm). Wenn ich einen 1k-Widerstand verwende, schaltet sich der Motor nicht ein. Außerdem habe ich einen auf High gesetzten digitalen Pin verwendet, um zu versuchen, den Basispin mit Strom zu versorgen und den Motor ein- / auszuschalten, aber dies bewirkt nichts, unabhängig vom Wert des Widerstands.

Vielleicht ist meine Schaltung falsch? Ich möchte nur, dass die Schaltung den Motor ein- und ausschaltet, wenn ich ihm ein hohes Signal vom Arduino zuführe.

Hinweise: Das rote Kabel, das oben in den Knoten kommt, stammt von einer 9-V-Batterie. Der Massebus auf dem Steckbrett hat sowohl die Arduino-Masse als auch die Batteriemasse damit verbunden.

Welcher Motor? Datenblatt?

Antworten (4)

Ihr Motor, mit dem Sie verbunden sind, ist ein 4,5-V-190-250-mA-Motor (ohne Last). Bei 9 V steigt der Strom wahrscheinlich an. Du übersteuerst es um 200%. Und jede Belastung/jedes Gewicht führt dazu, dass auch die Stromanforderungen steigen. Der Stallstrom ist wahrscheinlich mindestens das 10-fache.

Ihnen fehlt die Schutzdiode über dem Motor, die den Transistor leicht töten kann.

Der von Ihnen verwendete Transistor ist ein 100-mA-Standard, 200 mA absolutes Maximum . Einer dieser Motoren allein ohne Last kann diesen Transistor leicht töten.

Der Basiswiderstand berechnet sich zu (Base Voltage - Base-Emmiter Voltage) / Current required. Die Basisspannung ist der Arduino-Pin, also 5 V, Vbe hängt vom Kollektorstrom ab, der hier 200 mA beträgt, also typischerweise 1 V. Der erforderliche Strom wird als Kollektorstrom (200 mA) / Hfe (aus Datenblatt, 10 ~ 30) berechnet. Gehen wir sicherheitshalber mit 10, also 200 / 10 = 20mA werden an der Basis benötigt.

(5V - 1V) / 20mA oder 4V / 0,02A = 200Ω Widerstand. Ein 1-kΩ-Widerstand würde nur 4 mA an der Basis zulassen, was multipliziert mit Hfe von 10 nur 40 mA am Kollektor zulassen würde, was wahrscheinlich nicht ausreicht, um den Motor einzustellen.

TLDR: Sie brauchen die Schutzdiode, Ihre 9-V-Stromquelle ist zu hoch und Ihr Transistor ist zu schwach für den verwendeten Motor. Und Sie brauchen einen größeren Widerstand an der Basis, weil der Motor mehr Strom benötigt, als Sie denken. Ein gewöhnlicher 2n2222-Transistor mit einem 470-Ω-Widerstand würde viel besser abschneiden.

Bearbeiten: Wenn Sie den Pin nicht zu einem Ausgang machen, wird dies ebenfalls gedämpft. Antwort, Arduino-Pins werden standardmäßig eingegeben.

Ganz zu schweigen davon, dass eine 9-V-Batterie nicht annähernd 250 mA liefern kann.
Hallo Passant, ich habe heute alle diese Änderungen implementiert - einen 1n4001 parallel zum Motor und Kondensator hinzugefügt, gemäß der in diesem Video gezeigten Schaltung: youtube.com/watch?v=5bHPKU4ybHY , den 2n3904 durch einen 2n2222 ausgetauscht und geändert den Basiswiderstand auf 470 Ohm. Ich habe aber immer noch das gleiche Problem. Wenn ich die Basis mit den 5 V vom Arduino füttere, schaltet sich der Motor ein, aber das Einspeisen eines HIGH-Signals von einem digitalen I / O-Pin ergibt nichts. Ich stecke schon wieder fest :s
@ pwee92 das lässt es wie ein Codeproblem erscheinen. Der Arduino GPIO-Pin ist ungefähr derselbe wie VCC oder 4,9 Volt und kann genug für diesen Widerstand liefern. Es sollte keinen Unterschied geben. Wenn Sie anstelle des Transistors eine LED + diesen 470-Ω-Widerstand einsetzen, leuchtet sie auf? Kannst du deinen Code posten?
Ich werde die LED ausprobieren, wenn ich heute Abend nach Hause komme und mich bei Ihnen melden, danke für all Ihre bisherigen Beiträge übrigens. Ich habe meinen Code hier eingefügt: pastebin.com/HwudHKSU
@ pwee92 Ich bin kein Experte für Arduino, aber es sieht so aus, als hätten Sie vergessen, den Motor-Pin als Ausgang zu deklarieren . Es ist standardmäßig auf Eingabe eingestellt, und die Verwendung von digitial_write high an einem Eingangspin ermöglicht einen schwachen 20k-Pullup, der nicht ausreichen würde, um irgendetwas zu tun. Versuchen Sie, pinMode(motorPin, OUTPUT);den Abschnitt setup() hinzuzufügen. HTH.
Oh Mann. Es sind immer die einfachen Dinge, nicht wahr? Ich denke, deshalb ist ein zweiter Blick so entscheidend. Danke!
@pwee92 passiert jedem. Alle anderen Dinge sind jedoch immer noch gültig, dieser mickrige 3904 ist besser dran, wenn er durch den n2222, den Widerstand, die Diode usw. ersetzt wird.

Die wahrscheinlichste Erklärung ist, dass der Motor mehr Strom benötigt, als der Transistor liefern will. Hast du den Motorstrom gemessen?

Es kann auch sein, dass der Motor mehr Strom benötigt, als Ihre 9V-Batterie liefern kann. Hast du den Motor direkt mit der 9V Batterie betrieben?

Die zweitwahrscheinlichste ist, dass die Gegen-EMK vom Motor den Transistor zum Platzen gebracht hat. Ersetzen Sie den Motor durch eine kleine Glühlampe und sehen Sie, ob Sie etwas Licht ins Dunkel bringen können.

Legen Sie eine in Sperrrichtung vorgespannte Diode über den Motor. Ich würde wahrscheinlich zu einem 1N4001 oder ähnlichem greifen.

Hallo John, ich habe den Motorstrom nicht gemessen, da ich im Moment keinen Zugang zu einem Multimeter habe (meins scheint kaputt zu sein). Ich habe den Motor ohne Probleme direkt mit 9 V betrieben, daher denke ich, dass er für diese Anwendung genügend Strom liefern sollte. Mein Verständnis ist, dass, da die 9 V den Strom liefern, wenn die Basis ausgelöst wird, dieser gesamte Strom fließen sollte? Es scheint jedoch, dass der dem Motor zugeführte Strom eine Funktion des Stroms in der Basis ist. Ich werde eure Vorschläge bei Gelegenheit ausprobieren. Beifall.
Ich weiß nicht, wo du wohnst. Wo ich wohne, kosten akzeptable chinesische DVMs im örtlichen Werkzeugladen etwa zehn Dollar pro Stück.
Verdammt, Hafenfracht verschenkt ihre 5-10 Dollar (Coupon in ihrem Flyer) wie jede andere Woche. @JohnR.Strohm

Für das, was es wert ist, denke ich, dass N-Kanal-MOSFETs mit Logikpegel-Gattern für diese Art des Treibens viel einfacher zu verwenden sind als NPN-Transistoren. Ein 1-Kiloohm-Widerstand würde für die Basis gut funktionieren, da nur eine geringe Ladungsmenge erforderlich ist, um den MOSFET zum Leiten zu bringen, und dann zieht er im Grunde nichts.

Der BS170 (ähnlich 2N7000) ist in einer 500-mA-Version erhältlich, die sich hervorragend für allgemeine Experimente eignet, und Sie können 25 für ein paar Dollar kaufen. Der N-Kanal-MOSFET IRLB8721 eignet sich hervorragend zum Ansteuern größerer Dinge (leicht über 10 Ampere ohne Kühlkörper) und kostet jeweils etwa einen Dollar. Zu guter Letzt möchten Sie wahrscheinlich einen 220-Ohm-Widerstand in das Gate davon, um es schön und schnell einzuschalten.

Möglicherweise haben Sie zu viel Vertrauen in den Transistor investiert. Wenn ich mir das Datenblatt für den 2N3904 ansehe, hat er einen maximalen Kollektorstrom von 200 mA, was Ihr Gleichstrommotor bekommt. Gleichstrommotoren sind Hochstromgeräte. Versuchen Sie herauszufinden, wie viel Strom zum Drehen dieses Motors erforderlich ist.

Der Kollektorstrom des Transistors ist eine Funktion des Stroms zur Basis des Transistors. Denken Sie daran, dass B*I(b) = I(c).

Wenn Sie den 5-V-Pin vom Arduino verwenden, verbinden Sie sich direkt mit dem Ausgang des integrierten LDO. Dies ist viel besser geeignet, um Ihren Gleichstrommotor anzutreiben, weshalb dieser Pin funktioniert (höherer Basisstrom entspricht höherem Kollektorstrom).

Der Arduino kann jedoch nur maximal 40 mA pro I / O-Pin ausgeben. Ich habe den maximalen Strom des LDO nicht überprüft, bin mir aber sicher, dass er viel höher ist.

Hier ist das Schema als Referenz: Arduino Schematic

Wie auch immer, der pragmatischste Rat, den ich geben kann, ist, dass Ihr Transistor nur zum Antreiben kleiner Spielzeugmotoren verwendet werden sollte. Wenn Sie einen Gleichstrommotor von Wert haben, müssen Sie ein Relais oder einen robusteren Transistor verwenden.

Hallo Nick, der Motor, den ich verwende, ist für Spielzeug-/Roboterzwecke - jameco.com/webapp/wcs/stores/servlet/… Ich denke, dass der Strom, der vom I/O-Pin gegeben wird, ausreichen sollte, insbesondere bei Tutorials wie diesem: youtube.com/watch?v=5bHPKU4ybHY Ich habe versucht, diesem Beispiel genau zu folgen (abzüglich der Diode, ich kann gerade keine greifen), aber ohne Erfolg.
Theoretisch sollte an dieser Stelle alles funktionieren. Was Sie tun müssen, ist ein Multimeter zu kaufen und den Strom zu messen, der durch den Gleichstrommotor fließt. Sie müssen sicher wissen, ob der Motor ausreichend versorgt wird oder nicht. Viel Glück.
Ich werde versuchen, so schnell wie möglich ein Multimeter zu bekommen, danke. Wenn der vom Arduino-Pin bereitgestellte Strom nicht ausreicht, haben Sie Vorschläge, was ich tun sollte (möglicherweise einen anderen Ansatz)? Mein Projekt dreht sich um das Ein- und Ausschalten des Motors basierend auf der in meinem Arduino-Programm geschriebenen Logik
@PhilFrost Ja, das war ein überstürzter Kommentar, den ich gemacht habe, und ich war nicht sehr spezifisch; Meine Absicht war nicht auf alle Transistoren gerichtet, sondern auf den spezifischen Transistor. Ich werde eine Bearbeitung vornehmen.
@ pwee92 Sie werden den Strom vom Arduino nicht messen. Sie sollten den Strom zum Kollektor messen, da dies der Strom ist, den der Motor erhält. Sie sollten auch den Kommentar des Passanten zur Spannung am Motor berücksichtigen.