Wie kann man die Geschwindigkeit eines 12-V-Gleichstrommotors mit einem Arduino steuern?

Ich versuche herauszufinden, wie man die Geschwindigkeit eines 12-V-Gleichstrommotors mit einem Arduino und einer 12-V-Batterie steuert.

Ich möchte die „Power“- und „Control“-Teile der Schaltung aufteilen, damit der Arduino und die Sensoren nur 5 V erhalten.

Bisher habe ich folgendes versucht:

Geben Sie hier die Bildbeschreibung ein

Ich kann die Geschwindigkeit des Motors steuern, indem ich die PWM von Pin 3 auf dem Arduino ändere. Dies öffnet den NPN-Transistor ( BUF654 ).

Das Problem ist, dass sich die Drehzahl des Motors nicht genug ändert.

Von 0 % bis 50 % PWM an Pin 3 wird der Motor abgewürgt.

Über 50 % erreicht der Motor fast seine maximale Drehzahl.

Ich frage mich, ob ich eine lineare Variation haben könnte:

0% - 10% : very slow
10% - 20% : slow
20% - 50% : normal speed
50% - 80% : fast
80% - 100% : RELEASE THE KRAKEN!

Hier sind die Spannung und der Strom, den der Motor zieht, wenn nur eine Batterie oder die vorherige Schaltung verwendet wird:

+----------------------------+---------+--------+
| Directly on 12V battery    | 12.7 V  | 61 mA  |
+----------------------------+---------+--------+
| Arduino circuit (100% PWM) | 12.47 V | 60 mA  |
+----------------------------+---------+--------+
| Directly on 9V battery     | 9 V     | 54 mA  |
+----------------------------+---------+--------+
| Arduino circuit (60% PWM)  | 9 V     | 52 mA  |
+----------------------------+---------+--------+

Was habe ich falsch gemacht? Kann das Problem von meinem Motor kommen?

Ist diese Diode über den Transistor geschaltet?
Ja ist es. Es verhindert eine Beschädigung der Komponenten, wenn der Motor stoppt (Stromumkehr).
Gibt es einen besonderen Vorteil, diesen Transistor anstelle des klassischen L293D zu verwenden?
Ich bin ziemlich neu in Sachen Transistoren und kenne die «klassischen» nicht. Gibt es einen Grund, den L293D zu verwenden?
Eingebaute Klemmdioden, Möglichkeit zur Richtungsumkehr. Ich weiß nicht, ob BUF654 dafür eine gute oder schlechte Wahl ist. Aber das L293D-Datenblatt zeigt speziell Antriebsmotorspulen als Hauptanwendung, während das BUF654-Datenblatt dies nicht tut.
Nur eine Freundliche Erinnerung. Obwohl Ihre Frage hier gut aufgenommen wurde, wäre es noch besser gewesen, wenn Sie anstelle eines Fritzing-Schaltplans einen richtigen Schaltplan Ihrer Schaltung gepostet hätten. Hier sind einige Regeln und Richtlinien zum Zeichnen guter Schaltpläne und gute Werkzeuge zum Zeichnen von Schaltplänen .

Antworten (3)

Ihre Diode befindet sich in der falschen Position - sie sollte über dem Motor liegen (blockieren!), Nicht über dem Transistor.

Der Zweck der Diode besteht darin, dass der in der Motorspule fließende Strom weiter in die gleiche Richtung fließen kann, wenn der Transistor abschaltet. Wenn der Transistor abschaltet, steigt die Spannung am Transistorkollektor an, da sie aus dem Motor geflossen ist. Aus v C E ( S A T ) Es steigt über die Versorgungsspannung und stoppt nur, wenn der Transistor durchbricht (oder wenn er mit parasitärer Kapazität zu klingeln beginnt). Indem Sie eine Diode vom Transistorkollektor zur +12-V-Schiene legen, verhindern Sie, dass die Spannung am Transistor 12 V überschreitet, und lassen den Motorstrom weiter fließen.

So wie Sie die Diode in Ihrem Bild haben, würde sie nur leiten, wenn die Spannung unter die Erde gehen würde. Das könnte nur passieren, wenn jemand den Motor mechanisch sehr schnell in die umgekehrte Richtung dreht (und Ihre Diode würde dazu führen, dass die Spannung auf der 12-V-Schiene dadurch ansteigt).

