Doman S2003MD
Position Feedback 270° Servomotor
Die neuen S2003MD verfügen über digitales Positionsfeedback mit dessen Hilfe die aktuelle Stellung des Abtriebschafts ausgelesen werden kann. Somit kann die Startposition beim Einschalten ermittelt werden, oder der Servo durch manuelles Bewegen des Schafts in die Zielpositionen verfahren werden und diese digital ausgelesen werden. Die Positionsrückmeldung erfolgt ohne zusätzliches Kabel direkt über die Steuerleitung. Durch Senden eines 50µs-Puls kann die aktuelle Position abgefragt werden (siehe "Informationen" unten auf dieser Seite).
Der DOMAN S2003MD Servomotor zeichnet sich besonders durch ein hohes Drehmoment bei einem großen Drehbereich von 270° (für Rad-Freunde: 1,5π) aus. Durch den großen Drehwinkel eignet er sich besonders für Anwendungen im Bereich der Robotik. Angesteuert wird der Servo über den Pulsweitenbereich von 500-2500µs. Das Getriebe ist zweifach kugelgelagert und aus Metall. Die interne 12 Bit digital Positionssteuerung sorgt für präzise Ansteuerung.
Technische Daten
Eingangsspannung | 4,8 - 6,0 V |
Modulation | Digital |
Drehmoment | 1,7Nm (4.8V); 2,1Nm (6V) |
Rotationsbereich | 270° |
Taktung | 20 ms |
Pulsweite | 500 - 2500 µs |
Totbereich | ~7µs |
Connector Typ | JR |
Masse | 56g |
Abmessung | 40,6mm x 19,8mm x 47mm |
Kabellänge | 30cm |
Winkelgeschwindigkeit | 0.18 sec/60° (6v); 0.16sec/60° (7.2v) |
Positionsfeedback | Ja |
Inhalt |
1 Servo DOMAN S2003MD |
Kunststoff Flanschteile, Servohorn |
Befestigungsschrauben |
Die Videos zeigen Anwendungsbeispiele, die unter Umständen weitere Soft- und Hardwarekomponenten erfordern.
Informationen
Position Feedback
Winkel auslesen
Um den aktuellen Winkel des Servos auszulesen muss ein 50μs Puls erzeugt und an den Motor gesendet werden. Der Servo schaltet die Steuerleitung anschließend nach einigen μs auf HIGH
. Die verstrichene Zeit korreliert mit der Position des Servohorns. Diese befindet sich dabei, analog zu den Steuersignalen, im Bereich 500-2500μs. Mit dem Arduino kann die Abfrage folgendermaßen erreicht werden:
int pin = 9; // servo pin
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
delayMicroseconds(50); // send a 50 us pulse to get the current position
digitalWrite(pin, LOW);
pinMode(pin, INPUT);
int position = pulseIn(pin, HIGH); //e.g. 500-2500
pulseIn
gibt die Zeit in Microsenkunden zurück, bis die Leitung auf HIGH
steht. Weitere Beispiele können dem GitHub Rpository entnommen werden.
Servomotoren
Anschluss und Leistungsaufnahme
Ein Motor wird über die drei Leitungen V+ (rot), GND (braun), PWM (orange) mittels weiblichem Graupner-Stecker angeschlossen. Die Stromversorgung darf dabei nicht über den Microkontroller, sonder über ein dediziertes Netzteil geschehen.
Als Richtwert können 1-2A Strombedarf pro Servo angenommen werden. Für einen 6-Achs Roboter wird folglich ein 6-12A Netzteil benötigt.
Ansteuerung
Angesteuert werden die Servos mit Hilfe von Pulsweitenmodulation (PWM). Dabei werden Pulse, definierter Länge, mit 50Hz (Periode: 20ms) an die im Servo eingebaute Elektronik gesendet und von dieser in Achswinkel umgesetzt. Die Servos nehmen meist Pulse im Bereich von 500μs-2000μs an und setzten diese in Winkel um. Der genaue Arbeitsbereich kann dem jeweiligen Servo-Datenblatt entnommen werden. Die Winkelgenauigkeit kann mit Hilfe der Angabe zum Totbereich (deadband) berechnet werden. Bei 2μs Totbereich, 180° Drehbereich und 500-1500μs PWM-Bereich ergeben sich 180/(1500-500)*2 = 0.36° Winkelgenauigkeit. Pulseänderungen unter 2μs können also vom Servotreiber nicht in Winkeländerungen umgesetzt werden. Zu beachten ist außerdem, dass es sich hierbei um einen theoretischen Wert handelt, der unter Last größer ausfallen kann. Die Pulse können beispielsweise mit einem Mikrocontoller, Arduino, Teensy oder RaspberryPi erzeugt werden.
Die Abbildung von Steuerpulsen auf Achswinkel ist nicht bei allen Servotypen deterministisch. Das heisst, dass verschiedene Servos
bei der selben Pulslänge nicht unbedingt die selben Winkelstellung einnehmen. Es empfielt sich daher,
eine einfache Konfiguration vorzunehmen, in welcher der Motor mit bestimmten Pulsweiten angesteuert und der wahre Achswinkel
mit Hilfe eines messenden Verfahrens bestimmt wird. Mit der Funktion pw = map(targetAngle, minAngle, maxAngle, minPW, maxPW)
kann dann die Pulsweite unter Verwendung der gemessenen Winkel und Pulsweiten bestimmt werden.
Servos zittern, brummen
Ein Servozittern ist meist auf Störungen im PWM Signal bzw. Schwankungen in der Spannungsversorgung zurückzuführen. Es können sog. Ferritkerne/ringe zur Entstörung eingesetzt werden. Das Servokabel wird dazu um den hochinduktiven Kern gewickelt. Das System wirkt als Spule und entstört so das Steuersignal. Sollten die Servos zittern, sobald sie oder andere Servos in Bewegung sind, ist dies meist auf ein unterdimensioniertes Netzteil zurückzuführen. Hier können Kondensatoren zum Abfangen von Strombedarfsspitzen eingesetzt werden.
Ein Servobrummen unter Last ist üblich, da die interne Servosteuerung versucht gegen die Last zu arbeiten und dadurch diesen stetig ansteuert. Da die Motoren nicht über ein selbsthemmendes Getriebe verfügen, muss auch bei Stillstand geregelt werden. Auch das Eigengewicht des Roboterarms kann ein Brummen auslösen.