Written by admin
Tras conectar los dos motores paso a paso con los controladores, vamos a probar un pequeño programa para que mueva los dos motores simultáneamente.
Hemos probado varios programas de muestra en Internet, pero losque hemos visto usaban la librería Stepper y no nos permitían usar más de un motor simultáneamente. Al final hemos visto un programa que mueve los motores paso por paso. Lo modificamos para usar dos y nos queda:
// Programa de prueba de dos motores paso a paso #define Aplus 4 #define Aminus 5 #define Bplus 6 #define Bminus 7 #define Cplus 8 #define Cminus 9 #define Dplus 10 #define Dminus 11 byte phase1 = 0 ; byte phase2 = 0 ; void setup () { pinMode(Aplus, OUTPUT); pinMode(Aminus, OUTPUT); pinMode(Bminus, OUTPUT); pinMode(Bplus, OUTPUT); pinMode(Cplus, OUTPUT); pinMode(Cminus, OUTPUT); pinMode(Dminus, OUTPUT); pinMode(Dplus, OUTPUT); } void loop () { int ii; for (ii=0;ii<50;ii++) { step1(true); step2(true); delay(10); } for (ii=0;ii<50;ii++) { step1(false); step2(false); delay(10); } } void update_motor1 () { for (byte i = Aplus ; i <= Bminus ; i++) digitalWrite (i, LOW) ; switch (phase1) { case 0: digitalWrite (Aplus, HIGH) ; break ; case 1: digitalWrite (Bplus, HIGH) ; break ; case 2: digitalWrite (Aminus, HIGH) ; break ; case 3: digitalWrite (Bminus, HIGH) ; break ; } } void update_motor2 () { for (byte i = Cplus ; i <= Dminus ; i++) digitalWrite (i, LOW) ; switch (phase2) { case 0: digitalWrite (Cplus, HIGH) ; break ; case 1: digitalWrite (Dplus, HIGH) ; break ; case 2: digitalWrite (Cminus, HIGH) ; break ; case 3: digitalWrite (Dminus, HIGH) ; break ; } } void step1 (boolean dir) { if (dir) phase1 += 1 ; else phase1 -= 1 ; phase1 &= 3 ; update_motor1 () ; } void step2 (boolean dir) { if (dir) phase2 += 1 ; else phase2 -= 1 ; phase2 &= 3 ; update_motor2 () ; }
La muestra de movimiento se puede ver en el vídeo:
Deja una respuesta