Aus RN-Wissen.de
Wechseln zu: Navigation, Suche


Servos (Servomotoren) sind kleine Getriebemotoren, die häufig im Modellbau eingesetzt werden. Mithilfe eines Potentiometers, das an der Drehachse befestigt ist, wird intern die aktuelle Position bestimmt. Wegen ihrer einfachen Ansteuerung und Präzision eigenen sie sich hervorragend für mehr oder weniger kraftaufwändige Aufgaben in der Robotik. Servomotoren in der Industrie sind Motoren mit einer Rückmeldung der Position, meist über Incrementalgeber.

Anschlussbelegung

Handelsübliche Servomotoren besitzen 3 Anschlüsse:

  1. GND
  2. PWM bzw. Signal
  3. +5V

Wobei sich die Steckerbelegung von Hersteller zu Hersteller unterscheidet.

Servosteckerbelegung.gif


Eine ausführliche Darstellung veschiedener Steckerbelegungen und auch verschiedener Servostecker ist in den eben vorgelegten Links zu finden.

Ansteuerung: Signalform und Schaltung

An die Signalleitung (siehe Steckerbelegung oben) wird ein pulsweitenmoduliertes Signal (PWM) angeschlossen. Die Repetition-Period (Periode) entspricht bei den meisten Modellen 20ms. Innerhalb/zu Beginn dieser 20ms wird ein Puls erwartet, der sich zwischen 1ms und 2ms bewegt, wobei diese Werte jeweils den Endlagen des Servos entsprechen. D.h. 1ms ist ganz links und 2ms ist ganz rechts (Einige Servos haben in diesem Wertebereich jedoch nicht die volle Bewegungsfreiheit ausgenutzt, die Werte, bei denen der Servo ganz links/rechts ist können auch unter 1ms/über 2ms liegen). 1,5ms würde demnach die Mittelstellung bedeuten. Aufgrund der Pulslänge lässt sich also eine direkte Aussage über die Position des Servos treffen. Der Motor sorgt dann intern mithilfe des Potis dafür, dass die Position gehalten wird.

Von der Standard-Pulsdauer 20 ms kann je nach Servomodell erheblich abgewichen werden. Besonders zu erwähnen ist, dass mit Periodenzeiten von 10 ms bereits erfolgreich gearbeitet wurde, klick hier für Posting und ganzen Thread. Dabei muss aber die Pulsdauer entsprechend angepasst werden, bei 10 ms beispielsweise beträgt dann die Pulsdauer maximal 10 % der Periodenzeit, schwankt also für die Endstellungen zwischen 0,5 ms (500 µs) und 1 ms.


Die Drehrichtung der Servos entspricht bei einigen Fabrikaten den hier dargestellten Abbildungen, bei manchen Fabrikaten ist die Drehrichtung bei gleicher Signalform jedoch entgegengesetzt. Das heißt:

manche Fabrikate schwenken bei kürzeren Pulszeiten wie hier gezeigt nach links und bei längeren Pulszeiten nach rechts,

andere Fabrikate schwenken bei kürzeren Pulszeiten nach rechts und bei längeren Pulszeiten nach links.

Welche Fabrikate zur einen oder andern Gruppe gehören wird hier nicht aufgelistet.


Die folgende Darstellung zeigt drei beispielhafte Zeit-Pegeldiagramme der PWM für Standardservos und als Beispiel die zugehörigen Stellungen des Servohorns (beachte Anmerkung oben zur Drehrichtung). Die vorgestellten Zahlenwerte sind Cirka-Angaben, die Schwenkwinkel und die maximale Auslenkung "links" bzw. "rechts" können je nach Servotyp variieren. In der Darstellung von Periodendauer und Pulslänge ist auch die für die Ausschläge nutzbare Pulsbreite - etwa zwischen 1ms und 2ms - gezeigt. Die minimale Pulsbreite für "kleinsten" Ausschlag, d.h. für eine Endlage, beträgt etwa 1 ms.

Servo pwm 2.jpg


Empfohlene Ansteuerung (Schaltungsvorschlag)

Es wird dringend empfohlen zur Versorgung des Servos eine vom Mikrocontroller gesonderte Versorgungsspannung zu wählen. Dabei muss die GND-Leitung (i.A. die (-)-Leitung) von Controller, Servo und den Versorgungen leitend verbunden sein. Im untenstehenden Beispiel ist die Verschaltung eines Controllers ATMega168 mit einem Servo gezeigt. Der Servo kann natürlich auch an anderen Ausgängen des Controllers angeschlossen werden.

Achtung, Fehlermöglichkeiten!

Werden die GND-Pegel nicht verbunden, sind Störungen mit Sicherheit zu erwarten.

Wird der Controller von der gleichen Spannungsquelle versorgt wie der Servo, so sind Störungen mit Sicherheit zu erwarten.


Servoansteuerg 02.gif


Entstören von Servos innerhalb einer Schaltung wie oben grob schematisch dargestellt wird z.B. hier ausführlich diskutiert klick hier für Posting und ganzen Thread.

Unterschied zwischen Digital- und Analogservos

Der hauptsächliche Unterschied besteht darin, dass digitale Servos schneller und genauer sind und ihre Position besser halten können. Analoge Servos geben ihrem Motor alle 20ms ein Signal. Wirkt eine Kraft auf das Servo, braucht die Steuerelektronik bis zu 20ms, um dem Motor einen neuen Spannungsimpuls zu senden. Bei Digitalservos sendet die Steuerelektronik alle 400us einen Impuls an den Motor. Der Motor bekommt die Spannungsimpulse viel schneller. Um so öfter ein Motor Spannung bekommt, um so mehr Leistung kann er verrichten. Man sollte aber auch bedenken, dass dies unweigerlich einen höheren Stromverbrauch zur Folge hat, der besonders bei Modellfliegern nicht tolerierbar ist, da die Betriebszeit stark verkürzt wird.

