29. Nov 2015 03:11
Keine Kommentare

Motorsteuerung mit Arduino

Motorsteuerung mit Arduino am RC Auto
Motorsteuerung mit Arduino am RC Auto
Vor ein paar Jahren hatte ich mir vorgenommen mein ferngesteuertes Auto aus dem Jahre 1992 zu restaurieren, sodass man es über ein Netzwerk fernsteuern kann. Diese Aufgabe habe ich jetzt in Angriff genommen und mich für die initiale Entwicklung und das Testen der Steuerung für einen Arduino Uno R3 entschieden. In diesem Artikel werde ich die Details beschreiben.

Motortypen in ferngesteuerten Autos

Beim Antrieb von ferngesteuerten Autos findet man in der Regel zwei Typen von Motoren. Die sog. Bürstenmotoren (Brush-Motor) und die bürstenlosen Motoren (Brushless-Motor). Während die Geschwindigkeit des Bürstenmotors über die Spannung und die Fahrtrichtung über die Polung gesteuert werden, werden die bürstenlosen Motoren über Sinuswellen als Steuersignal über eine separate Leitung betrieben. In diesem Artikel beschäftigen wir uns zwar mit Bürstenmotoren, der Abschnitt "Steuerung mit Geschwindigkeitsregler" trifft jedoch auch auf Geschwindigkeitsregler für Brushless- bzw. bürstenlose Motoren zu.

96,04 €
Jetzt bestellen »
Arduino Starter Kit
Gewöhnlich versandfertig in 24 Stunden

Zusätzlich zum Antrieb findet sich in RC Modellautos auch die Steuerung der Lenkung, die heutzutage über Servomotoren geregelt ist. In meinem Nikko "Super Dictator" aus dem Jahre 1992 fand sich anstelle einer Servo noch ein einfacher Bürstenmotor mit angeschlossenem Potentiometer zur Kontrolle der Motorstellung über die Spannung aus dem Potentiometer. Dieser funktionierte nach über 20 Jahren zwar noch einigermaßen, war aber bei Weitem nicht so genau wie ein aktueller Servomotor. Man sollte grundsätzlich für die Lenkung einen richtigen Servomotor einsetzen.

Möglichkeiten der Motorsteuerung mit Arduino

Welche Art von Motorsteuerung man verwenden möchte, hängt ganz von den Motoren ab, die man ansteuern möchte. Wer überhaupt keine Ahnung hat, wie das funktioniert und sich erst einmal langsam heran tasten möchte, dem kann ich das Arduino Starter Kit sehr ans Herz legen. Dieses Kit beinhaltet bereits einen kleinen Servomotor, einen kleinen Bürstenmotor und ein H-Brücken-IC von Texas Instruments. Das ist ideal, um sich mit Servos und Motoren erst einmal vertraut zu machen.

Steuerung mit der Texas Instruments L293NE H-Brücke

Im Arduino Starter Kit ist, wie erwähnt, bereits eine H-Brücke enthalten. Diese eignet sich auch ideal für die Steuerung des beiliegenden Bürstenmotors. Details zu diesem IC findet man im Datenblatt des L293NE von Texas Instruments. Die Pin-Belegung des L293NE sieht wie folgt aus.

 L293NE Pin-Belegung für Arduino

Für kleine Motoren kann man die Stromversorgung für das IC und den Motor direkt aus dem Stromkreislauf des Arduinos entnehmen. Für etwas größere Motoren empfiehlt sich die Verwendung einer separaten 9V Batterie. Es gibt zahlreiche Beschreibungen für die Verwendungen des L293NE und ich kann diese Anleitung "DC Motor Control using an H-Bridge" wärmstens empfehlen. Das mitgelieferte Buch im Starter Kit bietet ebenfalls eine wundervolle Anleitung, sodass ich diese hier nicht noch einmal nieder schreibe. Der Nachteil dieser H-Brücke findet sich in der Spezifikation, denn sie ist nicht für mittlere bis große Motoren geeignet. Zudem verträgt die H-Brücke nur relativ kleine Stromstärken und Spannungen. Zu große Motoren können die H-Brücke also beschädigen oder gänzlich zerstören. Für den Betrieb eines 1:8 Modellfahrzeuges, wie in meinem Fall, ist sie also ungeeignet.

Steuerung mit dem Arduino Motor Shield R3

Das Arduino Motor Shield verfügt über eine L298P H-Brücke von STMicroelectronics. Der Vorteil dieser Shields ist, dass man sie direkt auf das Arduino aufstecken kann. Das Datenblatt liest sich auch sehr interessant, bringt jedoch einige unerwartete Hindernisse mit großen Motoren, auf die ich gleich noch eingehen werde.

25,69 €
Jetzt bestellen »
Arduino Motor Shield
Versandfertig in 1 - 2 Werktagen

Die Funktionsweise der L298P H-Brücke ähnelt stark der TI H-Brücke, die ich vorhin beschrieben habe. Verwendet man höhere Stromstärken und Spannungen über 5V, so sollte man den Vin-Jumper auf der Rückseite der Platine trennen, sodass der Stromkreislauf des Motors separat vom Stromkreislauf des Arduinos läuft. Das folgende Video zeigt den Betrieb des Motor Shields an meinem RC-Auto.

