¿Te gustaría aprender a controlar motores paso a paso y servos utilizando un L293D Motor Driver Shield y Arduino? En este artículo te mostraremos cómo puedes hacerlo, de una manera sencilla y efectiva. Descubre todo lo que necesitas saber para sacarle el máximo provecho a tu proyecto de control de motores. ¡Sigue leyendo para aprender más!
Si tiene la intención de construir su propio robot, necesitará controlar varios motores, como motores de CC, motores paso a paso y servos, y no hay mejor opción que el Escudo del controlador del motor L293D. Es capaz de controlar todos estos motores; No se requieren módulos adicionales.
El protector de controlador de motor L293D tiene todos los extras que necesita para una variedad de proyectos de complejidad baja a media. Puede controlar:
Descripción general del hardware
Conjunto de chips del controlador
Los cerebros del escudo son dos controladores de motor L293D y un registro de cambios 74HC595.
El L293D es un controlador de motor H-Bridge de doble canal que puede controlar dos motores de CC o un solo motor paso a paso. Dado que el Shield contiene dos controladores de motor de este tipo, puede controlar hasta cuatro motores de CC o dos motores paso a paso.
El registro de desplazamiento 74HC595, por otro lado, extiende los cuatro pines digitales del Arduino a los ocho pines de control de dirección de dos chips L293D.
Conexiones de alimentación del motor
El escudo admite un rango de voltaje del motor de 4,5 a 25 voltios. Esta potencia se puede compartir con el Arduino o utilizar por separado. Para elegir entre los dos, hay un puente especial llamado PWR cerca del conector de alimentación de dos pines.
Con el puente colocado, los motores se alimentarán a través del zócalo DC de Arduino. En este caso, los motores y el Arduino no están físicamente aislados entre sí. Este método hace que el escudo sea más fácil de usar ya que sólo requiere una fuente de alimentación. Sin embargo, sólo puede utilizar este método cuando el voltaje de alimentación del motor sea inferior a 12 V.
Cuando se quita el puente, la potencia del motor se aísla del Arduino, lo que permite que los motores queden físicamente aislados del Arduino. Sin embargo, en este caso, debe conectar una fuente de alimentación del motor independiente al conector de alimentación de dos clavijas etiquetado EXT_PWR.
Advertencia:
Si alimenta el conector de alimentación EXT_PWR de dos pines mientras el puente está en su lugar, las dos fuentes de alimentación se cortarán, lo que podría causar daños al protector del motor y al Arduino.
Conexiones de motores de CC
Los canales de salida de ambos IC L293D salen hasta el borde del blindaje con dos terminales de tornillo de 5 pines etiquetados como M1, M2, M3 y M4. A estos bornes se pueden conectar en total cuatro motores CC de 4,5 – 25 V.
Cada canal del módulo puede suministrar al motor CC una corriente de hasta 600 mA (1,2 A pico). Sin embargo, la cantidad de energía suministrada al motor depende de la capacidad de la fuente de alimentación del motor.
Conexiones del motor paso a paso
También puede conectar dos motores paso a paso a los terminales de salida. Un motor paso a paso está conectado a M1-M2 y el otro a M3-M4.
Si tiene un motor paso a paso unipolar de 5 cables, conecte el cable central al terminal de tierra central.
Conexiones de servomotor
El escudo dirige las líneas de salida PWM de 16 bits a dos cabezales de 3 pines que puede usar para conectar dos servomotores.
Desafortunadamente, los servomotores se alimentan directamente del suministro de 5 V del Arduino, lo que generalmente no es una buena idea. Esto puede provocar que el regulador de 5 V incorporado en Arduino se sobrecaliente y también puede provocar ruido eléctrico en el suministro de 5 V. En el lado positivo, hay un condensador de 100 uF conectado a estos conectores de alimentación, lo que ayuda un poco.
Por lo tanto, si desea utilizar esta función, utilice únicamente servos pequeños como el SG90.
Material extra
Las ventajas del escudo incluyen las siguientes:
El escudo contiene una matriz de resistencias desplegables para mantener los motores apagados cuando se encienden.
El LED integrado indica que la fuente de alimentación del motor está funcionando correctamente. Los motores no funcionarán si no está encendido.
El botón RESET no es más que el botón de reinicio de Arduino. Se subió al piso de arriba para facilitar el acceso.
En la esquina inferior derecha hay seis pines analógicos (A0 a A5), así como conexiones de tierra y de 5 V. Puede equiparlos con cabezales y utilizarlos para conectar varios sensores.
Conexiones de pin Arduino a Shield
Para el control de motores paso a paso y CC, el blindaje utiliza los pines D3, D4, D5, D6, D7, D8, D11 y D12.
D9 y D10 se utilizan para controlar los servomotores. D10 está conectado al Servo 1 mientras que D9 está conectado al Servo 2.
Tenga en cuenta que el escudo no utiliza los pines D2 o D13.
Instalación de la biblioteca AFMotor
Para comunicarnos con Shield, primero necesitamos instalar la biblioteca AFMotor.h. Esto nos permite controlar motores DC, paso a paso y servomotores con comandos simples.
Para instalar la biblioteca, navegue hasta Bosquejo > Incluir biblioteca > Administrar bibliotecas… Espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda escribiendo 'Protector de motor'. Buscar Biblioteca Adafruit Motor Shield (firmware V1) de Adafruta. Haga clic en esta entrada y luego seleccione «Instalar».
Experimento 1: conducción de motores de CC con blindaje L293D
Ahora que hemos aprendido todo lo que necesitamos saber sobre Shield, ¡comencemos a conectarlo al Arduino!
alambrado
Comience ensamblando el protector del motor en un Arduino.
A continuación, conecte la fuente de alimentación del motor. En nuestro experimento, utilizamos motores con engranajes de CC, también llamados motores «TT», que se encuentran comúnmente en robots con tracción en dos ruedas. Están diseñados para 3 a 12 V. Por tanto, conectamos la fuente de alimentación externa de 9V al puerto EXT_PWR.
Finalmente, conecte el motor a uno de los terminales M1, M2, M3 o M4. Lo conectamos a M4.
código arduino
El siguiente esquema muestra cómo controlar la velocidad y la dirección de rotación de un motor de CC utilizando el protector del controlador del motor L293D y puede servir como base para futuros experimentos y proyectos prácticos.
El boceto muestra el motor de CC acelerando en una dirección antes de desacelerar y detenerse. Después de una revolución, el motor invierte su sentido de rotación y repite el proceso.
#include <AFMotor.h>
AF_DCMotor motor(4);
void setup()
{
//Set initial speed of the motor & stop
motor.setSpeed(200);
motor.run(RELEASE);
}
void loop()
{
uint8_t i;
// Turn on motor
motor.run(FORWARD);
// Accelerate from zero to maximum speed
for (i=0; i<255; i++)
{
motor.setSpeed(i);
delay(10);
}
// Decelerate from maximum speed to zero
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
// Now change motor direction
motor.run(BACKWARD);
// Accelerate from zero to maximum speed
for (i=0; i<255; i++)
{
motor.setSpeed(i);
delay(10);
}
// Decelerate from maximum speed to zero
for (i=255; i!=0; i--)
{
motor.setSpeed(i);
delay(10);
}
// Now turn off motor
motor.run(RELEASE);
delay(1000);
}
Explicación del código:
El boceto comienza con la integración de la biblioteca AFMotor.h.
la segunda linea AF_DCMotor motor(motorPort#)
Crea un objeto de biblioteca. Aquí debe especificar el número de puerto del motor al que está conectado el motor. Escriba 1 para el puerto M1, 2 para el puerto M2, etc.
Si desea conectar varios motores al escudo, cree un objeto separado para cada motor. Por ejemplo, el siguiente fragmento de código crea dos objetos AFmotor.
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
En las secciones de configuración y bucle del código, simplemente llamamos a las dos funciones que se enumeran a continuación para controlar la velocidad y dirección de un motor.
setSpeed(speed)
La función controla la velocidad del motor. Elspeed
El rango es de 0 a 255, donde 0 es apagado y 255 es aceleración máxima. Puedes cambiar la velocidad en cualquier momento del programa.run(cmd)
La función controla la dirección de rotación del motor. Lo siguiente es válidocmd
Valores:- ADELANTE – hace girar el motor hacia adelante.
- HACIA ATRÁS – hace girar el motor hacia atrás.
- LIBERAR – Esto detiene el motor y cumple
setSpeed(0)
. Dado que el protector del motor no tiene una función de frenado dinámico, el motor puede tardar algún tiempo en detenerse.
Experimento 2: conducción de motores paso a paso con blindaje L293D
Nuestro próximo experimento es conectar un motor paso a paso al escudo L293D. Comience ensamblando el protector del motor en un Arduino.
Cableado para el motor paso a paso unipolar 28BYJ-48
Los motores paso a paso unipolares 28BYJ-48 tienen una potencia nominal de 5 V y ofrecen 48 pasos por revolución. Conecte una fuente de alimentación externa de 5 V al puerto EXT_PWR.
No olvide quitar el puente PWR.
Finalmente, conecte el motor a los terminales del motor paso a paso M1-M2 (Puerto #1) o M3-M4 (Puerto #2). Lo conectamos a M3-M4.
Cableado para el motor paso a paso bipolar NEMA 17
Los motores paso a paso bipolares NEMA 17 tienen una potencia nominal de 12 V y proporcionan 200 pasos por revolución. Conecte una fuente de alimentación externa de 12 V al puerto EXT_PWR.
No olvide quitar el puente PWR.
Finalmente, conecte el motor a los terminales del motor paso a paso M1-M2 (Puerto #1) o M3-M4 (Puerto #2). Lo conectamos a M3-M4.
código arduino
El siguiente esquema muestra cómo controlar un motor paso a paso unipolar o bipolar con el escudo L293D. Esto es lo mismo para ambos motores excepto stepsPerRevolution
Parámetro.
Antes de ejecutar el boceto, cambie este parámetro para que coincida con las especificaciones de su motor. Por ejemplo, configúrelo en 200 para NEMA 17 y 48 para 28BYJ-48.
#include <AFMotor.h>
// Number of steps per output rotation
// Change this as per your motor's specification
const int stepsPerRevolution = 48;
// connect motor to port #2 (M3 and M4)
AF_Stepper motor(stepsPerRevolution, 2);
void setup() {
Serial.begin(9600);
Serial.println("Stepper test!");
motor.setSpeed(10); // 10 rpm
}
void loop() {
Serial.println("Single coil steps");
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);
Serial.println("Double coil steps");
motor.step(100, FORWARD, DOUBLE);
motor.step(100, BACKWARD, DOUBLE);
Serial.println("Interleave coil steps");
motor.step(100, FORWARD, INTERLEAVE);
motor.step(100, BACKWARD, INTERLEAVE);
Serial.println("Micrsostep steps");
motor.step(100, FORWARD, MICROSTEP);
motor.step(100, BACKWARD, MICROSTEP);
}
Explicación del código:
El boceto comienza con la integración de la biblioteca AFMotor.h.
la segunda linea AF_Stepper motor(48, 2)
Crea un objeto de biblioteca. Aquí debe especificar los pasos por revolución del motor y el número de puerto al que está conectado el motor.
En las secciones de configuración y bucle del código, simplemente llamamos a las dos funciones que se enumeran a continuación para controlar la velocidad y dirección de un motor.
setSpeed(rpm)
Establece la velocidad del motorrpm
es el número de revoluciones por minuto que debe realizar el paso a paso.step(#steps, direction, steptype)
La función se llama cada vez que se debe mover el motor.#steps
es el número de pasos que debe dar. Eldirection
puede ser ADELANTE o ATRÁS, y elstepstyle
puede ser uno de los siguientes:- INDIVIDUAL – Se energiza una bobina a la vez.
- DOBLE – Para obtener más torque, se energizan dos bobinas al mismo tiempo.
- ENTRE – Cambie entre tonos simples y dobles para crear un semitono intermedio. Esto puede dar como resultado un funcionamiento más suave, pero la velocidad se reduce a la mitad debido al medio paso adicional.
- MICRO PASO – Entre cada paso completo, las bobinas adyacentes suben y bajan para crear una serie de micropasos. Esto da como resultado una resolución más fina y una rotación más suave, pero a expensas del par.
Experimento 3: accionamiento de servomotores con blindaje L293D
Nuestro experimento final implicará accionar un servomotor con el escudo L293D.
alambrado
El escudo conduce los pines de salida PWM de 16 bits D9 y D10 a dos cabezales de 3 pines que puede usar para conectar dos servomotores. Tenga en cuenta que D10 está conectado al Servo 1 mientras que D9 está conectado al Servo 2.
Los servomotores se alimentan directamente desde el suministro de 5 V del Arduino, por lo que no es necesario conectar nada al puerto EXT_PWR.
código arduino
Este boceto se basa en la norma. barrer El boceto se puede encontrar en los ejemplos de Arduino en Servo. Mueve el eje de un servomotor hacia adelante y hacia atrás 180 grados.
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup()
{
// attaches the servo on pin 10 to the servo object
myservo.attach(10);
}
void loop()
{
// sweeps from 0 degrees to 180 degrees
for(pos = 0; pos <= 180; pos += 1)
{
myservo.write(pos);
delay(15);
}
// sweeps from 180 degrees to 0 degrees
for(pos = 180; pos>=0; pos-=1)
{
myservo.write(pos);
delay(15);
}
}
Control CC, motor paso a paso y servo con L293D Motor Driver Shield y Arduino
Si estás pensando en construir tu propio robot, necesitarás controlar varios motores como motores CC, motores paso a paso y servos, y no hay mejor opción que la L293D Motor Driver Shield. Es capaz de controlar todos estos motores; no es necesario usar módulos adicionales.
Resumen de Hardware
El chipset del controlador está compuesto por dos controladores de motor L293D y un registro de desplazamiento 74HC595.
- El L293D es un controlador de motor de H-Bridge de doble canal que puede controlar dos motores CC o un motor paso a paso individual.
- El registro de desplazamiento 74HC595 extiende los pines digitales del Arduino a los ocho pines de control de dirección de los dos chips L293D.
Conexiones de Potencia del Motor
La shield soporta un rango de voltaje de motor de 4.5 a 25 voltios. Esta potencia puede ser compartida con el Arduino o utilizada de forma separada. Para elegir entre ambas opciones, se proporciona un puente especial etiquetado como PWR cerca del conector de potencia de dos terminales.
- Cuando el puente está en su lugar, la potencia se suministra a los motores a través del conector de potencia DC del Arduino.
- Cuando el puente está quitado, la potencia del motor se desconecta del Arduino, permitiendo que los motores estén físicamente aislados del Arduino.
Conexiones de Motores CC
Los canales de salida de ambos IC L293D están conectados al borde de la shield con dos terminales de tornillo de 5 pines etiquetados como M1, M2, M3 y M4.
Cada canal en el módulo puede suministrar hasta 600 mA (1.2A pico) de corriente al motor CC, dependiendo de la capacidad de la fuente de energía del motor.
Conexiones de Motores Paso a Paso
Se pueden conectar dos motores paso a paso a los terminales de salida. Un motor paso a paso se conecta de M1-M2 y el otro de M3-M4.
Conexiones de Servo Motores
La shield trae las líneas de salida PWM de 16 bits a dos cabeceras de 3 pines, que se pueden utilizar para conectar dos servo motores.
Desafortunadamente, los servo motores se alimentan directamente desde la fuente de 5V del Arduino, lo cual generalmente no es buena idea. Si deseas utilizar esta función, solo utiliza servos pequeños como el SG90.
Características Adicionales
Entre las ventajas de la shield se incluyen lo siguiente:
- La shield incluye un arreglo de resistencias de descarga para mantener los motores apagados durante el encendido.
- El LED a bordo indica que la fuente de alimentación del motor está funcionando correctamente.
- El botón de RESET no es más que el botón de reseteo del Arduino, que ha sido colocado en la parte superior para un fácil acceso.
Puedes completar este artículo con toda la información inspiradora que tengas sobre el contenido y agregar referencias externas relevantes dentro del texto. Asegúrate de incluir etiquetas HTML como se mencionó anteriormente y el formato adecuado para asegurar una buena experiencia de lectura.
¡Qué buen aporte! Me encanta ver tutoriales como este que enseñan cómo controlar diferentes tipos de motores con Arduino. ¡Gracias por compartir la información!
¡Interesante forma de controlar distintos tipos de motores! Aprenderé algo nuevo con este artículo. ¡Gracias por compartir!