Tabla de contenido:

Menú de control de velocidad paso a paso impulsado por Arduino: 6 pasos
Menú de control de velocidad paso a paso impulsado por Arduino: 6 pasos

Video: Menú de control de velocidad paso a paso impulsado por Arduino: 6 pasos

Video: Menú de control de velocidad paso a paso impulsado por Arduino: 6 pasos
Video: 💡 Controlar Motor PASO A PASO con Arduino (Stepper Motor) 【 2021 】 - Capítulo #34🔋 2024, Mes de julio
Anonim
Menú de control de velocidad paso a paso impulsado por Arduino
Menú de control de velocidad paso a paso impulsado por Arduino
Menú de control de velocidad paso a paso impulsado por Arduino
Menú de control de velocidad paso a paso impulsado por Arduino
Menú de control de velocidad paso a paso impulsado por Arduino
Menú de control de velocidad paso a paso impulsado por Arduino

Esta biblioteca SpeedStepper es una reescritura de la biblioteca AccelStepper para permitir el control de velocidad del motor paso a paso. La biblioteca SpeedStepper le permite cambiar la velocidad establecida del motor y luego acelera / desacelera a la nueva velocidad establecida usando el mismo algoritmo que la biblioteca AccelStepper. La biblioteca SpeedStepper también le permite establecer un límite más y menos y una posición de "inicio". Hay un comando goHome para volver a la posición inicial.

Limitaciones: La biblioteca SpeedStepper solo maneja salidas de dirección y paso y, por lo tanto, debe estar conectada a un controlador de motor, como Easy Driver, para impulsar realmente el motor paso a paso. La biblioteca AccelStepper proporciona más opciones de conducción que podrían copiarse en esta biblioteca si fuera necesario.

Se proporcionan tres bocetos de ejemplo, cada uno de los cuales se puede ejecutar sin un motor o controlador de motor. El boceto speedStepperPlot emite comandos de velocidad de ejemplo y el comando goHome y genera un gráfico de la velocidad y la posición resultantes. El esquema speedStepperSetup proporciona una configuración impulsada por menú para establecer el inicio y los límites del motor y luego hacer funcionar el motor y ajustar la velocidad hacia arriba y hacia abajo e ir a Inicio para terminar. El boceto speedStepperProfile muestra un ejemplo de cómo configurar y ejecutar un perfil de velocidad.

Si bien la biblioteca AccelStepper proporciona un buen control de posición, se necesitaba control de velocidad para la sonda prototipo de fusión de hielo para la recolección de muestras biológicas en Europa. Aquí hay un video de una versión anterior del prototipo, que usaba peso en lugar de un motor. La revisión 1.1 agregó perfiles de velocidad después de que un usuario solicitara un medio para controlar el perfil de velocidad de una bomba.

Esta biblioteca se ejecuta en Arduino Uno y Mega2560, pero para el prototipo se utilizó una memoria más grande / procesador más rápido SparkFun Redboard Turbo.

Este instructivo también está disponible en línea en la biblioteca de control de velocidad paso a paso para Arduino

Suministros

Para ejecutar los bocetos de ejemplo, solo se necesitan un Arduino UNO o Mega2560 y las bibliotecas de software

Para las pruebas de banco de la biblioteca, se usó un SparkFun Redboard Turbo con un Easy Driver, un motor paso a paso de 200 pasos / rev, 12V 350mA y un suministro de 12 CC de 2A o más, p. Ej. https://www.sparkfun.com/products/14934. Cable USB A a Micro Cable USB a TTL Serial Arduino IDE V1.8.9 y una computadora para ejecutarlo Biblioteca SpeedStepper Biblioteca pfodParser para las clases nonBlockingInput y pfodBufferedStream Biblioteca millisDelay para demoras sin bloqueo

Paso 1: funciones de la biblioteca

La biblioteca SpeedStepper ejecuta el motor paso a paso limitado por los límites establecidos por la biblioteca. Consulte el archivo SpeedStepper.h para conocer los diversos métodos de biblioteca disponibles. Aquí hay un esquema de la lógica detrás de ellos.

