DC-Motorsteuerungen

By | 4. April 2017

Motorsteuerung bedeutet im einfachsten Fall, den Motor in Bewegung zu versetzen. Dies geschieht in dem die Wicklungen des Motors mit Spannung versorgt werden. Dabei gibt es nur zwei Zustände: der Motor ist mit Spannung versorgt und dreht sich oder im anderen Fall eben nicht.

Die dazu erforderlichen Schalter können zwar mechanische Schalter sein, heute sind es aber meist moderne Transistoren oder integrierte Schaltkreise, die gleichzeitig die komplette Steuerungselektronik beinhalten. Das Funktionsprinzip ändert sich aber nicht.

Um mit einem Microcontroller einen Motor zu steuern benötigt man eine kleine Zusatzschaltung, da die Ströme der Steuerpins nicht ausreichen. Über folgende Transistorstufe kann beispielsweise mit einem Arduino jeder beliebige Motor angesteuert werden.

Ein entsprechendes Steuerprogramm könnte so aufgebaut sein:

Änderung der Drehrichtung

Um die Richtung des Motors zu wechseln, muss der Stromfluss in der Spule umgekehrt werden. Um dies ohne manuelles umpolen der Spannungsquelle zu erreichen, ist eine spezielle Schaltung erforderlich, die auf geschickte Art das automatische Umpolen ermöglicht. Die Schaltung hat ihren Namen von der Form wie die Schalter angeordnet sind. Da sie wie ein „H“ aus sieht wird sie als H-Schaltung oder H-Brücke bezeichnet. Eine solche H-Brücke sieht schematisch so aus:

MotorSteuerung2

Die rote Linie zeigt den Stromweg für die jeweilige Drehrichtung. Sind die Schalter 1 und 4 geschlossen, so dreht sich der Motor rechts herum. Schliesst man die Schalter 2 und 3 dreht sich der Motor in die andere Richtung. Wobei zu beachten ist, dass nicht alle theoretisch möglichen Schalterstellung zugelassen werden, um beispielsweise Kurzschlüsse zu vermeiden. Die Betriebsspannung U ist die Spannung für den Motor, die meist unabhängig von der Logik ist und auch höher gewählt werden kann als 12 V.

Veränderung der Motor-Geschwindigkeit

Die Geschwindigkeit eines Motors ist direkt proportional zur angelegten Spannung. Werden Impulse mit voller Spannung aber variabler Breite an die Last gesendet, so verändert dies die Geschwindigkeit des Motors, je nach Breite des Impulses. Man kann damit verschiedene Geschwindigkeit-Profile fahren (siehe Graphik).

Diese Form der Ansteuerung wird als Pulsweitenmodulation bezeichnet. Dabei wird ein Rechtecksignal mit konstanter Frequenz verwendet und man variiert die Breite der jeweiligen Pulse. Die mittlere Spannung, welche dann am Ausgangs-Pin anliegt ist somit durch das Verhältnis von T1 zu (T1+T2) bestimmt. Wobei die Zeiten mit

T1 [DelayTime High]: = Zeit-Anteil mit HIGH-Signal

T2 [DelayTime Low]: = Zeit-Anteil mit LOW-Signal

bezeichnet werden. Die Breite des aktiven Pulses T1 bezeichnet man als Pulsweite. Die  Periodendauer T berechnet sich aus der Summe der Zeiten T1 und T2. 

Liegt z.B. ein Anteil von 50% logisch 1 vor, ist der Transistor nur die Hälfte der Zeit geöffnet und somit sinkt die am Motor angelegte Spannung ebenfalls auf die Hälfte, womit sich der Motor dann nur mit halber Geschwindigkeit dreht.

Das Verhältnis von Pulsweite zu Periodendauer bezeichnet man auch als “Duty Cycle” oder auch Tastgrad (also die Zeit, in der der Pin “im Dienst” ist).

PWM-Signal Erzeugung

Praktisch wird ein PWM-Signal (= Rechtecksignal mit konstanter Frequenz und variabler Pulsdauer) dadurch erzeugt, dass ein Ausgangs-Pin für eine bestimmte Zeit an und ab geschaltet wird. Im folgenden soll gezeigt werden, wie das mit einem Arduino durchgeführt werden kann:

  • Die gesamte Impulsdauer T soll 1000ms betragen
  • Die Pulsbreite T2 wird dabei über ein Potentiometer eingestellt
  • Die Potentiometer Werte zwischen 0-5V werden in Werte zwischen 0 und 1023 übersetzt
  • T1 lässt sich dann als Differenz (1000-T2) berechnen

Werden beispielsweise am Poti 3V eingelesen, dann entspricht das dem Zeit-Wert 3*(1023/5) = 613,8 µs, was ein T2 [=DelayTime Low] von 613µs entspricht. Damit ergibt sich dann ein T1 [=DelayTime High] von (1000– T2) = 387µs.

Das PWM Signal wird erzeugt, in dem der PWM-Pin für T1 µs eingeschaltet und für T2 µs ausgeschaltet wird. Was hier zu einem Tastgrad oder Duty Cycle von 38,7% führt.

Eine weitere Möglichkeit PWM Signale mit dem Arduino zu erzeugen, ist die Verwendung der eingebauten PWM-Funktion. Sechs der digitalen Kanäle auf dem Arduino-Boards (Kanal 3, 5, 6, 9, 10, 11) sind nicht nur digital, sondern auch analog ansteuerbar. Der Trick besteht darin, den PWM-Pin als OUTPUT Pin zu definieren, dann aber mit dem Befehl analogWrite den Tastgrad oder Duty Cycle Wert zu schreiben:

