Programa arduino uno r3, micro step driver y motorstep nema

Hola, estoy teniendo 2 problemas con mi programa,
1.Es que el motor va paso por paso en vez de girar continuamente, me pregunto si es el library que estoy usando (SpeedyStepper.h) no se cual es mejor entre ese o AccelStepper.h
motor HT23-401 (https://www.lenmark.com/products/ht23-401-high-torque-stepper-motor)
driver DM542 (Prestige XL2/L2 Stepping Motor(DM542))

  1. Mi programa tiene que hace uso de 2 motores, conectados a dos diferentes drivers, conectado a un arduino, uno de los motores tiene que baja y subir (vertical), y el otro tiene que girar, cuando el motor esta abajo tiene que girar por 50 segundo en sentido del reloj, subir 10 y luego girar otros 50 segundos en contra de las manecillas del reloj (es un sistema de limpieza, hace contactos con liquidos cuando esta abajo).

Alguien por favor me puede decir que libreria funciona mejor, y que estoy haciendo mal con mi programa, gracias !

#include <SpeedyStepper.h>

// Defining Stepper Motors
SpeedyStepper tStepper;
SpeedyStepper zStepper;

//Defining Pins
int run1 = 2;
int run2 = 3;
int run3 = 4;
int opStop = 12;
int beeper = 11;


//Defining Common Parameters
int zStepperTravel = 300; //in millimeters
int m1PlatformTravel = 300; //in millimeters
int m2PlatformTravel = 248; //in millimeters
int f4PlatformTravel = 270; //in millimeters
int zStepperVelocity = 70; //in millimeters per second
int oscillationHeight = 24.5; //in millimeters
int oscillationVelocity = 35; //in millimeters per second
int oscillationInterval = 8*1000; //in milliseconds
int prog1Duration = 2*60; //in Seconds
int prog2Duration = 5*60; //in Seconds
int prog3Duration = 5*60; //in Seconds
float prog1SpinSpeed = 0.2; //in revs/s
float prog2SpinSpeed = 0.2; //in revs/s
float prog3SpinSpeed = 0.2; //in revs/s

//-----------------------------------------------------------------------------
//                        setup/standby function
//-----------------------------------------------------------------------------

void setup() {
  
  //Assigning Button Pins
  pinMode (opStop, INPUT_PULLUP);
  pinMode (run1, INPUT_PULLUP);
  pinMode (run2, INPUT_PULLUP);
  pinMode (run3, INPUT_PULLUP);
  pinMode (beeper, OUTPUT);
  digitalWrite(beeper, LOW);
  
  //Assigning Stepper Pins
  tStepper.connectToPins(7,6);
  zStepper.connectToPins(10,9);
  //pinMode(tStepperEna,OUTPUT);
  //pinMode(zStepperEna,OUTPUT);

  //Stepper Configuration
  tStepper.setStepsPerRevolution(800);
  tStepper.setSpeedInRevolutionsPerSecond(0.2); 
  tStepper.setAccelerationInRevolutionsPerSecondPerSecond(0.2);
  zStepper.setStepsPerMillimeter(160);
  zStepper.setAccelerationInMillimetersPerSecondPerSecond(50);
  zStepper.setSpeedInMillimetersPerSecond(zStepperVelocity);

  
}

void loop() {
  
  while (digitalRead(opStop) == HIGH){
    //loop to stop machine start while opstop pressed
  }
  
  if (digitalRead(run1) == LOW){
    prog(prog1Duration,prog1SpinSpeed,m1PlatformTravel);
  }

  if (digitalRead(run2) == LOW){
    prog(prog2Duration,prog2SpinSpeed,m1PlatformTravel);
  }

  delay(1000);
}

//-----------------------------------------------------------------------------
//                               Run Program
//-----------------------------------------------------------------------------

void prog(long duration, float spinSpeed, int travel){
  startBeep();
  duration = duration * 1000; //converting seconds to milliseconds
  zStepper.setSpeedInMillimetersPerSecond(zStepperVelocity);
  zStepper.moveToPositionInMillimeters(travel);

  tStepper.setSpeedInRevolutionsPerSecond(spinSpeed);
  tStepper.setupMoveInRevolutions(300);
  long timer = (duration) + millis();
  long oscillation = millis();
  boolean flipflop = true;
  zStepper.setSpeedInMillimetersPerSecond(oscillationVelocity);
  while(timer >= millis() && (digitalRead(opStop)==LOW)){
    tStepper.processMovement();
    zStepper.processMovement();
    if (oscillation <= millis()){
      oscillation = millis() + oscillationInterval;
      if (flipflop == true){
        zStepper.setupMoveInMillimeters(travel);
        flipflop = false;
      }
      else{
        zStepper.setupMoveInMillimeters(travel-oscillationHeight);
        flipflop = true;
      }
    }
  }
  tStepper.setupStop();
  while(tStepper.getCurrentVelocityInStepsPerSecond() > 10){
    tStepper.processMovement();
    zStepper.processMovement();
  }
  
  tStepper.setupMoveInRevolutions(-300);
  timer = (duration) + timer;
  while(timer >= millis() && (digitalRead(opStop)==LOW)){
    tStepper.processMovement();
    zStepper.processMovement();
    if (oscillation <= millis()){
      oscillation = millis() + oscillationInterval;
      if (flipflop == true){
        zStepper.setupMoveInMillimeters(travel);
        flipflop = false;
      }
      else{
        zStepper.setupMoveInMillimeters(travel-oscillationHeight);
        flipflop = true;
      }
    }
  }
  
  tStepper.setupStop();
  zStepper.setupStop();
  while(tStepper.getCurrentVelocityInStepsPerSecond() > 10 && zStepper.getCurrentVelocityInStepsPerSecond() > 10){
    tStepper.processMovement();
    zStepper.processMovement();
  }

  if (digitalRead(opStop) == LOW){
    progFinishedReset();
  }
  else{
    opStopReset();
  }
}

//-----------------------------------------------------------------------------
//                     Reset function after program has concluded
//-----------------------------------------------------------------------------

void progFinishedReset(){
  // Sound initial beeper
  if (digitalRead(opStop) == LOW){
    for (int i = 0; i<=4; i++){
      digitalWrite(beeper, HIGH);
      delay(30);
      digitalWrite(beeper, LOW);
      delay(120);
    }
  }
  zStepper.setSpeedInMillimetersPerSecond(zStepperVelocity);
  if (digitalRead(opStop) == LOW){
  zStepper.moveToPositionInMillimeters(0);
  }

  centerHead();
  
  // Sound final beeper
  if (digitalRead(opStop) == LOW){
    for (int i = 0; i<=4; i++){
      digitalWrite(beeper, HIGH);
      delay(100);
      digitalWrite(beeper, LOW);
      delay(100);
    }
  }
}

//-----------------------------------------------------------------------------
//                     Reset function after opStop is pressed
//-----------------------------------------------------------------------------

void opStopReset(){
  while (digitalRead(opStop) == HIGH){
    delay(1000);
  }
  zStepper.moveToPositionInMillimeters(0);
  centerHead();
}

//-----------------------------------------------------------------------------
//                         Point toolhead toward user
//-----------------------------------------------------------------------------

void centerHead(){
  long currentPos = tStepper.getCurrentPositionInSteps() / 800;
  long targetPos = (currentPos * 800);
  tStepper.moveToPositionInSteps(targetPos);
  tStepper.setCurrentPositionInSteps(0);
}

//-----------------------------------------------------------------------------
//                      Small beep to signal operation start
//-----------------------------------------------------------------------------

void startBeep(){
  digitalWrite(beeper, HIGH);
  delay(2);
  digitalWrite(beeper, LOW);
}

Yo creo que este ejemplo

deberia ayudarte si no es en el que te basaste.

Esto que sentido tiene?
Cuando cae ahi no hace nada

while (digitalRead(opStop) == HIGH){
   //loop to stop machine start while opstop pressed
 }

Justamente lo que dice ahi. Para la maquina mientras opStop este presionado.
para hacer esto tienes

tStepper.setupStop();
zStepper.setupStop();

Que es mas adecudado.

En el ejemplo que te indico se hace acá

 //
    // check if the user has pressed the "Stop" button, if so decelerate to a stop
    //
    if ((digitalRead(STOP_BUTTON_PIN) == LOW) && (stopFlag == false))
    {
      stepper.setupStop();
      stopFlag = true;
    }

usan el flag stopFlag para controlar dicha acción.

La librería que usas tiene 6 años de antiguedad sin modificaciones. Cuando veo una librería asi tiendo a no usarla.
AccelStepper (no se si hablamos de la misma) por otro lado tiene 2 años. Entre ambas usaría esta. De hecho la primera que indicas nunca la habia visto en el foro.
AccelStepper si.

Si tu problema es que el motor va paso a paso.
Yo creo que no has entendido bien como usar la librería. Asi que mira los ejemplos e intenta correrlos de modo que los motores funcionen como gustes y luego le irás agregando las condiciones con switches o botones que tengas.

Muchas gracias, eso en especifico es para el boton de emergencia, la maquina cuando cae empieza a girar sentido reloj y luego contrareloj, pero sube y baja 1 pulgada cada 5 segundos y eso es lo que quiero eliminar

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