La posición del paso a paso se rastrea contando el número de pasos (pulsos). La biblioteca limita la posición entre las posiciones setPlusLimit (int32_t) y setMinusLimit (int32_t). El límite positivo es siempre> = 0 y el límite negativo es siempre <= 0. En el arranque, la posición del motor es 0 (inicio) y los límites se establecen en números +/- muy grandes (aproximadamente +/- 1e9 pasos). setAcceleration (float) establece la rapidez con la que el motor cambiará la velocidad hacia arriba o hacia abajo. A medida que el motor se acerca al límite positivo o negativo, desacelerará a esta velocidad hasta que se detenga en el límite. En el arranque, la aceleración se establece en 1,0 pasos / seg / seg. El ajuste de aceleración es siempre un número + ve. El signo del ajuste setSpeed (flotación) establece la dirección en que se moverá el motor.

setSpeed (float) establece la velocidad para acelerar / desacelerar el motor, desde su velocidad actual. La velocidad que se puede configurar a través de setSpeed (flotación) está limitada, en valor absoluto, por configuración, setMaxSpeed (flotación), 1000 pasos / seg. Por defecto y setMinSpeed (flotación), 0,003 pasos / seg. Por defecto. Estos valores predeterminados también son los límites de velocidad codificados absolutos que la biblioteca aceptará para setMaxSpeed () y setMinSpeed (). Si desea establecer una velocidad máxima> 1000 pasos / seg, deberá editar la primera línea en el archivo SpeedStepper.cpp para cambiar maxMaxSpeed (1000) a la velocidad máxima que desee. En la práctica, la velocidad máxima también está limitada por el tiempo entre llamadas al método run () de la biblioteca. Para 1000 pasos / seg, el método run () debe llamarse al menos cada 1 mS. Consulte la sección Latencia a continuación.

Si intenta establecer una velocidad inferior a la velocidad mínima, el motor se detendrá. Cada uno de estos establecedores tiene un captador correspondiente, consulte el archivo SpeedStepper.h. Para la velocidad, getSetSpeed () devuelve la velocidad que estableció a través de setSpeed (), mientras que getSpeed () devuelve la velocidad actual del motor que varía a medida que acelera / desacelera a la velocidad establecida. Si el motor no va en la dirección en la que piensa en + ve, puede llamar a invertDirectionLogic () para cambiar la dirección en la que se mueve el motor por velocidades + ve.

getCurrentPosition () devuelve la posición actual del motor en comparación con 'inicio' (0). Puede anular la posición actual del motor setCurrentPosition (int32_t). La nueva posición está limitada a estar dentro de los límites más / menos establecidos.

Inicialmente, el motor se detiene en la posición 0. Llamar a setSpeed (50.0) hará que comience a acelerar en la dirección + ve a una velocidad máxima de 50 pasos / min. Llamar a hardStop () detendrá inmediatamente el motor donde está. Por otro lado, llamar al método stop () establecerá la velocidad en cero y desacelerará el motor hasta detenerse. Llamar a stopAndSetHome () detendrá el motor inmediatamente y establecerá su posición en 0. Los valores de los límites más / menos no se cambian, pero ahora se refieren a esta nueva posición 0 (inicial). Llamar a goHome () devolverá el paso a paso a esta posición 0 (inicio) y se detendrá. Llamar a setSpeed () cancelará el regreso a casa.

La biblioteca SpeedStepper también proporciona control de perfil de velocidad a través de los métodos setProfile (SpeedProfileStruct * profileArray, size_t arrayLen), startProfile (), stopProfile (), para interrumpir un perfil en ejecución e isProfileRunning (). Vea el boceto de ejemplo de speedStepperProfile.

Paso 2: Ejecución del ejemplo de SpeedStepperPlot sin motor

Ejecución del ejemplo de SpeedStepperPlot sin motor
Ejecución del ejemplo de SpeedStepperPlot sin motor

