Interfaz para controlar un motor paso a paso

Subforo dedicado exclusivamente a la electrónica y a la robótica, incluyendo la programación orientada a la robótica en sí.
Robots con patas, ruedas, orugas, humanoides, insectoides, ... ¡Sed todos bienvenidos!

Moderador: nake

Avatar de Usuario
barkeg
Robot, ¡mata a Flanders!
Mensajes: 391
Registrado: Lun Jun 07, 2010 8:56 pm

Interfaz para controlar un motor paso a paso

Mensajepor barkeg » Mié Abr 10, 2013 8:34 pm

Necesito controlar un motor paso a paso mediante un programa escrito en C++ por ordenador. Tiene que ser por USB y mejor que no dependa del sistema operativo (quiero decir dentro de Windows no cambie con las versiones). Es para un proyecto que no puedo meter mucho tiempo ir trasteando con un PIC y montar un circuito etc. Quiero algo que sea más o menos barato, fíable y que funcione.
Le había hechado un ojo a circuitos ya hechos que vienen con la librería para C++ y son bastante fáciles de usar. El problema que tengo es que el eje final del reductor al que está conectado el motor paso a paso tendrá una resolución de 0.018º. Importa mucho la posición inicial a la que está el eje y que siempre sea la misma. Por ello he llegado a la conclución que lo mejor es poner un encoder (u opto interruptor) mediante el que al encender se lleva el eje a la posición que toca. Esto ya no se podrá hacer con un circuito de los que había mirado.

He pensado en usar un Arduino. Pero nunca he trabajado con uno. Cómo sé que aquí hay algunos que lo usan, como veís el tema de la comunicación entre PC y Arduino por USB? Y eso usando C++? El programa que manda los datos tiene que estar escrito en C++ sí o sí. Y recordad que no puedo perder 2 semanas en hacer funcionar un motor paso a paso. Si pìerdo el tiempo en chorradas así no se acaba nunca ;)
El conocimiento humano pertenece al mundo!
Avatar de Usuario
nake
管理者 (Admin)
Mensajes: 1993
Registrado: Vie Jun 04, 2010 4:10 pm
Ubicación: (sin(3t), 0, 0, t+10)
Contactar:

Re: Interfaz para controlar un motor paso a paso

Mensajepor nake » Mié Abr 10, 2013 10:06 pm

Jaja, que específico.
Si quieres usar USB creo que hay pocas opciones a parte de un microcontrolador.
No te recomendaría un arduino para esto, sería matar moscas a cañonazos y además muy caro para lo que vas a hacer.
Pilla un controlador de paso a paso. Yo tengo uno que dice llamarse ULN2003AN que me venía en un pack, no está mal pero tampoco he visto otros. Y no son caros.
Necesitas uno de esos o similar para evitar quemar el circuito. Un motor consume mucha intensidad.

El PaP que tengo yo tiene 4 cables + GND, así que necesitas un micro para pasar de USB a los 4 cables del PaP.
Montarte un software para comunicarte de forma básica con el PIC no debería de ser difícil.

Como digo, yo no usaría un arduino si pudiese evitarlo. Pero con uno se puede hacer en unos minutos.
La comunicación por USB es trivial, y luego mandar datos por el puerto al ULN2003AN es una tontería. Pero estás pagando entre 20€ y 40€ por una cosa que puedes hacer en una tarde con un poco de investigación por 3€ u 8€. Y total, si vas a aprender a usar arduino igualmente tardarás una tarde en montarlo.

Puedes preguntar también en el foro del polibot, uno de los de ahí está preparando uno de los seminarios sobre comunicación PIC - USB. Otra cosa es que te conteste pronto...

También puedes buscar un PIC de los que tienen puertos USB integrados (la serie PIC18)
Yo lo digo porque un Arduino te puede salir casi 10 veces más caro y lo único que te ofrece es que no tienes que saber cómo funciona la electrónica o el protocolo USB.

