hola , ultimamente he estado haciendo paranoias con steppers bipolares.Para hacer el montaje se necesita la placa , un L293D y un motor paso a paso bipolar (yo este lo saqué de una impresora Epson C64).
Me he currado una serie de funciones para hacernos la vida mas fácil.
¿como sé que mi motor paso a paso es bipolar?.
Los motores estos tienen una pareja de electroimanes y 4 salidas.Haces que corra una corriente entre un par de salidas notas que el motor se 'bloquea' si haces lo mismo con el otro par se bloquea tambien pero antes ha girado un poquitin
Montaje
¡Huy que lio de codigo! hay al final de post
a lo que hay que estar al loro es
declarar un motor
int stepper1[5]={7,6,3,2};//pins donde se enchufa el L293 ,el array es de 5 (importante)
hacerlo mover
una vez que lo hemos declarado podemos que de un paso haciendo:
step(stepper1,LOW);//el sentido del giro se define en el segundo parametro LOW o HIGH
ademas hay 2 funciones mas:
lock(stepper1);//hace que el motor se bloquee
unlock(stepper1);//el motor se queda en punto muerto
//30-10-05 Martín Nadal elreycabra@yahoo.com
int stepper1[5]={7,6,3,2,0};//control pins m1,m2,m3,m4 y estado,se deja
int x;
//bloquea el motor, lo para haciendo fuerza
void lock(int *stepper)
{
digitalWrite(stepper[0],LOW);
digitalWrite(stepper[1],HIGH);
digitalWrite(stepper[2],LOW);
digitalWrite(stepper[3],HIGH);
}
//deja el motor suelto
void unlock(int *stepper)
{
digitalWrite(stepper[0],LOW);
digitalWrite(stepper[1],LOW);
digitalWrite(stepper[2],LOW);
digitalWrite(stepper[3],LOW);
}
//da un paso , sentido va HIGH o LOW segun el sentido del giro
void step(int *stepper,int sentido)
{
if(sentido==HIGH)
{
stepper[4]=(stepper[4]+1)%4;
}else{
stepper[4]=(stepper[4]+3)%4;
}
switch(stepper[4])
{
case 0:
digitalWrite(stepper[0],LOW);
digitalWrite(stepper[1],LOW);
digitalWrite(stepper[2],LOW);
digitalWrite(stepper[3],HIGH);
break;
case 1:
digitalWrite(stepper[0],HIGH);
digitalWrite(stepper[1],LOW);
digitalWrite(stepper[2],LOW);
digitalWrite(stepper[3],LOW);
break;
case 2:
digitalWrite(stepper[0],LOW);
digitalWrite(stepper[1],LOW);
digitalWrite(stepper[2],HIGH);
digitalWrite(stepper[3],LOW);
break;
case 3:
digitalWrite(stepper[0],LOW);
digitalWrite(stepper[1],HIGH);
digitalWrite(stepper[2],LOW);
digitalWrite(stepper[3],LOW);
break;
}
}
void setup()
{
pinMode(stepper1[0],OUTPUT);
pinMode(stepper1[1],OUTPUT);
pinMode(stepper1[2],OUTPUT);
pinMode(stepper1[3],OUTPUT);
}
void loop()
{
//gira en una dirección
for(x=0;x<1000;x++)
{
step(stepper1,HIGH);
delay(100);
}
//gira en la otra dirección
for(x=0;x<1000;x++)
{
step(stepper1,LOW);
delay(100);
}
}
un saludote