Die Funktionsweise des Motor Shields ist recht einfach. PIN D12 gibt mit HIGH an, dass Vorwärts gefahren wird und mit LOW an, dass Rückwärts gefahren wird. Bei umgekehrter Polung natürlich anders herum. Der PWM Pin D3 gibt die Geschwindigkeit an. Das kann man mit der Servo-Bibliothek machen (sähe späteres Kapitel), man kann jedoch auch einfach analogWrite verwenden. Der Arduino-Code sieht vereinfacht wie folgt aus.

Auf dem Video kann man sehen, wie das relativ einfach funktioniert. Bei mir ist die Steuerung über Seriell noch drin, die ich weiter unten in meinem Beispiel zeigen werde. Aufmerksamen Lesern fallen in dem Video zwei Dinge auf: zum Einen drehen die Motoren sehr langsam und zum Anderen steht dort ein gigantischer Lüfter sowie ein auf das Motor Shield geklebter Kühlkörper. Damit sind wir auch bei den beiden entscheidenden Problemen des Motor Shields.

  1. Das L298P IC erzeugt am Ausgang einen Spannungsverlust von 3-4V, d.h. legt man 7.2V eines NiMH Akkus an, so kommen am Ausgang nur noch ca. 3V heraus, da 3-4V vom L298P in Hitze umgewandelt werden.

  2. Ohne Lüfter kann man auf meinem aufgeklebten Kühlkörper problemlos ein Spiegelei braten, denn das L298P wird bei hohen Stromstärken (1-2 Ampere) sehr schnell, sehr heiß und benötigt starke Kühlung. Insbesondere bei RC Motoren, die beim Start viel Strom benötigen, ist das ein Problem.

Möchte man mittlere Motoren mit durchschnittlichen Stromstärken (maximal 600mA) und einer Spannung um die 5V bis 7V durchgehend betreiben, so kann man das Motor Shield durchaus in Betracht ziehen. Für RC Fahrzeuge, Flugzeuge oder Schiffe ist es aufgrund der hohen Stromstärken und Spannungschwankungen sowie dem dazugehörigen Batteriebetrieb mit dem L298P nicht unbedingt geeignet. Es kommt jedoch auch hier auf die Größe des Fahrzeugs, Fluggeräts oder Schiffes an. Kleinere Motoren dürften durchaus ohne Probleme funktionieren. 

Steuerung über Fahrtregler (ESC)

Weder die TI H-Brücke noch das Motor Shield kommen mit den relativ starken Motoren meines RC Autos aus dem Jahre 1992 (Typ "Nikko Super Dictator") klar. Die TI H-Brücke ist laut Datenblatt für die Stromstärke und die Spannung nicht geeignet. Das Motor Shield mit seiner L298P H-Brücke ist zwar geeignet, kommt jedoch mit den Stromstärken und der Hitze nicht zurecht bzw. benötigt extreme Kühlung und noch dazu ist der Spannungsverlust so hoch, dass sich das Auto nicht mehr richtig fahren lässt.

21,99 €
Jetzt bestellen »
CARBON-SERIES FAHRTREGLER 20 TURNS
Versandfertig in 2 - 3 Werktagen

Die Lösung des Problems stellen sog. elektronische Fahrtregler (engl. Electronic Speed Controller) dar. Ich habe hier zwei "Modelcraft 207368" im Einsatz, welche Spitzen bis zu 60 Ampere und über 50 Sekunden hinweg bis zu 35 Ampere vertragen und für 7.2V Batteriebetrieb ausgelegt sind.

9.999,99 €
Jetzt bestellen »
PREMIUM LINE RC-CAR SERVO 4519

Zusätzlich zu den Fahrtreglern befindet sich im Fahrzeug auch noch eine Servo "Modelcraft 4519", welche für die Lenkung des Fahrzeugs zuständig ist. Die vollständige Schaltung inklusive Fahrtregler und Servo sieht wie folgt aus.

RC Fahrtregler (ESC) und Servo an Arduino

Die Schaltung ist relativ simpel und erfordert, dass der Arduino über USB mit Strom versorgt ist. Am Arduino selbst sind nur die PWM-Signalkabel der Servo und der Fahrtregler sowie die Erdung (GND/ Ground) der Batterie angeschlossen. Über die serielle Schnittstelle lässt sich nun vom Computer aus der Arduino anweisen die Motoren zu steuern.

Die Funktionsweise des Codes erklärt sich so, dass der Arduino über die serielle Schnittstelle 3 Bytes erhält. Das erste Byte mit der Anweisung für die Servo und das zweite Byte mit der Anweisung für die Antriebsmotoren. Das rechnet der Arduino dann in die Servostellung um, und weißt die Fahrtregler und die Servo über die PWM-Ports an. Das Dritte Byte ist der Terminator bzw. das Stop-Byte, welches das Ende der Mitteilung markiert. Das Gleiche Format sendet der Arduino auch zurück, wenn er die Steuerbefehle ausgeführt hat. Dazu habe ich mir eine kleine GUI unter Linux geschrieben, mit welcher ich das Fahrzeug über einen Playstation 4 Controller (per Bluetooth an PC angeschlossen) steuern kann.

