libreria-asyncstepper-v2-0

Librería AsyncStepper v2.0

Actualizamos la librería AsyncStepper a una bien merecida versión 2.0. La principal novedad es incorporar aceleración lineal, aunque se ha reescrito por completo mejorando su uso y rendimiento.

Recordamos que la librería AsyncStepper permite mover un motor paso a paso de forma no bloqueante, es decir, permitiendo al procesador hacer acciones mientras mueve uno o varios motores a distintas velocidades. Básicamente con AsyncStepper puedes hacer lo que quieras con un motor paso a paso, sin tener que preocuparte prácticamente de nada. Únicamente tienes que llamar frecuentemente a la función Update(), y AsyncStepper se encarga de hacer las cuentas necesarias.

AsyncStepper stepper1(stepper_steps, stepper_dir_pin, stepper_step_pin);

void setup()
{
  Serial.begin(115200);

  stepper1.SetSpeedRpm(30);
  stepper1.RotateAngle(360.0f * 2 + 270.0f, AsyncStepper::CW);
}

void loop()
{
  stepper1.Update();
}

Idealmente, deberías llamar a Update() antes del siguiente paso del motor. En caso de esperas muy largas, AsyncStepper intentará recuperar los pasos restantes, pero es un escenario a evitar.

AsyncStepper está diseñado para emplearse con drivers como el A4988 o el DRV8825. Alternativamente, puede controlarse con otro tipo de driver (o sin driver) proporcionando las funciones de callBack actionCW() y actionCCW() que contengan, respectivamente, el código necesario para avanzar un paso en sentido horario y anti horario.

Adicionalmente se puede proporcionar una función OnFinish() que se ejecuta al finalizar un movimiento, y puede usarse para actualizar el estado en el programa o, por ejemplo, encadenar acciones.

stepper1.OnFinish = []()
{  
  stepper1.RotateAngle(360.0f * 2 + 270.0f, AsyncStepper::CCW);
};

Manual de uso

La clase AsyncStepper puede instanciarse como un objeto a través de uno de sus constructores,

AsyncStepper(uint16_t motorSteps, int pinDir, int pinStep)
AsyncStepper(uint16_t motorSteps, StepperCallback actionCW, StepperCallback actionCCW)

Uso de AsyncStepper

// Mover un cierto ángulo
void Rotate(float angleDelta, StepDirection direction);
void Rotate(float angleDelta, StepDirection direction, StepCallback callback);
  
// Mover hasta un cierto angulo
void RotateToAngle(float angle, StepDirection direction, StepCallback callback);
void RotateToAngle(float angle, StepDirection direction);
 
 // Mover en un cierto tiempo en segundos
 void RotateAngleInTime(float angle, float time, StepperDirection direction, StepperCallback onFinish = nullptr);
 void RotateToAngleInTime(float angle, float time, StepperDirection direction, StepperCallback onFinish = nullptr);
 
 // Mover de forma continua
void RotateContinuos(StepDirection direction);

// Cambiar velocidad y aceleración
void SetSpeed(long speed);
void SetSpeedRpm(float rpm);
void SetSpeedDegreesBySecond(float degreesBySecond);
void SetAcceleration(long acceleration);
void SetAcceleration(long acceleration, long deceleration);

// Detener el motor paso a paso
void Stop();
void Break();

// Actualiza la posicion del motor paso a paso
// Es necesario llamar a este metodo frecuentemente desde el bucle principal
bool Update();

//Obtener información
long GetRemainSteps();
unsigned long GetTimeTraveling();
float GetCurrentAngle();
long GetCurrentInterval();
long GetTravelCurrentStep();
long GetTravelSteps();
long GetAbsoluteStep();
long GetMaxSpeed();
long GetCurrentSpeed();
float GetCurrentSpeedRpm();
float GetCurrentSpeedDegreesBySecond();
float GetSpeedForMove(long steps, float time);
float GetTimeForMove(long steps);
float GetTimeForMove(long steps, unsigned long speed);

Instalación

  • Descargar la última versión desde GitHub
  • Descomprimir el archivo
  • Copiar en tu carpeta de librerías (normalmente Mis Documentos\Arduino\libraries)
  • Relanzar el IDE de Arduino

github-full