Zum Inhalt springen
Arduino MOS FET Brücke

Motorsteuerung mit einer MOS-FET Brücke

    mos-fet-h-bridge

    Eine H-Brücke (H-Bridge) ist eine Schaltung, um einen Elektromotor vorwärts und rückwärts drehen zu lassen. Sie besteht aus zwei Verstärkerkanälen, die sich wiederum aus zwei MOS-FETs oder Power-Transistoren zusammensetzen. Es sind jeweils zwei Transistoren unterschiedlicher Polarität ( z.B. FET N und FET P).

    Im Beispiel sind pro Kanal ein N-Channel und ein P-Channel MOS-FET zusammen geschaltet. Verwenden kann man z.B. den FET-N IRF9Z30 und den FET-P IRFZ40. Je nachdem, ob man ein GND- oder Plus-Signal sendet, sperrt der eine der beiden Transistoren, während der zweite den Stromkreis schließt.

    Pin 9Pin 12Pin 1011Motor
    HIGHLOWLOWHIGHRechts
    LOWHIGHHIGHLOWLinks

    Es ist ebenfalls möglich, über ein PWM-Signal die Geschwindigkeit des Motors zu regulieren.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    In der schematischen Ansicht sieht man schnell, wie die H-Brücke (H-Bridge) zu ihrem Namen kommt.

    mos-fet-h-bridge-schematics

    EDIT: Vielen Dank an Uwe, der hier auf signifikante Probleme hingewiesen hat.


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    52 Gedanken zu „Motorsteuerung mit einer MOS-FET Brücke“

    1. Christian Rockrohr

      Hallo,
      in der aktuellen Version des Schaltbildes ist leider keine Batterie mehr enthalten obwohl in den KOmmentaren hin und wieder darauf Bezug genommen wird.

      Gab es einen Grund, auf eine separate Stromversorgung für den Motor zu verzichten?
      Könnte mir jemand das Schaltbild mit Batterie zusenden?

    2. Hallo!
      Meine Frage ist eig recht simpel.
      Wenn ich den Motor nach rechts/links drehen will und die Drehzahl mit einer PWM steuere wie muss ich das dann Anschließen

    3. Hallo,

      zum Thema P-Mosfet:
      Die Widerstände 10kOhm und 220 Ohm müssen vertauscht werden, da das Gate des P-Mosfet sonst bei geschaltetem npn Transistor ungefähr 10k/(10k+220) * Uv bekommt. Wobei Uv die Versorgungsspannung ist.
      Bei gesperrtem npn Transistor liegt am Gate ungefähr die Versorgungsspannung Uv an.
      Der Mosfet schaltet dadurch nicht.
      Abhilfe schafft das Vertauschen der beiden Widerstände.
      Wer noch etwas schnellere Schaltzeiten benötigt, kann beide Werte einfach noch halbieren, dritteln, oder sogar vierteln. (!!Spezifikationen des npn Transistors und Versorgungsspannung beachten!!)

      Gruß, Stefan

    4. Hallo Stefan,

      besteht die möglichkeit mit einer anderen Software den Arduino beim laufenden Programm die Geschwindigkeit mit einem Schieber zu varieren, vorwärts rückwärts langsam schnell ohne bestimmte abläufe vorher zu Programmieren

    5. Hallo,
      der IRF9z30 verträgt eine Gate-Source-Spannung von -5V. Das bedeutet, man sollte die 10k mit der gezeigten Konfiguration weg lassen. Allerdings ist der Rds bei -5V noch realtiv hoch, wodurch die Verlustleistung ebenfalls relativ hoch ist. Grob überschlagen würde ich bei Raumtemperatur, ohne Kühlkörper den 9z30 maximal mit 800mA belasten.

    6. Hallo,,
      ich habe Interesse diese Schaltung zu verstehen und nachzubauen. Beim Verstehen gibt es aber das erste Prolem. Das Gate vom P-Mosfet wird über 220Ohm gegen Betriebsspannung gelegt und über 10KOhm durch den Transistor BC547 gegen Masse gezogen. Nach Ohmschen Gesetz verändert das die Spannung am Gate doch nur unwesentlich. Wie kann die Schaltung da funktionieren??? Und wie muß das Programm aussehen wenn ich z.B. über 2 Tasten den Motor in beiden Drehrichtungen mit unterschiedlichen Geschwindigkeiten und Richtungen steuern will?
      Für Antworten vielen Dank und frohe Ostern
      Peter

    7. Eine Selbstbau-H-Brücke ist immer ein schwieriges Unterfangen.

      Ein P-Mosfet sperrt, wenn am Gate ca die gleiche Spannung anliegt, wie am Source. Im Fall dieses Schaltbildes mit Versorgungsspanung für Motore größer als 5V schalten die oberen P_MOSFETS nie aus. Es kommt zu einem Kurzschluß. Wegen der Maximalen GARE-Sourcerspannung von +/- 20 V darf die Schaltung falls sie funktionieren würde auch nicht mit 24V betrieben werden.

      Abhilfe: Ansteuerung des P_Mosfets durch einen Transistor wobei ich eine Ansteuerung durch 4 Arduino Ausgänge bevozuge, weil so der Motor ungebremst auslaufen kann (alle 4 MOSFET gesperrt). Ansonsten AnsteuerungsICs wie zB IR2104 und alles N-MOSFETs verwenden oder besser eine fertiges IC oder Modul nehmen.

      Die genannten Mosfets sind für die Ansteuerung direkt durch Arduino nicht geeignet, da sie bei 5V Gatespannung nicht ganz durchschalten. Es sind Logic Level MOSFETs zu verwenden.

      Stefan bitte ergänze und korrigiere die Beschreibung der Schaltung dahingehend, daß für diese Schaltung die Versorgungsspannung des Motors nicht größer als 5V sein darf.

      Danke Uwe

      1. @Uwefed: Vielen Dank für die Nachricht. Man lernt doch nie aus. Den Artikel ändere ich schnellstmöglich. Liebe Grüße, Stefan”

    8. As more and more homeowners are forced to leave their homes, they turn to renting for the short term.
      Playing games is not only for youngsters, it’s also for the youthful generation.
      On top of this shock, I find out we now have a baby coming soon.

    9. Hallo,
      ich habe den Code so gemacht:
      dadurch dreht sich mein Robotor einmal 3 sekunden nach links und dann 3 sekunden nach rechts…
      Den linken Motor habe ich an pin 8 und 9
      den rechten an pin 11 und 12 (einfach anschliessen ich weiss nicht mehr genau wie ich die Motoren angesteckt habe, also welcher Pin für forwärts und rückwärts war…)

      int motor1l = 8;
      int motor1r = 9;

      int motor2l = 11;
      int motor2r = 12;

      void setup()
      {

      pinMode(motor1l, OUTPUT);
      pinMode(motor1r, OUTPUT);

      pinMode(motor2l, OUTPUT);
      pinMode(motor2r, OUTPUT);

      }

      void loop()
      {
      analogWrite(motor1r, 100);
      digitalWrite(motor1l, LOW);

      analogWrite(motor2l, 100);
      digitalWrite(motor2r, LOW);

      delay(3000);

      analogWrite(motor1l, 100);
      digitalWrite(motor1r, LOW);

      analogWrite(motor2r, 100);
      digitalWrite(motor2l, LOW);

      delay(3000);
      }

    Die Kommentarfunktion ist deaktiviert.