Finalmente descarte los motores 28byj-48 ya que no tienen la suficiente fuerza para este proyecto. Ahora estoy utuizando unos motores NEMA 17 de 1,2A, pero despues de montar todo me ha surgido un problema que no se resolver, llevo toda la tarde probando distintas velocidades y configuraciones de micropasos pero no consigo que los motores giren con movimientos fluidos.
Pongo estos dos gif animados para que se entienda lo que digo:
Como se puede apreciar, los movimientos son como a golpes tanto en el eje Y como en el X.
Estoy utlizando dos de estos modulos con drivers DRV8825:

He regulado el voltaje de referencia en 0.6 que es lo que necesito para motores de 1,2A y lo he configurado para obtener 32 micropasos poniendo en "ON" MS1, MS2 Y MS3.
Tambien utilizo dos de estos modulos para convertir de 12 a 5 voltios para la alimentacion de Arduino y la parte logica de los drivers:

Este es el codigo completo que estoy utilizando:
#include <PS4BT.h>
#include <usbhub.h>
#include <AccelStepper.h>
#include <Wire.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
USB Usb;
BTD Btd(&Usb);
PS4BT PS4(&Btd, PAIR);
#define StepVertDir 2
#define StepVertPul 3
#define StepHorDir 4
#define StepHorPul 5
AccelStepper StepVert(AccelStepper::DRIVER, StepVertPul, StepVertDir);
AccelStepper StepHor(AccelStepper::DRIVER, StepHorPul, StepHorDir);
#define MaxSpeedGlobal 300
float ActualSpeed = 70;
#define MinSpeed 0
int MovVert, MovHor;
float VertSpeed, HorSpeed;
float VertAuto, HorAuto;
bool ModoRapido = false;
bool ModoLuna = false;
void setup() {
Serial.begin(115200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
if (Usb.Init() == -1) {
//Serial.print(F("\r\nOSC did not start"));
while (1); // Halt
}
//Serial.print(F("Conectado a Arduino!"));
StepVert.setMaxSpeed(MaxSpeedGlobal);
StepVert.setAcceleration(10.0);
StepVert.setMinPulseWidth(10.0);
StepVert.setSpeed(MinSpeed); // lo pongo a 0
StepHor.setMaxSpeed(MaxSpeedGlobal);
StepHor.setAcceleration(10.0);
StepHor.setMinPulseWidth(10.0);
StepHor.setSpeed(MinSpeed); // lo pongo a 0
}
void loop() {
Usb.Task();
if (PS4.connected()) {
//if (!autoMode) {
//Recibe los valores del jostick derecho (movimiento vertical)
MovVert = PS4.getAnalogHat(RightHatY);
VertSpeed = map(MovVert, 0, 255, ActualSpeed, -ActualSpeed);
if (ModoLuna) {
StepVert.setSpeed(VertAuto);
StepVert.runSpeed();
} else {
if (MovVert > 140 || MovVert < 110) {
StepVert.setSpeed(VertSpeed);
StepVert.runSpeed();
}
}
//Recibe los valores del jostick izquierdo (movimiento horizontal)
MovHor = PS4.getAnalogHat(LeftHatX);
HorSpeed = map(MovHor, 0, 255, -ActualSpeed, ActualSpeed);
if (ModoLuna) {
StepHor.setSpeed(HorAuto);
StepHor.runSpeed();
} else {
if (MovHor > 140 || MovHor < 110) {
StepHor.setSpeed(HorSpeed);
StepHor.runSpeed();
}
}
//}
}
//Funcion para activar o desactivar el modo Luna
if (PS4.getButtonClick(L1)) {
if (!ModoLuna) {
ModoLuna = true;
VertAuto = VertSpeed;
HorAuto = HorSpeed;
} else {
ModoLuna = false;
}
}
//Aumenta o disminuye la velocidad general
if (PS4.getButtonClick(R1)) {
if (!ModoRapido) {
ModoRapido = true;
ActualSpeed = float(300);
} else {
ActualSpeed = float(70);
ModoRapido = false;
}
}
//Serial.println(ActualSpeed);
//Desactiva la conexion con el mando
if (PS4.getButtonClick(PS)) {
PS4.disconnect();
}
}
Y este es el esquema, espero que se entienda bien, no se hacerlo de otra forma (no pongo los cables de los motores ya que es obvio donde van y se liaria mucho el esquema):
La fuente de alimentecion es de 12v 100w, mas que suficiente para este proyecto. Y los rodamientos y alineaciones no son el problema, esta todo bien alineado ya que manualmente se mueven bien los ejes y esta bien equilibrado ya que puse una contrapesa. Y por supuesto los motores estan bien conectados, 1A y 1B a un bobinado y 2A y 2B al otro bobinado.. No se, llevo bastante tiempo trasteando con motores paso a paso, arduino y demas y nunca me habia pasado esto..
A ver si alguien sabe cual es el problema...
Un saludo!