Hola con todos, estoy programando un sistemas de varios motores a pasos, utilizo la libreria AccelStepper para controlar la velocidad y aceleración, el sistema funciona muy bien si hago un movimiento simultaneo para los tres motores, pero si deseo realizar mas de un movimiento continuo de los tres motores los motores no siguen la secuencia y comienzan a moverse sin sentido. alguien que pueda ayudarme
#include <AccelStepper.h>
char serialData;
unsigned long auxtimer;
void setup()
{
serialData = (char)(('0'));
}
void loop()
{
Giro1_Mov1() ;
Giro1_Mov2() ;
Giro1_Mov3() ;
}
int mm1=15.45;//23
int mm2=19.25;//
int rot=9;
int pos1 =51.3mm1;
int pos2 = 80mm2;
int pos3 = 6.62222*rot;
// Define two steppers and the pins they will use
AccelStepper stepper1(AccelStepper::DRIVER, 3, 4); //dir 8, step 9 EJE X
AccelStepper stepper2(AccelStepper::DRIVER, 5, 6);// EJE Y
AccelStepper stepper3(AccelStepper::DRIVER, 7, 8);// EJE ROT
void Giro1_Mov1()
{
// serialData = (char)(('0'));
//delay(1000);
stepper1.setSpeed(700);
stepper1.setAcceleration(450);
stepper2.setSpeed(400);
stepper2.setAcceleration(700);
stepper3.setSpeed(200);
stepper3.setAcceleration(25);
if (stepper1.distanceToGo() == 0)
{
// pos1 = -pos1;
stepper1.moveTo(pos1);// pos1--> -X // -pos1--> +X
}
if (stepper2.distanceToGo() == 0)
{
//pos2 = -pos2;
stepper2.moveTo(pos2);// pos2--> +Y ; -pos2--> -Y
}
if (stepper3.distanceToGo() == 0)
{
// pos1 = -pos1;
stepper3.moveTo(-pos3); // pos3-->antihorario ; -pos3-->horario
}
stepper1.run();
stepper2.run();
stepper3.run();
}
int mm1a=18.26;//15.45
int mm2a=16.6;//
int rota=9;
int pos1a =51.3mm1a;
int pos2a= 80mm2a;
int pos3a = 6.62222*rota;
// Define two steppers and the pins they will use
AccelStepper stepper1a(AccelStepper::DRIVER, 3, 4); //dir 8, step 9 EJE X
AccelStepper stepper2a(AccelStepper::DRIVER, 5, 6);// EJE Y
AccelStepper stepper3a(AccelStepper::DRIVER, 7, 8);// EJE ROT
void Giro1_Mov2()
{
// serialData = (char)(('0'));
//delay(1000);
stepper1a.setSpeed(700);
stepper1a.setAcceleration(500);
stepper2a.setSpeed(700);
stepper2a.setAcceleration(700);
stepper3a.setSpeed(200);
stepper3a.setAcceleration(25);
if (stepper1a.distanceToGo() == 0)
{
// pos1 = -pos1;
stepper1a.moveTo(pos1a);// pos1--> -X // -pos1--> +X
}
if (stepper2a.distanceToGo() == 0)
{
//pos2 = -pos2;
stepper2a.moveTo(pos2a);// pos2--> +Y ; -pos2--> -Y
}
if (stepper3a.distanceToGo() == 0)
{
// pos1 = -pos1;
stepper3a.moveTo(-pos3a); // pos3-->antihorario ; -pos3-->horario
}
stepper1a.run();
stepper2a.run();
stepper3a.run();
}
int mm1b=20.63;//
int mm2b=13.53;//
int rotb=9;
int pos1b =51.3mm1b;
int pos2b = 80mm2b;
int pos3b = 6.62222*rotb;
// Define two steppers and the pins they will use
AccelStepper stepper1b(AccelStepper::DRIVER, 3, 4); //dir 8, step 9 EJE X
AccelStepper stepper2b(AccelStepper::DRIVER, 5, 6);// EJE Y
AccelStepper stepper3b(AccelStepper::DRIVER, 7, 8);// EJE ROT
void Giro1_Mov3()
{
// serialData = (char)(('0'));
//delay(1000);
stepper1b.setMaxSpeed(700);
stepper1b.setAcceleration(600);
stepper2b.setMaxSpeed(700);
stepper2b.setAcceleration(550);
stepper3b.setMaxSpeed(200);
stepper3b.setAcceleration(50);
if (stepper1b.distanceToGo() == 0)
{
// pos1 = -pos1;
stepper1b.moveTo(pos1b);// pos1--> -X // -pos1--> +X
}
if (stepper2b.distanceToGo() == 0)
{
//pos2 = -pos2;
stepper2b.moveTo(pos2b);// pos2--> +Y ; -pos2--> -Y
}
if (stepper3b.distanceToGo() == 0)
{
// pos1 = -pos1;
stepper3b.moveTo(-pos3b); // pos3-->antihorario ; -pos3-->horario
}
stepper1b.run();
stepper2b.run();
stepper3b.run();
}