[Serial] [Stepper] [Motor] Control de posición de motores de pasos.

250 views
Skip to first unread message

Democrito

unread,
Jun 24, 2020, 6:00:02 PM6/24/20
to FPGAwars: explorando el lado libre
Hola,

He diseñado un circuito muy sencillo para controlar la posición absoluta de un motor de pasos.

serial_stepper.PNG

Desde el serial le puedes dar una posición (absoluta) desde 0 hasta 65535, pulsas enter y allí irá. Los baudios por defecto están a 115200 y la velocidad del motor se configura como frecuencias en hercios; dicha frecuencia conviene configurarla con un valor bajo y luego subirla hasta una que te sea óptima.


La posición que le damos es absoluta, eso significa que si le decimos que vaya a la posición 100 el motor se moverá 100 pasos hacia delante, y si luego enviamos 25, se moverá 75 pasos hacia atrás y quedará en la posición 25. Es como señalar con un dedo en una regla, si te dicen que lo muevas tu dedo a la posición 100cm recorres la regla hasta la posición 100cm y si luego has de ir a la posición 25cm pues deslizas el dedo hasta esa posición. Lo comento por si las moscas, ya que existen posiciones absolutas (como en este proyecto), y las posiciones relativas que es cuando sumas o restas un valor dado a la posición en la que se encuentra el motor en ese momento.


Una cosa muy importante a tener presente es que está pensado para controlar un motor Nema ( en mi caso el 17) que es bipolar. Para otros motores, especialmente los unipolares, se requiere ir al módulo que hay en el interior que se encarga de dar las secuencias al motor y cambiar esa tabla por la que le corresponda a tu motor. O en el caso de que ya tengas un módulo que controle un motor de pasos con señal de entrada "dirección" y "paso", lo puedes sustituir.


El ejemplo que adjunto está probado y funciona perfectamente, incluso he intentado provocar errores mándándolo a una posición muy larga, y mientras iba a esa posición cambiar a otra en sentido contrario, así varias veces, y cuando le pido finalmente que vaya a la posición 0, vuelve sin haber perdido ningún pulso.


Saludos.

ejemplo_Position_serial_Stepper.ice

Democrito

unread,
Jun 24, 2020, 9:43:57 PM6/24/20
to FPGAwars: explorando el lado libre
Este post es sólo comentar una curiosidad. Hace un poco más de dos años tomé el famoso motor de pasos 28BYJ-48 que es unipolar y lo convertí en bipolar.

Los motores unipolares se controlan con un ULN2003 o bien con 4 simples transistores, y los motores bipolares se controlan con un puente en H. Quería usar ese pequeño motor y controlarlo desde una RAMPS 1.4 (es donde van todos los drivers de los motores de la impresora 3D) pero para ello se necesitaba que el motor fuese bipolar. Encontré en su momento información para convertir de unipolar a bipolar y lo pude poner en marcha.

Estos motores tienen dos versiones, los de 5v y los de 12v, los que compré son de 12v. Son exactamente iguales, sólo cambia la tensión de alimentación.

Si alguien tiene más de un motor de este tipo y quiere probar y tiene un puente en H, dejo info de cómo proceder.


Lo acabo de probar de nuevo con el ICE que puse arriba y sigue yendo bien. Lo malo que tiene estos pequeños motores es que posee mucho juego (backlash) y no se le puede pedir demasiada potencia. Soporta 300 Hz de frecuencia sin perder pasos teniendo un poco de fuerza.

Se me olvidó decir que los Nema consumen mucha corriente porque sus bobinas tienen poca resistencia y para evitar quemar el puente en H lo que hago es controlar la potencia; quiero decir que como no puedo controlar la corriente pero sí puedo controlar la tensión de alimentación lo que hago es regular la tensión y la voy subiendo hasta notar que el puente en H se calienta sólo un poco (que no llega a quemar).

Juan Manuel Yañez

unread,
Jun 25, 2020, 2:11:11 AM6/25/20
to FPGAwars: explorando el lado libre
Buenísimo

charli va

unread,
Jun 25, 2020, 2:18:48 AM6/25/20
to fpga-wars-explora...@googlegroups.com
¡Que grande Demócrito! ya podemos pensar como agrupar todos estos .ices que vais soltando por la lista! no se puede desperdigar este conocimiento!.

Si podéis ir añadiendo los enlaces al hilo en el excel que pasé estaría genial.

El jue., 25 jun. 2020 a las 8:11, Juan Manuel Yañez (<jmya...@gmail.com>) escribió:
Buenísimo

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/880e9663-0d11-48ad-acec-ded56fe07ea9o%40googlegroups.com.

Obijuan

unread,
Jun 25, 2020, 3:42:11 AM6/25/20
to FPGAwars: explorando el lado libre
Buenísimo! ¡Gracias por compartir!  Esto se está poniendo muy interesante 🙂

Saludos, Obijuan

Democrito

