Añadir nuevo comentario

Motor Paso a Paso

Español

Los motores paso a paso son motores muy útiles para poder controlar la posición en la que se encuentran y, a diferencia de los servomotores, permiten giro infinito hacia ambos lados. Estos motores realizan una serie de pasos para completar una vuelta completa, en el que hemos utilizado realiza 200 pasos, es decir, podemos controlar la posición del motor cada 1,8º. Existen motores con una resolución mayor pero con esta ya es suficiente para la mayoría de aplicaciones. Para realizar el control de estos motores se puede hacer directamente actuando sobre ellos con algún circuito integrado como el L293D, L298N, ULN2803, etc., pero en este caso hemos optado por utilizar una placa de Sparkfun denominada Easy Driver Stepper Motor. Esta placa nos permite conectarla fácilmente a nuestra placa Arduino y utilizar sólo unos pocos pines para conectarla.

Los elementos necesarios son la placa de control de motores Easy Driver Stepper Motor y el motor paso a paso de 12 voltios y cuatro cables.

 



Pero para tener un control más preciso este Driver utiliza un sistema llamado Micropasos, que lo que hace es realizar pequeños impulsos para realizar un paso completo. En concreto realiza 8 micropasos para realizar un paso completo por lo cual necesita 8x200=1600 micropasos para realizar una vuelta completa. En los motores paso a paso cuanto más despacio van más fuerza tienen (ver el artículo sobre el Plotter con Picaxe, donde se tuvieron que utilizar micropasos para que pudiera funcionar bien).

 

Para conectar todo el sistema nos hace falta una placa Arduino UNO, una fuente de alimentación de 12 voltios, un motor paso a paso y la tarjeta de control del motor. Conectamos la alimentación de 12V y el motor a la placa Easy Driver, tal y como se muestra en la imagen, y dicha placa se controla desde la placa Arduino mediante los pines 10 (DIR) y 11 (Step). Es muy importante conectar el GND (masa) para que dichas placas tengan la misma referencia de tensión.

A continuación está detallado el código de programa modificado a partir del existente en la página de Bildr (Big Easy Steeper Motor Driver)

 

//La velocidad de los pasos varia Valor_alto y Valor bajo, siendo estos valores aproximados de:
// Velocidad rapida: Valor_Alto=65. Si ponemos un valor inferior a 70 no funciona.
// Velocidad lenta: Valor_Bajo=5000 No hay límite, solo paciencia!. Con 5000 ya va muy lento.


#define DIR 10
#define STEP 11

unsigned int t=1500;


void setup()
{
  //Definimos los pines 10 y 11 como salidas.
  pinMode(DIR, OUTPUT);
  pinMode(STEP, OUTPUT);
  //Configuramos la transmision serie a 9600bps.
  Serial.begin(9600);
  Serial.println("****** Control de Motores Paso a Paso ******");
}

void loop()
{
  //Todos los giros son de 1 vuelta completa.
  Serial.println("Grados: Rotacion izquierda velocidad 70");
  rotacionGrados(360, 65); // Grados a rotar a izquierda.
  delay(t);
  Serial.println("Grados: Rotacion derecha velocidad 700");
  rotacionGrados(-360, 700);  // Grados a rotar a izquierda.
  delay(t);
  Serial.println("Pasos: Rotacion izquierda velocidad 1400");
  rotacion(1600, 1400);
  delay(t);
  Serial.println("Pasos: Rotacion derecha velocidad 3800");
  rotacion(-1600, 3800); //reverse
  delay(t);
}

void rotacion(int pasos, unsigned int velocidad)
{
  //Rota un numero especifica de micropasos (8 por paso), si es negativo el giro es al contrario.
  //La velocidad esta comprendida entre Valor_alto -> Valor_bajo (de lento y fuerte a rapido y debil).
  int dir = (pasos > 0)? HIGH:LOW;
  pasos = abs(pasos);

  digitalWrite(DIR,dir);

  for(int i=0; i < pasos; i++)
  {
    digitalWrite(STEP, HIGH);
    delayMicroseconds(velocidad);
    digitalWrite(STEP, LOW);
    delayMicroseconds(velocidad);
  }
}

void rotacionGrados(float grados, unsigned int velocidad)
{
  //Rota un numero especifica de grados, si es negativo el giro es al contrario.
  //La velocidad esta comprendida entre Valor_alto -> Valor_bajo (de lento y fuerte a rapido y debil)
  int dir = (grados > 0)? HIGH:LOW;
  digitalWrite(DIR,dir);
  int pasos = abs(grados)*(1/0.225);

  for(int i=0; i < pasos; i++)
  {
    digitalWrite(STEP, HIGH);
    delayMicroseconds(velocidad);
    digitalWrite(STEP, LOW);
    delayMicroseconds(velocidad);
  }
}

 

Aquí tenéis toda la información sobre el Driver y el motor utilizado, así como el programa de ejemplo. Además os ponemos los enlaces de interés:

 


Enlace al programa paso a paso : descarga

 

Plain text

  • No se permiten etiquetas HTML.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Saltos automáticos de líneas y de párrafos.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.