Servomotorsteuerung: Eine vollständige Anleitung
Wichtige Lernpunkte:
Definiert: Servomotorsteuerung: Die Servomotorsteuerung ermöglicht eine präzise Steuerung der Motordrehposition, -geschwindigkeit und -beschleunigung durch elektronische Signale.
Rückkopplungsmechanismus: Das Rückkopplungssystem, oft ein Potentiometer oder Encoder, stellt sicher, dass die Motorausgabe genau mit dem Steuerungseingang übereinstimmt.
PWM-Signal: Pulse-Width-Modulation (PWM) ist entscheidend für die Einstellung der Servoposition durch Veränderung der Dauer der elektrischen Impulse.
Arduino und Servomotoren: Die Verwendung eines Arduino-Boards ist eine beliebte und effektive Methode, um Servomotoren mit minimaler Hardwarekonfiguration zu programmieren und zu steuern.
Anwendungen von Servomotoren: Servomotoren sind essentiell für Projekte, die eine genaue Positionssteuerung erfordern, wie beispielsweise Robotik und automatisierte Systeme.
Ein Servomotor ist ein Motor, der für hohe Präzision und Genauigkeit bei der Rotation entwickelt wurde. Er unterscheidet sich von einem typischen Gleichstrommotor durch seine Fähigkeit, eine bestimmte Position zu halten, anstatt ständig zu rotieren. Diese Eigenschaft macht Servomotoren ideal für Robotik, Automatisierung und Hobbyprojekte.
Dieser Artikel erklärt, wie die Servomotorsteuerung funktioniert, die verschiedenen Arten von Servomotoren und verschiedene Steuermethoden und Geräte. Es werden auch Beispiele für Servomotoranwendungen und -projekte gegeben.
Was ist ein Servomotor?
Ein Servomotor wird definiert als ein Aktuator, der eine präzise Steuerung der Position (Winkel), Geschwindigkeit und Beschleunigung ermöglicht. Ein typischer Servomotor besteht aus drei Hauptkomponenten: einem Gleichstrommotor, einer Steuerschaltung und einem Rückkopplungselement.
Der Gleichstrommotor treibt den Servo an und verbindet sich mit Zahnrädern, die die Geschwindigkeit reduzieren und das Drehmoment am Ausgangswellenende erhöhen.

Das Ausgangswellenende ist der Teil des Servos, der rotiert und die Last bewegt.
Die Steuerschaltung ist dafür verantwortlich, die Eingangssignale von einem externen Steuergerät zu empfangen und zu verarbeiten. Diese Signale geben dem Servo an, welche Position, Geschwindigkeit oder Richtung er einnehmen soll. Die Steuerschaltung sendet auch Strom an den Gleichstrommotor, um ihn anzutreiben.
Das Rückkopplungselement ist in der Regel ein Potentiometer oder ein Encoder, der die aktuelle Position des Ausgangswellenendes misst.

Das Rückkopplungselement gibt die Positionsdaten zurück an die Steuerschaltung, die dann die Leistung des Gleichstrommotors anpasst, um die tatsächliche Position mit der gewünschten Position vom Eingangssignal auszurichten.
Die Rückkopplungsschleife zwischen der Steuerschaltung und dem Rückkopplungselement stellt sicher, dass der Servo präzise in jede Position innerhalb seines Bewegungsbereichs fahren und diese halten kann.
Wie steuert man einen Servomotor?
Servomotoren werden gesteuert, indem ein PWM-Signal (Pulsweitenmodulation) an die Signalleitung des Servos gesendet wird. PWM ist eine Technik, bei der ein Signal schnell auf- und abgeschaltet wird, um Pulsbreiten unterschiedlicher Länge zu erzeugen. Die Breite der Pulse bestimmt die Position des Ausgangswellenendes.
Wenn Sie beispielsweise ein PWM-Signal mit einer Pulsdauer von 1,5 Millisekunden (ms) senden, fährt der Servo in die neutrale Position (90 Grad).

Wenn Sie ein PWM-Signal mit einer Pulsdauer von 1 ms senden, fährt der Servo in die minimale Position (0 Grad). Wenn Sie ein PWM-Signal mit einer Pulsdauer von 2 ms senden, fährt der Servo in die maximale Position (180 Grad).
Das PWM-Signal hat eine Frequenz von 50 Hz, was bedeutet, dass es alle 20 ms wiederholt wird. Die Pulsdauer kann innerhalb dieser Periode von 1 ms bis 2 ms variieren.
Es gibt viele Möglichkeiten, PWM-Signale für Servomotoren zu erzeugen und zu senden. Einige der gängigsten Methoden sind:
Verwendung eines Arduino-Boards oder eines anderen Mikrocontrollers
Verwendung eines Potentiometers oder eines anderen analogen Sensors
Verwendung eines Joysticks oder eines anderen digitalen Eingabegeräts
Verwendung eines dedizierten Servosteuergeräts oder -treibers
In den folgenden Abschnitten werden wir jede dieser Methoden detaillierter untersuchen und einige Beispiele dafür sehen, wie sie funktionieren.
Steuerung eines Servomotors mit Arduino
Arduino ist eine der beliebtesten Plattformen zur Steuerung von Servomotoren. Arduino-Boards haben eingebaute PWM-Ausgänge, die verwendet werden können, um Signale an Servos zu senden. Arduino verfügt auch über eine Servobibliothek, die es einfach macht, Code für die Servosteuerung zu schreiben.
Um einen Servomotor mit Arduino zu steuern, benötigen Sie:
Ein Arduino-Board (z.B. Arduino UNO)
Ein Standard-Servomotor (z.B. SG90)
Jumperkabel
Ein Brotbrett (optional)
Das rote Kabel vom Servo verbindet sich mit 5V auf dem Arduino-Board. Das schwarze Kabel vom Servo verbindet sich mit GND auf dem Arduino-Board. Das weiße Kabel vom Servo verbindet sich mit Pin 9 auf dem Arduino-Board.
Um das Arduino-Board zu programmieren, müssen Sie die Arduino IDE (online oder offline) verwenden. Sie können eines der Beispiele aus der Servobibliothek verwenden oder Ihren eigenen Code schreiben.
Der folgende Code zeigt, wie man einen Servomotor über 180 Grad hin und her fahren lässt, indem man eine for-Schleife verwendet:
#include <Servo.h> // Servo-Bibliothek einbinden
Servo myservo; // Servo-Objekt erstellen
int pos = 0; // Variable für Position
void setup() {
myservo.attach(9); // Servo-Objekt an Pin 9 anhängen
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Schleife von 0 bis 180 Grad
myservo.write(pos); // Position an Servo-Objekt schreiben
delay(15); // 15 ms warten
}
for (pos = 180; pos >= 0; pos -= 1) { // Schleife von 180 bis 0 Grad
myservo.write(pos); // Position an Servo-Objekt schreiben
delay(15); // 15 ms warten
}
}
Dieser Code verwendet zwei Schleifen, um die Positionsvariable von 0 bis 180 Grad und umgekehrt zu inkrementieren und dekrementieren. Er schreibt diesen Wert dann an das Servo-Objekt mit myservo.write(pos). Er fügt auch eine Verzögerung von 15 ms zwischen jedem Schritt hinzu, um die Bewegung zu verlangsamen.
Laden Sie diesen Code über die Upload-Schaltfläche der IDE auf Ihr Arduino-Board, und beobachten Sie, wie Ihr Servomotor glatt hin und her fährt.
Steuerung eines Servomotors mit Potentiometer
Ein Potentiometer ist ein analoger Sensor, dessen Widerstand je nach Drehung seines Knopfes variiert. Sie können ein Potentiometer als Eingabegerät zur Steuerung eines Servomotors verwenden.
Um einen Servomotor mit einem Potentiometer zu steuern, benötigen Sie:
Ein Arduino-Board (z.B. Arduino UNO)
Ein Standard-Servomotor (z.B. SG90)
Ein Potentiometer (10k Ohm)
Jumperkabel
Ein Brotbrett
Das Verkabelungsschema für die Verbindung eines Potentiometers und eines Servomotors mit einem Arduino-Board ist unten dargestellt:
Das rote Kabel vom Potentiometer verbindet sich mit 5V auf dem Arduino-Board. Das schwarze Kabel vom Potentiometer verbindet sich mit GND auf dem Arduino-Board. Das grüne Kabel vom Potentiometer verbindet sich mit Pin A0 auf dem Arduino-Board.
Das rote Kabel vom Servo verbindet sich mit 5V in einer anderen Reihe auf dem Brotbrett. Das schwarze Kabel vom Servo verbindet sich mit GND in einer anderen Reihe auf dem Brotbrett. Das weiße Kabel vom Servo verbindet sich mit Pin D9 in einer anderen Reihe auf dem Brotbrett.
Um Ihr Arduino-Board zu programmieren, müssen Sie denselben Code wie im vorherigen Beispiel verwenden, aber ein paar Zeilen ändern:
#include <Servo.h> // Servo-Bibliothek einbinden
Servo myservo; // Servo-Objekt erstellen
int potpin = A0; // Pin, der mit dem Potentiometer verbunden ist
int val = 0; // Variable zum Lesen des Potentiometerwerts
void setup() {
myservo.attach(9); // Servo-Objekt an Pin D9 anhängen
}
void loop() {
val = analogRead(potpin); // Wert vom Potentiometer lesen (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Wertebereich mappen (0 - 180)
myservo.write(val); // Gemappten Wert an Servo-Objekt schreiben
delay(15); // 15 ms warten
}
Dieser Code verwendet die Funktion analogRead(potpin), um den Wert vom Potentiometer, das an Pin A0 angeschlossen ist, zu lesen. Er verwendet dann die Funktion map(val, 0, 1023, 0, 180), um den Wertebereich von 0 - 1023 auf 0 - 180 Grad abzubilden. Er schreibt dann den gemappten Wert an das Servo-Objekt mit der Funktion myservo.write(val). Er fügt auch eine Verzögerung von 15 ms zwischen jedem Schritt hinzu, wie im vorherigen Beispiel.
Sie können diesen Code über die Upload-Schaltfläche in der IDE auf Ihr Arduino-Board laden. Sie sollten sehen, wie Ihr Servomotor sich entsprechend der Drehung des Potentiometers bewegt.
Steuerung eines Servomotors mit Joystick
Ein Joystick ist ein digitales Eingabegerät, das die Richtung und Stärke der Bewegung entlang zweier Achsen erkennen kann. Sie können einen Joystick verwenden, um einen Servomotor zu steuern, indem Sie die x-Achse des Joysticks auf den Winkel des Servos abbilden.
Um einen Servomotor mit einem Joystick zu steuern, benötigen Sie folgendes:
Ein Arduino-Board (z.B. Arduino UNO)
Ein Standard-Servomotor (z.B. SG90)
Ein Joystick-Modul (z.B. KY-023)
Jumperkabel
Ein Brotbrett
Das Verkabelungsschema für die Verbindung eines Joystick-Moduls und eines Servomotors mit einem Arduino-Board ist unten dargestellt:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Das rote Kabel vom Joystick-Modul verbindet sich mit 5V auf dem Arduino-Board. Das schwarze Kabel vom Joystick-Modul verbindet sich mit GND auf dem Arduino-Board. Das grüne Kabel vom Joystick-Modul verbindet sich mit Pin A0 auf dem Arduino-Board.
Das rote Kabel vom Servo verbindet sich mit 5V in einer anderen Reihe auf dem Brotbrett. Das schwarze Kabel vom Servo verbindet sich mit GND in einer anderen Reihe auf dem Brotbrett. Das weiße Kabel vom Servo verbindet sich mit Pin D9 in einer anderen Reihe auf dem Brotbrett.
Um Ihr Arduino-Board zu programmieren, müssen Sie denselben Code wie im vorherigen Beispiel verwenden, aber ein paar Zeilen ändern:
#include <Servo.h> // Servo-Bibliothek einbinden
Servo myservo; // Servo-Objekt erstellen
int joyX = A0; // Pin, der mit der x-Achse des Joysticks verbunden ist
int val = 0; // Variable zum Lesen des Joystickwerts
void setup() {
myservo.attach(9); // Servo-Objekt an Pin 9 anhängen
}
void loop() {
val = analogRead(joyX); // Wert von der x-Achse des Joysticks lesen (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Wertebereich mappen (0 - 180)
myservo.write(val); // Gemappten Wert an Servo-Objekt schreiben
delay