preloader

Auf AEQ-WEB Suchen

AEQ-WEB | Blog

Arduino H-Brücke und Vierquadrantensteller zur Steuerung von Motoren

Arduino Motor Steuerung (H-Brücke)

Die H-Brücke oder auch der 4-Quadranten-Betrieb genannt, ist eine Verschaltung von MOSFETs zur Steuerung von Gleichstrommotoren. Durch die Ansteuerungen bestimmter MOSFETs kann dadurch ein DC-Motor umgepolt werden und somit die Drehrichtung bestimmt werden. Darüber hinaus kann mit dieser Schaltung der Motor auch gebremst werden. Eine Steuerung der Geschwindigkeit mit PWM ist ebenfalls möglich. In diesem Artikel geht es um den Aufbau einer H-Brücke mit MOSFETs für den Betrieb mit Mikrocontrollern wie Arduino, ESP32, STM & Co.

Welche Bauteile werden benötigt?

Als Leistungshalbleiter kommen vier MOSFETs zum Einsatz. Zwei davon sind IRL N-Kanal MOSFETs (Logic Level MOSFET) und bei den anderen zwei handelt es sich um herkömmliche IRF P-Kanal MOSFETs. Außerdem werden zwei handelsübliche NPN-Transistoren zur Ansteuerung der P-Kanal MOSFETs benötigt. Außerdem werden noch einige Widerstände und vier Dioden benötigt.

Achtung: Handelsübliche N-Kanal MOSFETs (IRF) dürfen für diese Schaltung nicht verwendet werden, da diese eine Gate-Spannung von 10 Volt benötigen. Logic Level MOSFETs hingegen Schalten bereits ab 5 bzw. 3,3 Volt voll durch und können direkt an den I/O-Pin angeschlossen werden. P-Kanal MOSFETs sind hiervon nicht betroffen, da diese ohnehin über die Transistoren mit einer Spannungsdifferenz von mindestens 10 Volt geschalten werden. Weitere Informationen dazu gibt es in folgenden Artikel: Grundlagen: MOSFETs und Mikrocontroller

Wie funktioniert die H-Brücke?

Die H-Brücke besteht aus insgesamt vier Schaltern (MOSFETs in weiterer Folge). Je nach Schalterstellung kann der Motor in den Linkslauf oder Rechtslauf versetzt werden. Die folgende Grafik zeigt eine vereinfachte Darstellung der H-Brücke.

Arduino H-Bridge Motor Connection

Im Vorwärtslauf sind S1 und S4 aktiviert. Die Stromversorgung läuft nun vom Pluspol über S1 zum Motor und geht nach dem Motor über S4 weiter zum Minuspol. S2 und S3 dürfen nicht geschlossen werden!

Im Rücklauf sind S2 und S3 aktiviert. Die Stromversorgung läuft nun vom Pluspol über S2 zum Motor und geht nach dem Motor über S3 weiter zum Minuspol. S1 und S4 dürfen nicht geschlossen werden!

Arduino H-Bridge Motor Controller

Wie die Schaltung funktioniert

Bei den Widerständen R5 und R6 handelt es sich um klassische Vorwiderstände für die NPN Transistoren. Die NPN-Transistoren (T1, T2) dienen zur Ansteuerung der P-Kanal MOSFETs (Q1, Q3). Liegt an der Basis vom jeweiligen NPN-Transistor eine positive Spannung an, so schaltet dieser durch. Durch diesen Vorgang entsteht am Gate vom P-Kanal MOSFET ein negatives Potential, was zum Durchschalten des P-Kanal MOSFET führt. Auch hier befinden sich wieder Vorwiderstände (R7, R8) zur Strombegrenzung zwischen Transistor und MOSFET. Sobald die Spannung an T1 oder T2 abfällt, sperren diese und der jeweilige P-Kanal MOSFET schaltet ab. Damit die Abschaltung schnell und richtig funktioniert, wird ein Pull-Up Widerstand (R3, R4) benötigt. Diese Widerstände sind recht hochohmig, sodass nur ein geringer Strom fließen kann. Sind die Transistoren ausgeschaltet, so liegt am Gate vom jeweiligen P-Kanal MOSFET die Versorgungsspannung (+12V) an. Der MOSFET wird dadurch in einen sperrenden Zustand versetzt.

Die N-Kanal MOSFETs (Q2, Q4) können direkt an den digitalen Ausgang des Mikrocontrollers angeschlossen werden. Es handelt sich hierbei um IRL-MOSFETs, welche abhängig vom Typ bereits bei 3,3 oder 5 Volt voll durchschalten. Ein Vorwiderstand ist hier nicht unbedingt notwendig. Die Widerstände R1 & R2 fungieren hier wie bei den P-Kanal MOSFETs als Pegelzieher (PullDown). Sobald der digitale Ausgang auf Low schaltet, drücken die Widerstände (R1, R2) den Pegel nach unten und am Gate liegt die Masse an, was den MOSFET wieder in einen sperrenden Zustand versetzt.

