AccelStepper.h - problemi di posizionamento

Buongiorno a tutti
Rieccomi qui

Ho un problema con la libreria AccelStepper.h
La uso per comandare NEMA 17 comandato da un PoStep25-32

Ho testato il primo codice ed il NEMA posiziona correttamente, mentre con il secondo usando la libreria Accellstepper posiziona a un numero di step non corretto, minore di quello previsto e mai uguale.

Dove sto sbagliando?
Grazie in anticipo

Codice 1 (movimenti corretti):


int motorDirPin = 6; //digital pin 6
int motorStepPin = 3; //digital pin 3
int t1 = 2;
void setup(){
pinMode(motorDirPin, OUTPUT);
pinMode(motorStepPin, OUTPUT);
digitalWrite(motorDirPin, HIGH);
digitalWrite(motorStepPin, LOW);
delay(5000);
}

void loop(){
for ( int sr = 0; sr < 8; sr++){
delay(1000);
digitalWrite(motorDirPin, HIGH);
for(int s = 0 ; s < 50; s++){
digitalWrite(motorStepPin, HIGH);
digitalWrite(motorStepPin, LOW);
delay(t1);
}
}
delay(1000);
digitalWrite(motorDirPin, LOW);
for(int s = 0 ; s < 400; s++){
digitalWrite(motorStepPin, HIGH);
digitalWrite(motorStepPin, LOW);
delay(t1);
}
delay(1000);
digitalWrite(motorDirPin, HIGH);
for(int s = 0 ; s < 2000; s++){
digitalWrite(motorStepPin, HIGH);
digitalWrite(motorStepPin, LOW);
delay(t1);
}
}

Codice 2 (accelstepper):


#include <AccelStepper.h>

int motorSpeed = 4800;
int motorAccel = 8000;

int motorDirPin = 6; //digital pin 6
int motorStepPin = 3; //digital pin 3

AccelStepper stepper(1, motorStepPin, motorDirPin);

void setup(){
stepper.setMaxSpeed(motorSpeed);
stepper.setSpeed(motorSpeed);
stepper.setAcceleration(motorAccel);
delay(5000);
}

void loop(){

for ( int sr = 0; sr < 8; sr++){
delay(1000);
stepper.move(50);
stepper.runToPosition();
}
delay(1000);
stepper.move(-400);
stepper.runToPosition();

delay(1000);
stepper.move(2000);
stepper.runToPosition();
}

La velocità è eccessiva e lo stepper perde passi.
Riduci la velocità fino a che il fenomeno non si presenta. Quella è la tua velocità limite.
Il valore è influenzato anche dal carico.

Ciao

sono arrivato fino a questo e non posiziona correttamente
int motorSpeed = 400;
int motorAccel = 8000;

meno di questo non si muove o fa avanti e indietro

Dalla scheda tecnica del tuo stepper si vede che l'angolo dello step è di 1.8° quindi per un giro di 360° ha 200 step.
Ci sono indicate 2 velocità massime: 600 giri/minuto con un driver e 4688 con un altro.
Immaginando di ragionare con 600 giri al minuto vuol dire che in un minuto fa 200*600 = 120'000 passi. Quindi la velocità massima in questo caso è 2000 passi al secondo.

int motorSpeed = 2000;

Per l'accelerazione indica 1.4E+06 per 1/16 oppure 175'000 per mezzo step. Per uno step è quindi 87500. Questa è l'accelerazione massima.
Prova all'inizio omettendo il parametro

// stepper.setAcceleration(motorAccel);

Ciao i tuoi calcoli funzionano
con:
int motorSpeed = 2000;
int motorAccel = 87000;
funziona bene
Grazie
Come posso calcolare di quanto posso variare questi parametri?
o devo devo fare delle prove empiriche?
Grazie ancora

Scusa prima non ti ho elencato tutti i test:
Con il parametro di accelerazione commentato non si muove

Con i parametri
int motorSpeed = 2000;
int motorAccel = 87500;
tranne a volte uno step indietro al primo run

Volevo rendere però il movimento più dolce
ma diminuendo a 80000 l'accelerazione e 1000 la velocità dimentica di nuovo qualche passo

Ho ancora bisogno di aiuto

Oltre i valori del datasheet non so cosa consigliarti.
Dovrai fare delle prove con diversi parametri e vedere come reagisce lo stepper.

Grazie mi sei stato di grande aiuto
Qualcuno sa darmi una mano sulla gestione dell'accelerazione?
Grazie ancora

Dio ci fulmini...
int motorSpeed = 2000;
int motorAccel = 87500;
Int... 87500...
Int....

É un float !!!!!!!!!

É da affinare ma va meglio

Buongiorno
Risolti i bachi più grossi ho ancora il seguente problema.
diminuendo l'accelerazione non ho variazioni visibili fino a 40000
ma a questo punto il motore inizia a perdere step, oppure vibra senza muoversi.
e comunque l'accelerazione è ancora troppo elevata rispetto a quello che mi serve.
Grazie per i consigli che arriveranno.