Aunque luego seguro que acabas comprando un arduino... xDD

Luego, sea arduino o no tienes que usar alguna librería para comunicarte por USB. Personalmente nunca lo he hecho, pero probablemente tendrías que usar el API de windows. No creo que varíe demasiado entre versiones de windows, pero como poder, podría hacerlo.
Si no quieres tener problemas: usa linux. xD
Lo único que tendrías que hacer es mirar algún tutorial o algo.
Mira esto a ver: https://www.mikroe.com/esupport/index.p ... itemid=163
O busca solo algo de comunicación USB desde C++, y luego ya lo adaptas a tu circuito. Total, USB es un protocolo universal, solo tienes que crearte tu subprotocolo interno (AKA: 0x01 quiere decir avanza, 0x02 para, etc)

Si tienes más dudas pregunta! Y suerte.
Mi clave pública de correo electrónico: http://www.nakerium.com/nakerium.gpg (Si no sabes lo que es lee este artículo)
Click aquí para ver mi email.


Programo aplicaciones a la carta (con soporte de por vida, para ingeniería o informática) y doy asesoramiento en seguridad informática. Si quieres más información mándame un email o un mensaje privado.
Avatar de Usuario
Darkage187
Linuxero
Mensajes: 129
Registrado: Mar Ene 08, 2013 12:45 pm
Ubicación: La máquina de Tron

Re: Interfaz para controlar un motor paso a paso

Mensajepor Darkage187 » Jue Abr 11, 2013 10:47 pm

xD buena respuesta nake. Es lo más eficiente, lo mío creo que es lo eficaz.

Si tu criterio es tiempo limitado en vez de dinero yo voto por Arduino, como dice nake, es más caro.

Programa en C++ que se comunique con puerto USB y envíe órdenes.

Programa en Arduino que recibe las órdenes y las pasa al motor. También recibe la info del encoder para saber la posición.

Lo positivo es la librería de control ya la tienes, aunque no estoy seguro que te puedas quitar el controlador PaP (o sustituirlo por circuitería) https://www.google.es/#hl=es&source=hp&biw=&bih=&q=step%20motor%20arduino%20library&aq=f&aqi=g10&aql=&oq=&gs_rfai=&fp=1&bav=on.2,or.r_cp.r_qf.&cad=b
Lo negativo es que la resolución máxima de Arduino es de 10bits para el puerto analógico, y 8bits para el digital (hasta 255), así que te puedes quedar corto.

Si te decides por esta solución mándame un privado.
Atentamente,

Darkage187
Avatar de Usuario
barkeg
Robot, ¡mata a Flanders!
Mensajes: 391
Registrado: Lun Jun 07, 2010 8:56 pm

Re: Interfaz para controlar un motor paso a paso

Mensajepor barkeg » Dom Abr 14, 2013 10:37 pm

Gracias! Al final voy a usar el Arduino con un circuito driver para el PaP. Para controlarlo basta con los puertos del Arduino.
El problema tengo al poner el motor a la posición de inicio. Lo quiero hacer mediante un final de carrera o algo parecido a parte de por software (contando los pasos que he hecho y deshacerlos) por si se va la luz o cualquier cosa imprevista. He pensado poner una pequeña palanca con un interruptor final de carrera. Pero no tengo muy claro que funcione siempre con la resolución de 0,018ºC. Es importante que sea exactamente la posición inicial. Según mis cálculos, si pongo una palanca de 1m (!!) con cada paso el otro final se movería 0,314mm. Así que... no sé si un final de carrera es tan exacto. Si por ejemplo pongo una palanca de 5cm serían 0,016mm. A parte de que el efecto de la temperatura de los materiales influye en dimensiones así de precisas.