Bei den Dioden (D1 bis D4) handelt es sich um Freilaufdioden, welche beim Betrieb mit induktiven Lasten notwendig sind.

Nachfolgend der vereinfachte Schaltplan mit angeschlossen Arduino ohne Freilaufdioden:

Arduino H-Brücke MOSFET Schaltplan Motor

Drehzahl steuern

Es ist möglich, die Drehzahl von einem angeschlossenen Motor mit PWM (Pulsweitenmodulation) zu steuern. Grundsätzlich sollte man auf eine Parallelschaltung von den zwei agierenden MOSFETs in der H-Brücke verzichten. Zuerst wird der P-Kanal MOSFET aktiviert und somit der Pluspol zum Motor durchgeschaltet. Anschließend wird mit PWM der Minuspol zeitweise durchgeschaltet, was zum Andrehen des Motors führt. PWM kann auch umgekehrt über den P-Kanal MOSFET erzeugt werden, jedoch kann es dadurch insbesondere bei High-PWM zu Problemen kommen. Außerdem ist der vorgeschaltete NPN-Transistor oft nicht für extrem schnelle Schaltungen geeignet. Der nachfolgende Screenshot zeigt, wie zuerst der P-Kanal MOSFET (Gelb) eingeschaltet wird und anschließend über den N-Kanal MOSFET (Blau) eine PWM erzeugt wird. Nachdem der N-Kanal MOSFET wieder dauerhaft ausgeschaltet ist, schaltet auch der P-Kanal MOSFET wieder ab:

Arduino H-Bridge with PWM Oscilloscope

Die Software

Der Beispielcode lässt mit PWM einen Gleichstrommotor langsam anlaufen. Der Motor bleibt dann für etwa zwei Sekunden durchgehend eingeschaltet und wird anschließend wieder langsam mit PWM abgeschaltet. Danach wird umgepolt und der Motor mit PWM erneut hochgefahren. Dieser Vorgang läuft in einer endlosen Schleife weiter.

//More Information at https://www.aeq-web.com/

int P_FET_Q1 = 2;
int N_FET_Q4 = 3;

int P_FET_Q3 = 8;
int N_FET_Q2 = 9;

int PWM = 0;

void setup() {
  pinMode(P_FET_Q1, OUTPUT);
  pinMode(N_FET_Q2, OUTPUT);
  pinMode(P_FET_Q3, OUTPUT);
  pinMode(N_FET_Q4, OUTPUT);
}

void loop() {
  
  digitalWrite(P_FET_Q1, HIGH);
  delay(10);
  //Drive Forward (0% -> 99%)
  while (PWM < 255) {
    analogWrite(N_FET_Q4, PWM);
    PWM++;
    delay(10);
  }
  //Drive Forward (99% -> 0%)
  while (PWM > 0) {
    analogWrite(N_FET_Q4, PWM);
    PWM--;
    delay(10);
  }
  
  PWM = 0;
  
  digitalWrite(N_FET_Q4, LOW);
  digitalWrite(P_FET_Q1, LOW);

  delay(1000);

  digitalWrite(P_FET_Q3, HIGH);
  delay(10);
  //Drive Backward (0% -> 99%)
  while (PWM < 255) {
    analogWrite(N_FET_Q2, PWM);
    PWM++;
    delay(10);
  }
  //Drive Backward (99% -> 0%)
  while (PWM > 0) {
    analogWrite(N_FET_Q2, PWM);
    PWM--;
    delay(10);
  }
  
  PWM = 0;
  
  digitalWrite(N_FET_Q2, LOW);
  digitalWrite(P_FET_Q3, LOW);

  delay(1000);

}

Der folgende Screenshot zeigt die endgültige Ausgangsspannung (mit angeschlossenen Lastwiderstand ~2,5 A), welche durch Schaltung und Software erzeugt wird:

Arduino H-Bridge with PWM Output Oscilloscope

Stückliste

Die für den Versuchsaufbau verwendeten Bauteile befinden sich in den nachfolgenden Tabellen:

Bauteil Typ
R1, R2, R3, R4 10 K
R5, R6, R7, R8 330 Ohm
T1, T2 BC547
D1, D2 1N4007

Bauteil Typ
Q1, Q3 IRF9540
Q2, Q3 IRL3103PBF
J1, J2 Printklemme
Arduino Arduino Uno


Share:
thumbnail
05.08.2019
Gleichrichter Schaltung

In diesem Beitrag zeigen wir, wie ein Gleichrichter gebaut wird und wie Brückengleichrichter und Glättkondensatoren in diesem Schaltkreis funktionieren

Alex @ AEQ-WEB
thumbnail
13.05.2019
Pull-Up vs. Pull-Down Widerstand

Was ist eigentlich der unterscheid zwischen einem Pull-Up und einem Pull-Down Widerstand? Wir zeigen die Schaltung und erklären wofür diese notwendig ist

Alex @ AEQ-WEB