Motortreiber

Details

Tipp: Benutze das WIKI für aktuelle Informationen!

Um einen Motor anzusteuern braucht’s einen Motortreiber, welcher im Grundprinzip eine  Schaltung ist, welche den Strom entweder in die eine oder andere Richtung durch den Motor schickt, je nachdem ob der Motor vorwärts oder rückwärts laufen soll (sog. H-Brücke). Viele Motortreiber gibt’s als fertig aufgebaute Platinen und einige können zwei Motoren ansteuern (Dual-H-Bridge) - schaltet man die beiden H-Brücken parallel kann der maximal mögliche Motorstrom verdoppelt werden.

Soll die Richtung des Motors nicht gesteuert werden (wie z.B. beim Mähwerk), braucht man hierfür keine H-Brücke, sondern nur einen einfachen “Schalter” (z.B. MOSFET-Transistor-Schaltung), also:

Antriebsmotor: ein Motortreibermodul je Motor
Mähmotor: eine MOSFET-Schaltung

Entscheidende Kaufkriterien

  • max. thermische Belastbarkeit (Kurzschlußstrom)
  • Preis

Vorschläge für Motortreibermodul

 

Antriebsmotor - Verdrahtung
Der Motortreiber wird über Steuersignale mit dem Arduino verbunden. Beispiel:

Arduino Digital Pin —> MOTOR-DIR Pin
Arduino PWM Pin —> MOTOR-PWM Pin
Arduino Analog Pin <— MOTOR-Stromsensor Pin

Ein Pin steuert die Richtung (vor/zurück), der andere die Geschwindigkeit. Ein analoger Eingangs-Pin wird mit dem Stromsensor verbunden. Das Stromsensormodul (ACS712-05A) wird in Reihe mit dem Motor geschaltet. Der nächste Abschnitt beschreibt wie das Stromsensormodul mit dem Arduino verbunden wird.

Arduino motor driver

(Hinweis: für vollständige Verdrahtung, siehe Schaltbild)


Verdrahtung (MC33926 Motortreiber)

mc33926      
mc33926 example       MC33926 schematics
M1_FB     --- Motor1 Stromsensorausgang (Arduino)
M1_PWM_D1 --- mit Jumper auf GND
M1_PWM_D2 --- mit Jumper auf VDD
M1_IN1    --- Motor1 PWM (Arduino)
M1_IN2    --- Motor1 Dir (Arduino)
EN        --- mit Jumper auf VDD
M2_FB     --- Motor2 Stromsensorausgang (Arduino)
M2_PWM_D1 --- mit Jumper auf GND
M2_PWM_D2 --- mit Jumper auf VDD
M2_IN1    --- Motor2 PWM (Arduino)
M2_IN2    --- Motor2 Dir (Arduino)
EN        --- mit Jumper auf VDD
VDD       --- Arduino 5V


Verdrahtung (L298N Motortreiber)

motordriver l298n     L298N schematics


1. Zunächst sicherstellen, dass die beiden Motortreiberbrücken (2A) parallel geschaltet wurden, so dass zwei Motorbrücken einen Motor antreiben (max. 4A):
l298driver

Dazu parallel schalten:
IN1 mit IN4
IN2 mit IN3
OUT1 mit OUT4
OUT2 mit OUT3
(IN1 ist jetzt also indentisch mit IN4 bzw. IN2 mit IN3)
(Die SENSE-Leitungen nur durchtrennen, falls der Strom über Shunt-Widerstände gemessen werden soll - siehe Abschnitt Stromsensor weiter unten).
2. Sicherstellen, dass auf ENA und ENB jeweils ein Jumper sitzt (also beide Brücken aktiviert sind).
3. Der Jumper S1 für den Spannungsregler muss ebenfalls sitzen (LED auf Platine leuchtet). Wenn man den Jumper S1 drinlässt, bekommt der Motortreiber seine +5V über den auf der Platine integrierten Spannungsregler (man braucht also nichts machen). Nimmt man ihn los, wird der Spannnungsregler deaktiviert und man muss die externen +5V anschliessen.
4. Nun Arduino Pins verbinden:
"IN2" wird auch manchmal als "C" bezeichnet, oder als "10" oder als PinPWM.
"IN1" wird auch manchmal als "D" bezeichnet, oder als "12" oder als PinDir.

L298 motor driver
IN2/C(10)/PinPWM    IN1/D(12)/PinDir
H                   L     Forward
L                   H     Reverse    

Die Logik beim ansteuern ist wie folgt: Wird PinDir auf LOW (L) geschaltet, steuert PinPWM die Geschwindigkeit. Ist PinPWM dabei dauerthaft HIGH (H), fährt der Robot mit voller Leistung vorfährts. Je seltener PinPWM auf HIGH geschaltet wird, umso langsamer fährt der Robot vorfährts.
Wird PinDir auf HIGH (H) geschaltet, steuert PinPWM die Geschwindigkeit. Ist PinPWM dabei dauerhaft LOW (L), fährt der Robot mit voller Leistung rückwärts. Je seltener PinPWM auf LOW geschaltet wird, umso langsamer fährt der Robot rückwärts.