He mirado encoders con tanta resolución y he encontrado alguno. Necesito de 15 bits por lo menos (a parte de que con el Arduino no tendría tantas entradas, pero esto es secundario de momento porque hay salidas que no haría falta usar). Pues, la sorpresa me llevé al mirar el precio de un encoder así.... 537€!! Así que esta opción queda descartada.

Una tercera opción sería usar un disco como si fuese un encoder pero solo con una única marca. Así con un opto interruptor podría detectar esta marca. El problema es la presición de este. Si se queda justo en el borde de la marca que pasa? No tiene importancia el ángulo exacto inicial, lo importante es que siempre sea exactamente el mismo.

Una cosa que he pensado es poner un pequeño espejo en el eje y lanzar un rayo laser a esté de forma que si el espejo se gira un cierto ángulo el rayo del laser reflejado varía su ángulo por el doble del valor del espejo. Podría usar distancias más largas que con una palanca y si consigo hacer un recorrido del laser para que refleja dos veces sobre espejos que están montado sobre el eje tendría un factor de amplificación de 4 del ángulo inicial girado.

A ver si alguno de vosotros tiene alguna idea más. El problema es que es un motor PaP con reductora pero viene montada y no creo que pueda acceder al eje del motor. Y si lo desmonto posiblemente pierdo precisión. Y tampoco me interesa poner engranajes después de la reductora porque con el juego de estos creo que no podría sacar mucha medida. El motor es el siguiente:http://www.robotshop.com/geared-bipolar-stepper-motor-3v-555-oz-in.html
El conocimiento humano pertenece al mundo!
Avatar de Usuario
nake
管理者 (Admin)
Mensajes: 1993
Registrado: Vie Jun 04, 2010 4:10 pm
Ubicación: (sin(3t), 0, 0, t+10)
Contactar:

Re: Interfaz para controlar un motor paso a paso

Mensajepor nake » Dom Abr 14, 2013 11:09 pm

Si necesitas tanta precisión, ¿por qué no un sevo y una reductora?
El servo te da poca precisión, pero como luego lo reduces, se queda en la precisión que necesitas.

El problema sería tener que construirlo.
Si quieres usar PaP, puedes hacer lo mismo, poner el encoder *antes* de la reductora.


barkeg escribió:Una tercera opción sería usar un disco como si fuese un encoder pero solo con una única marca. Así con un opto interruptor podría detectar esta marca. El problema es la presición de este. Si se queda justo en el borde de la marca que pasa? No tiene importancia el ángulo exacto inicial, lo importante es que siempre sea exactamente el mismo.

Lo que pasaría es que la señal puede que salte. Pero no creo que te importe la verdad.
Mira este pseudocódigo:

Código: [Seleccionar todo] [Download] GeSHi © Codebox Plus

func main()
while opto.read() == no_marca
motor.retrocede()
end
 
do.stuff()
end
 


Cuando detecta la marca sale del while (y el PaP ha llegado al punto de control).
Puede que luego el opto se ponga a saltar entre 1 y 0, pero ¿qué más da? Tu ya has llegado al punto y ya no vuelves a leer esa medida.
Mi clave pública de correo electrónico: http://www.nakerium.com/nakerium.gpg (Si no sabes lo que es lee este artículo)
Click aquí para ver mi email.


Programo aplicaciones a la carta (con soporte de por vida, para ingeniería o informática) y doy asesoramiento en seguridad informática. Si quieres más información mándame un email o un mensaje privado.
Avatar de Usuario
barkeg
Robot, ¡mata a Flanders!
Mensajes: 391
Registrado: Lun Jun 07, 2010 8:56 pm

Re: Interfaz para controlar un motor paso a paso

Mensajepor barkeg » Dom Abr 14, 2013 11:46 pm

El problema es que es un motor PaP con reductora pero viene montada y no creo que pueda acceder al eje del motor. Y si lo desmonto posiblemente pierdo precisión. Y tampoco me interesa poner engranajes después de la reductora porque con el juego de estos creo que no podría sacar mucha medida.


