Bauteil · Aktor

SG90-Servomotor

Der SG90, das winzige 9-Gramm-Servo hinter den meisten Anfänger-Gelenken und Lenkungen: wie ein Servo Winkel hält, was er hebt und wie man ihn ansteuert.

Was es ist

Der SG90 ist ein Mikroservo: ein eigenständiger kleiner Aktor, der auf einen befohlenen Winkel dreht und ihn dort hält. Wo ein schlichter DC-Motor nur dreht, zielt ein Servo – „90 Grad“ befehlen und es fährt selbst auf 90 Grad und wehrt Wegdrücken ab. Das macht ihn zur natürlichen Wahl für alles, was auf eine bekannte Position muss: ein Roboterarmgelenk, einen Greifer, der öffnet und schließt, eine Schwenk-Neige-Halterung für eine Kamera oder die Lenkung eines kleinen Rovers.

Mit neun Gramm und wenigen Euro ist es das Servo, mit dem fast alle anfangen. Für ernsthafte Arbeit ist es nicht stark oder präzise genug – aber der schnellste Weg zu verstehen, wie sich Lageregelung anfühlt.

Servosteuerungsdiagramm: ein 50-Hz-PWM-Signal, dessen Impulsbreite den Servowinkel setzt. Ein 1-Millisekunden-Impuls befiehlt 0 Grad, 1,5 Millisekunden befehlen 90 Grad und 2 Millisekunden befehlen 180 Grad, dargestellt auf Winkelmesserskalen.
Ein Servo liest die Impulsbreite, nicht die Spannung: 1 ms sind 0°, 1,5 ms Mitte, 2 ms Vollweg – fünfzigmal pro Sekunde wiederholt. SVG herunterladen

Wie es funktioniert

Eines öffnen und man findet vier Dinge: einen kleinen DC-Motor, ein Zahnradgetriebe, das Drehzahl gegen Drehmoment tauscht, ein Potenziometer am Abtrieb, und eine Regelschaltung. Das Potenziometer ist der Trick – es meldet fortlaufend den Ist-Winkel der Welle. Die Schaltung vergleicht diesen gemessenen Winkel mit dem befohlenen und treibt den Motor in die Richtung, die die Lücke schließt. Es ist eine komplette Rückkopplungsschleife im Kleinen – genau weshalb der Inverskinematik-Arm einem Servo trauen kann, eine Zielpose zu erreichen.

Den Winkel befiehlt man mit 50-Hz-PWM-Signal, und die Impulsbreite trägt die Nachricht: grob 1 ms für ein Wegende, 1,5 ms für Mitte, 2 ms für das andere Ende. Das ist PWM als Positionscode statt Drehzahlcode genutzt. In der Praxis versteckt die Arduino-Servo-Bibliothek das Timing und man schreibt schlicht einen Winkel.

Wann man ihn verwendet

Einen SG90 verwenden, wann immer ein Roboteteil auf einen bestimmten Winkel fahren und ihn unter leichter Last halten muss: Greiferfinger, kleine Armgelenke, Sensorgimbals oder das Lenkgestänge an einem leichten Auto. Seine ~180° Reichweite und sofortige „fahr-auf-diesen-Winkel“-Steuerung sind ideal, um Kinematik zu lernen und ausdrucksstarke Mechanismen zu bauen.

Anderswo schauen, wenn das Gelenk echtes Gewicht trägt (Metallgetriebe- oder Standardservo nehmen), wenn man Endlosdrehung für ein Rad braucht (DC-Motor und L298N nehmen, oder ein Endlosrotationsservo), oder wenn man viele Grad präzise Hochdrehmomentbewegung braucht (einen Schrittmotor nehmen).

