jueves, 25 de febrero de 2016

Motor a pasos Arduino



Introducción:
Los motores de dc tradicionales, presentan un funcionamiento muy sencillo, ya que al energirzarlos comienzan a girar y al cambiar la polaridad de sus 2 terminales, se cambia el sentido de giro. Sin embargo, para controlar la posición, el numero de giros y la velocidad no es posible con este tipo de motores. Una alternativa para el control de motores eléctricos, son los motores a pasos, una alternativa para el control de velocidad, posición y giro.

Paso 1:
En la presente práctica, se controlará un motor a pasos empleando los siguientes componentes:

-       Tarjeta Arduino Uno
-       Motor a pasos bipolar
-       Drive para motores L293
-       Fuente de alimentación externa (4 baterías AA)

El siguiente diagrama muestra la conexión de la tarjeta Arduino con el drive L293. Para el motor a pasos, se colocaron 4 LEDs, éstos 4 componentes corresponden a las 4 terminales del motor a pasos bipolar.

Diagrama de conexión de la tarjeta Arduino y el motor a pasos
Paso 2:
La siguiente tabla muestra la secuencia de las 4 terminales del Arduino al drive del motor. Esta secuencia permite el giro del motor antihorario.


Terminal

A
B
C
D
Paso 1
1
0
1
0
Paso 2
1
0
0
1
Paso 3
0
1
0
1
Paso 4
0
1
1
0

El código de colores para el motor bipolar es:

Cable azul => Terminal A
Cable rojo => Terminal B
Cable blanco => Terminal C
Cable naranja => Terminal D

Los pines para la activación de las señales son del 10 al 13. A continuación se muestra el programa, el cual activa diferentes velocidades para el giro del motor. A continuación el programa.

/****** Motor a Pasos ***** //
 * Escrito: AMS
 * 
 */

int Informacion_Serial;
int Terminal_A=10;
int Terminal_B=11;
int Terminal_C=12;
int Terminal_D=13;

void setup() {
  pinMode(Terminal_A, OUTPUT);
  pinMode(Terminal_B, OUTPUT);
  pinMode(Terminal_C, OUTPUT);
  pinMode(Terminal_D, OUTPUT);
  
  Serial.begin(9600);
  Serial.print("0==> Parar, 1==> Lento, 2==> Medio");
  Serial.println("3==> Rapido, 4==> Muy rapido");
}                                     // 

void loop() {

   while(true) 
    {
    if(Serial.available()>0) {
      Informacion_Serial=Serial.read();
    
    if (Informacion_Serial=='0')
      {
          Serial.println("Paro"); 
          digitalWrite(Terminal_A,0);
          digitalWrite(Terminal_B,0);
          digitalWrite(Terminal_C,0);
          digitalWrite(Terminal_D,0); 
      }
      else if (Informacion_Serial=='1')
        {
              Serial.println("Lento"); 
          for(int vuelta = 0; vuelta <12; vuelta++)
            {
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(500);
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(500);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(500);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(500); 
            }
          }
      else if (Informacion_Serial=='2')
        {
              Serial.println("Medio"); 
          for(int vuelta = 0; vuelta <12; vuelta++)
            {
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(100);
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(100);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(100);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(100);
            }  
      }
      else if (Informacion_Serial=='3')
        {
              Serial.println("Rapido");
          for(int vuelta = 0; vuelta <12; vuelta++)
            {
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(20);
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(20);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(20);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(20);
            }
          }   
      else if (Informacion_Serial=='4')
        {
              Serial.println("Muy Rapido");
          for(int vuelta = 0; vuelta <12; vuelta++)
            {
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(8);
              digitalWrite(Terminal_A,1);
              digitalWrite(Terminal_B,0);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(8);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,0);
              digitalWrite(Terminal_D,1);
                delay(8);
              digitalWrite(Terminal_A,0);
              digitalWrite(Terminal_B,1);
              digitalWrite(Terminal_C,1);
              digitalWrite(Terminal_D,0);
                delay(8);
            }
          }                          
        }
    }
}

Paso 3:
La siguiente imagen nuestra el circuito terminado. La transmisión de datos se realiza a través del puerto serial para dar los comandos al motor.

Motor a pasos bipolar con tarjeta Arduino UNO
Paso 4:
Ahora se realiza la prueba del circuito en el video. La siguiente imagen muestra la comunicación a través del puerto serial.

Puerto serial para la comunicación entre el Arduino y la PC






No hay comentarios.:

Publicar un comentario