Hallo,
ich versuche zwei Schrittmotoren (Nema 23 und Nema 17) mit einem Ramps 1.4 board und Pololu A4988 Treiber zu betreiben. Ich benutze die Bibliothek MobaTools
Der Nema 23 läuft die ganze Zeit und wenn der einen Winkel von 360*x (in einer for schleife), dann soll der kleinere Motor Nema 17 immer um einen bestimmten winkel weiter drehen. Bis er den wert der Variable “Wicklung” erreicht hat und dann soll er wieder das selbe Machen nur gegen den Uhrzeigersin und immer so weiter, bis er das ganze hin und her 25 mal gemacht hat.
Mein Problem ist das er die for schleife perfekt durch läuft, wenn Variable “Wicklung” nicht größer als 10 ist, ich muss jedoch den wert auf über 30 stellen. Wenn ich das mache dann überspringt dann läuft die schleife nicht x++ sondern x=x+2; oder dreht ganz durch.
Ich hoffe Ihr könnt mir da weiter helfen.
Vielen Dank
#include <MobaTools.h>
MoToStepper stepper1(3200, A4988);
MoToStepper stepper2(3200, A4988);
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
long wicklung =10;
int winkeld1;
int lagen = 25;
long x, y, z;
int vor, back;
void setup() {
pinMode(X_STEP_PIN , OUTPUT);
pinMode(X_DIR_PIN , OUTPUT);
pinMode(X_ENABLE_PIN , OUTPUT);
pinMode(Y_STEP_PIN , OUTPUT);
pinMode(Y_DIR_PIN , OUTPUT);
pinMode(Y_ENABLE_PIN , OUTPUT);
digitalWrite(X_ENABLE_PIN , LOW);
digitalWrite(Y_ENABLE_PIN , LOW);
stepper1.attach(X_STEP_PIN, X_DIR_PIN);
stepper2.attach(Y_STEP_PIN, Y_DIR_PIN);
stepper1.setSpeed(300); //=60U/min
stepper2.setSpeed(300); //60u/min
Serial.begin(9600);
}
void loop()
{
//winkeld1 = (1 / 1.75) * 360;
winkeld1 = 105;
for (x = 1; x <= wicklung; x++)
{
stepper2.doSteps(3600);
if (stepper2.read() == 360 * x) //Schrittmotor Schlitten hoch bewegen zu ende der Spule
{
stepper1.write(winkeld1 * x);
Serial.print("1.stepper1:");
Serial.println(stepper1.read());
Serial.print("1.stepper2:");
Serial.println(stepper2.read());
}
else if (stepper2.read() == (360 * wicklung) + (360 * x)) //Schlitten wieder zum Anfang der Spule
{
stepper1.write(-winkeld1 * x);
Serial.print("2.stepper1:");
Serial.println(stepper1.read());
Serial.print("2.stepper2:");
Serial.println(stepper2.read());
}
if ((stepper1.read() == (winkeld1 * wicklung)) && (stepper2.read() == (360 * wicklung) + 360))
{
stepper1.setZero();
vor++;
Serial.print("vor:");
Serial.println(vor);
}
else if ((stepper1.read() == -winkeld1 * (wicklung - 1)) && (stepper2.read() == 360 * wicklung * 2))
{
stepper1.setZero();
stepper2.setZero();
}
// if (vor == wicklung * lagen)
// {
// stepper1.setSpeed(0); //=60U/min
// stepper2.setSpeed(0); //60u/min
// digitalWrite(X_ENABLE_PIN , HIGH);
// digitalWrite(Y_ENABLE_PIN , HIGH);
// }
}
}