ARDUINO: Control del motor a pasos bipolar - L293D



En esta práctica se enseña el uso de un motor a pasos bipolar en modo tradicional ya que Arduino ya cuenta con una librería para controlar estos motores, el uso de la librería se le deja de investigación al lector.

El motor a pasos que usted debe de usar no debe de superar los 800mA y el voltaje máximo debe de ser de 36 voltios, pues es lo que soporta el L293D. Se recomienda el motor Nema 17 de 2.4Kg/cm de 200 pasos, ya que de acuerdo a su hoja de datos consume 0.33A, se recomienda que el lector lea la hoja de datos del motor.

 
 

Materiales:

  • 1x Arduino

  • 1x Motor a pasos bipolar de 12V

  • Fuente de 12V

  • 1x L293D

  • 1x Protoboard

  • Jumpers

Esquema de montaje

Clic en la imagen para ampliar.

Código

En el código se definen los pines a usar que serán los que manden la señal al L293D y este a su vez a las bobinas del motor bipolar. En el setup se inicializan los pines, ahora nos saltaremos fuera del loop en donde hemos creado dos funciones del tipo void; una llamada giroHorario y otra giroAntiHorario, esta función recibe un parámetro del tipo entero que será la pausa entre cada transición de la tabla de verdad, esto se muestra al principio de este capítulo.

La segunda función es similar a la primera, solo cambia el sentido de la tabla de verdad, que va de abajo hacia arriba para que gire en sentido contrario.

Ya en el loop, vemos que tenemos la sentencia de control for que va desde 0 a menor de 51, ahora se preguntarán -¿por qué esto?, como el motor es de 200 pasos y además usamos la tabla de verdad FULL STEP vemos que en esta tabla tiene 4 transiciones, entonces para que dé un giro completo de 360°, como el motor es de 1.8° de giro, es necesario repetir la secuencia de los pasos 50 veces que multiplicado por 4 pulsos tendremos los 200 pasos, luego, si cambiamos el for en la condición de menor a 51 por menor a 26 girará 180°.

Recuerden que el for se inicia en 0 y para que sean las 50 veces tenemos que poner menor a 51, y es así como controlamos un motor a pasos en forma tradicional, se le recomienda al lector que juegue con el código para entenderlo mejor.

//Definimos los pines a usar
#define BobinaUA 2
#define BobinaUB 3
#define BobinaDC 4
#define BobinaDD 5

void setup() {
  //Inicalizamos los pines
  pinMode(BobinaUA, OUTPUT);
  pinMode(BobinaUB, OUTPUT);
  pinMode(BobinaDC, OUTPUT);
  pinMode(BobinaDD, OUTPUT);
}

void loop() {
  for(int i = 0; i < 51; i++){
    giroHorario(5);
  }

  delay(1000);

  for(int i = 0; i < 51; i++){
    giroAntiHorario(5);
  }
}

//Metodos para que gire el motor

void giroHorario(int tiempo){
  digitalWrite(BobinaUA, HIGH);
  digitalWrite(BobinaUB, LOW);
  digitalWrite(BobinaDC, HIGH);
  digitalWrite(BobinaDD, LOW);
  delay(tiempo);
  digitalWrite(BobinaUA, LOW);
  digitalWrite(BobinaUB, HIGH);
  digitalWrite(BobinaDC, HIGH);
  digitalWrite(BobinaDD, LOW);
  delay(tiempo);
  digitalWrite(BobinaUA, LOW);
  digitalWrite(BobinaUB, HIGH);
  digitalWrite(BobinaDC, LOW);
  digitalWrite(BobinaDD, HIGH);
  delay(tiempo);  
  digitalWrite(BobinaUA, HIGH);
  digitalWrite(BobinaUB, LOW);
  digitalWrite(BobinaDC, LOW);
  digitalWrite(BobinaDD, HIGH);
  delay(tiempo);  
}

void giroAntiHorario(int tiempo){
  digitalWrite(BobinaUA, HIGH);
  digitalWrite(BobinaUB, LOW);
  digitalWrite(BobinaDC, LOW);
  digitalWrite(BobinaDD, HIGH);
  delay(tiempo);
  digitalWrite(BobinaUA, LOW);
  digitalWrite(BobinaUB, HIGH);
  digitalWrite(BobinaDC, LOW);
  digitalWrite(BobinaDD, HIGH);
  delay(tiempo);
  digitalWrite(BobinaUA, LOW);
  digitalWrite(BobinaUB, HIGH);
  digitalWrite(BobinaDC, HIGH);
  digitalWrite(BobinaDD, LOW);
  delay(tiempo);  
  digitalWrite(BobinaUA, HIGH);
  digitalWrite(BobinaUB, LOW);
  digitalWrite(BobinaDC, HIGH);
  digitalWrite(BobinaDD, LOW);
  delay(tiempo);  
}