Instale Arduino IDE V1.8.9 Descargue e instale la biblioteca SpeedStepper Guarde SpeedStepper.zip y luego use el elemento de menú Arduino IDE Sketch → Incluir biblioteca → Agregar biblioteca. ZIP para importar la biblioteca Descargue e instale la biblioteca millisDelay también

Abra Ejemplos → SpeedStepper → boceto de ejemplo speedStepperPlot (Reinicie el IDE si es necesario). Este boceto está configurado para trabajar con Serial, p. Ej. UNO y Mega, etc. Para ejecutar en SparkFun Redboard Turbo, consulte a continuación.

No se necesita ninguna placa de controlador o motor paso a paso para ejecutar este ejemplo. Estos ejemplos utilizan D6 y D7 como salidas. Puede cambiar los pines de salida a cualquier salida digital cambiando las configuraciones STEP_PIN y DIR_PIN cerca de la parte superior del boceto.

Cargue el boceto a la placa y luego abra Herramientas → Plotter en serie a 115200 baudios para mostrar el gráfico de la velocidad (ROJO) y la posición (AZUL) El límite positivo se establece en 360, lo que hace que la velocidad aumente a cero desde aproximadamente 100 puntos en el eje x. El límite negativo es -510. La posición se detiene en ~ -390 porque se ha exigido que la velocidad sea 0.0. En el punto 380 en el eje x, se emite el cmd goHome que devuelve el paso a paso a la posición cero.

Este boceto speedStepperPlot utiliza millisDelays para cambiar el tiempo entre varias velocidades y aceleraciones. En muchos casos, usar SpeedStepperProfile, como en el siguiente ejemplo, es más simple.

Paso 3: Ejecución del ejemplo de SpeedStepperProfile sin motor

Ejecución del ejemplo de SpeedStepperProfile sin motor
Ejecución del ejemplo de SpeedStepperProfile sin motor

Abra el boceto de ejemplo Ejemplos → SpeedStepper → speedStepperPlot, este boceto produce el diagrama anterior utilizando el trazador en serie Arduino y es un ejemplo de ejecución de un perfil de velocidad prescrito, por ejemplo, si se está ejecutando una bomba.

Los perfiles de velocidad paso a paso se componen de una matriz de SpeedProfileStruct, que se define en el archivo SpeedStepper.h.