Eso responde lo de *antes* de la reductora. Y también lo del servo. No creo que pueda montar algo con tanta precisión.

Lo del opto es bueno opción. Lo importante es que siempre se pongo en 1 en el mismo sitio (aunque sea saltando)
El conocimiento humano pertenece al mundo!
Avatar de Usuario
nake
管理者 (Admin)
Mensajes: 1993
Registrado: Vie Jun 04, 2010 4:10 pm
Ubicación: (sin(3t), 0, 0, t+10)
Contactar:

Re: Interfaz para controlar un motor paso a paso

Mensajepor nake » Lun Abr 15, 2013 8:53 am

Lo que estoy mirando es si el opto da señal digital o analógica. Si es analógica es aún mejor. Busca a cuando llegue a 0.5 y sabrás el punto exacto.
Probablemente esa señal sí que salte bastante, pero es tan sencillo como mover el PaP despacio e ir haciendo una media de los últimos valores si salta demasiado (o poner un condensador para filtrar el ruido).

No se, tendrás que hacer pruebas, y si no te da la precisión que quieres aléjalo del eje.
Mi clave pública de correo electrónico: http://www.nakerium.com/nakerium.gpg (Si no sabes lo que es lee este artículo)
Click aquí para ver mi email.


Programo aplicaciones a la carta (con soporte de por vida, para ingeniería o informática) y doy asesoramiento en seguridad informática. Si quieres más información mándame un email o un mensaje privado.
Avatar de Usuario
Darkage187
Linuxero
Mensajes: 129
Registrado: Mar Ene 08, 2013 12:45 pm
Ubicación: La máquina de Tron

Re: Interfaz para controlar un motor paso a paso

Mensajepor Darkage187 » Lun Abr 15, 2013 2:41 pm

Creo que si quieres tanta precisión vas a necesitar el encoder o el servo, como dice nake.

Yo me he basado en un final de carrera para un proyecto y el error era menor de medio milímetro. Pero no te puedo asegurar que sea menor de una décima si se desgasta y cambia la temperatura. Estaba utilizando un motor muy muy lento.

Por otro lado, a lo mejor te vendría bien hacer un micrómetro y conectarlo paralelamente al PaP.
Atentamente,

Darkage187
Avatar de Usuario
barkeg
Robot, ¡mata a Flanders!
Mensajes: 391
Registrado: Lun Jun 07, 2010 8:56 pm

Re: Interfaz para controlar un motor paso a paso

Mensajepor barkeg » Mié Abr 17, 2013 12:16 pm

Posiblemente la mejor solución será escribir la posición actual del motor en memoria EEPROM. Así aunque se vaya la luz y el motor no ha vuelto a su posición inicial podré leer luego al volver a encender la posición del motor desde a memoria. Esto no debería dar ningun problema con un Arduino, no?
El conocimiento humano pertenece al mundo!
Avatar de Usuario
Darkage187
Linuxero
Mensajes: 129
Registrado: Mar Ene 08, 2013 12:45 pm
Ubicación: La máquina de Tron

Re: Interfaz para controlar un motor paso a paso

Mensajepor Darkage187 » Mié Abr 17, 2013 7:06 pm

Ninguno, y la librería es de lo más sencilla.
Atentamente,

Darkage187
Avatar de Usuario
nake
管理者 (Admin)
Mensajes: 1993
Registrado: Vie Jun 04, 2010 4:10 pm
Ubicación: (sin(3t), 0, 0, t+10)
Contactar:

Re: Interfaz para controlar un motor paso a paso

Mensajepor nake » Mié Abr 17, 2013 9:20 pm

Añade por si acaso alguna forma de reajustar la posición por si acaso se va del punto.
Por ejemplo, ¿y si está parado y lo fuerzan a moverse, por ejemplo al mover el aparato de un lado a otro o algo así?

