Problemas intentando mover un motor NEMA 17 con el driver DRV8825 [SOLUCIONADO]

!Hola a todos!
Antes que nada, soy un estudiante de 2º de Bachillerato y estoy haciendo como proyecto un impresora 3D diseñada y construida por mi, controlada con Arduino. La construcción ya está acabada y solamente queda hacer que los motores giren.
Este hilo ya lo empecé en la parte inglesa del foro (enlace: http://forum.arduino.cc/index.php?topic=417931.0) y me supieron orientar en ciertas cosas pero el motor no acabó de girar.

Perdón por haber cortado el mensaje inicial, es que le he dado a postear sin quere.
El material que estoy usando es el siguiente:

Según la ficha técnica del motor, este puede llegar a soportar 2,5A aunque el driver máximo le pueda dar 2A. Sé que el motor no desarrollará todo el par motor posible pero con eso me basta.
El driver necesita una alimentación de entre 8,45 y 45V según la página de Pololu. Los pines SLEEP, RESET y ENABLE deben tener corriente si se quiere que el driver funcione, así que se la doy con el pin de 5V de Arduino. Luego el pin DIR define la dirección de giro del motor y cada vez que el pin STEP recibe una señal de corriente el motor da un paso. Los mines M0, M1 y M2 son parar hacer que el motor sea capaz de dar micropasos, pero para probar el funcionamiento no son necesarios.
La fuente de alimentación al ser de ordenador tiene el antiguo conector de 20 pines de los cuales algunos dan 12V y 16A, más que suficiente para alimentar el driver y el motor. Si no me equivoco, estas fuentes dan un voltage constante en sus salidas pero solo dan la intensidad de corriente necesaria para el elemento al que estén conectados.
La cosa es que cuando conecto todo tal y como se ve en el diagrama de conexión que adjunto, la fuente de alimentación comienza a funcionar porque el ventilador gira (además de que en el ordenador antiguo funcionaba), Arduino también funciona, el driver parece que también pero si tengo el motor cogido con la mano noto una vibración interna a pesar de que el eje no gira.
El código que estoy usando para probarlo todo es:

const unsigned int stepPin = 3; //Pin conectado al pin STEP del DRV8825
const unsigned int dirPin = 2; //Pin conectado al pin DIR del DRV8825
//Prototipos de funciones. Sé que no son necesarios pero tengo la manía de ponerlos
void setup(void);
void loop(void);
void stepStepper(int);

void setup() {
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}

void loop() {
  stepStepper(200); //Da 200 pasos 
  delay(1000); //Espera 1 segundo
  stepStepper(-200); //Da -200 pasos
  delay(1000); //Espera 1 segundo
}

void stepStepper(int numSteps) {
  if(numSteps != 0) { //Si el número de pasos es 0 no hace nada, para ahorrar tiempo
    if(numSteps > 0) //Si el número de pasos es mayor que 0, pone el pin DIR identificado con la variable dirPin en HIGH
      digitalWrite(dirPin, HIGH);
    else //Si el número de pasos es menor que 0, pone el pin DIR identificado con la variable dirPin en LOW
      digitalWrite(dirPin, LOW);
    for(int numStep = 0; numStep < abs(numSteps); numStep++) { //Bucle para 
      digitalWrite(stepPin, HIGH); //Pone el pin stepPin en HIGH
      delayMicroseconds(20); //Espera 20 microsegundos
      digitalWrite(stepPin, LOW); //Pone el pin dirPin en HIGH
      delayMicroseconds(20); //Espera 20 microsegundos
      delay(20); //Espera 20 milisegundos para hacer el siguiente paso
    }
  }
}

Yo creo que el problema viene de que la fuente de alimentación aunque siempre le de los 12V el driver no tiene suficiente resistencia interna y por ley de Ohm la fuente no le da suficiente corriente. Supongo que la solución podría estar en poner una resistencia delante del pin VMOT del driver pero no estoy seguro. ¿A alguien se le ocurre de dónde viene el problema o que solución se le podría dar al que yo he planteado?
Gracias de antemano

Diagrama circuito.pdf (41.1 KB)

LoSan, aunque leo que tienes 8 msgs te felicito por tu presentación.
Para ser alumno de 2do de Bachillerato es impecable como has presentado tu problema y como posteaste (algo que tengo que reclamar mas de lo que corresponde a los novatos). Felicitaciones!!!

Acabo de ver tu esquema en pdf. No tienes compartidas los GND de la fuente PC y del Arduino. Asi nunca va a funcionar nada. Las señales de control no llegan al controlador DRV8825.

Gracias surbyte, no me había dado cuenta de que la tierra de Arduino no estaba conectada a la de la fuente. Supongo que si la conecto debería funcionar, aunque tal y como lo hice el Arduino recibía la alimentación a través de su puerto USB desde un ordenador y el driver DRV8825 desde la fuente de alimentación. ¿Quizá deberían recibirla los dos del mismo aparato?

No importa como lo hagas. SIEMPRE los GND deben unirse.

Todo lo que es control debe estar unido entre Arduino y el driver correspondiente.
Para que el driver ENTIENDA la orden debe tener una referencia y eso pasa cuando GND esta compartido.

Perdona mi ignorancia en el tema, pero según lo que dices, ¿el diagrama de conexiones debería ser como el que adjunto?

Diagrama circuito.pdf (38.3 KB)

Intenta usar alguna captura de pantalla para poder ver directamente tus esquemas como imagen que se visualiza rápidamente y no tener que bajar cada archivo. Eso limita la cantidad de gente que te va a responder siempre.

Bien, el esquema esta bien.
Intenta que todos los GND vayan al mismo punto y no de cable en cable.
Es decir, elige un nodo común cercano a punto de mas corriente y de ahí surge todos los GNDs.

EsquemaGND.png

No sé qué estoy haciendo mal aún habiendo conectado todo como indica el diagrama, pero sigue sin funcionarme el motor. No es problema del Arduino porque he probado con LEDs y a través de los pines de control envía la señal correctamente, tampoco es problema de la protoboard porque la he comprobado ni de la fuente. Tampoco es del motor porque hace tiempo lo probé sin driver y daba un paso en sentido horario y seguidamente otro en antihorario porque no tenia el puente H que viene incorporado en el driver. Sabiendo esto, supongo que el problema será del driver. ¿Se os ocurre alguna forma de testearlo con LEDs por ejemplo?

De donde tomaste el código?

Lo rehice yo mismo a partir de uno que me recomendó el moderador de la parte inglesa del foro. El código está en el siguiente enlace: http://forum.arduino.cc/index.php?topic=277692.0
Voy a probar el que me recomendaron a ver si hay suerte.

Veamos esto.
Deja de probar códigos que no sabes si funcionan o no.
Prueba esto que si sabemos que funciona Librería stepper
Usa la librería provista por el IDE de Arduino. Mira sus ejemplos, y adapta uno a tu necesidad y tipo de motoro y controlador.

Estaba probando otro código distinto del de las librerías de Arduino porque tampoco me había funcionado.
El programa que he metido usando la librería Stepper es el siguiente:

#include <Stepper.h>

Stepper stepper(200, 8, 9); //Constructor

void setup(void);
void loop(void);

void setup(void) {
  stepper.setSpeed(30); //Establece velocidad a 30 rpm
}

void loop(void) {
  stepper.step(200); //Da 200 pasos en sentido horario
  delay(1000);
  stepper.step(-200); //Da 200 pasos en sentido antihorario
  delay(1000); 
}

Y con este código tampoco hay suerte. Supongo que los dos argumentos con valor 8 y 9 que recibe el constructor del objeto Stepper serán los pines de paso y de dirección respectivamente. He probado de cambiar de motor porque tengo dos modelos pero tampoco hace nada. También he probado a cambiar los dos pines, en caso de que el primero fuera el de dirección y el segundo el de pasos pero se queda igual.

Ya está solucionado.
El problema estaba en que no hay que conectar el 2º pin GND del driver (que está al lado del pin FAULT) a nada. Según lo que he visto únicamente sirve para ajustar la intensidad que va a las bobinas del motor midiéndola con un multímetro. En este video se explica como ajustar la corriente: Setting the Current Limit on Pololu Stepper Motor Driver Carriers - YouTube