Geschwindigkeit steuern mit der AccelStepper LIB

Hallo,

Ich versuch seit Tagen die Geschwindigkeit der Stepper im Loop zu ändern und komme nicht drauf warum das nicht geht.

Eine Änderung von homeSpeed , homeAccel , Speed oder Accel bewirkt keine Änderung.

Nur wenn ich diese Werte ändere:

   //  Set Max Speed and Acceleration of each Steppers at startup for homing
  stepperE0.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperE0.setAcceleration(1000.0);  // Set Acceleration of Stepper

  stepperX.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperX.setAcceleration(1000.0);  // Set Acceleration of Stepper

  stepperY.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperY.setAcceleration(1000.0);  // Set Acceleration of Stepper

  stepperZ.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperZ.setAcceleration(1000.0);  // Set Acceleration of Stepper

fahren die Stepper wesentlich schneller wenn ich auf die Endschalter fahre.

Danach ist die Geschwindigkeit und die Beschleunigung immer gleich.

Der komplette Code:

/*  Motor Homing code using AccelStepper and the Serial Monitor
 
Created by Yvan / https://Brainy-Bits.com
This code is in the public domain...
You can: copy it, use it, modify it, share it or just plain ignore it!
Thx!

*/

#include "AccelStepper.h" 
// Library created by Mike McCauley at http://www.airspayce.com/mikem/arduino/AccelStepper/

// AccelStepper Setup
AccelStepper stepperE0(1, 26, 28);   // 1 = Easy Driver interface
                                  // Ramps-Board E0 Pin 26 connected to STEP pin
                                  // Ramps-Board E0 Pin 28 connected to DIR pin

// AccelStepper Setup
AccelStepper stepperX(1, 54, 55);   // 1 = Easy Driver interface
                                  // CNC-Board Pin 54 connected to STEP pin
                                  // CNC-Board Pin 55 connected to DIR pin

// AccelStepper Setup
AccelStepper stepperY(1, 60, 61);   // 1 = Easy Driver interface
                                  // CNC-Board Pin 60 connected to STEP pin
                                  // CNC-Board Pin 61 connected to DIR pin

// AccelStepper Setup
AccelStepper stepperZ(1, 46, 48);   // 1 = Easy Driver interface
                                  // NANO Pin 46 connected to STEP pin
                                  // NANO Pin 48 connected to DIR pin


// Define the Pins used
#define home_switch_E0 11 // Pin 11 connected to Home Switch (MicroSwitch)
#define home_switch_X 6 // Pin 11 connected to Home Switch (MicroSwitch)
#define home_switch_Y 5 // Pin 11 connected to Home Switch (MicroSwitch)
#define home_switch_Z 4 // Pin 11 connected to Home Switch (MicroSwitch)
#define E0_ENABLE_PIN 24
#define X_ENABLE_PIN 38
#define Y_ENABLE_PIN 56
#define Z_ENABLE_PIN 62

// Stepper Travel Variables
long TravelE0;  // Used to store the X value entered in the Serial Monitor
//int move_finished=1;  // Used to check if move is completed
long initial_homing_E0=-1;  // Used to Home Stepper at startup
long initial_homing_X=-1;  // Used to Home Stepper at startup
long initial_homing_Y=-1;  // Used to Home Stepper at startup
long initial_homing_Z=-1;  // Used to Home Stepper at startup

// Set Home Position
long home_E0=0;  // Home Position E0
long home_X=0;  // Home Position E0
long home_Y=0;  // Home Position E0
long home_Z=0;  // Home Position E0

// Set Home Speed
float homeSpeed=6000.0;
float homeAccel=1000.0;


// Set Speed
float Speed=6000.0;
float Accel=1000.0;

// Set Mode
int Mode=1; // 1 = Normal Mode, 2 = Upper Position, 3 = Lower Position