Y luego, no se cómo es tu proceso así que puede que me equivoque, pero si por ejemplo guardas en la eeprom el dato cada paso que das (por si se va la luz o lo apagan a mitad), si te mueves digamos 50 pasos de ida, y otros 50 pasos para volver a la posición inicial, eso son 100 pasos por uso. Si se usa unas 10 veces en una sesión, eso te da 1000 escrituras por sesión. La eeprom está diseñada con un número máximo de escrituras de unos 100,000 ciclos. Eso te asegura que funcionará solo unas 100 sesiones sin fallar...

http://arduino.cc/en/Reference/EEPROMWrite

Y cada escritura cuesta 3.3ms de procesador. No se cómo de crítico te es el tiempo, pero es algo que a lo mejor deberías de tener en cuenta.


No quiero chafar a nadie, solo digo las pegas que veo para ver si encontramos una forma de mejorar la idea. Podrías por ejemplo cambiar la dirección de memoria en la que guardas cada cierto tiempo?

O mejor (aunque no se si es una opción). Por qué no lo mueves a la posición que tengas que llevarlo y haces una rutina para apagar que lo devuelva a la posición inicial antes de que apaguen el dispositivo. Si lo fuerzan apagado puedes ponerles una rutina de reajuste para que vuelvan a ponerlo manualmente o semi manualmente en la posición correcta.
Mi clave pública de correo electrónico: http://www.nakerium.com/nakerium.gpg (Si no sabes lo que es lee este artículo)
Click aquí para ver mi email.


Programo aplicaciones a la carta (con soporte de por vida, para ingeniería o informática) y doy asesoramiento en seguridad informática. Si quieres más información mándame un email o un mensaje privado.
Avatar de Usuario
barkeg
Robot, ¡mata a Flanders!
Mensajes: 391
Registrado: Lun Jun 07, 2010 8:56 pm

Re: Interfaz para controlar un motor paso a paso

Mensajepor barkeg » Jue Abr 18, 2013 9:47 pm

La verdad es que no había pensado en los cíclos de escritura ni en el tiempo que tarda en escribir. Sí, lo de de volver a la posición inicial después del proceso había pensado ya. Incluso se podría poner algun tipo de batería que permite llevar el motor a la posición inicial por si se va la luz. Lo normal es que por fuerza externa no se puede mover el motor mientras está apagado y porque con la reductora que lleva haría falta mucho par.

Otra cosa que no me convence del todo del método de la memoria es que igual al enchufar el motor da un paso para reajustarse cuando le llega la corriente. Eso ya fastidía la cuenta.

He hablado con un profesor mío y me ha dicho que me olvide de optointerruptores con tanta precisión. Lo mejor sería poner un decoder en el eje del motor antes de la reductora. Pero como ya viene todo montado no sé si podré hacer un apaño y meterlo. El otro lado del eje del motor ni se vé. Está tapado. Hasta que no lo tenga no puedo decir con seguridad que es posible.

Para empezar lo voy a montar de forma que vuelva a su posición inicial y ya veré si coge error o no con el tiempo.
El conocimiento humano pertenece al mundo!
sandino
¿Ordenador?¿Qué es eso? [Limitado]
Mensajes: 1
Registrado: Dom Ago 23, 2015 8:35 am

Re: Interfaz para controlar un motor paso a paso

Mensajepor sandino » Dom Ago 23, 2015 8:36 am

Hola,

Alguien que me pueda guiar con algo similar, estoy realizando un proyecto con un robot donde irá adaptada una unidad de extrusión de material, la alimentación se hace por medio de un motor paso a paso, quiero saber si es posible controlar los movimientos del motor a través del robot directamente o por medio de arduino, el robot tiene entradas y salidas digitales, la idea es usar una salida para dar la señal al arduino y que este da las órdenes al motor (accionamiento, cantidad de pasos, reversa, etc..) o hacerlo directamente desde la controladora del robot, alguien me puede orientar mejor?
Salud!
Avatar de Usuario
nake
管理者 (Admin)
Mensajes: 1993
Registrado: Vie Jun 04, 2010 4:10 pm
Ubicación: (sin(3t), 0, 0, t+10)
Contactar:

Re: Interfaz para controlar un motor paso a paso

Mensajepor nake » Dom Ago 23, 2015 9:44 pm

Caray! Has revivido un post de hace 2 años. Normalmente en estos casos es mejor empezar un tema nuevo pero bueno, da igual.

Los motores paso a paso necesitan una controladora externa siempre, es un pequeño (o grande si el motor es grande) chip que le da la energía que necesita a cada uno de los devanados del motor. Piensa que las salidas digitales de los arduino (y supongo que de tu robot) a penas pueden dar unos pocos miliamperios, mientras que el motor consume mucho más. Si lo conectases sin más seguramente quemes los pines digitales.

Cómo mandes información a esa controladora es indiferente. Se resume en dar señales digitales a la controladora, así que tanto el robot como un arduino serían idénticos.
La cuestión es si quieres (o puedes) poner el código que manda esas señales en el propio robot para ahorrarte el arduino y la comunicación con dicho arduino. Eso no te lo podemos contestar nosotros, depende del código de tu robot (si puedes perder tiempo mandando señales, o tienes timers disponibles para mandarlo mediante interrupciones, etc). Si quieres algo muy sencillo, hay librerías para motores paso a paso en arduino. Sería conectar y a correr. Aunque como suelo decir, arduino es más para jugar que para industria... Yo intentaría hacer las cosas bien en el robot si puedes y dejarte de arduinos externos.

En función del control que quieras puedes usar una controladora u otra. Las hay que hacen ellas los pasos (tan solo tienes que decirles que se muevan), y otras que solo dan potencia al motor (tienes que programar tu los pasos).
Las que he visto que hacen los pasos se basan en que tú les das pulsos, y cada pulso es un paso. De esa manera puedes controlar la velocidad, y con otro cable controlas la dirección. Por otro lado, las que solo dan potencia al motor tienes que usar tantas salidas digitales como cables tiene el motor (depende del tipo de motor paso a paso). Es más pesado ese tipo pero también es más barato y además tienes mucho más control (puedes hacer medios pasos o pasos completos, bloquear el motor, ...).

Busca webs de electrónica controladoras de motores paso a paso y elige la que mejor te venga teniendo en cuenta el motor que tienes.
Por ejemplo, en sparkfun está este: https://www.sparkfun.com/products/12779 que es de los sencillos que digo (tiene un pin de step y un pin de dirección) y permite controlar la resolución de los pasos en enteros, medios, cuartos y octavos.
Pero ya te digo que tendrás que mirar las especificaciones de tu motor para poder decidir un controlador u otro.


Saludos y bienvenido al foro! Si tienes problemas no dudes en preguntar
Mi clave pública de correo electrónico: http://www.nakerium.com/nakerium.gpg (Si no sabes lo que es lee este artículo)
Click aquí para ver mi email.


Programo aplicaciones a la carta (con soporte de por vida, para ingeniería o informática) y doy asesoramiento en seguridad informática. Si quieres más información mándame un email o un mensaje privado.
germansantos
¿Ordenador?¿Qué es eso? [Limitado]
Mensajes: 1
Registrado: Mar Jul 18, 2017 11:35 am
Contactar:

Re: Interfaz para controlar un motor paso a paso

Mensajepor germansantos » Mar Jul 18, 2017 11:40 am

Hola a todos,

Me he registrado en este blog en busca de información ampliada y me ha sido de gran ayuda. Compré el motor paso a paso en Moverica e incluye documentación en pdf en su página pero había puntos que no tenía claros. Gracias por vuestra ayuda.
Un saludo.

Volver a “Robótica y electrónica”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados