Go Down

Topic: Problem mit der Ansteuerung von Schrittmotoren über die Accel Stepper Library (Read 970 times) previous topic - next topic

11nemesis

Hallo.
Ich möchte 4 Schrittmotoren die an Lineareinheiten angebracht sind, über die Accel Stepper Library ansteuern, dies bereitet mir aber Probleme.

Das Programm sollte wie folgt funktionieren:

1. Alle Schrittmotoren drehen sich so lange, bis der jeweilige induktive Näherungsschalter anspricht (Analoge Eingänge).

2. Erst wenn alle Motoren auf die Nullstellung zurückgefahren sind soll das Hauptprogramm das die Motoren bewegt, durch den Taster "starten" beginnen.

3. Nun beginnt das Hauptprogramm, welches die Motoren drehen lässt.

4. Wenn das Programm beendet ist, soll es wieder von vorne beginnen. Spricht die Linearführungen fahren wieder auf die Nullposition.



Nun zu meinen Problemen:

Gibt es eine schönere Lösung als die Ausgänge doppelt zu Deklarieren?

Wenn das Programm einmal durchgelaufen ist, fahren die Motoren nicht mehr auf ihre Ausgangsposition zurück. Woran liegt das?


Währe super wenn ihr mir helfen könntet. Hier noch der Code:

Code: [Select]
#include <AccelStepper.h>

int a;
int b;
int c;
int d;
int e;
int starten = 12;
int analogPin1 = A0;
int analogPin2 = A1;
int analogPin3 = A2;
int analogPin4 = A3;
AccelStepper stepper1(AccelStepper::FULL2WIRE, 2, 3);
AccelStepper stepper5(AccelStepper::FULL2WIRE, 2, 3);

AccelStepper stepper2(AccelStepper::FULL2WIRE, 4, 5);
AccelStepper stepper6(AccelStepper::FULL2WIRE, 4, 5);

AccelStepper stepper3(AccelStepper::FULL2WIRE, 6, 7);
AccelStepper stepper7(AccelStepper::FULL2WIRE, 6, 7);

AccelStepper stepper4(AccelStepper::FULL2WIRE, 8, 9);
AccelStepper stepper8(AccelStepper::FULL2WIRE, 8, 9);

void setup()

   pinMode(starten, INPUT);
   pinMode(analogPin1, INPUT);
   pinMode(analogPin2, INPUT);
   pinMode(analogPin3, INPUT);
   pinMode(analogPin4, INPUT);
   stepper1.setMaxSpeed(1000);
   stepper1.setAcceleration(50000);
   stepper1.moveTo(50000);
   stepper2.setMaxSpeed(1000);
   stepper2.setAcceleration(50000);
   stepper2.moveTo(50000);
   stepper3.setMaxSpeed(1000);
   stepper3.setAcceleration(50000);
   stepper3.moveTo(50000);
   stepper4.setMaxSpeed(1000);
   stepper4.setAcceleration(50000);
   stepper4.moveTo(50000);
   
   stepper5.setMaxSpeed(1000.0);
   stepper5.setAcceleration(100.0);
   stepper6.setMaxSpeed(1000.0);
   stepper6.setAcceleration(100.0);
   stepper7.setMaxSpeed(1000.0);
   stepper7.setAcceleration(100.0);
   stepper8.setMaxSpeed(1000.0);
   stepper8.setAcceleration(100.0);
;



   

}

void loop()

 


   stepper1.run();
   stepper2.run();
   stepper3.run();
   stepper4.run();
 

    if (analogRead (analogPin1)> 1000)
  {
    stepper1.setCurrentPosition(50000);    // Alternativ zu stepper1.stop();
   
    a = 1;
  }
    if (analogRead (analogPin2)>= 1000)
  {
    stepper2.stop();
    b = 1;
  }
    if (analogRead (analogPin3)>= 1000)
  {
    stepper3.stop();
    c = 1;
  }
    if (analogRead (analogPin4)>= 1000)
  {
    stepper4.stop();
    d = 1;

  }

   
   e = a + b + c + d;


  if(e == 4 )
  {
   
    if (digitalRead (starten)== HIGH)
{
      stepper5.runToNewPosition(500);
      stepper6.runToNewPosition(600);
      stepper6.runToNewPosition(-600);
      stepper7.runToNewPosition(600);
      stepper7.runToNewPosition(-600);
      stepper8.runToNewPosition(600);
      stepper8.runToNewPosition(-600);
   
      e = 0;
      a = 0;
      b = 0;
      c = 0;
      d = 0;

      stepper1.setCurrentPosition(0);
      stepper5.setCurrentPosition(0);
   


  }}}

11nemesis

Wenn ich am Ende des Programmcodes //asm volatile ("  jmp 0");// einfüge funktioniert der Code.
Dabei wird ein Reset durchgeführt. Ist aber nicht gerade die schönste Lösung... :~

Go Up