Geschwindigkeit Schrittmotor einstellen

Hallo zusammen,

als Arduino-Neuling stehe ich gerade ein bisschen auf der Leitung. Und zwar geht es darum die Geschwindigkeit meines Schrittmotores einzustellen. (Im Endeffekt für einen Schlitten, also m/min

Ich habe bereits gelernt, das es zwei Varianten gibt die Geschwindigkeit des Steppers zu steuern.

Die erste Variante läuft über die Stepper Library. mit setSpeed() die Geschwindigkeit in RPM festgelegt. Durch step() läuft der Schrittmotor dann mit der angegebenen Anzahl der Schritte. Das Beispiel aus der Library besagt: Bei setSpeed(1) und step(100) bei einem 100 step/U motor ergibt das eine Dauer für eine Umdrehung von 1min. Darüber kann ich nun theoretisch mit dem Umfang meiner Welle die Geschwindigkeit in m/min bestimmen. Nur habe ich die Formel die hinter dieser Logik bei setSpeed und step nicht ganz verstanden.

Habe ich nun einen 200 step/U Motor, mit step(1) und setSpeed(10) wie würde sich die dafür benötigte Zeit berechnen?

Die zweite Variante: den pulPin auf HIGH und LOW schalten, mit einem bestimmen delay (siehe Beispiel).

while (Bedingung) {       
      digitalWrite(pulPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(pulPin, LOW);
      delayMicroseconds(10);
      delayMicroseconds(speed);
}

angenommen hier wird speed(100) gesetzt. Das Bedeutet, das Motor einen Schritt in 2x10 mircosec vollzieht und dann nochmal 100 microsec wartet, bis er das ganze nocheinmal durchführt? Also dementsprechnend 120 microsec für 1 step (bei 200 step/U wären das 24.000 Microsteps) verstehe ich das Richtig? Um den Motor nun Langsamer laufen zu lassen müsste ich speed() soweit erhöhen, bis ich meine Gewünschte Geschwindigkeit erreiche (sollte delayMicroseconds() auch angepasst werden?)

Vielen Dank im Vorraus und beste Grüße

Lorenz

Hi

Delay ist eine ganz schlechte Idee - in der delay-Zeit macht der µC rein gar Nichts - außer die Wartezeit abwarten - kein Reagieren auf Sensoren, Nichts.

Was spricht dagegen, die Stepper-Lib stur auszuprobieren?
Wenn irgend der Wert 100 bei 100 Steps/Umdrehung eine Umdrehungszeit von einer Minute ergeben soll - was spricht dagegen einen anderen Wert, Der rechnerisch eine Umdrehung pro Sekunde ergeben müsste?

Auch wird die Stepper-Lib den ganzen Kram wohl (hoffentlich) im Hintergrund - also ohne delay - machen, wodurch Du die ganze Zeit z.B. die Steps anpassen kannst (Rampen) oder auf Not-Halt reagieren kannst.
Oder ein Display bedienen, wie weit der Stepper vorgefahren ist ... die Welt bietet schier unendliche Möglichkeiten.

Dein 2.tes Beispiel bringt irgendwie überhaupt keinen runden Motorlauf zusammen - oder was soll PUL machen'

MfG

@Postmaster-ino: Die originale Stepper-Lib ist zwar nicht mit delay aber blockierend.
Die Accelstepper ist nicht blockierend.

Gruß Tommy

Hi

Tommy56:
@Postmaster-ino: Die originale Stepper-Lib ist zwar nicht mit delay aber blockierend.

Warum macht man so was?
Ok, falsche Adresse :wink:
Scheint mir aber ähnlich sinnvoll, wie im Tutorial als Erstes delay() vorzustellen. (etwas wie 'sleep' hätte ja noch einen Sinn)

Danke Dir für diese erschrenkenden Worte :open_mouth:

MfG