//PRÁCTICA #46
/*
Bipolar stepper motor
Programa que realiza un giro completo del motor 28BYJ-48 en conjunto con el controlador
basado en ULN2003, detiene 5 segundos y luego comienza nuevamente. La secuencia es la de
paso completo simple (wave drive) energizando de a una bobina por vez. Alimentar Arduino
con fuente de alimentacion externa de 6 a 12 Vdc.
//Secuencia a un paso (wave drive)
*/
int IN1 = 11; // pin digital 8 de Arduino a IN1 de modulo controlador
int IN2 = 10; // pin digital 9 de Arduino a IN2 de modulo controlador
int IN3 = 9; // pin digital 10 de Arduino a IN3 de modulo controlador
int IN4 = 8; // pin digital 11 de Arduino a IN4 de modulo controlador
int demora = 20; // demora entre pasos, no debe ser menor a 10 ms.
void setup() {
pinMode(IN1, OUTPUT); // todos los pines como salida
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}
void loop() {
//El for repite los 4 pasos 512 veces
for (int i = 0; i < 512; i++) // 512*4 = 2048 pasos, t_vuelta=20*2048=40960ms=40s
{
digitalWrite(IN1, HIGH); // paso 1
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);
digitalWrite(IN1, LOW); // paso 2
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(demora);
digitalWrite(IN1, LOW); // paso 3
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
delay(demora);
digitalWrite(IN1, LOW); // paso 4
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(demora);
}
digitalWrite(IN1, LOW); // detiene por 5 seg.
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
delay(5000);
}
/*
PASO A B C D
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1
UN CICLO REQUIERE DE 4 PASOS
UN GIRO COMPLETO DE ROTOR REQUIERE DE 8 CICLOS
UN GIRO COMPLETO DEL EJE EXTERIOR REQUIERE DE 6A VUELTAS (REVOLUCIONES) DEL ROTOR
4 * 8 * 64 = 2048 PASOS PARA UNA REVOLUCIÓN
*/