Im Video ist zu sehen, wie die Servo die Lenkung steuert und die Fahrtregler den Antrieb. Auf den Fahrtreglern ensteht sehr geringe bis keine Wärme und so gut wie kein Strom- oder Spannungsverlust. Das Zusammenspiel mit der Batterie ist problemlos. Über längere Fahrtzeiten hinweg zeigen sich keine Probleme. Die Lösung mit den Fahrtreglern ist also ideal geeignet für RC Fahrzeuge, Flugzeuge und Schiffe mit starken Motoren.

Einschränkungen des Arduino Uno R3 und Atmega328

Der auf dem Arduino Uno R3 verbaute Atmega328 Mikrocontroller ist ein 8-Bit AVR mit 20 Mhz Frequenz und 32 Kilobyte Flash-Speicher. Bereits mein Skript oben benötigt fast 20 Kilobyte und kommt damit etwas näher an die Grenze des Atmega328. Kommen nun noch eventuelle Sensoren für die Motorkontrolle oder Drehzahl dazu, dann kommt man schnell an die Grenze des Mikrocontrollers. Zur Entwicklung und zum Testen der Fahrzeugbasis ist er also absolut in Ordnung. Für den Betrieb werde ich wohl eher einen Single Board Computer (BeagleBone, Banana Pro oder Intel Edison) einsetzen, der zum einen über einen größeren Speicher, eine schnelle CPU und entsprechende Netzwerkschnittstellen verfügt. Die drei vorgestellten Motoren lassen sich über die gängigen Platinen und deren GPIO Pins ebenfalls steuern. 

33,90 €
Jetzt bestellen »
Raspberry Pi Model B+ Mainboard (GPIO polig, MicroSD Speicherkartenslot, HDMI, 4x USB 2.0)
Versandfertig in 1 - 2 Werktagen

Fazit zur Motorsteuerung mit Arduino

In der Robotik hat man immer mit Motoren zu tun. Je nach Größe und Leistung der Motoren muss man sich für eine Steuerung entscheiden. Die verfügbaren und hier vorgestellten H-Brücken eignen sich für kleine bis mittelkleine Motoren ganz gut. Sobald der Roboter, wie in meinem Fall einem RC-Fahrzeug, jedoch eine gewisse Größe erreicht und damit einen gewissen Anspruch an die Motorleistung hat, sollte man sich eher im Sortiment des Modellbau bedienen. Die einsatzfertigen Fahrtregler und Servos aus dem Modellbau-Bereich sind ideal für den Roboterbetrieb und sollten die erste Wahl sein nicht nur für fahrende, fliegende oder schwimmende sondern auch für gehende Roboter. Für eine sehr einfache Steuerung eignet sich der Arduino Uno R3 gerade noch. Für aufwendige Projekte mit Netzwerkschnittstelle, Kamera und anderen Schnittstellen, sollte man jedoch lieber auf einen Single Board Computer wie dem Raspberry Pi zurück greifen. Multi-Threading und eine hohe Taktfrequenz habe ich bei meinen Tests mit dem Arduino schon sehr vermisst, aber dafür ist er nunmal auch nicht ausgelegt. Für das Testen und Entwickeln ist er jedoch absolut empfehlenswert.

Bücher zum Thema „Arduino“

Die nachfolgenden Bücher behandeln das Thema "Arduino" und werden von Amazon empfohlen. Viele dieser Bücher habe ich selbst gelesen und teilweise auch zur Recherche für diesen Artikel genutzt.
14,99 €
Jetzt bestellen »
Arduino Handbuch für Einsteiger: Der leichte Weg zum Arduino-Experten
Michael Bonacina, CreateSpace Independent Publishing Platform
29,90 €
Jetzt bestellen »
Arduino-Workshops: Eine praktische Einführung mit 65 Projekten (edition Make:) (c't Hardware Hacks Edition)
John Boxall, dpunkt.verlag GmbH
34,99 €
Jetzt bestellen »
Arduino Praxiseinstieg (mitp Professional)
Thomas Brühlmann, mitp
29,90 €
Jetzt bestellen »
Arduino: Elektronik, Programmierung, Basteln
Benjamin Kappel, Rheinwerk Computing

Diese Artikel könnten Dich auch interessieren

Besucher, die diesen Beitrag gelesen haben, haben sich auch die unten aufgeführten Beiträge angesehen. Schau' doch einfach mal in die Artikel rein.
16 Besucher haben auch das gelesen
9 Besucher haben auch das gelesen
9 Besucher haben auch das gelesen
8 Besucher haben auch das gelesen
2 Besucher haben auch das gelesen
1 Besucher haben auch das gelesen

Kommentare zum Thema „Motorsteuerung mit Arduino“

Wenn Du möchtest, kannst Du hier Kommentare zum Thema hinterlassen und Dich mit anderen Nutzern austauschen. Damit Du kommentieren kannst, musst Du Dich nur anmelden und schon kann es losgehen.
Jetzt zum Kommentieren anmelden