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.
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