Strano comportamento Nema17 con driver a4988

Buonasera a tutti. Ho appena finito di montare i miei nuovi motori passo passo su una specie di pantografo interamente progettato da me. Li ho sostituiti ai 28byj-48 che avevo usato per una prima versione della macchina e che semplicemente facevano ridere. Ho appena finito di mettere a punto la parte elettronica. Sto usando 3 driver a4988, due per l’asse Y (per il sistema di scorrimento che ho adottato è necessario avere una doppia trazione) e uno per l’asse X. Sembra funzionare tutto, almeno allo stadio di base, tuttavia riscontro un funzionamento anomalo.

Il codice che sto scrivendo per ora prevede delle semplici funzioni per muovere l’asse X, l’asse Y e una funzione che riporta entrambe le assi alla posizione iniziale.
Giusto per provare il funzionamento dei motori, e per capire anche in quanti passi viene suddivisa la mia area operativa (circa 20x20 cm), ho semplicemente fatto si che un numero passato tramite seriale venisse preso dalla funzione che muove questo o quell’asse (numero positivo in una direzione e negativo in quella opposta). Tuttavia ho riscontrato questo problema: se il numero di passi che chiedo allo stepper di compiere è maggiore di circa -40.000, la rotazione non avviene nel verso previsto, con ovvie seccature, nel senso che l’asse va a sbattere contro il fine corsa.

Per il tutto sto usando un Pro Micro ATMega32U4.

In seguito vi posto il mio codice, non capisco cosa ci possa essere di sbagliato, forse sbaglio qualcosa a livello di hardware.

#include <Stepper.h>
#include <Servo.h>

const int xHomePin = 9;
const int yHomePin = 8;
const int testinaPin = 10;

const int maxSteps = 68000;

Servo testina;
int testinaDeg = 0;
long input;
int xHome, yHome;

const int stepsPerRevolution = 3200;
int speed = 2000;

Stepper X(stepsPerRevolution, 2, 3);
Stepper Y1(stepsPerRevolution, 4, 5);
Stepper Y2(stepsPerRevolution, 6, 7);

void setup(){
 
 Serial.begin(9600);
 
 pinMode(xHomePin, INPUT);
 pinMode(yHomePin, INPUT);
 
 testina.attach(testinaPin);
  
   Y1.setSpeed(speed);
 Y2.setSpeed(speed);
 X.setSpeed(speed);
 
 autoHome();
}

void loop(){
  
 if(Serial.available()>0){
 input = Serial.parseFloat();
 moveX(input);
 }
}



void autoHome(){
 
 testina.write(0);
 
 while(digitalRead(yHomePin) == 0){
 moveY(-1);
 }
 
 while(digitalRead(xHomePin) == 0){
 moveX(-1);
 }
}

void moveX(long nSteps){
 X.step(nSteps);
}

void moveY(long nSteps){
 float i;
 
 for(i=0;i<abs(nSteps);i++){
 Y1.step(1*(nSteps/abs(nSteps)));
 Y2.step(1*(nSteps/abs(nSteps)));
 }
}

Giusto perché lo sappiate (non so se c’entra), i connettori in dotazione ai motori presentano dei cavi che si incrociano in un certo punto, tutti allo stesso modo, come in foto. La cosa non mi ha allarmato perché comunque i motori sembrano funzionare normalmente, a parte questo strano comportamento che non so se deriva da questa irregolarità nel cavi o dal codice.

Grazie in anticipo per l’aiuto!

Piccolo edit.
Ho provato a collegare i pin del motore al driver bypassando l’incrocio dei cavi ma il motore non funziona, fa solo scatti senza muoversi e il driver si surriscalda. Quindi non credo siano i connettori il problema.

Risolto! Non sapevo che il massimo valore raggiungibile da una variabile int su arduino fosse di 32.767. Per cui eccedendo tale valore il numero diventava automaticamente negativo, facendo andare il motore nella direzione inversa!