Hi,
i have three stepper motors running at the same time, or lit looks like they running at the same time. Each one is connected to a driver, and all of the drivers are connected to a Arduino Mega 2560R3.
The Motor are:
1.) Nema34 with 12Nm
2.) Nema34 with 4.5Nm
3.) Nema23 with 2Nm
The big stepper motor and the small stepper motor are running in an intervall (but different ones) and the stepper motor with 4.5Nm of torque ist running continuous in one direction.
The Code below works very good for 800 Microsteps, but then the needed torque for the big stepper motor is too low. So i have to run these stepper motors without microstepping in 200 steps.
But in 200 steps, they are running too fast, but i cant lower the speed from 50. The lowest possible is 41, but then the stepper motors are running not very smooth and they start to make noises.
So could anyone help me to run these motors slower?
// STANDARD-PROGRAMM:
// Rahmen und Düse oszillieren mit Geschwindigkeit $ in einem Intervall $, Tisch verfährt mit Geschwindigkeit $
// Dauer des Programms kann entweder in Zeit oder Schleifenwiederholungen bestimmt werden
// Die Motoren verfahren nacheinander in so kurzen Abänden, dass es synchron wirkt
#include <Stepper.h>
#include <AccelStepper.h>
const int step_360 = 300; // Anzahl der Schritte
unsigned long DuesenStartMillis;
unsigned long DuesenCurrentMillis;
const unsigned long DuesenPeriod = 1000; //Schleifendauer DĂĽse
unsigned long RahmenStartMillis;
unsigned long RahmenCurrentMillis;
const unsigned long RahmenPeriod = 3000; //Schleifendauer Rahmen
// initialize the stepper library on pins
Stepper StepperR(step_360, 4, 5, 6, 7); //(leerer Pin, steps, Pul/Step, Dir, En)
Stepper StepperT(step_360, 11, 8, 9, 10); //(leerer Pin, steps, Pul/Step, Dir, En)
Stepper StepperD(step_360, 11, 2, 3, 4); //(leerer Pin, steps, Pul/Step, Dir, En)
void setup() {
//Start Zeit Millis
DuesenStartMillis = millis() - 1000; //-1000 ist notendig, da der Motor ansonsten beim ersten Mal zu weit verfährt, bis die Differenz von CurrentMillis und StartMillis bei dem gewünschten Intervall ankommt
RahmenStartMillis = millis() - 1000; //-1000 ist notendig, da der Motor ansonsten beim ersten Mal zu weit verfährt, bis die Differenz von CurrentMillis und StartMillis bei dem gewünschten Intervall ankommt
StepperR.setSpeed(50); // Geschwindigkeit in Umdrehungen/Minute --> Min:41 --> Gibt in Verbindung mit der Schleifendauer die Fahrtstrecke an
StepperT.setSpeed(50); // Geschwindigkeit in Umdrehungen/Minute --> Min:41 --> Gibt in Verbindung mit der Schleifendauer die Fahrtstrecke an
StepperD.setSpeed(50); // Geschwindigkeit in Umdrehungen/Minute --> Min:41 --> Gibt in Verbindung mit der Schleifendauer die Fahrtstrecke an
}
//Steps der Motoren
int R = -1; //-1 = Start nach oben
int T = 1;
int D = 1;
int i = 1; //Schleifenzähler
void loop() {
//while (millis() < 19000){ //Dauer des Programms --> Schleifendauer angegeben in Zeit
while (i < 13) { //Dauer des Programms --> Schleifendauer angegeben in Wiederholungen --> BEDINGUNGEN: Muss immer ein gemeinsames Vielfahes von DĂĽsen- und Rahmenintervall +1 sein, und immer ungerade, sonst Ist Endpunkt nicht der Startpunkt
DuesenCurrentMillis = millis();
RahmenCurrentMillis = millis();
for (int s = 0; s < step_360; s++) {
StepperR.step(R);
StepperT.step(T);
StepperD.step(D);
}
if (DuesenCurrentMillis - DuesenStartMillis >= DuesenPeriod) { //Intervall DĂĽse
DuesenStartMillis = DuesenCurrentMillis;
D = -D;
}
if (RahmenCurrentMillis - RahmenStartMillis >= RahmenPeriod) { //Intervall DĂĽse
RahmenStartMillis = RahmenCurrentMillis;
R = -R;
}
i = i + 1;
}
}