Die einfachste Art, einen Servo mit Bascom anzusteuern, ist folgender Befehl:

Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10

Config Portb = Output

Enable Interrupts

Servo(1) = 100
Servo(2) = 100
waitms 1000

'Wobei 100 die Mitte ist. 50 ist der linke bzw. rechte Anschlag und 150 der entsprechend andere. Es gibt aber auch elegantere Möglichkeiten die sich besonders empfehlen wenn z.B. eine höhere Auflösung gewünscht ist: Servoansteuerung


Und in C sieht das ganze so aus:

#define SERVOPIN 7
#define SERVOPORT PORTD
#define DDRSERVO DDRD

volatile unsigned char servopos;

void servo_init()
{
	TIMSK|=(1<<OCIE2);
	TCCR2 |= (1<<WGM21) | (1<<CS20);	//Prescale=1, CTC mode
	OCR2 = F_CPU/100000;			//alle 10µS ein IRQ
	DDRSERVO|=(1<<SERVOPIN);
};

ISR(TIMER2_COMP_vect)
{
	static int count;
	if(count>servopos)SERVOPORT&=~(1<<SERVOPIN);
	  else SERVOPORT|=(1<<SERVOPIN);
	if(count<2000)count++; // Die Impulse sollten alle 20ms gesendet werden! 6.2.11 mic
	  else count=0;
};
	

Man muss zuvor DDRSERVO, SERVOPIN und SERVOPORT entsprechend definieren. Mit der Funktion "servo_init()" wird Timer2 initialisiert und der Servo-Pin als Ausgang gesetzt. "servopos" beinhaltet die aktuelle Dauer des Signals in 1/100ms. Vergessen Sie nicht, globale Interrupts vor dem Betrieb zu aktivieren!


Letzter Beitrag von "stochri" ist eine super Lösung in avr-gcc mit bis zu 10 Servos

["Servo / avr-gcc" ]

Servos hacken

Methode 1
Abtriebswelle von Poti abkuppeln, Endanschläge entfernen und Spannungsteiler statt Poti

Häufig entledigt man sich auch des Potis und der Endlagenanschläge, um so einen Motor mit hohem Drehmoment und ohne Begrenzung des Drehwinkels zu erlangen. Das Poti wird dann durch einen 1:1-Spannungsteiler ersetzt oder die Potiwelle auf Mittelstellung fixiert (und von der Abtriebswelle abgekuppelt). Dieser Vorgang wird auch als Servo-Hacking bezeichnet. Durch die Pulslänge kann jetzt die Winkelgeschwindigkeit des Servos beeinflusst werden. Dabei simuliert der Spannungsteiler die Mittelstellung und eine kürzere Pulslänge als für Mittelstellung steuert den Motor in die eine, eine längere in die andere Richtung. Pulslänge "Mittelstellung" lässt den Servo stillstehen.

Diese erste Methode des Servohackings nutzt die im Servo eingebaute Elektronik zur Motoransteuerung. Sie ist am Weitesten verbreitet.


Servo.jpg



Methode 2
Motorelektronik und Endanschläge der Abtriebswelle entfernen

Bei der zweiten Methode wird die vorhandene Elektronik komplett entfernt und der Motor z.B. direkt mit Gleichstrom versorgt oder durch eine externe Elektronik angesteuert. Die beiden Varianten des Servohackings sowie ihre Vor- und Nachteile sind im folgenden Link beschrieben. ["Servohacking. Technik, Vor- und Nachteile"] Bei fast allen Servos muss zum Hacken nach beiden Methoden ein mechanischer Anschlag entfernt werden. Er besteht aus einem Nocken an der Abtriebswelle und dem Gegenstück im Getriebegehäuse. Der Anschlag verhindert das Drehen der Abtriebswelle über mehr als etwa 270° und die damit verbundenen Fehlern bei der Stellungsmessung mit dem Potentiometer.


Die wesentlichen elektrischen und elektronischen Teile und Baugruppen eines einfachen Servos:

Servo-hack2 mini.jpg

Bei Methode "zwei" wird die Elektronik komplett entfernt. Ebenso wird dabei das Poti entfernt oder von der Abtriebsachse abgekoppelt. Der Motor wird dann direkt an die Versorgung angeschlossen und evtl. über einen Motortreiber und PWM drehzahlgeregelt. Bitte Entstörung nicht vergessen! Gleichwertig wie das Entfernen der kompletten Elektronik ist es, sie einfach zu umgehen und die Motorzuleitung direkt anzulöten.

Der nach Methode 2 gehackte Servo wird dadurch zu einem Getriebemotor mit einem sehr kleinen, sehr schnell drehenden Motor und einem hoch übersetzten Getriebe. Typisch sind Untersetzungen von mehreren 100:1.


Getriebemotor aus Servoumbau mit Encoder

Beispiel für einen Getriebemotor nach einem Servoumbau (Hack Methode 2) mit Encoder. Ausgangsbauteil ist ein Miniservo Carson 502 in dessen Getriebegehäuse ein Encoder eingebaut wurde. Die Servoelektronik (Regler, Poti etc) wurde komplett entfernt. Baugleiche umgebaute Servos laufen in mehreren Projekt(ch)en als drehzahlgeregelte Motoren. Die dargestellte Variante hat ein Getriebe, bei dem eine Untersetzungsstufe komplett entfernt wurde, das Untersetzungsverhältnis wurde damit von 768:1 geändert auf 91:1 (MiniD0).

GMot enc4 1710.jpg


Siehe auch