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.
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.
En esta posición hay que conectar la patilla VMOT del driver, para quedar, en el caso del A4988 de esta manera:
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:
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í:
Las conexiones que hemos usado en este montaje son :
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.
Deja una respuesta