struct SpeedProfileStruct {

velocidad de flotación; // la velocidad objetivo al final de este paso unsigned long deltaTms; // el tiempo para acelerar desde la velocidad actual (al comienzo de este paso) hasta la velocidad objetivo};

Defina una matriz de SpeedProfileStruct que contenga la velocidad objetivo para cada paso y el tiempo, deltaTms, en mS, para alcanzar esa velocidad objetivo desde la velocidad objetivo anterior. Si el deltaTms es cero o muy pequeño, la velocidad saltará inmediatamente a la nueva velocidad objetivo. De lo contrario, se calculará la aceleración requerida. Se llamará setAcceleration () seguido de una llamada a setSpeed () para la nueva velocidad objetivo. En todos los casos, el perfil estará limitado por los límites de posición más y menos existentes y los ajustes de velocidad máxima / mínima. Si desea mantener una velocidad, simplemente repita la velocidad anterior con el tiempo que desea que se mantenga. Dado que la nueva velocidad objetivo es la misma que la velocidad actual, la aceleración calculada será cero y no se producirá ningún cambio en la velocidad.

Esta matriz SpeedProfileStruct produjo el gráfico anterior

const SpeedProfileStruct profile = {{0, 0}, // detenerse inmediatamente si aún no lo ha hecho {0, 1000}, // mantener cero durante 1 segundo {-50, 0}, // saltar a -50 {-200, 2000}, // rampa a -200 {-200, 6000}, // manténgase en -200 durante 6 segundos {-50, 2000}, // rampa hacia abajo a -50 {0, 0}, // // deténgase inmediatamente {0, 1500}, // mantener el cero durante 1,5 segundos {50, 0}, // saltar a 50 {200, 2000}, // aumentar a 200 {200, 6000}, // mantener 200 durante 6 segundos {50, 2000}, // rampa a 50 {0, 0}, // // deténgase inmediatamente {0, 1000} // mantenga cero // para trazar la salida}; const size_t PROFILE_LEN = sizeof (perfil) / sizeof (SpeedProfileStruct); // calcula el tamaño de la matriz de perfiles

El perfil se establece llamando a setProfile (SpeedProfileStruct * profileArray, size_t arrayLen) p. stepper.setProfile (perfil, PROFILE_LEN);

Una vez que se ha establecido el perfil, llame a startProfile () para comenzar a ejecutarlo desde la velocidad actual del motor (generalmente comenzará desde parado). Al final del perfil, el motor continuará funcionando a la última velocidad objetivo. Se puede llamar al método isProfileRunning () para ver si el perfil todavía se está ejecutando. Si desea detener el perfil antes, puede llamar a stopProfile () que abandonará el perfil y detendrá el motor.

Paso 4: Ejecución del ejemplo de SpeedStepperSetup sin motor

El boceto de ejemplo está diseñado como una base para su propia aplicación de motor paso a paso. Proporciona una interfaz impulsada por menú que le permite mover el motor a su posición inicial, si aún no está allí, y luego, opcionalmente, restablecer los límites más y menos y luego hacer funcionar el motor dentro de ese rango. El menú 'ejecutar' le permite aumentar y disminuir la velocidad, congelar a la velocidad actual, detenerse y también regresar a casa.

Este boceto ilustra una serie de funciones de software que mantienen el loop () receptivo para que pueda agregar sus propias entradas de sensor para controlar el paso a paso. Se esmera en evitar retrasos que puedan interferir con el control de velocidad. (Ver Los retrasos son malos)

Instale las bibliotecas utilizadas para ejecutar SpeedStepperPlot, arriba, y luego también instale la biblioteca pfodParser. La biblioteca pfodParser proporciona las clases NonBlockingInput y pfodBufferedStream que se utilizan para manejar la entrada del usuario y la salida del menú con el bloqueo de la ejecución del loop ().

Abra el ejemplo de Examples → SpeedStepper → speedSpeedSetup. Este boceto está configurado para trabajar con Serial, p. Ej. UNO y Mega, etc. Para ejecutar en SparkFun Redboard Turbo, consulte a continuación.

No se necesita ninguna placa de controlador o motor paso a paso para ejecutar este ejemplo. Estos ejemplos utilizan D6 y D7 como salidas. Puede cambiar los pines de salida a cualquier salida digital cambiando las configuraciones STEP_PIN y DIR_PIN cerca de la parte superior del boceto. Cargue el boceto en la pizarra y luego abra Herramientas → Monitor de serie en 115200 para ver el menú CONFIGURACIÓN.

SETUP pos: 0 sp: 0.00 + Lim: 500000 -Lim: -500 LATENCY: stepper: 492uS loop: 0uS p - set Home l - set limits h - goHome r - run>

Cuando se ejecuta el boceto, la posición actual del paso a paso se toma como su posición 'inicial' (0). Si necesita reposicionar el paso a paso a su verdadera posición de 'inicio', ingrese el comando p para mostrar el menú AJUSTAR INICIO

SET HOME pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: stepper: 752uS loop: 3852uS x - setHome aquí y salir + - Forward - - Reverse s - swap Forward / Reverse - hardStop >

Como puede ver, los límites codificados en el boceto se han eliminado para que pueda volver a colocar el paso a paso en cualquier lugar. Debe tener cuidado de no conducirlo más allá de los límites físicos o puede romper algo.

Use + cmd para comenzar a mover el paso a paso hacia adelante, si lo encuentra moviéndose en la dirección incorrecta, ingrese un comando sin comando o simplemente una línea vacía para detenerlo y luego use el comando s para cambiar la dirección de Adelante. Debe actualizar el boceto para incluir una llamada a invertDirectionLogic () en la configuración para arreglar esto para la próxima ejecución.

Utilice los cmds + / - para colocar el paso a paso en la posición cero correcta. El motor arranca lentamente y luego aumenta la velocidad a medida que avanza, solo use una línea vacía para detenerlo. La velocidad máxima para esto y el menú de límites la establece MAX_SETUP_SPEED en la parte superior de setupMenus.cpp.

Una vez que el motor se ha posicionado en su posición 'inicial', use x cmd para restablecer la posición actual como 0 y regresar al menú CONFIGURACIÓN.

Si necesita establecer los límites, generalmente solo los de la configuración inicial, use l cmd para ingresar al menú ESTABLECER LÍMITES

SET LIMITS pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: stepper: 944uS loop: 5796uS l - setLimit here + - Forward - - Reverse h - goHome x - exit - hardStop>

Use + cmd para avanzar más hasta el límite más y luego use l cmd para establecerlo como el límite más. El comando h se puede usar para volver a 0 y el comando - cmd se usa para mover si vuelve a la posición del motor en el límite negativo. Nuevamente use l cmd para establecer el límite negativo. Observe las posiciones de los límites más y menos y actualice las declaraciones setPlusLimit y setMinusLimit del método setup () con estos valores.

Cuando se establecen los límites, utilice x cmd para volver al menú CONFIGURACIÓN y luego puede utilizar r cmd para abrir el menú EJECUTAR

RUN MENU pos: 0 sp: 3.31 + Lim: 500000 -Lim: -500 LATENCY: stepper: 944uS loop: 5796uS + - Acelerar - - Acelerar abajo h - goHome. - hardStop - Freeze Speed> + pos: 4 sp: 9.49 + Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS pos: 42 sp: 29.15 + Lim: 500000 -Lim: -500 LATENCY: stepper: Bucle 792uS: 5664uS pos: 120 sp: 49.09 + Lim: 500000 -Lim: -500 LATENCIA: paso a paso: 792uS bucle: 5664uS pos: 238 sp: 69.06 + Lim: 500000 -Lim: -500 LATENCIA: paso a paso: 792uS bucle: 5664uS

El + cmd comienza a acelerar en la dirección de avance e imprime la posición y la velocidad cada 2 segundos. Cuando el motor alcanza la velocidad deseada, puede detener la aceleración con cualquier otra tecla (o una entrada vacía). Puede reducir la velocidad usando - cmd hacia abajo para detener. Si se detiene, el - cmd acelerará en reversa.

Este menú EJECUTAR proporciona control manual de su proyecto. Para el control automático, deberá agregar algunos otros sensores.

Paso 5: latencia

El control del motor paso a paso depende del software que controla cada paso. Para mantener la velocidad establecida, su boceto necesita llamar al método stepper.run () con la frecuencia suficiente para disparar el siguiente paso en el momento adecuado para la velocidad actual. Para el control mediante sensores, debe poder procesar rápidamente nuevas mediciones. La impresión de posición / velocidad incluye dos medidas de LATENCIA para permitirle comprobar que su boceto es lo suficientemente rápido.

Latencia paso a paso (pfodBufferedStream)

La latencia paso a paso mide el retraso máximo entre llamadas sucesivas al método stepper.run (). Para hacer funcionar el motor paso a paso a 1000 pasos por segundo, la latencia paso a paso debe ser inferior a 1000 uS (1 mS). La primera versión de este boceto tuvo una latencia de muchos milisegundos. Para superar estas llamadas adicionales al método runStepper () (que llama a stepper.run ()) se agregaron a través del código. Esto no resolvió completamente el problema porque el menú y las instrucciones de impresión de salida bloquearon el boceto una vez que el pequeño búfer Serial Tx estuvo lleno. Para evitar este bloqueo, se usó pfodBufferedStream de la biblioteca pfodParser para agregar un búfer de impresión de salida de 360 bytes en el que las declaraciones de impresión pudieran escribir rápidamente. Luego, pfodBufferedStream libera los bytes a la velocidad en baudios especificada 115200 en este caso. pfodBufferedStream tiene la opción de bloquear cuando el búfer está lleno o simplemente eliminar los caracteres de desbordamiento. Aquí está configurado para eliminar cualquier carácter adicional cuando el búfer está lleno para que el boceto no se bloquee esperando a que Serial envíe los caracteres.

Latencia de bucle (entrada sin bloqueo)

La latencia del bucle mide el retraso máximo entre llamadas sucesivas al método loop (). Esto establece qué tan rápido puede procesar nuevas mediciones de sensor y ajustar la velocidad establecida del motor. La rapidez con la que debe ser depende de lo que esté tratando de controlar.

Los retrasos debidos a las declaraciones de impresión se eliminaron mediante el uso de pfodBufferedStream anterior, pero para procesar la entrada del usuario, debe tomar el primer carácter de la entrada e ignorar el resto de la línea. La clase NonBlockingInput en la biblioteca pfodParer se usa para devolver un carácter distinto de cero cuando hay una entrada, usando readInput (), y para borrar y descartar los siguientes caracteres, usando clearInput (), hasta que no se reciban caracteres durante 10mS sin bloquear el bucle ()

Por supuesto, la latencia del bucle aumentará con el código adicional que agregue para leer los sensores y calcular la nueva velocidad establecida. Muchas bibliotecas de sensores toman el tipo de corte de simplemente usar el retraso (..) entre el inicio de una medición y la recuperación del resultado. Deberá volver a escribir estas bibliotecas para usar millisDelay en su lugar, para recoger la medición después de un retraso adecuado sin bloqueo.

Paso 6: Ejecución de SpeedStepperSetup con un motor paso a paso y SparkFun Redboard Turbo

Running SpeedStepperSetup con un motor paso a paso y SparkFun Redboard Turbo
Running SpeedStepperSetup con un motor paso a paso y SparkFun Redboard Turbo
Running SpeedStepperSetup con un motor paso a paso y SparkFun Redboard Turbo
Running SpeedStepperSetup con un motor paso a paso y SparkFun Redboard Turbo

Para ejecutar el boceto SpeedStepperSetup de verdad, necesitará un motor paso a paso, un controlador y una fuente de alimentación y, en este ejemplo, SparkFun Redboard Turbo.

El diagrama de cableado anterior (versión pdf) muestra las conexiones. En el boceto SpeedStepperSetup, cambie la definición de SERIAL a #define SERIAL Serial1

Motor paso a paso, fuente de alimentación, controlador y protección

Hay muchos tipos y tamaños de motores paso a paso. Aquí se utiliza un motor paso a paso de dos bobinas de 12V 350mA para la prueba. Para alimentar este paso a paso, necesita una fuente de alimentación de 12 V o más y superior a 350 mA.

Esta biblioteca solo proporciona una salida de dirección y paso, por lo que necesita un controlador para interactuar con el motor paso a paso. Easy Driver y Big Easy Driver controlan la corriente a las bobinas del motor para que pueda usar una fuente de alimentación de un voltaje más alto de manera segura, por ejemplo, usando una fuente de 6V para un motor de 3.3V. El Easy Driver puede suministrar entre 150 mA / bobina y 700 mA / bobina. Para corrientes más altas, el Big Easy Driver puede suministrar hasta 2 A por bobina. Lea las preguntas frecuentes al final de la página de Easy Drive.

Estos ejemplos utilizan D6 y D7 como salidas de paso y dirección. Puede cambiar los pines de salida a cualquier salida digital cambiando las configuraciones STEP_PIN y DIR_PIN cerca de la parte superior del boceto.

Programación del Sparkfun Redboard Turbo

Programar el Redboard Turbo es problemático. Si no se programa, primero presione el botón de reinicio una vez y vuelva a seleccionar el puerto COM en el menú Herramientas de Arduino y vuelva a intentarlo. Si eso no funciona, presione dos veces el botón de reinicio e intente nuevamente.

Cableado del Easy Driver

Los motores paso a paso de dos bobinas tienen 4 cables. Use un multímetro para encontrar los pares que se conectan a cada bobina y luego conecte una bobina a los terminales A del Easy Driver y la otra bobina al terminal B. No importa en qué sentido los conecte porque puede usar el s cmd en el menú de configuración para cambiar la dirección del movimiento.

La fuente de alimentación del motor está conectada a M + y GND Establezca el nivel lógico de la placa con el enlace de 3 / 5V. Conecte el enlace para salidas de microprocesador de 3.3V, como el SparkFun Redboard Turbo (si lo deja abierto, es adecuado para señales digitales de 5V, por ejemplo, UNO, Mega) Conecte los pines GND, STEP, DIR al microprocesador GND y al paso y pines de salida dir. No se necesitan otras conexiones para impulsar el motor.

Cable serie USB a TTL

Cuando mueva el boceto SpeedStepperSetup del Uno / Mega al Redboard Turbo, ingenuamente, simplemente reemplace #define SERIAL Serial con #define SERIAL SerialUSB para adaptarse a la conexión serial USB Redboard Turbo, sin embargo, encontrará que la latencia paso a paso resultante es de aproximadamente 10mS. Eso es 10 veces más lento que para UNO. Esto se debe a cómo la CPU Redboard maneja la conexión USB. Para superar esto, conecte un cable serial USB a TTL a D0 / D1 y configure # define SERIAL Serial1 para usar la conexión serial de hardware para controlar el motor paso a paso. El uso de Serial1 da LATENCY: stepper: 345uS loop: 2016uS, que es 3 veces más rápido que el UNO para la latencia de stepper y loop

Programa de terminal

El monitor serial Arduino es un poco más difícil de usar para controlar el motor paso a paso, ya que debe ingresar el carácter en la línea cmd y luego presionar Enter para enviarlo. Un medio más rápido y con mayor capacidad de respuesta es abrir una ventana de terminal, TeraTerm para PC (o CoolTerm Mac), conectado al puerto COM del cable USB a TTL. Luego, en esa ventana, presionando una tecla cmd se envía inmediatamente. Al presionar Enter, simplemente envíe una línea vacía.

Configuración del rango de velocidad del motor

Como se conectó anteriormente, el Easy Drive está configurado para 1/8 de pasos, por lo que 1000 pasos / segundo harán girar el motor a 1000/8/200 pasos / revolución = 0.625 revoluciones por segundo o 37.5 rpm como máximo. Al cambiar las entradas a MS1 / MS2, puede cambiar entre 1/8, ¼, ½ y pasos completos. Para pasos completos, conecte MS1 y MS2 a GND. Esto permitirá velocidades de hasta 300 rpm. La elección de la configuración adecuada de MS1 / MS2 le permite ajustar la relación de transmisión instalada entre el motor y la parte impulsada.

Protección de hardware

Si bien la biblioteca SpeedStepper le permite establecer límites de posición en el movimiento del motor, la virada de la posición se realiza contando los pasos generados por el software. Si el motor se para, es decir, el par es insuficiente para impulsar el motor al siguiente paso, la posición del software no estará sincronizada con la posición del motor. Luego, cuando use el comando 'goHome', el motor sobrepasará la posición inicial. Para evitar daños en el hardware, debe instalar interruptores de límite en los límites estrictos para desconectar la fuente de alimentación del motor.

Configuración del límite de corriente del motor

Primero, ajústelo al ajuste más bajo del potenciómetro. es decir, el voltaje en TP1 es mínimo. El potenciómetro es delicado, así que no fuerce el potenciómetro más allá de los topes mecánicos. Configure el motor conduciendo a una velocidad lenta constante o lenta, luego gire lentamente el potenciómetro hasta que el motor no salte ni se mueva entre pasos.

Conclusión

Este proyecto muestra cómo utilizar la biblioteca SpeedStepper en una aplicación práctica. Si bien la biblioteca AccelStepper proporciona un buen control de posición, el control de velocidad era necesario para la sonda prototipo de fusión de hielo para recolectar muestras biológicas en Europa, por lo que la biblioteca AccelStepper se reescribió para proporcionar control de velocidad con límites finales y una función goHome.

Recomendado: