Arduino Motor Shield para motor paso a paso de 12v

Estoy haciendo un rig básico para fotografía timelapse usando arduino. Es un sistema de panoramización para una cámara DSLR, así que opté por el protector de motor de Arduino con el chip L298 y un motor paso a paso de 12 V y 1,7 A. Antes de que pudiera alimentar el protector del motor externamente, noté que el motor funcionaba bien con el USB de 5V suministrado a la placa Arduino. Pudo mover completamente la DSLR a diferentes velocidades y mantenerla en su lugar.

El problema surgió cuando se le pidió que hiciera un solo paso a la vez (supongo que configurar cualquier velocidad aquí servirá). Noté que no todos los pasos son iguales. A veces, habría 2 pasos pequeños seguidos de un paso más grande o incluso al revés. Según tengo entendido, los motores paso a paso tienen un tamaño de paso fijo, y lo harán por completo (siempre que tenga suficiente potencia) o fallarán, ¿es correcto? Pensé que superaría por completo la inercia y no se quedaría atascado a la mitad, y luego funcionaría bien otras veces.

Entonces, ¿el motor / la potencia de 5v o mi código tiene la culpa aquí? Proporcionar energía externa me obligaría a cortar un rastro en el escudo, así que lo esperaré hasta que esté seguro. (¡también sería bueno tener una sola fuente de alimentación!)

Aquí está el código genérico que estoy usando:

#include <Stepper.h>

 const int stepsPerRevolution = 1024;
 Stepper myStepper(stepsPerRevolution, 12,13);     

// give the motor control pins names:
 const int pwmA = 3;
 const int pwmB = 11;
 const int brakeA = 9;
 const int brakeB = 8;
 const int dirA = 12;
 const int dirB = 13;

 int times = 120;//420
void setup() {
 Serial.begin(9600);
 // set the PWM and brake pins so that the direction pins  // can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);

// initialize the serial port:
Serial.begin(9600);
// set the motor speed (for multiple steps only):
myStepper.setSpeed(2);
}

void loop() {
  while(times>0){
    myStepper.step(1);
    Serial.println(times);
    times--;
    delay(12000);
   }

  }

Respuestas (2)

Si el motor está clasificado para 12 V y 1,7 A, suminístrelo con esto. El USB puede suministrar 5 V a un máximo de 500 mA, por lo que en lugar de un máximo de 12 V * 1,7 A = 20,4 W, tiene un máximo de 5 V * 500 mA = 2,5 W. Esa es una gran diferencia.
Supongo que debido a la inercia de la DSLR y la débil transmisión de la bobina paso a paso, se desliza ocasionalmente (o algo similar).
Además, de una pregunta anterior, recuerdo que el protector del motor Arduino no es el mejor diseño: el L298 cae uno o dos voltios. a través de los transistores de accionamiento de fuente y sumidero, por lo que terminará con aún menos potencia disponible, tal vez alrededor de un vatio (consulte el voltaje de saturación de fuente/sumidero en la tabla de especificaciones de la hoja de datos)

El código básico se ve bien, pero es imposible decirlo con certeza, ya que toda la funcionalidad real está escondida en la biblioteca paso a paso. Asumiré que esto probablemente esté bien si se trata de una biblioteca de uso común que existe desde hace algún tiempo.

Entonces, sí, alimenta el motor con 12V y al menos 1.7A. Si tiene que cortar el rastro, haga esto, es fácil volver a soldarlo más tarde si es necesario (sin embargo, primero asegúrese de que no haya un puente en la placa del motor, tengo la sensación de que recuerdo un puente con el propósito de un externo suministro en uno de estos escudos)

¿Has probado a variar los valores de PWM? Además, recomiendo el Rugged Motor Shield . Estoy usando un motor paso a paso para girar un eje para probar los sensores de posición del acelerador y noté un comportamiento como el suyo cuando estaba en los extremos del recorrido del TPS... o cuando el PWM es demasiado bajo y el paso a paso no puede dar ese paso, rebota. un poco.

El Rugged Motor Shield permite el suministro externo al escudo, por lo que el Arduino y el escudo pueden alimentarse por separado. En todo caso, ir a ese sitio podría ayudarlo a comprender mejor cómo jugar con steppers.

Para mi situación, descubrí que para que el Arduino mida el voltaje del sensor en A2 (o cualquier pin), el eje de entrada del TPS no podía estar en movimiento, por lo que mi boceto mueve el eje un paso, toma la medida y repite. Para mi situación, mi paso a paso tiene pasos de 7,5° y un engranaje de 18 dientes. Utilicé una impresora 3D para hacer un engranaje de 54 dientes, por lo que obtuve una reducción de 3:1, lo que hace que mi motor paso a paso tenga más potencia y precisión.

No debe usar PWM de circuito abierto con un motor paso a paso, debe usar un regulador de corriente de corte que ajusta el ciclo de trabajo de PWM para mantener la corriente lo más cerca posible del valor elegido.
@ChrisStratton Estoy usando el boceto de roughcircuits.com. No estoy seguro de cómo se implementa. :P ¿Tienes algún ejemplo?