Verdrahtung (L9958
Motortreiber)

motor driver L9958

L9958 GND---GND
L9958 VCC---Arduino 5V
L9958 EN---Arduino 5V
L9958 DI---GND
L9958 DIR---Arduino MOTOR_DIR
L9958 PWM---Arduino MOTOR_PWM
L9958 MOTOR(+)---motor(+)
L9958 MOTOR(-)---motor(-)
L9958 POWER(+)---battery(+)
L9958 POWER(-)---battery(-)



Motortreiber-Test

Nun zum Testen (auch für spätere Dinge wie Sensoren etc.):
Am einfachsten ist es die Serielle Arduino-Konsole aufzumachen (CTRL+SHIFT+M), dann 19200 Baud einzustellen. Dort sieht man dann alle Sensorwerte etc. Nun drückt man 't' um in den Testmodus zu gelangen. Dort kann man dann die Motoren testen. Achja: Robot am besten dazu aufbocken (z.B. auf Karton). Und vorsichtig mit den Messern! ;-)
PS: Die Anschlüsse der Motoren (OUT1, OUT2) müssen evtl. getauscht werden wenn die Drehrichtung nicht stimmt (also vorwärts nicht vorwärts ist).

warning Warnhinweis: Aus Sicherheitsgründen für's erste Testen Mähmotor immer ohne Messer betreiben!

 

Mähmotor (Variante "PWM-Modul")

pwm motor modul

Hierbei wird für den Mähmotor ein fertiges PWM-Modul verwendet (z.B. 10A PWM Modul = DC Motor Speed Controller).
Es gibt mehrere Fertig-Module (5A bis 15 A) die über PWM einen DC Motor treiben können. I.d.R. sind diese mit einem Poti und einem NE555 für die PWM-Erzeugung aufgebaut. Diese Module passen für einen (direkten) Anschluss an einen Arduino nicht unbedingt. Es gibt nun 2 Möglichkeiten diese Module anzuschliessen:

1. an einen Arduino PWM-Ausgang wird ein Tiefpass angeschlossen. Dieser erzeugt aus dem PWM-Signal eine analoge Spannung von 0-5V. Der Tiefpass ist (einfach) ein Widerstand (ca. 4,7kOhm) und ein Kondensator (Elko 1 bis 10 uF, gepolt ca.35V) gegen GND/0V. Damit wird der Eingang (=Poti-Spannung) des 10A-Moduls angesteuert. Hierzu wird das am Modul vorhandene Poti ausgelötet oder abgeklemmt und der Poti-Schleifer-Punkt (C) an den Tiefpass angeschlossen. PWM-Frequenz und Prinzip des Moduls bleiben erhalten.

PWM 10A Modul Poti (A) --- offen lassen
PWM 10A Modul Poti (B) --- offen lassen
PWM 10A Modul Poti (C) --- 4,7k ---+-----  Arduino Digital Out (PWM)
10uF
+
GND
PWM 10A Modul GND --- Batterie (-)

PWM 10A Modul VCC --- Batterie (+)

2. Der PWM-Signal-Ausgang des Arduino wird direkt im Modul angeschlossen. Hierzu ist leider keine allg. Umbauanleitung möglich, da jedes Modul etwas anders aufgebaut ist. Bei Module mit dem NE555 zur PWM-Erzeugung wird jedoch immer der Ausgang des NE555 durch den PWM-Ausgang des Arduino direkt ersetzt. Es muss also min. eine Leiterbahn im Modul geändert, neu angeschlossen werden. PWM-Frequenz des Moduls bleibt nicht erhalten.

Zum Nachbau wird derzeit die Variante 1 empfohlen. Eine Umbau- Anleitung für ein bestimmtes 10A-Modul für die Variante 2 gibt es hier.

Nachteile: Alle Module haben keine elektronische Überstromsicherung. Einige nur eine 10A Schmelzsicherung als Schutz. Das ist nicht sehr elegant, aber ausreichend für eine einfache Motorsteuerung.

 

Mähmotor (Variante "MOSFET")
Hierbei wird für den Mähmotor eine MOSFET-Schaltung verwendet. Der verwendete MOSFET-Transistor IRLIZ44N (Alternativen: IRF1404, IRL540N, RFP30N06LE, FQP30N06L) kann beim 5V-Arduino-Steuersignal bereits 30A durchschalten (N-LogL). Der 10K Widerstand zieht das Gate nach Masse wenn der Arduino bootet und dessen Ausgang hochohmig ist. Der 180 Ohm Widerstand begrenzt den Umladestrom des Gate bei einem Pegelwechsel auf ca. 30mA (Umschaltstrom am Gate durch PWM). Die Rücklaufdiode (MBR1045) schützt die Schaltung gegen die induktive Motorlast. Ein Stromsensormodul (ACS712-30A) wird in Reihe mit dem Motor geschaltet.

