Hallo Leute,
ich wollte - wie viele andere bereits - einen Schrittmotor mit der Accelstepper Bibliothek laufen lassen.
Dazu habe ich mich im Forum umgesehen und geschaut wie der Code aussehen könnte.
Ich benutze einen Schrittmotor der 24V und 1A/Phase braucht und eine Basisschrittweite von 1,8° hat. Als Motortreiber habe ich einen A4988. Zunächst habe ich die Spannung am A4988 eingestellt um den Strom korrekt zu begrenzen. Die Spannung habe ich auf 0,8V gestellt (Vref = 1A * 8 * 0,1 Ohm). Der Rs Widerstand auf meinem Board ist mit R100 (100 mOhm angegeben).
Nun zu meinem Code:
#include <AccelStepper.h>
AccelStepper Stepper1(1,7,6); //pin 7 = step, pin 6 = direction, 1 is the "external driver" mode (A4988)
const int MS1 = 8;
const int MS2 = 9;
const int MS3 = 10;
void setup()
{
pinMode(MS1,OUTPUT);
pinMode(MS2,OUTPUT);
pinMode(MS3,OUTPUT);
Stepper1.setMaxSpeed(200); //set max speed the motor will turn (steps/second)
Stepper1.setAcceleration(200); //set acceleration (steps/second^2)
}
void loop()
{
digitalWrite(MS1,LOW); // defines the step width
digitalWrite(MS2,LOW); //
digitalWrite(MS3,LOW); // 3x LOW = 1.8°
Stepper1.move(200); //set how many steps the stepper moves next. 200 steps * 1.8° = 360°
delay(1000);
Stepper1.run(); //run the stepper. this has to be done over and over again to continously move the stepper
}
Anhand des oben beschriebenen Codes hätte ich nun erwartet, dass der Motor eine volle Umdrehung innerhalb einer Sekunde macht, dann eine Sekunde pausiert und dann wieder eine Umdrehung, usw…
Das Problem nur ist, dass der Motor genau so nicht verfährt. Stattdessen macht er ruckartig kleine Schritte (schätzungsweise 5° oder sowas, scheint zu ruckartig für meinen optischen Encoder zu sein).
Ich habe bereits eine Variation der Parameter vorgenommen, aber ein wirklich brauchbares Ergebnisse erziele ich leider nicht.
Benutze ich hingegen einen Code mit delayMicroseconds…
for(int x = 0; x < 200; x++)
{
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
dann läuft der Motor seine Umdrehungen. Nur leider nicht genau genug. Deshalb habe ich im Internet gelesen, dass AccelStepper wohl genauer sein soll.
Hat jemand Tipps und Ideen?
Vielen Dank.