marzo 22, 2020

VARIOS – Funcionamiento de motor PAP con driver en base

Written by

El motivo de escribir este pequeño mensaje es para mostrar cómo se usa una base para el driver Pololu A4988 o similar con Arduino o cualquier otro micro-controlador para hacer funcionar un motor paso a paso (PAP).

Las bases para estos driver las compramos en un vendedor de China y, como suele ser habitual, no vienen con ningún tipo de información. No están muy extendidas, por lo que tampoco hemos encontrado nada explicando su funcionamiento. Su uso no es muy complicado, pero hay que seguir unos pasos simples para conseguir que funcione.

Base para driver Pololu A4988

La base que hemos comprado es la que figura en la imagen. Viene serigrafiada con el nombre STEPPER Drivers Modvlay y tiene los siguientes elementos:

  • Dos hileras de conectores hembra para el driver A4988.
  • Conector Molex para un motor PAP de 4 hilos.
  • Ficha de conexiones para la alimentación externa.
  • Microinterruptor de 3 contactos para seleccionar los micropasos.
  • Conector de pines macho de 3 terminales tipo servo, para el control del driver.
  • LED informativo.
Base para el controlador de motor PAP

Vienen además las patillas serigrafiadas con su significado, más o menos.

Colocación del driver en la base

Esta operación debe hacerse con cuidado, pues la colocación incorrecta del driver sobre la base (al igual que si se conecta incorrectamente sin base) llevará a la inutilización del driver por fallo electrónico. Las hileras de patillas para el driver vienen marcadas con un triángulo y las letras VIN.

Patilla para alineamiento del driver

En esta posición hay que conectar la patilla VMOT del driver, para quedar, en el caso del A4988 de esta manera:

Base con el controlador a4988

Conexión de la base con el motor y el controlador

Las conexiones mínimas que hay que hacer son:

  • Motor PAP. Puede ser un Nema 17 o similar, pero con el mismo tipo de conector Molex. Si el motor que usamos no tiene ese conector hay que adquirirlo y ponerlo al motor.
  • Alimentación externa. De una fuente entre 12 y 24 V, al conector de cables verde. Cuidado con la polaridad.
  • Conexiones de control. Las mínimas son las patillas STEP y DIR, que son las que sirven para controlar la velocidad y el sentido de giro del motor. Si además queremos controlar la activación o desactivación del motor, podemos conectar también la patilla EN. Un punto importante de estas conexiones es que están pensadas para usar conectores tipo servo, de tres patillas:

Lo normal es que las conexiones de control que tengamos no usen este tipo de conector. Pero no es necesario que sean así. Podemos usar patillas simples siguiendo estas directrices:

  • Las conexiones de servos vienen con esta configuración: patilla central = 5 V, patillas laterales = GND y señal.
  • Entonces conectamos las patillas correspondientes a S en la base para DIR y STEP.
  • Las tres patillas correspondientes a G en la base son iguales y no hace falta conectarlas porque ya hemos conectado GND en la alimentación externa. Hay que acordarse de conectar GND en el controlador también con la alimentación externa.
  • Las tres patillas V en la base son iguales y ES OBLIGATORIO conectar una de ellas a 5 V ya que la base no tiene regulador de tensión, necesita 5 V para la electrónica y no los puede tomar de la alimentación externa. Cuando conectemos esta patilla se encenderá el LED indicador de la base.
  • La patilla de señal EN hay que conectarla a GND si no la conectamos al controlador.

En resumen, se puede ver en la imagen siguiente:

Conexiones de Arduino a base de driver A4988

Programa de control

Como la base no añade ninguna electrónica nueva al driver A4988, podemos usar el mismo programa de ejemplo que viene con el IDE de Arduino. Lo hemos adaptado a nuestro motor y lo adjuntamos abajo. Hemos añadido el control de la patilla EN, aunque en la imagen anterior no la hemos conectado. Al funcionamiento del programa no afecta en absoluto.

// Prueba de motor bipolar, Nema17 con controlador A4988
//
const int dirPin = 9;
const int resetPin = 10;
const int stepPin = 11;
 
const int steps = 200;
int stepDelay;
 
void setup() {
 // Marcar los pines como salida
 pinMode(dirPin, OUTPUT);
 pinMode(resetPin, OUTPUT);
 pinMode(stepPin, OUTPUT);
 stepDelay = 2000;
 Serial.begin(9600);
}
 
void loop() 
{
 int ii;
 
 // Activar motor
 digitalWrite(resetPin, HIGH);
 
 // Activar una direccion
 digitalWrite(dirPin, HIGH);

 // Giramos 200 pulsos para hacer una vuelta completa
 Serial.println("Giro DCHA");
 for (ii=0; ii < 200; ii++) {
 digitalWrite(stepPin, HIGH);
 delayMicroseconds(stepDelay);
 digitalWrite(stepPin, LOW);
 delayMicroseconds(stepDelay);
 }
 delay(1000);
 
 // Cambiamos la direccion
 digitalWrite(dirPin, LOW);

 // Giramos 400 pulsos para hacer dos vueltas completas
 Serial.println("Giro IZQDA");
 for (int ii=0; ii<400; ii++) {
 digitalWrite(stepPin, HIGH);
 delayMicroseconds(stepDelay);
 digitalWrite(stepPin, LOW);
 delayMicroseconds(stepDelay);
 }
 
  // Desactivar motor
 digitalWrite(resetPin, LOW);
 delay(1000);
}

El resultado se puede ver en el vídeo siguiente:

Conexión con Raspberri Pi

Para demostrar que también se puede usar con una controladora diferente, vamos a probar con una Raspberry Pi. Las conexiones son casi idénticas, solo que ahora se escogen dos patillas GPIO y el programa lo vamos a hacer en Python. El conjunto nos queda así:

Controladora de motor PAP con base y Raspberry Pi

Las conexiones que hemos usado en este montaje son :

Conexiones de la Raspberry Pi con el driver A4988

El programa en Python que hemos usado es uno muy básico:

# -*- coding: utf-8 -*-

import time                     #Para las pausas
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)        #Usar la numeración de pines de la placa

pinDir = 38                     #Pin DIR
pinStep = 40                    #Pin Step
numSteps = 200                  #Número de pasos del motor
microPausa = 0.005              #Número de segundos de pausa


GPIO.setup(pinDir,GPIO.OUT)
GPIO.setup(pinStep,GPIO.OUT)

while True:
        GPIO.output(pinDir,0)           #Dirección (0 o 1)
        for x in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

        time.sleep(microPausa)

        GPIO.output(pinDir, 1)          #Cambio de dirección
        for x in range(0,numSteps):
                GPIO.output(pinStep, True)
                time.sleep(microPausa)
                GPIO.output(pinStep, False)
                time.sleep(microPausa)

GPIO.cleanup()          #Para acabar correctamente

El siguiente vídeo muestra el sistema en funcionamiento.

Category : VARIOS

Deja una respuesta

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