Descripción
El controlador de motores paso a paso EasyDriver, basado en el chip A3967, está pensado para que conectar y manejar motores sea sencillo. Es compatible con cualquier microcontrolador de 5V (aunque se puede adaptar para trabajar con los de 3,3V).
Su alimentación debe estar comprendida en el rango 6-30V. Dispone de un regulador de tensión interno para la alimentación del circuito lógico, cuya tensión se puede ajustar a 5V ó 3,3V (soldar un punto de estaño cortocircutando jumper de la esquina inferior izquierda, marcado como «3/5V» para 3,3V; no hacer nada para 5V).
Es capaz de manera motores bipolares de 4 cables y, en general, motores conectados como bipolares. Es decir, motores paso a paso de 4, 6 y 8 cables.
Funcionamiento y conexionado:
- Motor A: Salida del puente H número 2. Conectar en estos pines la bobina A del motor.
- Motor B: Salida del puente H número 1. Conectar en estos pines la bobina B del motor.
- PDF: Selección del modo de decaimiento de la corriente (decay mode). Si la tensión en este pin supera el 60% de Vcc, se activa el modo «decaimiento lento»; si no alcanza el 21% de Vcc se activa el modo «rápido decaimiento»; para valores intermedios se obtienen comportamientos intermedios.
- RST: Entrada. A nivel bajo ignora todos los comandos de STEP (paso). Debe conectarse a nivel alto para poder controlar el motor.
- ENABLE: Entrada. A nivel alto desactiva la salida del driver. A nivel bajo se activan los puentes H de la salida y el motor se puede controlar.
- MS1/MS2: Entradas para configuración de micropasos. LOW/LOW para pasos enteros. HIGH/LOW para medios pasos LOW/HIGH para cuartos de paso. HIGH/HIGH para octavos de paso.
- GND: Masa
- M+: Alimentación (6-30V), recomendado 2A.
- 5V: SALIDA. Sirve para alimentar circuitería externa, gracias a su regulador de tensión interno. Capacidad de corriente 70mA.
- SLP: entrada. A nivel bajo entra en modo sleep y el consumo de potencia se reduce a valores mínimos
- STEP: entrada. Cada transición de LOW a HIGH es una petición para que el motor de un paso más. El tamaño del paso se ajustó mediante MS1 y MS2. Este pin es compatible con 3,3V y 5V, en función de si se ha soldado o no el puente de estaño en la esquina inferior izquierda.
- DIR: entrada. Permite controlar la dirección de giro del motor. Este pin es compatible con 3,3V y 5V, en función de si se ha soldado o no el puente de estaño en la esquina inferior izquierda.
- Puente de soldadura APWR: por defecto sin puentear. En caso de cortocircuitarlo con un punto de soldadura la salida 5V entregaría Vcc en vez de 5V. ¡Cuidado!
- Potenciómetro: Permite ajustar el límite de corriente que se entregará al motor (150mA – 750mA).
Atención: No conectes o desconectes el motor mientras el driver esté alimentado, podría dañar el A3967.
Código de ejemplo:
// Conexión de pines Arduino-EasyDriver #define stp 2 //STEP al pin D2 #define dir 3 // DIR al pin D3 #define MS1 4 // MS1 y MS2 a pines D4 y D5 #define MS2 5 #define EN 6 // ENABLE al pin D6 // Además, alimentar con 6-30V entre M+ y GND // Conectar motor en A y B // Algunas variables char user_input; int x, y, state; // *** CONFIGURACIÓN *** void setup() { pinMode(stp, OUTPUT); // Pines como salida pinMode(dir, OUTPUT); pinMode(MS1, OUTPUT); pinMode(MS2, OUTPUT); pinMode(EN, OUTPUT); resetEDPins(); //Paso, dirección, microstep y enable a valores por defecto Serial.begin(9600); //Puerto serie (monitor serie) Serial.println("Comenzando el control del motor..."); //Imprime un menú por pantalla Serial.println("Escoge opción:"); Serial.println("1. Volver a micropasos por defecto."); Serial.println("2. Invertir dirección de giro."); Serial.println("3. Micropaso a 1/8."); Serial.println("4. Paso adelante y atrás."); Serial.println(); } // *** CÓDIGO PRINCIPAL *** void loop() { while(Serial.available()){ user_input = Serial.read(); //Lee puerto serie (viene del monitor serie) digitalWrite(EN, LOW); //Pone enable a nivel bajo, para actuar sobre el motor // Se ejectuta la función corresponiente if (user_input =='1') { StepForwardDefault(); } else if(user_input =='2'){ReverseStepDefault(); } else if(user_input =='3'){SmallStepMode();} else if(user_input =='4'){ForwardBackwardStep();} else{ Serial.println("Opción inválida."); } resetEDPins(); } } // *** FUNCIONES *** void StepForwardDefault() { Serial.println("Paso por defecto. Adelante."); digitalWrite(dir, LOW); //DIR a LOW for(x= 0; x<1000; x++){ // 1000 pasos digitalWrite(stp,HIGH); delay(1); digitalWrite(stp,LOW); delay(1); } Serial.println("Escoge otra opción."); Serial.println(); } void ReverseStepDefault(){ Serial.println("Paso por defecto. Atrás."); digitalWrite(dir, HIGH); //DIR a HIGH for(x= 0; x<1000; x++){ // 1000 pasos digitalWrite(stp,HIGH); delay(1); digitalWrite(stp,LOW); delay(1); } Serial.println("Escoge otra opción."); Serial.println(); } void SmallStepMode(){ Serial.println("Micropasos 1/8 de paso."); digitalWrite(dir, LOW); //DIR adelante (LOW) digitalWrite(MS1, HIGH); //Ajuste MS1 y MS2 digitalWrite(MS2, HIGH); for(x= 0; x<1000; x++){ //1000 pasos digitalWrite(stp,HIGH); delay(1); digitalWrite(stp,LOW); delay(1); } Serial.println("Escoge otra opción."); Serial.println(); } void ForwardBackwardStep(){ Serial.println("Inversión del sentido de giro."); for(x= 1; x<5; x++){ //5 repeticiones state=digitalRead(dir); // Invierte sentido de giro if(state == HIGH) { digitalWrite(dir, LOW); } else if(state ==LOW){digitalWrite(dir,HIGH);} for(y=0; y<1000; y++){ // 1000 pasos digitalWrite(stp,HIGH); delay(1); digitalWrite(stp,LOW); delay(1); } } Serial.println("Escoge otra opción."); Serial.println(); } void resetEDPins() { // Pines EDP a valor por defecto digitalWrite(stp, LOW); digitalWrite(dir, LOW); digitalWrite(MS1, LOW); digitalWrite(MS2, LOW); digitalWrite(EN, HIGH); }
Valoraciones
No hay valoraciones aún.