Steuerung eines kernlosen Gleichstrommotors mit PWM und Mosfet

Ich verwende 4 Si2302- Mosfets mit Logikpegel, um 4 kernlose Gleichstrommotoren anzutreiben. Die Drehzahl der Motoren wird durch das PWM-Signal eines Arduino Pro Mini gesteuert. Die Stromversorgung für die Boards ist ein 3,7 V (4,2 V bei voller Ladung) 500 mAh 50C Lipo.

Die Schaltung ist wie folgt aufgebaut:

  • Quelle auf Masse
  • Gate zum PWM-Pin mit einem 10-kΩ-Widerstand gegen Masse.
  • Ablauf an Motorklemme 1
  • Motorklemme 2 an Vcc
  • Diode über den Motorklemmen platziert

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Der Motor erhält seinen Drehzahlwert über einen Joystick, der mit einem Analogeingang des Arduiuno verbunden ist. Dieser wird dann in einen 0-255 Wert umgewandelt und am PWM-Ausgang ausgegeben.

Ich habe folgende Probleme mit der Schaltung:

  1. Sobald ich die Schaltung mit Strom versorge, laufen die Motoren mit voller Drehzahl, bis der Arduino beginnt, Daten vom Joystick zu nehmen. Es pendelt sich dann auf die Drehzahl ein, die der Joystick-Position entspricht. Gibt es eine Möglichkeit, dem entgegenzuwirken, damit die Motoren ausgeschaltet bleiben, bis der Arduino beginnt, Werte vom Joystick zu empfangen? (Mein Verständnis war, dass der 10-kΩ-Rgs-Widerstand dafür sorgen würde.)

  2. Das zweite Problem ist, dass sich der Mosfet nie vollständig ausschaltet. Dies geschieht auch dann, wenn sich der Joystick in der 0-Position befindet. Ich habe auch versucht, die Pins HIGH und LOW zu schalten, aber der Motor bewegt sich immer noch. Gibt es Abhilfe für dieses Problem?

  3. Wenn ich den Widerstand zwischen Gate und Source messe, zeigt der Mosfet etwa 6K Ohm an. Sollte dies nicht etwa 10 kΩ betragen, da der Rgs-Widerstand 10 kΩ beträgt? Ist das ein Zeichen dafür, dass der Mosfet beschädigt ist?

Antworten (3)

Reduzieren Sie den 10K-Widerstand auf 3,3K oder sogar 1K.

Das von Ihnen verwendete Si2302-Gerät hat eine Schwellenspannung von etwa 0,65 V. Dies ist viel niedriger als bei vielen MOSFETs, die typischerweise eine Schwelle von 2 V bis 4,5 V haben.

Alle Effekte, die Sie sehen, sind wahrscheinlich auf den Pullup-Widerstand im Arduino zurückzuführen (vorausgesetzt, er verwendet einen AVR-Prozessor). Dies kann irgendwo zwischen 20K und 100K liegen und wird genügend Strom aus dem Prozessor leiten, um eine Vorspannung zu erzeugen, die den MOSFET leicht einschaltet.

Als Sie den Gate-Widerstand gemessen haben, war er noch mit dem Arduino verbunden?

Der Pull-up kann programmgesteuert deaktiviert werden, aber natürlich erst, wenn die Software läuft.

Kevin

Ich habe den 10K-Widerstand entfernt und einen 3,3K-Widerstand gelötet, aber der Motor ist immer noch eingeschaltet, auch wenn die PWM 0 ist. Ich habe sogar das Gate direkt an Masse angeschlossen (um zu simulieren, dass der Arduino-Pin auf LOW geht) und es gibt immer noch einen Spannungsabfall von 0,5 V über die Motorklemmen. Ich habe dies mit einem der funktionierenden Fets versucht und den Motor erfolgreich abgeschaltet. Nur 1 von 4 Mosfets zeigt dieses seltsame Verhalten. Ich bin jetzt ziemlich überzeugt, dass dieser Mosfet defekt ist und werde ihn austauschen und die Schaltung erneut testen. Danke für deine Antwort.
Klimmzüge sind beim Booten nicht aktiv; nur einmal per Software freigeschaltet.

Auf dem Arduino Pro Mini schweben alle digitalen Pins (außer Pin 13, Anzeige-LED), bis sie anderweitig programmiert sind. Wenn Sie also nicht absichtlich den internen Pull-up aktivieren, sollte Ihr Pull-down-Widerstand verhindern, dass der FET beim Start eingeschaltet wird.

Wenn ich den Widerstand zwischen Gate und Source messe, zeigt der Mosfet etwa 6K Ohm an.

Ein Messwert von nur 6k ist verdächtig. Um jedoch die Wirkung anderer Komponenten zu eliminieren, sollten Sie den FET aus der Schaltung nehmen und dann die Gate-Drain- und Gate-Source-Widerstände mit einem Digitalmultimeter messen. Schließen Sie schließlich das Gate an die Quelle kurz und messen Sie von Drain (+ve-Meter-Leitung) zu Source (-ve-Meter-Leitung). Alle Messwerte sollten weit über einem Megohm liegen. Wenn der Gate-Drain- oder Source-Drain-Übergang defekt ist, kann der FET auch bei 0 PWM teilweise eingeschaltet bleiben.

Das 6K-Lesen fühlte sich für mich auch komisch an. Meine erste Vermutung war, dass der Mosfet defekt war, aber die anderen 3 Mosfets funktionierten einwandfrei. Ich werde diesen Mosfet jetzt gegen einen neuen tauschen. Gibt es eine Lösung, um die Motoren beim Start auszuschalten? Sollte der 10K-Pulldown-Widerstand sie nicht AUS halten, bis der Arduino anfängt, PWM-Werte auszugeben? Danke für deine Antwort.
10k sollten reichen. Überwachen Sie die Pins beim Start, um sicherzustellen, dass sie nicht hochgefahren werden (wenn dies der Fall ist, liegt möglicherweise ein Problem in Ihrem Setup-Code vor).

Ihr erstes Problem tritt auf, nachdem Sie Ihr System eingeschaltet haben, ohne den Joystick zu bewegen, richtig? Vielleicht albern, aber haben Sie versucht, Folgendes zu tun :):

int motorSpeed1 = 0;
int motorSpeed2 = 0;
int motorSpeed3 = 0;
int motorSpeed4 = 0;

Viel Glück, Grüße,