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.
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.
pinMode(motorPin, OUTPUT);
den Abschnitt setup() hinzuzufügen. HTH.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.
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.
Phil Frost
pwee92