unread,
Jun 27, 2020, 4:27:46 AM6/27/20
to FPGAwars: explorando el lado libre
Mirando la tabla que secuencia la salida para el motor de pasos, me vino el pensamiento de que (en el pleistoceno) no usábamos tablas para controlar un motor de pasos, me refiero con electrónica pura, con un Arduino es lo que se suele hacer. Sabía que había una puerta xor y que iba conectado a un contador. Me puse con un lápiz y papel hasta volver a sacar esa lógica de control.

Entonces pasamos de esto:

logica table.PNG


A esto otro:

logica control.PNG

No es tan bonito y ordenado, pero utiliza muchos menos recursos, sólo tres puertas. Una tabla supongo que o bien usa memoria interna o bien flips-flops multiplexados (que en realidad es lo mismo).

Lo he probado y funciona perfecto. No importa que un motor sea bipolar o unipolar, es un recableado. Si encuentro un ULN2003 sacaré dos versiones para el driver del motor (bipolar y unipolar) y así podremos tomar con el que más cómodo nos sintamos.


Cómo funciona:

stepper motor logic control.PNG

El gráfico lo explica todo, es todo muy lógico!

Otra cosa que podemos observar es que las señales originales (o sus inversas) son exactamente iguales que las de un encoder incremental.

Saludos.



Democrito

unread,
Jun 27, 2020, 6:10:23 PM6/27/20
to FPGAwars: explorando el lado libre
Hola de nuevo,

He conseguido hacer un controlador de motor de pasos genérico; por "genérico" me refiero a que tiene "homing" y por tanto reset, y además permite la opción de "shutdown", esto último significa que puede tener el motor siempre alimentado o bien "permitir que descanse" pasado un tiempo. Aunque esto último no es una opción recomendable puede ser útil en ciertos casos, por ejemplo, si el driver del motor se calienta demasiado.

stepper control motor with reset & shutdown.PNG

En el ejemplo he configurado una velocidad del motor de "100" que es la frecuencia en hercios a la que marcará cada paso. Un "shutdown" de 5 segundos (5000 porque es en milisegundos) y los baudios es el estandar que estamos usando normalmente, de 115200.

A través del serial le das una posición y allí irá. Al arrancar el circuito interpretará que está en la posición 0 porque no hay referencias, sin embargo esto es interesante cuando se hacen pruebas, que no importe que haya una posición 0 real. Si deseas que el motor busque la posición 0, has de dar un 1 (temporal) en "home", entonces el motor irá hacia atrás (8 veces más lento que la velocidad de crucero) y no parará hasta que haya un 1 (temporal) en reset (pin de entrada "rst" de las Alhambras) se supone que ahí se encuentra una foto-célula o un microrruptor (en este ejemplo es el pin de entrada "SW2" de las Alhambras). Una vez hecho eso considerará esa posición como 0; lo puedes probar tantas veces como quieras.

La patilla "shdw" (shutdown) hay que tener consciencia si la utilizas. Se trata de que si está a 0, el motor siempre estará en marcha o frenado, pero si esa patilla está a 1, cuando el motor se para y transcurrido un tiempo configurable, pondrá las salidas a 0 y el motor quedará suelto. Al dejar el motor suelto puede suceder que se pierda algún paso. Está ahí por si alguien tiene el problema de que se le calienta demasiado el puente en H o no le importe perder algún paso. Por defecto lo he dejado con el "shutdown" activado (con un 1), pero más que nada para comprobar que funciona. Una vez que el motor se para, transcurrido 5 segundos el motor quedará "suelto". Para que el motor siempre esté "imantado" pon un 0 en esa patilla.

Mañana me pondré a investigar la diferencia entre motores de pasos bipolares y unipolares. Sé que las señales son las mismas, pero cada tipo de motor lleva una forma de cablearse. Lo que quiero decir es que estos circuitos sirven para los dos tipos, pero hay que saber cablearlos (que no es cabrearlos).

Saludos.
ejemplo.ice
serialStepper.ice

Democrito

unread,
Jun 27, 2020, 6:28:54 PM6/27/20
to FPGAwars: explorando el lado libre
Un último apunte, conseguí mover un Nema (17) a 470 (Hz) pasos por segundos, que no está nada mal para hacerlo funcionar "a paso completo". Quizás con un driver de impresora 3D se le pueda sacar aún más partido. Para conseguir altas velocidades es necesario alimentar el motor con bastante corriente y esa es la razón por la que implementé el "shutdown" que en mi caso lo dejo a unos 50 segundos, por si se me olvida apagar la fuente.

Democrito

unread,
Jun 28, 2020, 3:01:11 AM6/28/20
to FPGAwars: explorando el lado libre
Acabo de corregir dos cosas y mejorado otras, que aunque no daban problemas nunca se sabe. Vuelvo a re-subir en este post los circuitos corregidos y mejorados.

Había puesto una puerta AND en la entrada de RX:

notOK.PNG

Eso puede traer problemas porque si no hay actividad en la entrada RX ha de estar siempre a 1. Cuando la patilla RX se pone a 0 puede interpretar que comienza la comunicación. Es por eso que una puerta AND nunca debe estar en la entrada de RX.

Lo he corregido de esta forma:

OK.PNG

