Tabla de contenido
- resumen
- Lista de materiales
- A4988 Módulo de controlador de motor paso a paso
- Motor paso a paso NEMA 17
- Motor paso a paso NEMA17 con interfaz Raspberry Pi Pico y A4988
- Código micropython para el control básico del motor paso a paso
- Código micropython equivalente a la biblioteca paso a paso del acelerador
- Código de aceleración y desaceleración del motor paso a paso
- Motor paso a paso NEMA17 controlado con A4988 y potenciómetro
- conclusión
resumen
En robótica e impresión 3D, los motores paso a paso NEMA 17 se utilizan a menudo porque son pequeños pero potentes. Para que funcione bien, necesitas saber cómo controlarlo. Este artículo describe cómo controlar este motor utilizando el controlador A4988 y la Raspberry Pi Pico con MicroPython.
El controlador A4988 es un dispositivo que ayuda a los motores NEMA17 a funcionar de varias maneras. La Raspberry Pi Pico es una pequeña placa de computadora que le permite controlar fácilmente el motor utilizando código MicroPython.
Esta guía le mostrará cómo conectar estas piezas a su motor NEMA 17. Hablaremos sobre los conceptos básicos, cómo conectarlos y cómo codificar en MicroPython. Eventualmente, debería poder usar estas partes en varios proyectos como robótica e impresión 3D. Si necesitas más potencia, Controlador DRV8825 en lugar de A4988.
Una vez que comprenda los conceptos básicos, puede comenzar a crear y controlar sus propios proyectos de accionamiento de motor basados en el módulo de controlador paso a paso A4988.
Lista de materiales
Para seguir los tutoriales de A4988 y Raspberry Pi Pico, necesita componentes específicos. Todos estos artículos se pueden comprar convenientemente en Amazon. También incluye un enlace de compra fácil.
A4988 Módulo de controlador de motor paso a paso
Un controlador de motor de micropaso completo, el A4988 incluye un traductor que simplifica la operación. La placa de arranque Allegro tiene varias características notables, incluido el límite de corriente ajustable, la protección contra sobrecorriente y sobretemperatura, y la capacidad de elegir entre cinco resoluciones de micropasos diferentes.
Este controlador versátil funciona en un amplio rango de voltaje de 8V a 35V. Puede entregar aproximadamente 1A por fase sin la necesidad de un disipador térmico o flujo de aire forzado. Sin embargo, con las medidas de enfriamiento adecuadas, su rendimiento se puede mejorar para manejar hasta 2A por bobina.
Además, este destornillador es compacto, lo que lo hace adecuado para proyectos con limitaciones de espacio. También admite los modos completo, medio, cuarto, 8 y 16 pasos, lo que permite un control flexible de los motores paso a paso con diferentes niveles de precisión. Esto hace que el A4988 sea una opción popular para proyectos que involucran impresoras 3D, máquinas CNC y otros sistemas robóticos automatizados.
Funciones
- Voltaje máximo de funcionamiento: 35V
- Voltaje mínimo de funcionamiento: 8V
- Corriente máxima por fase: 2A
- Resolución de micropasos: paso completo, paso 1/2, paso 1/4, paso 1/8 y 1/16 paso
- Protección de voltaje inverso: No
- Dimensiones: 15.5 × 20.5 mm (0.6″ × 0.8″)
- Protección de cortocircuito a tierra y cortocircuito a carga
- Baja salida RDS(ON)
- Circuito de apagado térmico
A4988 Pinout del controlador del motor
El controlador A4988 tiene un total de 16 pines, que se ve así:
1. Pin de alimentación: Los pines incluyen el VDD y VMOT y el par de pines GND. VDD se utiliza para conducir circuitos lógicos internos entre 3V y 5V, mientras que VMOT alimenta motores entre 8V y 35V.
2. Pin de selección de micropasos: El controlador A4988 tiene tres entradas de selector de resolución: MS1, MS2 y MS3. Al establecer el nivel lógico apropiado en estos pines, configure el motor en al menos uno de los cinco niveles de resolución.
3. Controle los pines de entrada. STEP y DIR son dos pines de entrada de control. La entrada STEP controla el micropaso del motor, y la entrada DIR controla la dirección de rotación del motor.
4. Pin de control de estado de energía: El A4988 tiene tres entradas diferentes (EN, RST y SLP) para controlar el estado de energía. El pin EN es una entrada activa-baja que se puede bajar para habilitar el controlador A4988. El pin SLP es una entrada activa-baja. Al tirar de este pasador hacia abajo, el conductor está en modo de suspensión, minimizando el consumo de las instalaciones. RST es una entrada baja vigorosa, y cuando se tira a BAJA, todas las entradas de paso se ignoran. También restablece el controlador configurando el traductor interno en la etapa inicial del motor.
5. Pin de salida: Hay cuatro pines de salida: 2B, 2A, 1B y 1A. Los motores paso a paso bipolares con voltajes de 8V a 35V se pueden conectar a estos pines.
Requisitos del disipador térmico
Para clasificaciones de corriente de hasta 1A, es seguro usar el controlador A4988 sin disipador térmico. Para lograr 1A o más por bobina, se requiere un disipador de calor u otro método de enfriamiento.
Debido a la disipación excesiva de potencia en el controlador A4988, hay un aumento de temperatura que puede exceder la capacidad del CI. Envejecerlo.
Establecer el límite actual
Antes de conectar el motor, el límite de corriente del controlador debe ajustarse para que la corriente esté dentro de los límites del motor. Para hacer esto, use un potenciómetro a bordo para ajustar el voltaje de referencia y considere la siguiente ecuación:
Actual límite = VRef x 2.5 |
Por ejemplo, si el motor paso a paso tiene una potencia nominal de 350 mA, el voltaje de referencia debe ajustarse a 0.14V. Tome un destornillador pequeño y ajuste el límite de corriente con un potenciómetro hasta que se alcance la corriente nominal.
Motor paso a paso NEMA 17
El NEMA 17 es un motor paso a paso híbrido con un ángulo de paso de 1,8° (200 pasos/revolución). El término “NEMA 17” se refiere a las especificaciones de la Asociación Nacional de Fabricantes Eléctricos de Motores Paso a Paso. Específicamente, “17” se refiere a las dimensiones de la placa frontal del motor, en este caso aproximadamente 1.7 pulgadas × 1.7 pulgadas.
Los motores paso a paso NEMA 17 son ampliamente utilizados en dispositivos como impresoras 3D, máquinas CNC y aplicaciones de robots pequeños debido a su tamaño compacto, buen par y control preciso. Cabe señalar que el control adecuado de un motor paso a paso generalmente requiere un controlador de motor paso a paso que pueda controlar con precisión la corriente en los devanados del motor para mover el rotor en “pasos” precisos.
Los motores paso a paso NEMA 17 generalmente tienen cuatro cables, cada uno conectado a un extremo de dos bobinas separadas en el motor. Estos cuatro cables a menudo están codificados por colores para que sean más fáciles de identificar. La codificación de colores no está estandarizada por todos los fabricantes, pero el esquema general es el siguiente:
- Alambre negro y verde: A menudo corresponde a una bobina, llamada bobina A o fase 1.
- Cable rojo y azul: A menudo corresponde a otras bobinas llamadas bobina B o fase 2.
Motor paso a paso NEMA17 con interfaz Raspberry Pi Pico y A4988
Para controlar el motor paso a paso NEMA4988 utilizando el controlador del motor paso a paso A17 y la placa Raspberry Pi Pico, la conexión es muy simple. Puede utilizar los pines GPIO16 y GPIO17 de la placa Raspberry Pi Pico para controlar la dirección y el paso del motor. El diagrama de cableado completo se muestra a continuación.
Para fuentes de alimentación, conecte el pin VMOT del controlador A4988 a una fuente de alimentación de 12V y el pin VDD a una fuente de alimentación de 5V. Para estabilizar la fuente de alimentación y reducir el ruido, es importante instalar un condensador electrolítico de desacoplamiento de 100 μF a través de los pines de suministro del motor cerca de la placa. Además, se debe instalar un condensador electrolítico de 10 μF en el pin de suministro de 5V para una mayor estabilización.
El motor paso a paso NEMA 17 está conectado al controlador A4988 utilizando cuatro pines de motor disponibles como se muestra en el circuito anterior.
Código micropython para el control básico del motor paso a paso
Ahora que ha conectado el controlador A4988 y establecido los límites actuales, conecte la placa Raspberry Pi a su computadora y cargue el código. Este boceto controla un motor paso a paso NEMA 17 en una dirección.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | remitente máquina importación anclar, temporizador importación Youtime dir_pin = anclar(16, anclar.fuera) step_pin = anclar(17, anclar.fuera) steps_per_revolution = 200 # Temporizador de inicialización Tim = temporizador() Def paso(t): global step_pin step_pin.valor(No step_pin.valor()) Def rotate_motor(demorar): # Configuración de un temporizador para la versión Tim.inicialización(frecuencia=1000000Delay, mode=timer.periodic, callback=step) Def bucle(): mientras verdadero: #モーターの方向を時計回りに設定します dir_pin.valor(1) #モーターをゆっくりと回転させる rotate_motor(2000) Youtime.sleep_ms(steps_per_revolution) Tim.Punto de día() # Detener el temporizador Youtime.dormir(1) #モーターの方向を反時計回りに設定します dir_pin.valor(0) #モーターをすばやく回転させる rotate_motor(1000) Youtime.sleep_ms(steps_per_revolution) Tim.Punto de día() # Detener el temporizador Youtime.dormir(1) Si __Nombre__ == 「__main__」: bucle() |
Descripción del código
Obtenga información sobre el código MicroPython utilizado para controlar el motor paso a paso NEMA 4988 utilizando un controlador A17 y una Raspberry Pi Pico. Este script se utiliza para controlar el motor paso a paso mediante MicroPython. Aquí hay un desglose del guión:
remitente máquina importación anclar, temporizador importación Youtime |
el machine
El módulo contiene clases para manejar funciones específicas de hardware, como pines GPIO y temporizadores. el utime
Los módulos proporcionan funcionalidad para tareas relacionadas con el tiempo.
dir_pin = anclar(16, anclar.fuera) step_pin = anclar(17, anclar.fuera) steps_per_revolution = 200 |
Estas líneas definen los dos pines de salida del microcontrolador. el dir_pin
Se utiliza para establecer la dirección del motor paso a paso, step_pin
Se utiliza para controlar el paso del motor. steps_per_revolution
es una variable que define el número de pasos que el motor debe dar para realizar una rotación completa.
Esto inicializa el objeto temporizador, tim
Se utiliza para controlar la velocidad de paso.
Def paso(t): global step_pin step_pin.valor(No step_pin.valor()) |
Esta función se llama step_pin
, envía efectivamente pulsos al motor paso a paso para crear un paso. Esta función se utiliza como devolución de llamada para el temporizador.
Def rotate_motor(demorar): Tim.inicialización(frecuencia=1000000Delay, mode=timer.periodic, callback=step) |
Esta función inicializa el temporizador con la frecuencia calculada a partir de la entrada delay
, y configúrelo en modo PERIÓDICO y active a intervalos regulares. el step
La función se pasa como una devolución de llamada, por lo que se ejecuta cada vez que se activa el temporizador.
Def bucle(): mientras verdadero: dir_pin.valor(1) rotate_motor(2000) Youtime.sleep_ms(steps_per_revolution) Tim.Punto de día() Youtime.dormir(1) dir_pin.valor(0) rotate_motor(1000) Youtime.sleep_ms(steps_per_revolution) Tim.Punto de día() Youtime.dormir(1) |
Esta función contiene el bucle principal del script. Gira el motor continuamente en una dirección a baja velocidad, y luego a alta velocidad en la otra dirección. Primero establece los pines de dirección y luego establece la rotación del motor en rotate_motor
Función. Luego espere un tiempo igual al número de milisegundos que tarda el motor en girar completamente, detenga el temporizador, espere otro 1 segundo y luego repita el proceso en la dirección opuesta.
Si __Nombre__ == 「__main__」: bucle() |
Este es el punto de entrada para el script. Si el script se ejecuta directamente (no se importa como un módulo), el script es loop
Inicie la función, el bucle de control del motor.
Código micropython equivalente a la biblioteca paso a paso del acelerador
En MicroPython, Biblioteca de pasos de aceleradorSin embargo, puede escribir una clase simple que imite algunas de las funcionalidades de AccelStepper. Por ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | remitente máquina importación anclar importación Youtime …class escalonamiento: Def __Init__(propio, step_pin, dir_pin): propio.step_pin = anclar(step_pin, anclar.fuera) propio.dir_pin = anclar(dir_pin, anclar.fuera) propio.posición = 0 Def set_speed(propio, velocidad): propio.demorar = 1 / ABS(Morfemas ligados a Ticker) # Retraso en segundos Def set_direction(propio, dirección): propio.dir_pin.valor(dirección) Def move_to(propio, posición): propio.set_direction(1 Si posición > propio.posición de otra manera 0) mientras propio.posición != posición: propio.step_pin.valor(1) Youtime.dormir(propio.demorar) propio.step_pin.valor(0) propio.posición += 1 Si posición > propio.posición de otra manera –1 # Definir pines step_pin = 17 # Número GPIO al que está conectado el pin de paso dir_pin = 16 # Número GPIO al que está conectado el pin del directorio # Inicialización paso a paso escalonamiento = escalonamiento(step_pin, dir_pin) Def bucle(): mientras verdadero: # 2 revoluciones (400 pasos) hacia adelante a 200 pasos/seg escalonamiento.set_speed(200) escalonamiento.move_to(400) Youtime.dormir(1) # Retroceder 1 revolución (200 pasos) a 600 pasos por segundo escalonamiento.set_speed(600) escalonamiento.move_to(200) Youtime.dormir(1) # 3 revoluciones (600 pasos) hacia adelante a 400 pasos/seg escalonamiento.set_speed(400) escalonamiento.move_to(600) Youtime.dormir(3) Si __Nombre__ == 「__main__」: bucle() |
Este código proporciona parte de la misma funcionalidad básica que la biblioteca AccelStepper, pero con un poco de simplificación. Solo admite el movimiento a una velocidad constante y no proporciona funciones de aceleración o desaceleración. Además set_speed
Como la función está en segundos, es el recíproco de la velocidad (pasos por segundo).
Código de aceleración y desaceleración del motor paso a paso
Aquí se explica cómo lograr una funcionalidad similar en MicroPython: MicroPython no tiene soporte incorporado para aceleración y desaceleración, por lo que debe implementarlo manualmente. La lógica detrás de esto implica aumentar la velocidad con el tiempo, es decir, reducir el retraso entre cada paso.
Tenga en cuenta que el código siguiente es una representación simple y puede no tener exactamente el mismo rendimiento que la biblioteca paso a paso de Accel. No se implementa una curva de aceleración adecuada, sino que aumenta o disminuye gradualmente la velocidad del motor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | remitente máquina importación anclar, temporizador importación Youtime …class escalonamiento: Def __Init__(propio, dir_pin, step_pin): propio.dir_pin = anclar(dir_pin, anclar.fuera) propio.step_pin = anclar(step_pin, anclar.fuera) propio.posición = 0 Def mover(propio, Pasos, demorar, acelerador): propio.dir_pin.valor(0 Si Pasos > 0 de otra manera 1) Pasos = ABS(Pasos) para Yo Y gama(Pasos): propio.step_pin.valor(1) Youtime.sleep_us(demorar) propio.step_pin.valor(0) Youtime.sleep_us(demorar) Si Yo < Pasos 2 y latencia > 100: demorar -= acelerador Elihu Yo >= Pasos 2 y 2000 < retraso: demorar += acelerador propio.posición += Pasos Si Pasos > 0 de otra manera –Pasos step_pin = 17 dir_pin = 16 escalonamiento = escalonamiento(dir_pin, step_pin) Def bucle(): mientras verdadero: escalonamiento.mover(600, 2000, 5) #2回転前進 Youtime.dormir(1) escalonamiento.mover(–600, 2000, 5) #2後方回転 Youtime.dormir(1) Si __Nombre__ == 「__main__」: bucle() |
En este ejemplo, move
Métodos Stepper
La clase toma tres argumentos: steps
, delay
Y accel
. steps
es el número de pasos a mover. delay
es el retardo inicial (en microsegundos) entre cada paso. accel
es la cantidad por la cual el retraso disminuye para cada paso (hasta que se ejecuta la mitad de los pasos, después de lo cual el retraso aumenta nuevamente).
Motor paso a paso NEMA17 controlado con A4988 y potenciómetro
El motor paso a paso NEMA17 con A4988 Driver & Raspberry Pi Pico también se puede controlar con un potenciómetro. Usé un potenciómetro de 10K para conectarlo al pin analógico A0 en mi placa Raspberry Pi Pico.
El voltaje suministrado al pin analógico del ESP8266 se puede utilizar como voltaje de referencia para controlar la velocidad del motor paso a paso. El diagrama de conexión de la placa de pruebas se muestra a continuación.
Copie el siguiente código en la Raspberry Pi Pico y ejecútelo. Puede girar el potenciómetro para controlar la velocidad.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | remitente máquina importación anclar, Teletipo importación Youtime # Definición del número de pin step_pin = anclar(17, anclar.fuera) dir_pin = anclar(16, anclar.fuera) cacerola = Teletipo(26) #A0はピコのGP26にあります # Ajuste de la dirección del motor dir_pin.Alto() Def map_val(valor, in_min, in_max, out_min, out_max): devolución (valor – in_min) * (out_max – out_min) / (in_max – in_min) + out_min Def bucle(): mientras verdadero: #ポテンショメータの値を読み取り mapa en la medida deseada custom_delay = cacerola.read_u16() # Cargar valores de 16 bits custom_delay_mapped = map_val(custom_delay, 0, 65535, 300, 4000) # Asignar valores de 16 bits al rango deseado #ステッピングモーターをパルスします step_pin.Alto() Youtime.sleep_us(entero(custom_delay_mapped)) step_pin.Bajo() Youtime.sleep_us(entero(custom_delay_mapped)) # Iniciar un bucle bucle() |
Dado que el ADC de Raspberry Pico devuelve un valor de 16 bits, read_u16()
Se asigna de 0 a 1023 en lugar de 0 a 65535 como en el código Arduino. El potenciómetro también está conectado al GP26(A0) de Pico. Establezca el número PIN de acuerdo con la configuración específica de su hardware.
conclusión
En conclusión, el motor paso a paso NEMA 17, ampliamente utilizado en robótica e impresión 3D, se puede controlar de manera eficiente utilizando la Raspberry Pi Pico con controlador A4988 y MicroPython. En este artículo, hemos discutido los pasos importantes para conectar y programar estos componentes.
Los conocimientos básicos adquiridos nos permiten adaptarlos a diversos proyectos en robótica e impresión 3D. Eventualmente, con una comprensión de estos conceptos básicos, podrá diseñar y administrar sus propios proyectos basados en motores utilizando el módulo de controlador paso a paso A4988 y Raspberry Pi Pico usando código MicroPython.