Motorsteuerung mit einer MOS-FET Brücke – Arduino Tutorial (2024)

Motorsteuerung mit einer MOS-FET Brücke – Arduino Tutorial (1)

    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.

    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

    1. Christian Rockrohr5. Oktober 2016 um 16:21Uhr

      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. Torsten1239. Juni 2016 um 16:51Uhr

      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. goetzengasse24. Dezember 2015 um 13:16Uhr

      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. Skelly28. September 2015 um 10:40Uhr

      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. tunix7. August 2015 um 16:25Uhr

      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. Peter31. März 2015 um 23:49Uhr

      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. uwefed29. Oktober 2014 um 22:14Uhr

      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. Stefan Hermann31. Oktober 2014 um 7:49Uhr

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

    8. Hay Day Coins26. August 2014 um 18:25Uhr

      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. Patrick30. Juli 2014 um 13:59Uhr

      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. ab15. Mai 2014 um 21:37Uhr

      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. Andreas5. Februar 2014 um 17:09Uhr

      Hat jemand den Code hierzu? Wäre sehr hilfreich ;)

    12. Frank3. Januar 2014 um 10:44Uhr

      PS: Ich verwende einen arduino micro, das dürfte ja aber denke ich kein Problem darstellen.

    13. Frank3. Januar 2014 um 10:41Uhr

      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

    14. Stefan*26. Dezember 2013 um 9:06Uhr

      @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.

    15. Marcel Balzer11. Dezember 2013 um 13:09Uhr

      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.

    16. Stefan*28. Oktober 2013 um 16:03Uhr

      @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.

    17. Christian28. Oktober 2013 um 15:53Uhr

      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

    18. Jan16. August 2013 um 13:40Uhr

      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..

    19. BepayBagPek9. Juli 2013 um 7:52Uhr

      “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.

    20. rapper9821. Dezember 2012 um 17:51Uhr

      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

    21. Stefan*21. Dezember 2012 um 11:51Uhr

      Dann kannst Du die Motorsteuerung mit H-Bridge IC verwenden. Damit kannst Du sogar zwei Motoren steuern.

    22. rapper9821. Dezember 2012 um 11:41Uhr

      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

    23. Stefan*21. Dezember 2012 um 8:01Uhr

      @Rapper98: Willst Du den Roboter mit Arduino steuern? Einfacher wäre das mit einer H-Brücke: https://www.starthardware.org/2010/06/motorsteuerung-mit-einem-h-bridge-ic/ Der kostet auch weniger Geld und Nerven.

      Liebe Grüße

      Stefan”

    24. rapper9820. Dezember 2012 um 18:51Uhr

      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

    25. beno1. November 2012 um 18:15Uhr

      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

    26. Stefan*15. Oktober 2012 um 22:26Uhr

      @beno: Da bin ich überfragt. Ich habe noch nie einen Wegsensor besessen. Hast Du ein Datenblatt dazu?

    27. beno15. Oktober 2012 um 22:12Uhr

      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

    28. beno13. Oktober 2012 um 9:30Uhr

      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

    29. Stefan*12. Oktober 2012 um 9:37Uhr

      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.

    30. beno11. Oktober 2012 um 22:15Uhr

      Bis zu welcher Spannung und welchem Strom ist diese Schaltung eigentlich geeignet

    31. Stefan*2. Juli 2012 um 8:26Uhr

      @MindCode: Genau. Deshalb lohnen sich H-Brücken.

    32. MindCode2. Juli 2012 um 1:16Uhr

      Brauche ich 4 Mosfets für EINEN Motor?
      Also brauche ich 8 für zwei Motoren?

    33. inof3. September 2011 um 18:36Uhr

      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.

    34. Stefan*30. August 2011 um 11:24Uhr

      @Stefan: Hast du den GND von der Batterie und den vom Arduino verbunden?

    35. Stefan30. August 2011 um 11:18Uhr

      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

    36. Flail19. Mai 2011 um 18:22Uhr

      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

    37. Leo30. April 2011 um 20:44Uhr

      danke :)

    38. Stefan*30. April 2011 um 18:41Uhr

      @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 :)

    39. Leo30. April 2011 um 17:24Uhr

      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 ?

    40. Leo30. April 2011 um 16:57Uhr

      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

    41. Jürgen14. April 2011 um 15:22Uhr

      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

    42. Stefan*5. September 2010 um 7:39Uhr

      Hier die begleitenden Foreneinträge zur Problemlösung von bema09: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1282640298/11 Ich hoffe, das Problem wurde gelöst.

      Der Empfehlung, lieber einen H-Bridge-IC zu benutzen, schließe ich mich an: https://www.starthardware.org/2010/06/motorsteuerung-mit-einem-h-bridge-ic/

      Es gibt noch unzählige andere ICs, die man verwenden könnte. Der L293D ist nur eine Möglichkeit.

    43. admin2. September 2010 um 11:40Uhr

      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?

    44. bema092. September 2010 um 10:27Uhr

      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

    45. Stefan Hermann1. September 2010 um 9:00Uhr

      @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 :)

    46. bema091. September 2010 um 8:35Uhr

      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

    47. Stefan Hermann19. August 2010 um 16:16Uhr

      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 :)

    48. Torsten19. August 2010 um 15:44Uhr

      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.

    Motorsteuerung mit einer MOS-FET Brücke – Arduino Tutorial (2024)

    References

    Top Articles
    Latest Posts
    Article information

    Author: Virgilio Hermann JD

    Last Updated:

    Views: 6587

    Rating: 4 / 5 (41 voted)

    Reviews: 88% of readers found this page helpful

    Author information

    Name: Virgilio Hermann JD

    Birthday: 1997-12-21

    Address: 6946 Schoen Cove, Sipesshire, MO 55944

    Phone: +3763365785260

    Job: Accounting Engineer

    Hobby: Web surfing, Rafting, Dowsing, Stand-up comedy, Ghost hunting, Swimming, Amateur radio

    Introduction: My name is Virgilio Hermann JD, I am a fine, gifted, beautiful, encouraging, kind, talented, zealous person who loves writing and wants to share my knowledge and understanding with you.