El receptor serie ahora podrá trabajar sin problemas y lo que se evita (si fuese necesario) es la validación del dato. Esto lo he diseñado así para que cuando haga homing ignore cualquier entrada que le llegue (si ese fuese el caso, que no debería porque existe patilla de "busy" y "ready" para avisar cuándo está disponible).

La patilla "done" la he renombrado a "ready" (listo). Dará un tic cuando haga reset (para el homing), cuando llega a una posición y cuando se inicia (aquí sería como un "iniTic", tic inicial de estar listo para recibir una posición). En la anterior versión no me di cuenta que esta patilla estaba desconectada y ahora además de estar conectada tiene también esas mejoras.

También he modificado el temporizador de "Shutdown" porque estaba en milisegundos y no tenía mucho sentido eso aquí y lo he pasado a simplemente segundos.

Adjunto de nuevo los ICEs reparados y mejorados, y el módulo lo voy a re-subir a GitHub. 

Saludos.
serialStepper.ice
ejemplo.ice

Democrito

unread,
Jun 28, 2020, 8:21:25 PM6/28/20
to FPGAwars: explorando el lado libre
Hola una vez más.

He utilizado el ICE que subí en el post anterior y lo he probado con motores unipolares y sigue funcionando igual de bien como los bipolares.

Pongo un vídeo de demostración en el que controlo dos motores unipolares distintos. El driver que utilizo para manejar los motores es un único ULN2803, que no es un ULN2003, se diferencian en que el ULN2803 tiene 8 entradas/salidas en vez de 7. Las entradas del ULN2803 las puse en paralelo dos a dos, y las salidas 4 a cada motor.


El motor grande es de una vieja impresora de papel, a paso completo hace 48 pasos, por eso va tan rápido. El motor pequeño es el famoso 28BYJ-48 (sin trucar es unipolar) que como sabéis tiene mucha reducción y por ello va muy lento.

En mi caso para hacer el conexionado no he tenido que modificar el orden de los cables, me ha funcionado a la primera y he hecho intercambios de bipolar a unipolar y vice-versa, sólo cambiar el driver y poco más.

Saludos.

Pongo unos esquemas, donde las entradas D0, D1, D2 y D3 son las salidas de la Alhambra que utilizo para controlar el motor.

Esquema con motor de pasos bipolar:

bipolar.png

Esquema con motor de pasos unipolar:

unipolar.png

La primeras veces que se maneja este tipo de motores puede ser un poco confuso porque según el motor tienen diferentes cableados, pero una vez que le pillas la lógica se vuelven muy sencillos.

Los motores de pasos (sin importar que sean bipolares o unipolares) son ideales para posicionar en lazo abierto (sin realimentación, es decir, ninguna referencia sobre su posición) confiando en que si tú le dices que dé tantos pasos, eso hará. Curiosamente tiene muchas cosas en común con los encoders incrementales, por las formas de onda y por la necesidad de tener un punto 0 (en algunos casos) al iniciarse.

Saludos.

Democrito

unread,
Jun 28, 2020, 8:35:28 PM6/28/20
to FPGAwars: explorando el lado libre
Como curiosidad dejo un vídeo de ejemplo donde usan un motor de pasos como si fuese un encoder incremental. Aviso: requiere acondicionar las señales que produce el motor con amplificadores operacionales.

ANDRES AMAUTA GONZALESZAPATA

unread,
Jun 28, 2020, 10:48:48 PM6/28/20
to fpga-wars-explora...@googlegroups.com
felicidades Democrito!

El dom., 28 jun. 2020 a las 19:35, Democrito (<spo...@gmail.com>) escribió:
Como curiosidad dejo un vídeo de ejemplo donde usan un motor de pasos como si fuese un encoder incremental. Aviso: requiere acondicionar las señales que produce el motor con amplificadores operacionales.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Advertencia legal: 
Este mensaje y, en su caso, los archivos anexos son confidenciales, especialmente en lo que respecta a los datos personales, y se dirigen exclusivamente al destinatario referenciado. Si usted no lo es y lo ha recibido por error o tiene conocimiento del mismo por cualquier motivo, le rogamos que nos lo comunique por este medio y proceda a destruirlo o borrarlo, y que en todo caso se abstenga de utilizar, reproducir, alterar, archivar o comunicar a terceros el presente mensaje y ficheros anexos, todo ello bajo pena de incurrir en responsabilidades legales. Las opiniones contenidas en este mensaje y en los archivos adjuntos, pertenecen exclusivamente a su remitente y no representan la opinión de la Universidad de Cuenca salvo que se diga expresamente y el remitente esté autorizado para ello. El emisor no garantiza la integridad, rapidez o seguridad del presente correo, ni se responsabiliza de posibles perjuicios derivados de la captura, incorporaciones de virus o cualesquiera otras manipulaciones efectuadas por terceros.

charli va

unread,
Jun 29, 2020, 2:33:05 AM6/29/20
to fpga-wars-explora...@googlegroups.com
Que gran hilo de motores Demócrito!! 

Gracias!

Reply all
Reply to author
Forward
0 new messages