Problema de control de posición con accelstepper

hola buenas tardes
Estoy usando la librería accelstepper para controlar la posición de un nema 23, tb6600, con un potenciómetro.
el código hace que respete el giro y la posición hasta cierto punto pero despues empieza a vibrar y girar cuando no muevo el potenciómetro.


#include <AccelStepper.h>
AccelStepper stepper(1, 9, 8);//9 pulsos 8 direccion

int pot1 = A0;
int pot1sig;
void setup() {
  Serial.begin(9600);
  pinMode(pot1, INPUT);
  stepper.setMaxSpeed(1000);


}

void loop() {


 pot1sig = analogRead(pot1);
 pot1sig = map(pot1sig,0,1023,0,1000);
 stepper.moveTo(pot1sig);
 stepper.setSpeed(600);
 stepper.runSpeedToPosition(); 
 Serial.println(pot1sig);

}
  1. El valor que da la lectura del potenciómetro puede variar espontáneamente aunque no lo toques. Para verificar esto imprime el valor de pot1sig.

  2. Para remediar este efecto, modifica tu programa para mover el motor solamente si la lectura del potenciometro varía más allá de un valor predefinido

  3. Para esto requieres una variable adicional que almacene la lectura anterior y con la que puedas comparar la lectura nueva. Si la diferencia entre ambas supera el valor predefinido, mueves el motor y actualizas la lectura.

  4. Los variacion que observes en la impresión del párrafo 1 te sirve para establecer el valor predefinido de comparación.

Esto requiere manejo de conceptos matemáticos básicos como valor abstoluto.
si el valor absoluto de (posActual - posAnterior) > 10 por ejemplo entonces si tomas acción.

// agrega junto a
int pot1sig;
int pot1sigAnt = 0;

void loop() {
 
 pot1sig = analogRead(pot1);
 if (abs(pot1sig-pot1sigAnt) > 10) {  // este valor ajustalo a tu necesidad.
	 pot1sig = map(pot1sig,0,1023,0,1000);
	 stepper.moveTo(pot1sig);
	 stepper.setSpeed(600);
	 stepper.runSpeedToPosition(); 
	 Serial.println(pot1sig);
 }
 pot1sigAnt = pot1sig;

}

No se como debe funcionar los procedimientos como runSpeedToPosition()
Si asi omo lo puse no va, cambia a esto



// agrega junto a
int pot1sig;
int pot1sigAnt = 0;

void loop() {
 pot1sig = analogRead(pot1);
 if (abs(pot1sig-pot1sigAnt) > 10) {  // este valor ajustalo a tu necesidad.
	 pot1sig = map(pot1sig,0,1023,0,1000);
	 stepper.moveTo(pot1sig);
	 Serial.println(pot1sig);
 }
 stepper.setSpeed(600);
 stepper.runSpeedToPosition(); 
 pot1sigAnt = pot1sig;
}

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