Forum: Mikrocontroller und Digitale Elektronik kleinster Schritt vom Servo


von Kolja L. (kolja82)


Lesenswert?

Nabend

Ich habe aus einem normalen Servo das Poti ausgelötet und durch eine 
Spannungsteiler aus zwei 2k2 Widerständen ersetzt.
Das Servo dreht nun endlos, genau so wie es soll.

Der Code sieht wie folgt aus:
1
void loop()
2
{ 
3
    currentMillisImp = millis();
4
    if (currentMillisImp - previousMillisImp > 18)
5
    {
6
        previousMillisImp = currentMillisImp;
7
        digitalWrite(servo, 1);
8
        delayMicroseconds(1200); 
9
        digitalWrite(servo, 0);
10
     }
11
     delay(1000);
12
}

Damit sollte sich das Servo in den kleinst möglichen Schritten (im 
Sekundentakt) drehen.
Es dreht sich aber in ca 40° Schritten.

Wie verkleinere ich diese Schritte?

von jörch (Gast)


Lesenswert?

Kolja L. schrieb:
> Wie verkleinere ich diese Schritte?

delayMicroseconds(1000);

!?

von Stefan F. (Gast)


Lesenswert?

Das ist völlig falsch implementiert. Du erzeugst hier 1,2µs Impulse mit 
1s Abstand.

R/C Servos wollen ein Kontinuierliches Signal haben, alle 20ms ein 
Impuls. Wenn die Impulse fehlen, gehen die meisten Servos in Standby 
Betrieb.

Bei deinem Umbau funktioniert das so:

a) Wenn du Impulse mit mittlerer Länge sendest (also alle 20ms einen 
Impuls mit 1,5ms Länge), dann dreht sich der Motor nicht.

b) Wenn du längere Impulse sendest, dreht er sich nach rechts. Je länger 
die Impulse, umso schneller dreht sich der Motor.

c) Wenn du kürzere Impulse sendest, dreht er sich nach links. Je kürzer 
die Impulse, umso schneller dreht sich der Motor.

Zurück zu einem NICHT modifizierten Servo:

Exakte Positionen bei sehr kleinen Schritten kannst du nicht erreichen. 
Denn die Elektronik im Servo sorgt auch dafür, dass der Motor nicht für 
jeden Klein-Scheiß belastet wird. Sonst würde der Motor ununterbrochen 
hin und her zittern und dadurch die Batterie leer ziehen und die 
Mechanik frühzeitig verschleißen.

Wenn du zum Beispiel gerade bei 30° stehst und 31° sendest, dann mach 
der Servo gar nichts. Wenn du aber 35° sendet, dann dreht er sich 
ziemlich genau auf diese Position. Wie groß diese Hysterese ist, hängt 
sehr vom Servo Modell ab. Aber alle haben diesen Effekt.

Das bedeutet für deinen gehackten Servo, dass sehr kleine Abweichungen 
vom Stillstand einfach weg ignoriert werden.

Aber dein Code ist trotzdem ganz falsch, den musst du überarbeiten. Mit 
den delay Befehlen erreichst du kein ausreichend genaues Timing. Du 
musst das Signal mit einem PWM Ausgang erzeugen.

von Kolja L. (kolja82)


Lesenswert?

Hallo Jörch

So wie ich es verstehe, sind die eingestellten 1200µs für die 
Positionierung zuständig.
Da sich das Poti nicht mehr mitdreht, kann dieser Sollwert natürlich nie 
mehr erreicht werden.
Somit kann jetzt nur noch nach rechts oder links gedreht werden.

von Michael U. (amiga)


Lesenswert?

Hallo,

ein Servo hat keinen Schrittmotor, Was "in den kleinst möglichen 
Schritten" für einen Servomotor ist, hängt davon ab, wann der Motor 
anläuft und sich damit überhaupt dreht. Das wird nie bei der gleichen 
Impulsdauer sein und auch wie weit er dreht, wird von mechanischen 
Zufällen abhängen.

Wozu macht und will man sowas?

Gruß aus Berlin
Michael

von Wolfgang (Gast)


Lesenswert?

Kolja L. schrieb:
> Wie verkleinere ich diese Schritte?

Indem du nicht nur den Ist-Wert Eingang der Positionsregelung auf einen 
konstanten Wert legst, sondern die Regelelektronik mit ihren 
Zeitkonstanten ganz raus schmeißt und durch eine geeignete Ansteuerung 
ersetzt.

von Kolja L. (kolja82)


Lesenswert?

Danke für die ganzen Antworten.

Durch den Spannungsteiler ist der Istwert für die Servoelektronik ja 
festgelegt.
Da ich den Sollwert über die Software ja ändern kann, war die 
Überlegung,
dass ich damit die Servoelektronik überlisten kann.

Das Poti ist übrigens noch im Servo und die Anschlüsse sind nach außen 
geführt.

von W.A. (Gast)


Lesenswert?

Kolja L. schrieb:
> Durch den Spannungsteiler ist der Istwert für die Servoelektronik ja
> festgelegt.

Aber dein Sollwert hat nichts mit servoelektronikgerechten Steuerpulsen 
zu tun. Mit den zwei Widerständen gaukelst du dem Regler den Ist-Wert 
der Mittelstellung vor. Wenn du dann Pulse von nominell 1.5ms Dauer mit 
etwa 50Hz Updaterate schickst, sollte der Motor ruhig sein. Bei kürzeren 
Pulsen läuft er in die eine, bei längeren Pulsen in die andere Richtung. 
Du müßtest also vom Programm laufend 1.5ms-Pulse schicken (Motor steht) 
und für die Drehung ein paar länger bzw. kürzere (je nach Richtung).

von Kolja L. (kolja82)


Lesenswert?

Wenn ich keine Pulse schicke steht der Motor auch.

von Oliver R. (orb)


Lesenswert?

Kolja L. schrieb:
> Da ich den Sollwert über die Software ja ändern kann, war die
> Überlegung,
> dass ich damit die Servoelektronik überlisten kann.

Das hast Du, die Elektronik kann nurnoch mit der Richtung und der 
Geschwindigkeit arbeiten, die Position hast Du ja festgenagelt.

von Kolja L. (kolja82)


Lesenswert?

Und jetzt möchte ich dieser Elektronik über das Soll-Signal sagen,
das sich der Motor langsam, aber mit vollem Drehmoment so wenig wie 
möglich drehen soll.

von W.A. (Gast)


Lesenswert?

Kolja L. schrieb:
> Wenn ich keine Pulse schicke steht der Motor auch.

Aber er reagiert sehr träge auf - sagst du doch selbst.

von Oliver R. (orb)


Lesenswert?

Und das geht halt so nicht. Der kleinste Schritt wird von der 
eingebauten Hysterese bestimmt, die minimale Zeit von der PWM-Frequenz.
Du brauchst minimal 40ms (2 Perioden), 20ms für den Start, 20ms für den 
Stop.

Dein Servo dürfte der falsche Motor für Deine Anwendung sein.

von W.A. (Gast)


Lesenswert?

Oliver R. schrieb:
> Du brauchst minimal 40ms (2 Perioden), 20ms für den Start, 20ms für den
> Stop.

Der Pulsabstand von 20ms muss ja nicht sein.

Wenn man alle 10ms einen Puls schickt, ist man schon mal einen Faktor 2 
schneller und die meisten Servos können damit umgehen.

von Oliver R. (orb)


Lesenswert?

20ms mit 0,7-2,3ms High für den gesammten Bereich ist nunmal der 
Standard.

W.A. schrieb:
> und die meisten Servos können damit umgehen.

Man kann immer irgendwie außerhalb der Spezifikationen arbeiten, aber ob 
das sinnvoll ist, bevor man die Grundlagen verstanden hat?
Und nach Murphy kann gerade der Servo der vor einem liegt das eben 
nicht.

von Wolfgang (Gast)


Lesenswert?

Oliver R. schrieb:
> Man kann immer irgendwie außerhalb der Spezifikationen arbeiten, aber ob
> das sinnvoll ist, bevor man die Grundlagen verstanden hat?

Bei den Servos ist die Dauer des High-Pulses die Grundlage für die 
Position (Soll-Wert). Die Periodendauer bestimmt, wie oft die Elektronik 
einen neuen Sollwert bekommt (Update-Rate).

von Jens G. (jensig)


Lesenswert?

@Kolja L. (kolja82)

>Und jetzt möchte ich dieser Elektronik über das Soll-Signal sagen,
>das sich der Motor langsam, aber mit vollem Drehmoment so wenig wie
>möglich drehen soll.

Das kannst Du ohne Regelung und ohne Last ohnehin nicht realisieren.

von Sebastian S. (amateur)


Lesenswert?

Um himmels Wilhelm!

Schmeiß doch mal einen Blick in die Wikipedia!

Vorzugsweise in den/die Artikel, in dem/denen die Ansteuerung eines 
Servos erläutert wird.

Du scheinst weder zu wissen, wie das Steuersignal auszusehen hat, noch 
wie ein Servo überhaupt funktioniert.
Das ist auch ohne Hochschulabschluss möglich.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sebastian S. schrieb:
> Du scheinst weder zu wissen, wie das Steuersignal auszusehen hat, noch
> wie ein Servo überhaupt funktioniert.

Das haben wir in einem der Servo Threads von Kolja schon ein dutzendmal 
probiert zu erklären - es scheint eine regelrechte Lernresistenz 
vorzuliegen:
Beitrag "Servo mit 360° gesucht, kein Hack!"
Beitrag "Servo hacken"

von Marc (Gast)


Lesenswert?

Kolja L. schrieb:
> Wie verkleinere ich diese Schritte?

Zunächst durch Analyse eines ähnlichen Systems:

Vorschlag:
Einfache 2 Kanal Fernsteuerung mit elektronischer Trimmung.
Ein Trimschritt entspricht dem kleinsten Verstellschritt.

Nun benötigst du nur ein Oszi oder Logikanalyser wo du das 
Übertragungsverhalten am Servo anzeigst.

Das sollte dir für das Verständnis weiterhelfen.
Gruß

Marc

von Stefan F. (Gast)


Lesenswert?

Die größe des kleinsten Schrittes hängt vom konkreten Servo ab. Also 
suche Dir ein Servo, welches mit Datenblatt geliefert wird und die 
entsprechende Info im Datenblatt steht. Oder kaufe irgendein Servo, 
probiere es aus und hoffe, dass die anderen Servos, die du danach 
kaufst, sich genau so verhalten.

Eins solltest du wissen: Die Produkte für den R/C Modellbau sin 
SPIELZEUGE. In entsprechender Qualität sind sie produziert und 
dokumentiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.