Problemas de inconsistencia con el motor paso a paso

Estoy tratando de hacer que mi motor paso a paso gire 90 grados, se detenga por un segundo y repita estos pasos.

Tenga en cuenta que soy un principiante, pero he tomado cursos de física, por lo que entiendo la mayoría de los conceptos básicos de electrónica, como voltaje, amperaje, serie, paralelo, resistencia, etc.

Entonces, la forma en que estoy configurando esto es con una raspberry pi conectada a un controlador de motor paso a paso Pololu a4988 que emite 2 amperios con un enfriamiento óptimo y 12v, con un motor paso a paso bipolar que tiene una clasificación de 2/amperios por fase y está recibiendo 12v . Los motores están alimentados por una fuente de alimentación de 30 amperios y 12 voltios.

Todo está cableado de acuerdo con el diagrama adjunto y ha sido probado muchas veces. Se han utilizado muchos scripts diferentes, y actualmente estamos usando un script de Python del RPI que ejecuta 50 pasos (90 grados), luego espera un segundo. Este código funciona y es correcto, porque a veces funciona. Cuando está funcionando, el motor se calienta, pero no está caliente al tacto. Además, cuando está encendido pero no ejecuta el código, a veces zumba y hace clic, sin moverse. Las fuentes en línea dijeron que esto estaba bien.

Parece ser muy aleatorio cuando funciona y cuando no funciona, por ejemplo, al probar la corriente que pasa por uno de los cables de la bobina usando un multímetro conectado en serie, el motor funciona perfectamente, pero cuando no está el multímetro, el el motor se asusta, zumba y cambia de dirección erráticamente, una teoría mía sobre por qué esto se debe a la resistencia adicional, en cuyo caso poner una resistencia en serie puede solucionar el problema, pero no parece abordar la raíz de la cuestión.

Otras acciones tomadas: -Usar un arduino uno en lugar de Pi, los mismos problemas -Ejecutar el código de diferentes maneras, diferentes bibliotecas, etc. -Cambiar a un motor y un controlador diferentes. -re-cableado todo varias veces -ajustando el tornillo de control de voltaje en el controlador. -Proporcionó refrigeración adecuada a la fuente de alimentación y al controlador (2 ventiladores de computadora de 120 mil)

https://i.imgur.com/Ku2UgAxl.jpg

-- diseño de cableado

https://i.imgur.com/undefined.jpeg -- imagen de configuración

https://i.imgur.com/Fx7ErH1.jpg

-- código utilizado

Cualquier ayuda o sugerencia sería muy apreciada, se han invertido demasiadas horas en esto. LMK si se necesita información adicional.

He alineado dos de las imágenes para usted. ¿Puede cargar el segundo como jpg en lugar de jpeg y alinearlo usted mismo? El código realmente debe pegarse usando la etiqueta de código para que pueda copiarse y editarse en las respuestas. El tuyo es bastante simple esta vez.
¿Por qué no inserta un retraso entre sus dos líneas de salida GPIO en el ciclo for? No sé si su controlador lo necesita, pero tal vez un ciclo de trabajo "más cercano al 50%" podría ayudar. ¿Ya lo has probado? ¿O hay una buena razón para no intentarlo?
Acordado. Estás encendiendo 21 y al instante apagándolo. Es posible que el controlador paso a paso no registre el pulso.
"randomworks/not_works" sugiere un problema de bucle de tierra... estos chips todo en uno tienen una lógica de tierra común con la tierra de suministro paso a paso. Las corrientes transitorias de impulsos escalonados muy grandes pueden causar estragos en las entradas de control lógico. Y los transitorios también pueden alterar las entradas flotantes de un microcontrolador cercano.
Perdón por el mal formato, y como se dijo en otra parte, los retrasos entre ciclos y potencias se han intentado con el mismo efecto. @glen_geek, ¿tiene alguna idea sobre cómo solucionar el problema que describió? Gracias a todos.
@JakeChunn Tanto la tierra lógica como la tierra de la fuente de alimentación del motor paso a paso van a un solo punto: en la placa del controlador que ha mostrado en el esquema. Agregue un condensador de derivación de fuente de alimentación grande justo en la placa del controlador también. Trence los cables del motor paso a paso.
@JakeChunn Sería genial si pudiera editar su pregunta y pegar el código, use el 'botón de código' para formatear el código. Escriba una pregunta específica clara para que pueda obtener buenas respuestas
Conecte el pin ENABLE a GND; en el diagrama, está flotando, por lo que puede resultar en un funcionamiento aleatorio. Además, conecte SLEEP y RESET a Vdd.