Ich verstehe nicht, warum es über dem Motor sein sollte, da es sich in beide Richtungen drehen soll (mit einem DPDT-Schalter NACH dem Transistor). Viele Tutorials, die ich gelesen habe, verwendeten die Diode über dem Transistor, um Schäden an den Komponenten zu vermeiden. Wenn ich etwas übersehen habe, können Sie es mir bitte erklären?
Okay, es sollte JETZT gegenüber dem Motor sein. Wir haben keine Möglichkeit zu wissen, was Sie vorhaben. Wenn Sie einen DPDT-Schalter hinzufügen, liegt dieser über den gemeinsamen Klemmen des Schalters (oder einfacher vom Transistorkollektor zur +12-Schiene).
Ich verstehe Ihren Punkt, aber ich verstehe nicht, warum es etwas ändern würde. Der einzige Unterschied in diesem Fall besteht darin, dass verhindert wird, dass Strom durch den Transistor fließt, wenn er umgekehrt ist. Wenn ich die Diode über den Motor (oder in meinem Fall den DPDT-Schalter) lege, könnte das den Transistor beschädigen, wenn zu viel Strom zurückfließt?
Danke für deine Bearbeitung, es ist jetzt viel klarer :) Ich werde es versuchen. Ich glaube, ich habe den Zweck dieses winzigen Dings missverstanden.
Nein, es schützt den Transistor. Strom, der durch Ihren Motor fließen sollte (Drehmoment erzeugend), wird größtenteils durch Erhitzen des Transistors verschwendet. Deshalb bekommst du nicht viel Drehmoment.

Obwohl sich die Diode in einer ungewöhnlichen Position befindet, funktioniert die Schaltung gut. Normalerweise wird die Diode über die induktive Last gelegt - dh über die Motorstifte - sehr nahe am Motor (wenn Sie lange Drähte verwenden, ist dies wichtig). Dies hilft, elektrische Spitzen zu unterdrücken, die vom Motor erzeugt werden, wenn Sie ihn stoppen, aber er dreht sich weiter und fungiert für einen sehr kurzen Bruchteil der Zeit als Generator.

Diese Spikes können Ihren Transistor töten. Die andere Lösung - was Sie getan haben - besteht darin, den Transistor selbst zu schützen.

Beachten Sie, dass es unmöglich ist, einen Gleichstrommotor sehr langsam drehen zu lassen. Dies ergibt sich aus dem mechanischen Aufbau des Motors. Wenn Sie einen Motor ohne Getriebeuntersetzung verwenden, werden Sie feststellen, dass 30%-100% pwm einen Unterschied machen, während 0..30% nichts bewirken. Bei einem Getriebemotor (die Zahnräder sind zusätzliche Last) müssen Sie möglicherweise auf 50 % gehen, um ihn zum Starten zu bringen.

Sie können ein paar Dinge tun:

  • Verwenden Sie die Map-Funktion, um Ihren 0..100%-Leistungsbedarf auf 50..80% des PWM-Ausgangs abzubilden. Beachten Sie, dass die Geschwindigkeit nicht immer linear zum PWM-Eingang ist, daher benötigen Sie möglicherweise eine Linearisierungstabelle, um dies zu beheben.
  • Wenn Sie einen Motor haben möchten, der sich extrem langsam drehen kann, sollten Sie einen Schrittmotor verwenden. Wenn Sie extrem langsamen und mittleren Bereich benötigen, ist dies gut.
  • Wenn Sie extrem langsam bis extrem schnell brauchen, sollten Sie besser mit zwei Motoren und einem Differentialgetriebe fahren, wenn Sie gut in der Mechanik sind
  • Eine andere Lösung besteht darin, einen Drehstrommotor zu verwenden und diesen mit dem Mikrocontroller anzutreiben. Diese Lösung ist kein Einsteigerthema, sondern die De-facto-Lösung für heutige Elektrofahrzeuge. Der Trick ist, dass die Motorwicklungen immer bestromt sind, daher haben Sie ein konstantes Drehmoment. Während Sie die Frequenz der antreibenden Wellenform ändern, haben Sie eine sehr präzise Kontrolle über die Geschwindigkeit.

Kann es Haftreibung sein? Was passiert, wenn Ihre Arduino-Skizze zuerst den Motor startet (maximale PWM) und dann über mehrere Sekunden langsam abnimmt?

Meine Erfahrung ist, dass es sehr schwierig ist, einen Gleichstrommotor langsam laufen zu lassen (es sei denn, Sie haben natürlich eine Positionsrückmeldung oder Zahnräder).

Entschuldigung, meine erste Frage war nicht klar genug. Ich benutze Zahnräder und die sehr langsame Bewegung, die ich möchte, kommt aus dem Getriebe.