void setup() {
   Serial.begin(9600);  // Start the Serial monitor with speed of 9600 Bauds
   
   pinMode(home_switch_E0, INPUT_PULLUP);
   pinMode(home_switch_X, INPUT_PULLUP);
   pinMode(home_switch_Y, INPUT_PULLUP);
   pinMode(home_switch_Z, INPUT_PULLUP);
   
   pinMode(E0_ENABLE_PIN , OUTPUT);
   pinMode(X_ENABLE_PIN , OUTPUT);
   pinMode(Y_ENABLE_PIN , OUTPUT);
   pinMode(Z_ENABLE_PIN , OUTPUT);
  
   delay(5000);  // Wait for EasyDriver wake up

   //  Set Max Speed and Acceleration of each Steppers at startup for homing
  stepperE0.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperE0.setAcceleration(1000.0);  // Set Acceleration of Stepper

  stepperX.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperX.setAcceleration(1000.0);  // Set Acceleration of Stepper

  stepperY.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperY.setAcceleration(1000.0);  // Set Acceleration of Stepper

  stepperZ.setMaxSpeed(6000.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperZ.setAcceleration(1000.0);  // Set Acceleration of Stepper   

// Start Homing procedure of Stepper Motor at startup

  Serial.print("Stepper E0 is Homing . . . . . . . . . . . ");

  while (digitalRead(home_switch_E0)) {  // Make the Stepper move CCW until the switch is activated   
    stepperE0.moveTo(initial_homing_E0);  // Set the position to move to
    initial_homing_E0--;  // Decrease by 1 for next move if needed
    stepperE0.run();  // Start moving the stepper
}

  stepperE0.setCurrentPosition(home_E0);  // Set the current position as zero for now
  stepperE0.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperE0.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_E0=1;

  while (!digitalRead(home_switch_E0)) { // Make the Stepper move CW until the switch is deactivated
    stepperE0.moveTo(initial_homing_E0);  
    stepperE0.run();
    initial_homing_E0++;

  }
  
  stepperE0.setCurrentPosition(home_E0);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperE0.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperE0.setAcceleration(Accel);  // Set Acceleration of Stepper

  Serial.print("Stepper is Homing X . . . . . . . . . . . ");

  while (digitalRead(home_switch_X)) {  // Make the Stepper move CCW until the switch is activated   
    stepperX.moveTo(initial_homing_X);  // Set the position to move to
    initial_homing_X--;  // Decrease by 1 for next move if needed
    stepperX.run();  // Start moving the stepper
}

  stepperX.setCurrentPosition(home_X);  // Set the current position as zero for now
  stepperX.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperX.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_X=1;

  while (!digitalRead(home_switch_X)) { // Make the Stepper move CW until the switch is deactivated
    stepperX.moveTo(initial_homing_X);  
    stepperX.run();
    initial_homing_X++;
  }
  
  stepperX.setCurrentPosition(home_X);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperX.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperX.setAcceleration(Accel);  // Set Acceleration of Stepper

  Serial.print("Stepper Y is Homing . . . . . . . . . . . ");

  while (digitalRead(home_switch_Y)) {  // Make the Stepper move CCW until the switch is activated   
    stepperY.moveTo(initial_homing_Y);  // Set the position to move to
    initial_homing_Y--;  // Decrease by 1 for next move if needed
    stepperY.run();  // Start moving the stepper
}

  stepperY.setCurrentPosition(home_Y);  // Set the current position as zero for now
  stepperY.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperY.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_Y=1;

  while (!digitalRead(home_switch_Y)) { // Make the Stepper move CW until the switch is deactivated
    stepperY.moveTo(initial_homing_Y);  
    stepperY.run();
    initial_homing_Y++;
  }
  
  stepperY.setCurrentPosition(home_Y);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperY.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperY.setAcceleration(Accel);  // Set Acceleration of Stepper

  Serial.print("Stepper Z is Homing . . . . . . . . . . . ");

  while (digitalRead(home_switch_Z)) {  // Make the Stepper move CCW until the switch is activated   
    stepperZ.moveTo(initial_homing_Z);  // Set the position to move to
    initial_homing_Z--;  // Decrease by 1 for next move if needed
    stepperZ.run();  // Start moving the stepper
}

  stepperZ.setCurrentPosition(home_Z);  // Set the current position as zero for now
  stepperZ.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperZ.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_Z=1;

  while (!digitalRead(home_switch_Z)) { // Make the Stepper move CW until the switch is deactivated
    stepperZ.moveTo(initial_homing_Z);  
    stepperZ.run();
    initial_homing_Z++;
  }
  
  stepperZ.setCurrentPosition(home_Z);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperZ.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperZ.setAcceleration(Accel);  // Set Acceleration of Stepper


}

void loop() {



if (Mode = 1){

  stepperE0.moveTo(12300);
  stepperX.moveTo(12300);
  stepperY.moveTo(12300);
  stepperZ.moveTo(12300);
  while (stepperE0.currentPosition() !=12300 || stepperX.currentPosition() !=12300 || stepperY.currentPosition() !=12300 || stepperZ.currentPosition() !=12300 ) {
  stepperE0.run();
  stepperX.run();
  stepperY.run();
  stepperZ.run();
  }
  
  stepperE0.moveTo(0);
  stepperX.moveTo(0);
  stepperY.moveTo(0);
  stepperZ.moveTo(0);
  while (stepperE0.currentPosition() !=0 || stepperX.currentPosition() !=0 || stepperY.currentPosition() !=0 || stepperZ.currentPosition() !=0 ) {
  stepperE0.run();
  stepperX.run();
  stepperY.run();
  stepperZ.run();
  }

}


if (Mode = 2){

  stepperE0.moveTo(12300);
  stepperX.moveTo(12300);
  stepperY.moveTo(12300);
  stepperZ.moveTo(12300);
  while (stepperE0.currentPosition() !=12300 || stepperX.currentPosition() !=12300 || stepperY.currentPosition() !=12300 || stepperZ.currentPosition() !=12300 ) {
  stepperE0.run();
  stepperX.run();
  stepperY.run();
  stepperZ.run();
  }
Mode = 0;
}




}

Ich verwende dazu einen Mega mit RAMPS 1.6 und TMC2208

Wäre sehr froh wenn mir jemand bei dem Thema einen Tipp geben kann warum das nicht funktioniert. Ich habe zwar schon viele Projekte mit dem Arduino gemacht aber die Stepper sind Neuland für mich.

Danke für jede Hilfe!

MfG fec-tech

jedes neues loop werden diese Bedienungen Wahr. weißt du warum?

Das soll nur ein Funktion "zum Einstellen sein"

Wenn das nicht im Code ist verhält sich das nicht anders...

Das ist auch noch nicht fertig....

MfG fec-tech

= ist eine Zuweisung
== ist ein Vergleich

Du willst das Zweite!

ohne Inhalt im loop ? welches Verhalten meinst du dann? Homing?
komisch, auch Extruder ?

Sorry das verstehe ich gerade nicht ganz. In welchem Zusammenhang?

solche Blöcke sollen besser so aussehen:

stepperE0.moveTo(-500);  // Set the position to move to
while (digitalRead(home_switch_E0)) {  // Make the Stepper move CCW until the switch is activated   
  stepperE0.run();  // Start moving the stepper
}
void loop() {





  stepperE0.moveTo(12300);
  stepperX.moveTo(12300);
  stepperY.moveTo(12300);
  stepperZ.moveTo(12300);
  while (stepperE0.currentPosition() !=12300 || stepperX.currentPosition() !=12300 || stepperY.currentPosition() !=12300 || stepperZ.currentPosition() !=12300 ) {
  stepperE0.run();
  stepperX.run();
  stepperY.run();
  stepperZ.run();
  }
  
  stepperE0.moveTo(0);
  stepperX.moveTo(0);
  stepperY.moveTo(0);
  stepperZ.moveTo(0);
  while (stepperE0.currentPosition() !=0 || stepperX.currentPosition() !=0 || stepperY.currentPosition() !=0 || stepperZ.currentPosition() !=0 ) {
  stepperE0.run();
  stepperX.run();
  stepperY.run();
  stepperZ.run();
  }





}

Im Loop macht es keinen Unterschied ob ich das so oder anders Schreibe...

Das Ganze ist kein 3D-Drucker sondern eine Hubvorrichtung. E0, X, Y und Z machen im Grund das gleiche. Alle 3 Stepper fahren im Setup nacheinander nach unten auf den Endschalter. Danach fangen alle drei gleichzeitig an auf obere Position zu fahren und dann wieder auf die untere Position. Das ganze läuft dann sozusagen unendlich weiter...

Du solltest dieCode-Version posten bei der

Die Beschreibung "das" ist da einfach zu unpräzise als das man sicher sagen könnte es hat diese oder jene Ursache.

Da dir nicht klar ist das eine If-Bedingung

IMMER und jedesmal ausgeführt wird
bin ich skeptisch ob dieses "nicht im Code sein" wirklich so programmiert ist, dass es wirklich unwirksam ist.

Das soll ein Vergleich sein, ist aber eine Zuweisung.

wenn hier Leute mit solchen Fragen kommen, dann werden ihnen die MobaTool Lib geraten und dann ist Problem gelöst.
soweit ich weiß .run() Funktion von AccelStepper.h ist blockierend, solange ein Motor ein Schritt macht wartet alles still.

Mal abgesehen von den Problemen, die hier angesprochen wurden ( aber nichts mit deinem Speed-Problem zu tun haben ) hast Du ein grundsätzliches Missverständnis bei den AccelStepper Methoden.
Wenn Du .run() verwendest, hat setSpeed() keinerlei Bedeutung für den Sketch, denn diese Methode wird dann von run() verwendet um das Beschleunigen und Abbremsen zu steuern. Bei der Verwendung von run() ist alleine setMaxSpeed() für das Einstellen der Geschwindigkeit richtig. Mit 'MaxSpeed' ist dabei die maximale Geschwindigkeit nach der Beschleunigung gemeint.
Allerdings sind die von dir dabei verwendeten Werte deutlich zu hoch. AccelStepper schafft bei einem einzelnen Stepper ( also 1x run() Aufruf ) ca. gut 4000 Steps/sec ( auf einem 16MHz AVR ).
Das ist also das, was Du beim Homing erreichen kannst, da da deine Stepper einzeln nacheinander angesteuert werden. Da sollte man aber eher grundsätzlich langsamer fahren.
Wenn deine Stepper dann alle gleichzeitig laufen sollen, sinkt die maximale Steprate proportional zur Zahl der Stepper. Bei 4x run() Aufrufen kommst Du nur noch auf ca. 1000 Steps/sec. Da hilft auch nichts, die setMaxSpeed() höher zu setzen. Eher im Gegenteil, weil dann die internen Berechnungen zur Beschleunigung nicht mehr stimmen.

Das gilt nur bei dem Aufruf, bei dem tatsächlich ein Schritt gemacht werden muss. Da braucht run() dann auf einem AVR gut 200µs.

Bei einem einzelnen Stepper sind die MobaTools langsamer als AccelStepper. Auf einem AVR ist da die maximale Steprate 2500 Steps/Sek. Allerdings sinkt diese Maximalrate auch bei 4 Steppern nicht, so dass in dem Fall MobaTools deutlich höhere Stepraten erreicht als AccelStepper.

Danke an alle für eure Hilfe bzw. Denkanstöße! Ich bin jetzt dadurch auf eine weitere Möglichkeit gestoßen um mein Problem zu Lösen.

/*  Motor Homing code using AccelStepper and the Serial Monitor
 
Created by Yvan / https://Brainy-Bits.com
This code is in the public domain...
You can: copy it, use it, modify it, share it or just plain ignore it!
Thx!

*/

#include "AccelStepper.h" 
// Library created by Mike McCauley at http://www.airspayce.com/mikem/arduino/AccelStepper/

#include "MultiStepper.h"


// AccelStepper Setup
AccelStepper stepperE0(1, 26, 28);   // 1 = Easy Driver interface
                                  // Ramps-Board E0 Pin 26 connected to STEP pin
                                  // Ramps-Board E0 Pin 28 connected to DIR pin

// AccelStepper Setup
AccelStepper stepperX(1, 54, 55);   // 1 = Easy Driver interface
                                  // Ramps-Board E0 Pin 54 connected to STEP pin
                                  // Ramps-Board E0 Pin 55 connected to DIR pin

// AccelStepper Setup
AccelStepper stepperY(1, 60, 61);   // 1 = Easy Driver interface
                                  // Ramps-Board E0 Pin 60 connected to STEP pin
                                  // Ramps-Board E0 Pin 61 connected to DIR pin

// AccelStepper Setup
AccelStepper stepperZ(1, 46, 48);   // 1 = Easy Driver interface
                                  // Ramps-Board E0 Pin 46 connected to STEP pin
                                  // Ramps-Board E0 Pin 48 connected to DIR pin


MultiStepper steppersControl;  // Create instance of MultiStepper

long gotoposition[4]; // An array to store the target positions for each stepper motor

// Define the Pins used
#define home_switch_E0 11 // Pin 11 connected to Home Switch (MicroSwitch)
#define home_switch_X 6 // Pin 11 connected to Home Switch (MicroSwitch)
#define home_switch_Y 5 // Pin 11 connected to Home Switch (MicroSwitch)
#define home_switch_Z 4 // Pin 11 connected to Home Switch (MicroSwitch)
#define E0_ENABLE_PIN 24
#define X_ENABLE_PIN 38
#define Y_ENABLE_PIN 56
#define Z_ENABLE_PIN 62

// Stepper Travel Variables
long TravelE0;  // Used to store the X value entered in the Serial Monitor
//int move_finished=1;  // Used to check if move is completed
long initial_homing_E0=-1;  // Used to Home Stepper at startup
long initial_homing_X=-1;  // Used to Home Stepper at startup
long initial_homing_Y=-1;  // Used to Home Stepper at startup
long initial_homing_Z=-1;  // Used to Home Stepper at startup

// Set Home Position
long home_E0=0;  // Home Position E0
long home_X=0;  // Home Position E0
long home_Y=0;  // Home Position E0
long home_Z=0;  // Home Position E0

// Set Home Speed
float homeSpeed=6000.0;
float homeAccel=1000.0;


// Set Speed
float Speed=6000.0;
float Accel=1000.0;

// Set Mode
int Mode=1; // 1 = Normal Mode, 2 = Upper Position, 3 = Lower Position



void setup() {
   Serial.begin(9600);  // Start the Serial monitor with speed of 9600 Bauds
   
   pinMode(home_switch_E0, INPUT_PULLUP);
   pinMode(home_switch_X, INPUT_PULLUP);
   pinMode(home_switch_Y, INPUT_PULLUP);
   pinMode(home_switch_Z, INPUT_PULLUP);
   
   pinMode(E0_ENABLE_PIN , OUTPUT);
   pinMode(X_ENABLE_PIN , OUTPUT);
   pinMode(Y_ENABLE_PIN , OUTPUT);
   pinMode(Z_ENABLE_PIN , OUTPUT);
  
   delay(5000);  // Wait for EasyDriver wake up

   //  Set Max Speed and Acceleration of each Steppers at startup for homing
  stepperE0.setMaxSpeed(1500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperE0.setAcceleration(200.0);  // Set Acceleration of Stepper

  stepperX.setMaxSpeed(1500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperX.setAcceleration(200.0);  // Set Acceleration of Stepper

  stepperY.setMaxSpeed(1500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperY.setAcceleration(200.0);  // Set Acceleration of Stepper

  stepperZ.setMaxSpeed(1500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperZ.setAcceleration(200.0);  // Set Acceleration of Stepper   

// Start Homing procedure of Stepper Motor at startup

  Serial.print("Stepper E0 is Homing . . . . . . . . . . . ");

  while (digitalRead(home_switch_E0)) {  // Make the Stepper move CCW until the switch is activated   
    stepperE0.moveTo(initial_homing_E0);  // Set the position to move to
    initial_homing_E0--;  // Decrease by 1 for next move if needed
    stepperE0.run();  // Start moving the stepper
}

  stepperE0.setCurrentPosition(home_E0);  // Set the current position as zero for now
  stepperE0.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperE0.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_E0=1;

  while (!digitalRead(home_switch_E0)) { // Make the Stepper move CW until the switch is deactivated
    stepperE0.moveTo(initial_homing_E0);  
    stepperE0.run();
    initial_homing_E0++;

  }
  
  stepperE0.setCurrentPosition(home_E0);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperE0.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperE0.setAcceleration(Accel);  // Set Acceleration of Stepper

  Serial.print("Stepper is Homing X . . . . . . . . . . . ");

  while (digitalRead(home_switch_X)) {  // Make the Stepper move CCW until the switch is activated   
    stepperX.moveTo(initial_homing_X);  // Set the position to move to
    initial_homing_X--;  // Decrease by 1 for next move if needed
    stepperX.run();  // Start moving the stepper
}

  stepperX.setCurrentPosition(home_X);  // Set the current position as zero for now
  stepperX.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperX.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_X=1;

  while (!digitalRead(home_switch_X)) { // Make the Stepper move CW until the switch is deactivated
    stepperX.moveTo(initial_homing_X);  
    stepperX.run();
    initial_homing_X++;
  }
  
  stepperX.setCurrentPosition(home_X);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperX.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperX.setAcceleration(Accel);  // Set Acceleration of Stepper

  Serial.print("Stepper Y is Homing . . . . . . . . . . . ");

  while (digitalRead(home_switch_Y)) {  // Make the Stepper move CCW until the switch is activated   
    stepperY.moveTo(initial_homing_Y);  // Set the position to move to
    initial_homing_Y--;  // Decrease by 1 for next move if needed
    stepperY.run();  // Start moving the stepper
}

  stepperY.setCurrentPosition(home_Y);  // Set the current position as zero for now
  stepperY.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperY.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_Y=1;

  while (!digitalRead(home_switch_Y)) { // Make the Stepper move CW until the switch is deactivated
    stepperY.moveTo(initial_homing_Y);  
    stepperY.run();
    initial_homing_Y++;
  }
  
  stepperY.setCurrentPosition(home_Y);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperY.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperY.setAcceleration(Accel);  // Set Acceleration of Stepper

  Serial.print("Stepper Z is Homing . . . . . . . . . . . ");

  while (digitalRead(home_switch_Z)) {  // Make the Stepper move CCW until the switch is activated   
    stepperZ.moveTo(initial_homing_Z);  // Set the position to move to
    initial_homing_Z--;  // Decrease by 1 for next move if needed
    stepperZ.run();  // Start moving the stepper
}

  stepperZ.setCurrentPosition(home_Z);  // Set the current position as zero for now
  stepperZ.setSpeed(homeSpeed);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperZ.setAcceleration(homeAccel);  // Set Acceleration of Stepper
  initial_homing_Z=1;

  while (!digitalRead(home_switch_Z)) { // Make the Stepper move CW until the switch is deactivated
    stepperZ.moveTo(initial_homing_Z);  
    stepperZ.run();
    initial_homing_Z++;
  }
  
  stepperZ.setCurrentPosition(home_Z);
  Serial.println("Homing Completed");
  Serial.println("");
  stepperZ.setSpeed(Speed);      // Set Max Speed of Stepper (Faster for regular movements)
  stepperZ.setAcceleration(Accel);  // Set Acceleration of Stepper


  // Adding the 3 steppers to the steppersControl instance for multi stepper control
  steppersControl.addStepper(stepperE0);
  steppersControl.addStepper(stepperX);
  steppersControl.addStepper(stepperY);
  steppersControl.addStepper(stepperZ);

   //  Set Max Speed and Acceleration of each Steppers at startup for homing
  stepperE0.setMaxSpeed(2500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperE0.setAcceleration(200.0);  // Set Acceleration of Stepper

  stepperX.setMaxSpeed(2500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperX.setAcceleration(200.0);  // Set Acceleration of Stepper

  stepperY.setMaxSpeed(2500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperY.setAcceleration(200.0);  // Set Acceleration of Stepper

  stepperZ.setMaxSpeed(2500.0);      // Set Max Speed of Stepper (Slower to get better accuracy)
  stepperZ.setAcceleration(200.0);  // Set Acceleration of Stepper  



}

void loop() {


  // Store the target positions in the "gotopostion" array
  gotoposition[0] = 12300;  // 800 steps - full rotation with quater-step resolution
  gotoposition[1] = 12300;
  gotoposition[2] = 12300;
  gotoposition[3] = 12300;
  
  steppersControl.moveTo(gotoposition); // Calculates the required speed for all motors
  steppersControl.runSpeedToPosition(); // Blocks until all steppers are in position

  delay(500);

  gotoposition[0] = 0;
  gotoposition[1] = 0;
  gotoposition[2] = 0;
  gotoposition[3] = 0;
  
  steppersControl.moveTo(gotoposition);
  steppersControl.runSpeedToPosition();

  delay(500);


Damit kann ich für meine Anwendung sehr einfach die Geschwindigkeit einstellen.
Da es sich bei dem Ganzen nur um ein sehr einfache Anwendung handelt reicht das so.
Auch nochmal danke für den Tipp mit dem "=" und "==" das war ein Fehler ist aber für das eigentliche Problem nicht relevant, das habe ich jetzt nochmal extra Probiert.

MobaTools werde ich mir als nächstes ansehen das habe ich erst gelesen als ich den Post abgeschickt habe. Das ist auf jeden Fall eine Interessante LIB... Super Vorschlag. Danke!

Die Werte von 6000 waren natürlich viel zu hoch aber mit den den 2500 funktioniert das Ganze jetzt ganz gut. Mal sehen wie lange.

Danke nochmal an Alle, und einen schönen Abend

MfG fec-tech

Dass Du bei MultiStepper kein Beschleunigen/Abbremsen hast, setAcceleration() also keinen Effekt hat, ist dir bewusst?

Ja ist mir bewusst. CopyPaste fehler... :face_with_peeking_eye:

Ich hab in dem Fall einen Testaufbau für eine Maschine. Durch diese Anpassung funktioniert das Ganze sogar viel besser aufgrund der knackigen Beschleunigung und der hohen Geschwindigkeit. Mal sehen wie lange die Treiber halten aber wenn alles für 4 Wochen funktioniert bin ich zufrieden. Ersatzteile hab ich noch einige...

:grin:

Also wenn die Maschine 2 Stunden im Dauerlauf durchgehalten hat und sich weder Treiber noch Motoren überhitzt haben, dann haben sich nach 2 Stunden Dauerlauf zumindest was die Temperaturen angeht stationäre Verhältnisse eingestellt.

Hast du getestet ob du Schritte verlierst oder nicht?
Also wild herumfahren lassen und dann Auf Position Null fahren und neu Homing machen. Anzahl Schritte bis Homing-Sensoren ansprechen ausgeben lassen.

Das mehrmals wiederholen. Es sollten immer die gleiche Anzahl Schritte für das homing sein.

Hallo,

2 Stunden waren es noch nicht aber 1 Stunden lief das ganze schon durchgehend. Temperatur der Motoren ist nicht wirklich gestiegen aber die Treiber sind am Kühlkörper bei ca. 60°
Ich baue jetzt noch einen Lüfter drüber dann hoffe ich wird das noch etwas weniger.

Schrittverluste hab ich mir noch nicht angesehen. Das wäre aber sicher interessant. Wenn ich in den nächsten Tagen zeit habe werde ich das noch testen und Rückmeldung geben wie sich das verhält. Nach der Stunde habe ich heute jedenfalls nicht bemerkt, dass ich Schrittverluste habe, zumindest Optisch bzw. die Funktion war bis zum Schluss gegeben.

MfG fec-tech

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.