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. 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);
      }

    10. You can certainly see your enthusiasm within the work you write.
      The arena hopes for more passionate writers like you who aren’t afraid to say
      how they believe. At all times follow your heart.

    11. Hallo,

      erstmal vorweg: die Seite ist wirklich Klasse!

      jetzt zu meinem Problem ;-)

      Ich habe die Schaltung wie oben aufgebaut, mit den FET-N IRF640 und den FET-P IRF9640. Ich habe allerdings vor einen 24 Volt Motor damit zu steuern, zum test habe ich erstmal einen alten PC-Lüfter angeschlossen (12 Volt). Bei 5 Volt funktioniert alles super, der Lüfter dreht schön langsam. Sobald ich mit meinem Labornetzteil bei ca. 10 Volt bin, hört der Lüfter auf zu drehen, die Mosfets werden knallheiß und es kommt ein eher metallisch-elektrischer Geruch zum Vorschein. An dieser Stelle habe ich abgebrochen, bevor alles kaputtgeht.

      Hat von euch jemand eine Idee was ich falsch gemacht haben könnte ? Fehlt da nur die Kühlung ?

      Gruß

      Frank

    12. @Marcel: Ja, das ist unangenehm, aber FETs können schon ziemlich heiß werden. Du kannst mehrere parallel schalten, um die Last zu verteilen und/oder sie mit Kühlkörpern ausstatten. Eine H-Brücke oder ein Motor-Shield wären da eine Alternative. 3,5A sind aber auch schon ein beachtlicher Strom.

    13. Hallo,

      ich habe genau die Schaltung nachgebaut. Die Schaltung funktioniert auch soweit, aber die Transistoren werden teilweise sehr heiß. Manchmal auch so heiß, dass das Plastik an den Füßen der Transistoren schmilzt. Ist das normal? Kann ich mir nur schwer vorstellen…
      Der Motor ist ein Lego Motor 5292 mit einer maximalen Stromaufnahme (im blockiertem Zustand) von etwa 3,5A mit 9V.
      Funktioniert das vielleicht doch nicht so, wie ich mir das gedacht habe?
      Ein passendes Netzteil mit der Spannung und genügend Stromzufuhr ist vorhanden.

    14. @Christian: Das könnte auf jeden Fall Abhilfe schaffen. Bei den Beispiel hier habe ich versucht, das Prinzip mit so wenig wir möglich Bauteilen zu realisieren.

    15. Vielen Dank für den Artikel!
      Ich habe alles so aufgebaut, allerdings gibt es noch ein Problem:
      Als P-Kanal-Mosfets nutze ich zwei IRF9630, N-Kanal-Mosfets IRF630.
      Die N-Kanal-Fets arbeiten perfekt, allerdings schalten die P-Kanal-Fets dauerhaft durch, auch wenn keine Gate-Spannung anliegt!
      Muss ich (wie hier beschrieben) jeweils einen Transistor vor die beiden Fets schalten?
      Vielen Dank im Voraus!

      Grüße,
      Christian

    16. Du hast doch nen Pegelständen vergessen. Der arduino legt 5 Volt an da leiten dann beide Transistoren, wenn die Brücke eine Versorgungsspannung größer 5 Volt hat..

    17. „Copy!You say these 2 people to definitely, who win who negative?“After, a long time’s the private of Wei Er duke slowly floats.

      At agree after negotiation truly come to company to arrive under the report every day, if occupy and then accompany Shen Xiu Yuan to go out, have no matter at any time after canning leave, truly took leave Shen Xiu Yuan and dynasty joss-stick to leave company.

      „That pours BE, this up says all too generally, again say that you have no a chain to lead spirit again and saw is also useless.“

      „Not ability, can not begin!It is prescriptive at school.“

      One after being huge ring shines on to lose and is shaken to back, immediately after again is a blood.However shine on to lose no longer stop, accelerated skill, Long Mo Chan of hand suddenly left suddenly right, suddenly ascend suddenly next the dynasty Be green to leave a dozen.

    18. vielen dank hat mir echt weiter geholfen XD
      könnte sein, dass ich mich nochmal melde wenn ich etwas nicht versteh.
      Nochmal vielen dank und frohe Weihnachten

    19. danke für die schnelle Antwort
      Nein ich muss des Projekt mit dem Arduino machen darauf gibt es dann eine Note . Also muss es mit dem Aruino funktionieren. Hättest du da eine Idee dazu? Weil ich bin gerade echt überfordert welches Programm und Schaltung ich benutzen könnte.
      mfg rapper98

    20. hi
      ich bin schüler der 9 klasse des heißt das ich nicht so arg viel ahnung von der ganzen sache hier habe. Trotzdem soll ich eine art Roboter bauen. ich muss einen 9V motor ansteuer der sich in beide Richtungen drehen soll. Die Frage ist ob das mit dieser Schaltung hier Funktioniert wenn nein wie ich eine andere Schaltung bauen könnte
      danke schon mal im Vorraus XD
      mfg rapper98

    21. sorry stefan das ich mich erst jetzt wieder melde das mit dem sensor habe ich schon hinbekommen, trotzdem danke immer für deine schnellen Antworten

    22. Hallo stefan ich hätte noch eine Frage kann ich wen ich einen Wegsensor habe das ich automatisch die Drehrichtung umkehren kann. Vielen Dank für deine Antwort

    23. Das ist gut werde es heute probieren bin schon gespannt ob es funltioniert. Ich bräuchte nämlich 40V dann müsste das schon funktionieren, danke für die schnelle antwort

    24. Beno: Ah, gute Frage: Das kommt natürlich auf die FETs an. Ein IRF640 kann bis zu 200V und 18A schalten – das aber bitte nicht probieren. 200 V können sehr gefährlich sein.

    25. Das Schaltbild kommt mir extrem vereinfachend vor. Zum Beispiel fehlen da die Freilaufdioden. Je nach FET-/Transistortyp können die zwar schon eingebaut sein, aber ins Schaltbild gehören die auf jeden Fall, da sie essentiell wichtig sind, um Beschädigungen zu vermeiden.

    26. Hallo,

      ich habe die Schaltung nachgebaut, leider tut sich bei mir nichts. ich benutze als externe Stromversorgung eine 9V Batterie. Ich kann die Pins schalten wie ich will an den Motorpins liegt keine Spannung an. Wo könnte das Problem liegen?

      Gruß, Stefan

    27. Hallo,

      Ich habe dazu eine Frage, ich kenne die Schaltung so ähnlich, aber mir erschliesst sich nicht wie die Bauteile mit volgendem Problem umgehen ohne abzurauchen. Bzw wie der Motor da vernünftig geregelt sein soll.

      Nehmen wir an die Schaltung wir mit einem PWM und einem Digital betrieben. PWM einschaltdauer dabei 50%.
      Nun wird die Schaltung 50% der Zeit den Motor beschleunigen, aber die restliche Zeit eine Motorbremse aktiviert (Motor dreht „frei“ ist aber kurz geschlossen über den Masse Anschluss der Brücke)

      Was passiert da, oder ist das gar kein Problem?
      Mfg
      Flail

    28. @Leo: Nicht ganz, Du brauchst nur einen PWM und einen normalen Digitalen:

      digitalWrite(10,HIGH);
      analogWrite(11,value); // von 0 – 255

      Das lässt den Motor in Richtung 1 in der Geschwindigkeit value drehen,

      digitalWrite(10,LOW);
      analogWrite(11,value); // von 255 – 0

      lässt den Motor in Richtung 2 in der Geschwindigkeit value drehen :)

    29. analogWrite(10,255);
      analogWrite(11,0);

      und wenn man den motor langsamer machen möchte,
      reicht es dann wenn man nur einen ausgang verändert oder muss man den einen niedriger und den anderen höher machen ?

    30. hmm also brauch ich immer zwei pwm ausgänge für einen motor, wobei einer von den zwei minus und der andre plus seien muss?? im programm also:
      analogWrite(10,255);
      analogWrite(11,-255);
      ne gibt ja minus 255 nicht aber kann mir einer mal weiterhelfen? bitte :D

    31. Hi,

      also ich bin mir nicht ganz sicher, aber die Schaltung, also das Schaltbild oben, ist meiner Meinung nach hochgradig ungewöhnlich.

      So eine Art der Beschaltung habe ich noch nicht gesehen.

      Es ist unüblich, einen N-Kanal Fet mit neg. Spannungen am Gate zu beaufschlagen, und umgekehrt auch unüblich, einen P-Kanal Fet mit pos. Spannungen am Gate zu „belästigen“.

      Grüße
      Jürgen

    32. Hast Du die 24V direkt in die Buchse des Arduino gesteckt? Das hoffe ich nicht, denn diese Spannung wird heruntergeregelt und das nur zwischen ca. 6 und 12 V.

      Du musst die 24V anstelle der Batterien einbringen (wie oben im Bild).

      Oder hast Du es so gemacht?

    33. jo, vielen dank für die antwort…

      leider funktioniert es nicht.. der arduino sendet ab einer spannung von 14V kein anständiges steuerungssignal mehr, sondern nur eine spannung um die 90mV.

      bei 13V läuft alles wie gewollt..

      hast du da eine idee, was das Problem seien könnte?

      mfg bema09

    34. @bema09: Da sollte es keine Probleme geben – vorausgesetzt, Dein Motor ist ein 24V Motor. Ein Widerstand ist nicht nötig und auch nicht zu empfehlen.

      Gewähr und Haftung kann ich dafür natürlich nicht übernehmen :)

    35. Hi,

      sach mal gibt es Probleme, wenn man den Motor nicht mit Batterien, sondern mit 24V betreibt?.

      Müsste man dann einen Widerstand (ca 10kOhm) zwischen Negativ und GND schalten?

      mfg bema09

    36. Die meisten Schaltungen habe ich schon aufgebaut und getestet. Die hier auch.

      Im Gegensatz zu normalen Transistoren ist ein Vorwiderstand am Gate nicht nötig, da in Wirklichkeit dort kein Strom fließt.

      Verwenden kann man z.B. den FET-N IRF640 und den FET-P IRF9640.

      Ich schreibe das gleich in den Artikel. Danke für die Anregung :)

    37. Hallo,

      interessanz, welche MOS-FETS könnte man hier verwenden?
      Vermutlich könnte das Gate noch einen vor R gebrauchen… oder? Sind die Schaltungen ehr shematisch zu verstehen oder hast du sie so schon aufgebaut?

      Viele Grüße.

      Torsten

    Die Kommentarfunktion ist deaktiviert.