Hola,
Estoy intentando controlar 3 motores paso a paso 28BYJ48, cada uno con su correspondiente placa driver ULN2003, para que funcionen a la vez.
Aunque he leído y releído mucho sobre estos motores hay cosas que no me quedan muy claras, ya que hay ejemplos que no he logrado hacer funcionar.
Las pruebas las estoy haciendo con sólo 2 motores (por comodidad), un Arduino UNO y una alimentación externa de 5V-1A para que no haya problemas de alimentación.
En primer lugar, usando la librería "stepper" los he logrado hacer funcionar en secuencia pero no a la vez, aunque he leído por ahí que se puede hacer, pero no he logrado hacerlo. Y sólo he logrado hacerlos funcionar en el sentido de las agujas del reloj pero nunca al contrario (vibra pero no gira).
Al final, he logrado hacerlos funcionar los 2 a la vez con este código modificado de uno que movía un solo motor:
// Definimos los pines donde tenemos conectadas las bobinas
#define AIN1 2
#define AIN2 3
#define AIN3 4
#define AIN4 5
#define BIN1 8
#define BIN2 9
#define BIN3 10
#define BIN4 11
// Secuencia de pasos
int paso [8][4] =
{
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
};
void setup()
{
// Todos los pines en modo salida
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(AIN3, OUTPUT);
pinMode(AIN4, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(BIN2, OUTPUT);
pinMode(BIN3, OUTPUT);
pinMode(BIN4, OUTPUT);
}
void loop()
{
for (int i = 0; i < 8; i++)
{
digitalWrite(AIN1, paso[i][0]);
digitalWrite(BIN1, paso[i][0]);
digitalWrite(AIN2, paso[i][1]);
digitalWrite(BIN2, paso[i][1]);
digitalWrite(AIN3, paso[i][2]);
digitalWrite(BIN3, paso[i][2]);
digitalWrite(AIN4, paso[i][3]);
digitalWrite(BIN4, paso[i][3]);
delay(1);
}
}
Con esto giran ambos a la vez, pero a una velocidad lenta (1 vuelta cada 4 segundos aproximadamente). No he logrado que giren si meto la matriz para las otras combinaciones de giro, vibran pero no giran los ejes.
// Secuencia de pasos
int paso [4][4] = //Recomendada por el fabricante (par máximo)
{
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1},
};
o
// Secuencia de pasos
int paso [4][4] = //Modo "ola", par bajo y máxima velocidad
{
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1},
};
Tambien modifico el bucle for con 4 en vez de 8 pasos para las matrices de "ola" y "par máximo"
Todo probado con varios motores y diversas placas driver (dispongo de 5) por lo que descartado que sean los motores o las placas.
Mis dudas son:
¿se pueden hacer funcionar varios motores a la vez con la librería stepper y como sería hacerlo a la máxima velocidad?
¿por qué no me funcionan los motores en modo "ola" o en la configuración del fabricante?
Realmente no necesito mucho par, necesito un poco más de velocidad. Leí por alguna página que alimentando a 12V se puede hacer que gire un poco más rápido, no decía como, y aunque lo dudo que se pueda, dejo la duda por si alguien me la puede responder.
Muchas gracias de antemano.