Die H-Brücke

Auf Basis der Eingangs gemachten Überlegungen wäre es nun ohne weiteres möglich, sich eine diskrete Schaltung mit entsprechenden mechanischen Schaltstellungen oder auch mit Transistoren zu entwickeln, um einen Motor zu steuern.

Da diese Aufgabe in der Steuerungstechnik sehr oft benötigt wird, und man vor allem den Geschwindigkeitsvorteil von Halbleiter-Schaltern nutzen möchte, gibt es sogenannten H-Brücken-ICs als integrierte Bausteine zu kaufen.

Beispielsweise den Baustein L293 D, der über 600mA Strom liefern kann. Daneben gibt es noch weit leistungsstärkere wie z.B. den L298 D der mit über 2A Motoren steuern kann.

Die Ansteuerung eines Motors ist damit relativ unkompliziert machbar. Wichtig ist dabei auf die unterschiedlichen Spannungsversorgungen zu achten. Der Baustein kann ohne Probleme mit 5V Spannung vom Arduino betrieben werden. Da die zu steuernden Motoren aber meist größere Spannungen benötigen, besteht die Möglichkeit eine externe Spannungsquelle an PIN 8 des Bausteins anzuschliessen. Der Masse Anschluss wird dagegen von beiden Spannungen verwendet. Die beiden LEDs sind optional, zeigen aber sehr schön welche Drehrichtung angesteuert wurde.
MotorSteuerung

Die Steuerung des Motors erfolgt über die beiden Eingänge IN1 und IN2 die mit den digitalen Ausgängen des Arduinos verbunden werden. Dabei können die in Tabelle 4.1 dargestellten vier Zustände auftreten. Anschliessend ein Bild des Versuchsaufbaus einer einfachen Motorsteuerung mit dem verdrahteten Baustein auf einer Lochrasterplatine und der zugehörige Quellcode für den Arduino.

Die Geschwindigkeit der beiden DC Motoren lässt sich über die beiden EnablePins 1 und 9 über ein PWM Signal steuern. Im Beispiel wird dies über den PWM Pin 3 des Arduino, der an Pin 1 des L293 Chips angeschlossen ist und in Verbindung mit einer Schleife, die von 0 bis 255 zählt demonstriert.

Damit sind die Grundlagen geschaffen, um auch komplexere Steuerung- und Automatisierungsaufgaben auf Basis einer Arduino Steuerung durchzuführen.

Motor-Shields

Da Motorsteuerungen das Interesse vieler Mitglieder der Maker-Gemeinschaft ist, gibt es im Internet unzählige Seiten mit Anleitungen wie verschiedenste Motoren angesteuert werden können. Hier zeigt sich deutlich, dass der Open-Hardware und Open-Software-Ansatz eine bisher nie dagewesene Möglichkeit bietet, qualitativ hofwertige Steuerungen selber zu realisieren.

Am Markt gibt es deshalb auch viele Erweiterungenskarten (Shields), die es erlauben, mehrere DC-Motoren und Schrittmotoren gleichzeitig anzusteuern. Der dazu erforderlichen Quellcode ist frei erhältlich und damit jederzeit auf die eigenen Bedürfnisse anpassbar.

Motor Steuerung mit Arduino Motor Shields

Die Firma Adafruit entwickelte 2008 das erste Motor-Shields für die Arduino-Plattform. Es liegt nun in einer überarbeiteten Form in der Version 2.3 vor. Das Adafruit Motor/Stepper/Servo Shield für Arduino V 2.3 bietet den einfachsten Weg um Gleichstrommotoren und Schrittmotoren (Stepper) zu betreiben.

AdafMotor

Mit diesem Shield können bis zu 4 Gleichstrommotoren oder 2 Schrittmotoren (Stepper) betrieben werden. Gegenüber seinem Vorgänger bringt dieses Motor-Shield jedoch noch einige Verbesserungen mit sich:

Statt eines L293D Darlington-Treiber wird jetzt der TB6612 MOSFET-Treiber mit 1,2 A pro Kanal und 3A Spitzenstromfähigkeit verwendet. Der Spannungsabfall an den Motoren ist relativ gering, so dass Sie gegenüber dem Vorgängermodel mehr Drehmoment erhalten. Theoretisch lassen sich bis zu 32 Shields aufeinander stapeln und somit bis zu 64 Schrittmotoren und 128 Gleichstrommotoren betreiben.

Zusätzlich können noch zwei Servos angeschlossen werden. Versorgt wird das Board am besten durch eine externe Stromversorgung, kann aber auch über den Stromanschluss des Arduino versorgt werden. Das Shield wird über den I2C Bus angesprochen. Das hat den großen Vorteil, dass keine zusätzlichen I/Os belegt werden und sämtliche Pins auch weiterhin zur Verfügung stehen.

ServoStepper

Die Bibliothek ist sehr gut und die Programmierung lässt sich auch von völligen Neulingen in Minuten realisieren. Neben der Bibliothek sind auch zahlreiche Beispiele vorhanden. Man steuert den Motor über die Drehrichtung (forward, backward, release) sowie einem Prozentsatz der Eingangsspannung um die Geschwindigkeit zu steuern. Werden Schrittmotoren gesteuert, so wird die Drehrichtung und ein Winkel angegeben.