Wie funktioniert ein Arduino Servomotor?

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.