Respuestas (2)

Varias posibilidades:

Puede intentar agregar demoras para obtener un ciclo de trabajo del 50% como lo sugiere jonk.
...
GPIO.salida(21,verdadero)
tiempo.reposo(0.01)
GPIO.salida(21,falso)
tiempo.reposo(0.01)
...

También puede intentar agregar rampas de aceleración y desaceleración a su código y usar una biblioteca Arduino que las admita (como AccelStepper).

Además, el cambio de contexto en Raspberry Pi provocará una falta de uniformidad en la sincronización del tren de impulsos escalonados, lo que se traduce en pedirle al motor que acelere y desacelere muy rápidamente, lo que puede exceder las capacidades de par del motor. El par del motor paso a paso generalmente cae con la velocidad de rotación, pero generalmente tiene una banda de resonancia donde el par cae casi a cero en un cierto rango de velocidad. Poner un volante en el eje (u otra carga con un poco de inercia angular) puede minimizar el efecto de resonancia.

El bit banging del espacio de usuario no es una forma sólida de conducir un motor paso a paso, al menos no por encima de velocidades discretas. Pero parece que hay algo más mal incluso antes de eso.
Hemos colocado inercia en el eje, aparentemente no tiene efecto, y su código recomendado es una de las muchas variaciones que hemos probado, cualquier cantidad de retrasos no tiene efecto en la irregularidad. Creo que Chris tiene razón.

Esto se hace eco de varias observaciones/sugerencias de otros, además de haber realizado un control paso a paso utilizando A4988 más de una vez, mi lista de lavandería (en orden) sería;

  • Conecte los pines flotantes en el controlador (lea la hoja de datos)
  • Verifique su conexión a tierra, verifique que sus dos conexiones a tierra estén correctamente unidas y que no peleen entre sí / torturen el chip / intenten alejarse flotando el uno del otro.
  • Mire los condensadores de desacoplamiento / suavizado y las ferritas en el lado lógico de las cosas, los controladores paso a paso son eléctricamente muy ruidosos, especialmente cuando se realizan micropasos.
  • Verifique que el A4988 no se esté sobrecalentando, pueden administrar un máximo absoluto de 2 A en una PCB bien diseñada con buena refrigeración, pero montados en una placa de estilo StepStick pequeña estándar, tienen casi cero esperanzas de evitar el apagado térmico, incluso con los pequeños disipadores de calor populares. pegarse a ellos.
  • No use código que no sea en tiempo real/espacio de usuario para controlar un dispositivo de tiempo crítico como un paso a paso, eventualmente lo morderá incluso si "funciona en su mayoría".
  • Si no comprende por qué el control en tiempo real es importante para controlar dispositivos físicos como motores, aprenda un poco sobre el tema.
  • Agregar un microcontrolador entre Pi y el controlador, con un código preciso en tiempo real o usar temporizadores de hardware para generar formas de onda cronometradas con precisión con ciclos de trabajo sensibles y aceleración/desaceleración es una forma más agradable de lograr lo que necesita. Hay muchos ejemplos de código abierto de esto en impresoras 3D, fresadoras/enrutadores CNC, etc., etc., etc.
  • Las sugerencias sobre tiempos más uniformes en su código son buenas, incluso si no solucionaron su problema subyacente, debe comprender por qué son buenas.
  • Si tiene acceso a un osciloscopio, busque líneas ruidosas y formas de onda mal formadas.
  • Si no tiene acceso a un osciloscopio, consígalo.