Verdrahtung und Fallstricke

  • Separat versorgen. Ein blockierender SG90 kann 500–700 mA ziehen – weit mehr, als der 5-V-Pin eines Mikrocontrollers hergibt. Eine eigene 5-V-Versorgung nutzen und ihre Masse mit der Boardmasse verbinden, sonst setzt sich das Board per Brownout zurück.
  • Keine Endlosdrehung. Ein Standard-SG90 fährt ~180° und stoppt. „Dreh ewig“ befehlen bewirkt nichts; für ein angetriebenes Rad braucht man einen anderen Aktor.
  • Nicht zwingen oder blockieren. Die Nylonzahnräder streifen bei Überlast oder scharfem Stoß ab. Lasten leicht halten oder zu Metallzahnrädern wechseln.
  • Etwas Zittern erwarten. Billige Servos jagen leicht ums Ziel. Eine stabile, saubere Versorgung und Abmelden des Signals, wenn das Gelenk nicht halten muss, mildern beides.

Verdrahtung

Drei Drähte, und die Farben sind bei Hobbyservos fast universell:

Draht Farbe (SG90) Was er ist
1 Braun Masse
2 Rot Versorgung, 4,8–6 V
3 Orange Signal – das 50-Hz-PWM

Manche Servos nutzen Schwarz/Rot/Weiß oder Schwarz/Rot/Gelb. Die immer gültige Regel: Rot liegt in der Mitte, und Masse ist der dunkelste der drei.

SG90 Arduino Uno Hinweis
Braun GND Muss mit der Masse der Servoversorgung gemeinsam sein
Rot Nicht die 5 V des Arduino Eine separate 5-V-Versorgung – siehe unten
Orange Beliebiger Digitalpin Die Servo-Bibliothek arbeitet auf jedem Pin

Warum nicht der 5-V-Pin des Arduino

Ein SG90 zieht etwa 10 mA im Leerlauf, 150–250 mA fahrend und 650 mA blockiert. Die USB-Versorgung eines Uno ist auf 500 mA fürs ganze Board begrenzt, und der Bordregler am Hohlstecker hat eine eigene thermische Grenze.

Ein Servo, das sanft fährt, funktioniert oft – genau das ist das Problem: Auf der Werkbank geht es und setzt beim ersten Widerstand aus. Das Symptom ist ein Board, das zurücksetzt, wann immer der Arm eine bestimmte Position erreicht – was wie ein Softwarefehler liest.

Eine eigene 5-V-Versorgung geben, die Massen verbinden und einen 470-µF-Kondensator über die Servoversorgung nah am Stecker legen.

Die Impulsbreite-Winkel-Beziehung

Ein Servo liest keine Spannung. Es liest, wie lang der Impuls ist, fünfzigmal pro Sekunde.

Impulsbreite Nennwinkel Was der SG90 wirklich tut
1,0 ms 0° Stoppt oft 10–15° zu früh
1,5 ms 90° Mitte, und meist genau
2,0 ms 180° Stoppt oft 10–15° zu früh
< 0,5 ms oder > 2,5 ms — Summt gegen einen Endanschlag und zieht Blockierstrom

Der 1–2-ms-Bereich ist Konvention, kein Standard. Viele SG90 erreichen ihre wahren Endanschläge näher bei 0,6 ms und 2,4 ms – weshalb attach() der Arduino-Servo-Bibliothek optionale minimale und maximale Impulsbreiten nimmt:

servo.attach(9, 600, 2400);   // statt der Standardwerte 544/2400

Das pro Servo zu kalibrieren ist der Unterschied zwischen einem Arm, der seinen Arbeitsraum erreicht, und einem, der an beiden Enden mysteriöse 20° kurz bleibt.

Minimal funktionierender Code

#include <Servo.h>

Servo joint;
const int PIN = 9;

void setup() {
  joint.attach(PIN, 600, 2400);   // calibrate these two numbers per servo
  joint.write(90);                 // centre before doing anything else
  delay(500);
}

// Move gently instead of jumping — a servo commanded to jump goes at full speed.
void sweepTo(int target, int stepDelayMs) {
  int current = joint.read();
  int step = (target > current) ? 1 : -1;
  while (current != target) {
    current += step;
    joint.write(current);
    delay(stepDelayMs);
  }
}

void loop() {
  sweepTo(20, 15);
  delay(400);
  sweepTo(160, 15);
  delay(400);
}

joint.write(160) und das Durchfahren enden beide bei 160° – sind aber elektrisch völlig verschiedene Ereignisse. Der Sprung befiehlt volle Drehzahl, was am belasteten Gelenk eine 650-mA-Spitze und einen mechanischen Schlag durch Nylonzahnräder heißt. Das Durchfahren verteilt dieselbe Bewegung über zwei Sekunden und zieht einen Bruchteil des Stroms. An einem Mehrgelenkarm ist das der Unterschied zwischen einer Versorgung, die es schafft, und einer, die es nicht tut.

Drehmoment: was 1,8 kg·cm wirklich heißt

Die Angabe lautet 1,8 kg·cm bei 4,8 V – das Servo hält also 1,8 kg an 1 cm von der Welle, oder 1,8/L kg an L Zentimetern. Der letzte Teil erwischt Leute.

Armlänge ab Welle Maximallast (blockiert) Sichere Arbeitslast (~30 %)
1 cm 1800 g 540 g
5 cm 360 g 108 g
10 cm 180 g 54 g
15 cm 120 g 36 g

Zwei Dinge daraus mitnehmen. Erstens: Drehmoment fällt linear mit Reichweite – ein 15-cm-Armsegment hebt also absolut blockiert nur 120 g. Zweitens: Nie auf die Blockierangabe auslegen. Ein Servo im Blockierzustand zieht voll Strom, erzeugt keine Bewegung und heizt; ein Drittel des Blockiermoments ist eine vernünftige Decke für ein Gelenk, das eine Position länger halten muss.

Die Angabe gilt außerdem bei 4,8 V. An 6 V erzeugt dasselbe Servo grob 2,2 kg·cm – eines der wenigen Gratis-Upgrades der Hobbyrobotik, sofern deine Versorgung den entsprechend höheren Strom liefern kann.

Zittern verringern

Billige Servos jagen leicht um ihr Ziel – und es gibt vier unterscheidenswerte Ursachen:

  • Versorgungsrauschen. Die häufigste. Ein Servo teilt sich eine Schiene mit Motoren und sieht jede Stromspitze als Regelstörung. Separate Versorgung plus Kondensator am Servo.
  • Signal-Timing-Jitter. Die Servo-Bibliothek erzeugt Impulse per Software – eine beschäftigte Schleife oder ein anderer Interrupt verschiebt ihre Flanken. Wechsel zu PCA9685 behebt das vollständig – er erzeugt die Impulse in Hardware.
  • Totband. Der eigene Regler des Servos ignoriert Fehler unter grob 5 µs Impulsbreite – etwa 1°. Unter diese Auflösung antwortet er schlicht nicht, und feinere Schritte zu verlangen erzeugt nichts.
  • Halten gegen Last. Ein Servo, das am Rand seines Drehmoments gegen Schwerkraft kämpft, summt fortlaufend. detach(), wenn das Gelenk nicht halten muss, oder das Gelenk mechanisch ausbalancieren.

Fehlersuche

Symptom Wahrscheinliche Ursache Lösung
Board setzt zurück, wenn das Servo fährt Servostrom durch den Arduino Separate 5-V-Versorgung, gemeinsame Masse, 470-µF-Kondensator
Summt ständig, wird warm Über seinen Endanschlag hinaus befohlen Impulsbreitenbereich in attach() einengen
Fährt nur etwa 150° Bibliotheksstandards erreichen die wahren Anschläge nicht attach(Pin, 600, 2400) und abstimmen
Fährt völlig falschen Winkel an Horn in beliebiger Drehung montiert Jedes Gelenk braucht Kalibrier-Offset – und eventuell Vorzeichenumkehr
Zittert im Ruhezustand Versorgungsrauschen oder softwaregetaktete Impulse Erst Kondensator; PCA9685, wenn es bleibt
Abgestreift und rutscht nun Nylonzahnräder versagten unter Stoß oder Überlast Metallgetriebe-MG90S; Last oder Drehzahl senken
Mit der Zeit langsamer und schwächer Versorgung sackt bei leerendem Akku Drehmoment skaliert mit Spannung – Schiene unter Last messen
Dreht nicht endlos Es ist ein Positionsservo Endlosrotationsservo oder DC-Getriebemotor verwenden

SG90 oder etwas anderes?

Teil Drehmoment @ 4,8 V Zahnräder Wählen wenn
SG90 1,8 kg·cm Nylon Lernen, leichte Greifer, Sensorgimbals
MG90S 2,2 kg·cm Metall Gleiche Größe, überlebt Stöße – das Drop-in-Upgrade
MG996R 9,4 kg·cm Metall Standardgelenke mit echtem Gewicht
Endlos-SG90 — Nylon Ein angetriebenes Rad, wo Drehzahl statt Winkel gewünscht ist
NEMA-17-Schrittmotor ~40 N·cm — Präzise, wiederholbare Positionierung ohne Totband

Eine Warnung zu „leichten Greifern“ in der ersten Zeile: Ein Greifer ist die eine Anwendung, in der ein SG90 sein Leben blockiert verbringt – ein Objekt halten ist keine Bewegung, also nimmt die Wicklung grob 0,5 A ohne Kühlung auf, und so sterben diese üblicherweise. Deshalb setzt auch die Backenkraft der Hebelarm statt des Drehmoments auf der Packung: 0,176 N·m über einen 30-mm-Finger sind 5,87 N blockiert und etwa 4,11 N wirklich haltbar. Einen Servogreifer auslegen deckt beides ab, und der Greifersimulator rechnet für den eigenen Finger.

Den Graphen erkunden

Verwendet in diesen Bauprojekten

Projekte, Lernpfade und Simulatoren, die SG90-Servomotor verwenden.

Vergleich

Alternativen

Fragen

FAQ zu SG90-Servomotor

Was ist der SG90-Servomotor?

Der SG90 ist ein 9-Gramm-Hobbyservo – ein kleiner Getriebemotor, der auf einen befohlenen Winkel dreht und ihn hält, statt frei zu rotieren. Er ist das billigste, gängigste Servo der Anfängerrobotik – für Armgelenke, Greifer, Schwenk-Neige-Kamerahalterungen und Lenkungen.

Wie funktioniert ein Servomotor?

Darin stecken ein DC-Motor, ein Zahnradgetriebe, ein Potenziometer und eine Regelschaltung. Das Potenziometer meldet der Schaltung den aktuellen Winkel; die Schaltung vergleicht ihn mit dem befohlenen Winkel und treibt den Motor, bis beide übereinstimmen. Diese eingebaute Rückkopplungsschleife lässt ein Servo eine präzise Position halten.

Wie steuert man einen SG90 mit Arduino an?

Man sendet ein 50-Hz-PWM-Signal, dessen Impulsbreite den Winkel setzt: etwa 1 ms heißt 0°, 1,5 ms heißt 90° und 2 ms heißt 180°. In der Praxis nutzt man die Arduino-Servo-Bibliothek und ruft schlicht servo.write(Winkel) auf – sie erzeugt das Timing.

Wie viel Gewicht kann ein SG90 heben?

Das Blockiermoment des SG90 beträgt etwa 1,8 kg·cm – es hält also gerade 1,8 kg an 1-cm-Arm oder ~180 g an 10 cm. Nutzbare Dauerlast liegt deutlich darunter. Für Schwereres oder längeren Arm auf ein Metallgetriebeservo wie MG90S oder Standardgröße aufrüsten.

SG90 gegen MG90S – welches ist besser?

Beide sind gleich groß und steuern sich gleich – doch das MG90S hat Metallzahnräder und etwas mehr Drehmoment, überlebt also Blockieren und Last, die die SG90-Nylonzahnräder abstreifen würden. Den SG90 zum Lernen und für leichte Lasten nehmen; das MG90S wählen, wenn das Gelenk echtes Gewicht trägt oder Stöße abbekommt.

Wie viel Strom zieht ein SG90?

Ein SG90 zieht im Leerlauf nur wenige Milliampere, kann aber blockiert oder unter Last fahrend auf 500–700 mA spitzen. Das ist zu viel für den 5-V-Pin eines Arduino – Servos also aus separater 5-V-Versorgung mit gemeinsamer Masse speisen, sonst setzt sich das Board per Brownout zurück.

Weiterführende Literatur

Quellen