marzo 23, 2015

Prueba de motores

Written by

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.

Ambos motores conectados

Ambos motores conectados

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:

Category : MINI TRAZADOR

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Proudly powered by WordPress and Sweet Tech Theme