Wie funktioniert ein Arduino Servomotor?
Hallo liebe Helfer,
Ich hätte da eine Frage zu der Funktionsweise von Servomotoren und deren Programmierung.
servoblau.write(10); //Position 1 ansteuern mit dem Winkel 10°
delay(3000); //Das Programm stoppt für 3 Sekunden
servoblau.write(90); //Position 2 ansteuern mit dem Winkel 90°
delay(3000); //Das Programm stoppt für 3 Sekunden
Wenn ich dieses Programm abspiele (ich habe gerade nichts bei mir sonst würde ich das selber probieren), dreht sich der Servo a. zunächst 10 dann 90 Grad nach links (um am ende auf 100 Grad zu sein) oder dreht er sich b. zuerst "auf 10 Grad" dann weitere 80 Grad um auf 90° zu kommen. Merkt sich der Servo quasi auf wie viel grad er gerade steht oder dreht er sich einfach um die angegebene Gradzahl weiter???
Vielen dank im Vorraus
3 Antworten
Dein Servo kann von 0 Grad bis 180 Grad Positionen anfahren.
Mit ...write(90) fährt er auf 90 Grad. Mit write(10) fährt er auf 10 Grad.
Technisch läuft das so, dass sich der Servotreiber (die Servo-Bibliothek) die 90 (bzw. 10) Grad merkt und dann dauerhaft 50 Mal pro Sekunde einen Impuls an den Servo schickt, der eine Impulsbreite für 90 bzw 10 Grad hat:
Impulsbreite = (Gradzahl mal 2000 / 180 + 500 )Mikrosekunden.
...Davon bekommst du aber nix mit, weil das ja der Treiber macht.
Du kannst diesen Impuls im loop leicht selber erzeugen dann brauchst du keine Servo-Bibliothek und blickst besser durch weil du das Mal selber gemacht hast.:
void loop()
{
digitalWrite(servopin, 1);
delayMicroseconds(1500); //entspricht 90 Grad. ImpZeit = 500 bis 2500. = 0 Grad bis 90 Grad
digitalWrite(servopin, 0); // das war der Impuls, jetzt warten wegen 50 Hz
delay(20); //entspricht 50 Herz
}
... Vorher noch den servopin definieren und auf OUTPUT setzten.
Danach nimmst du aber wieder die Bibliothek weil das zum Codieren einfach praktischer ist
also wenn sich das wirklich so schreibt, dann müsste es theoertisch eine absolute Position sein. d.h.
von 12.00 Uhr oder Norden aus betrachtet, also "senkrecht" müsste er mit dem ersten Befehl die Position 12:20 bzw. 10 Grad Ost anfranhren. danach dann 03:00 Uhr bzw. Ost anfahren.
Warum ich darauf komme? nun, der Befehl enthält keine Direktion. für eine verkettete Positionsführung, die du hier vermutest, müsste man dem Servo auch sagen, ob er nach links oder rechts drehen muss.
lg, Anna
Du benötigst eine Möglichkeit mit einem Taster die 0-Stellung zu bestimmen wie Du das Problem lösen kannst weiß ich jedoch nicht.
Bei 3D-Druckern wird über einen Antrieb ein Stopper gegen einen Taster gefahren. Wenn man dann weiß, wie viele Schritte bzw. Steps ein Grad oder mm entspricht kann man den Schrittmotor die entsprechenden Steps in die richtige Richtung drehen lassen.