Arduino motor       mosfet

Sensor für Strommessung
Um besondere Umstände zu erkennen (Roboter fährt gegen Hindernis / Blockade eines Motors) sollte der Motorstrom im Betrieb fortlaufend gemessen werden.
Es gibt hierfür zwei Ansätze.

Strommessung (Variante "Hall-Sensor-Modul")
Diese Variante kommt ohne Löten aus. Die Stromsensor-Module gibt es für verschiedene Arbeitsbereiche, z.B.

  • ACS712ELC-05A (185mV/A, max. 5A)
  • ACS712ELC-20A (100mV/A, max. 20A)
  • ACS712ELC-30A (66mV/A, max. 30A)
  • Je niedriger der Arbeitsbereich, desto höher die Meßauflösung.


Strommessung (Variante "Shunt-Widerstand")
Bei dieser Variante ist etwas Lötarbeit erforderlich. Der Motorstrom wird über sehr kleinen Widerstand geschickt und der dort erzeugte Spannungsabfall wird mit dem Arduino gemessen.

Beispiel für STL298N Dual H-Bridge (zwei H-Bridges werden parallel geschaltet):

gemessener Motorkurzschlußstrom: 4,5A
=>Motorkurzschlußstrom pro H-Bridge: 2,25A
gewählter Meßwiderstand: 0,5 Ohm (Achtung: Widerstand mit hoher Leistung verwenden)
=> Spannungsabfall am Meßwiderstand:
U=R*I=0,5 Ohm*2,25 A=1,125V
=> max. verbrauchte Leistung am Meßwiderstand:
P=I^2*R=2,25A^2*0,5Ohm=2,5W
=> Meßauflösung (Arduino Analog-Pin 1024 Bit):
Volt pro Bit: 5V/1024 Bit=0,00488V/Bit
Auflösung (Schritte): 1,25V / 0,00488V=256
Meßauflösung: 2,25A/256=9 mA
Wichtig: die ermittelten Leistungswerte treten nur im Worst-Case, d.h. für einen Bruchteil einer Sekunde auf (Motorkurzschlußstrom)

Schaltbild/Verdrahtung:
l298n module circuit

Der Meßwiderstand (hier 0,5 Ohm) wird zwischen SENA (SENB) und Masse geschaltet (bei der fertigen Motorplatine mussten hierfür Leiterbahnen durchtrennt werden. Die abgegriffene Meßspannung geht über einen 5K Vorwiderstand in den Arduino-Analog-Eingang, ein Kondensator eliminiert das Schwingen durch die PWM-Ansteuerung).
Die gezeigte Lösung ist nicht ganz optimal, da der Shunt-Widerstand relativ viel Leistung verbraucht. Ggf. noch kleineren Shunt-Widerstand verwenden und Spannungsabfall mit Operationsverstärker verstärken.

 

Wahl des richtigen Motortreibers (Kurzschlußstrom)
Damit man den Motortreiber nicht gleich beim ersten Betrieb in den sicheren Überhitzungstod schickt, sollte man bereits vor der Auswahl eines Motortreibers ermitteln, welcher Strom überhaupt maximal über den Motor fließen kann. Hierfür kann man z.B. den Motorkurzschlußstrom ermitteln. Mein Aufbau hierfür:

Akku === Amperemeter === Motor

Das Amperemeter (z.B. vom Modellbau) sollte für den zu messenden Kurzschlußstrom ausgelegt sein (z.B.  30A). Der zu messende Motor wird bei diesem Stromtest mechanisch blockiert (so dass er sich nicht drehen kann).

Achtung:

  • bei Mähmotor unbedingt Messer abschrauben!
  • den Motor nur für sehr kurze Zeit (1-5 Sekunden) betreiben
  • immer Kabel mit ausreichend Querschnitt verwenden!

Beispiel-Messung:

  • Rotenbach SPM08-320
    • Antriebsmotor: 8A
    • Mähmotor:

  • Ambrogio L50
    • Antriebsmotor: 4,5A
    • Mähmotor: 22A
  • Tianchen TC-G158
    • Antriebsmotor: 5,4A
    • Mähmotor: 16A (beide zusammen 32A)

Die  ermittelten Were treten in der Regel nur im Worst-Case auf, d.h. nur beim Anlaufen des Motors oder bei einer Blockade und nur für den Bruchteil einer Sekunde (Der Akku liefert den hohen Motorkurzschlußstrom nur für sehr kurze Zeit, dann brechen Strom und Spannung ein).

   
© Ardumower