Motion Control and Motor Drives

cancel
Showing results for 
Search instead for 
Did you mean: 

Como puedo hacer con labview un programa para controlar el giro de dos motores paso a paso, uno en grados y otro solo lineal y poder observar en una gráfica su desplazamiento

Solved!
Go to solution

Hola cuento con la versión 2010 de labview y utilizo un puente H para darle potencia a los  motores  y hacerlos girar mandándoles por medio de una NI DAQ 6008 los pulsos necesarios para que se mueva por medio de un programa que ya realice. Ya cuento con el programa para que  el motor gire y desplace una platina de manera lineal, pero el motor que me interesa es el de movimiento rotacional ya que la base de este programa se enlaza con el de desplazamiento lineal. Lo que busco es que el motor gire en grados (ejemplo 60 grados) y se pueda ver su desplazamiento en una gráfica y que se le pueda dar la orden de que pueda dividir en 2,4,6 o n veces estos grados es decir que antes de llegar a los 60 grados se pare en 20 y mande la orden al motor de desplazamiento lineal y se tomen datos y se guarden para después gráficos, luego de que el motor lineal termine su recorrido nuevamente gire el motor de rotación, por decir ahora en 40 y vuelva a mandar la señal para que el otro motor se mueva y terminando este nuevamente gire el otro ahora en los 60 se tomen nuevamente datos y regrese a cero grados cuando el otro termine su recorrido. Y ver la captura de los datos obtenidos en una gráfica

Si pueden orientarme seria de gran ayuda de antemano gracias.

0 Kudos
Message 1 of 10
(16,175 Views)

Buenas Tardes Monik,

 

Lo ideal para poder controlar un motor de esa manera, es que sea un motor a pasos. Teniendo un motor a pasos con la hoja de especificaciones puedes saber el número de grados que avanza por paso, y de esta manera puedes decidir cuantos pasos quieres avanzar y mandarlos por la 6008.

 

No se con que motores cuentas, pero si estos son de pasos sólo debe saber cuantos pasos por revolución tiene tu motor, y dividir 360° entre el número de pasos, y así podrás hacer una rutina que sean los pasos que requieres, o utilizar un integrado que lo haga dependiendo de un reloj de entrada (6008) y solo debes dar el número de pasos que tu decidas, el número total de pasos lo debes guardar en una variable para que al final, con la 6008 mandes una señal de cambio de giro si estas usando el integrado, o tener una rutina que haga que gire al otro lado y mandarle el total de pasos para que regrese a su posición inicial.

 

Quizá si me das datos de los motores que usas podamos encontrar una solución más específica!

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
0 Kudos
Message 2 of 10
(16,167 Views)

Buena Tarde Elías, muchas gracias por tu atención en efecto tengo dos motores a pasos son Modelo KP25FM2-044 de la compañía Japan Servo y se mueve 1.8 Deg/Step. Ya realice el programa de control de ida y vuelta y se que dando 200 pasos el motor gira los 360 grados. Ahora uno de los problemas es que al  darle la orden de que gire por decir 90 grados, antes de que llegue a los 90 grados pueda seccionarlos  en n divisiones y en cada división se pare el motor y le envíe una señal al segundo motor que es de traslación y realice un desplazamiento en el cual yo pueda adquirir los datos necesarios y guardarlos para que al termino del recorrido de ambos motores pueda verlos graficados, pero de igual manera al terminar este motor su desplazamiento entonces el de rotación gira nuevamente y se detiene en la siguiente división y realiza la misma función. Otro problema que surge es que solo puedo manejar números enteros en los grados y tengo que trabajar con números con punto decimal, es decir para 360 grados requiero 200 pasos, para 180 100 pasos, para 90 50 Pasos, pero para 60 grados necesito 33.33333pasos y el motor no se detiene sigue girando, espero me puedas orientar, de antemano gracias y espero tu pronta respuesta.

 

Saludos Cordiales Monik

0 Kudos
Message 3 of 10
(16,164 Views)
Solution
Accepted by Monik0405

Buenos días Mónica!

 

Lo que se me ocurre es que tengas dentro de tu ciclo while un control donde puedas meter el número de grados y puedas compararlo con la posición absoluta en la que se encuentra el motor.

 

No estoy seguro de como estes haciendo tu programa, pero se me ocurre poner ese código dentro de un case structure y hacer que llege exactamente al paso que le dices ya sea subiendo o bajando. Y al detener el programa regrese a la posición 0.

 

Te hice un pequeño bosquejo del programa para que puedas revisarlo y darte una idea más tangible de lo que te comento, de todas maneras deberás adecuarlo a tu código.

 

Aquí te dejo también un documento muy interesante que te puede servir, puedes hacer todo esto con una máquina de estados y te queda un código mucho más limpio!

 

http://decibel.ni.com/content/docs/DOC-4817

 

Espero que te sea de utilidad, si hay algo que requiera más explicación estoy a tus ordenes.

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
Message 4 of 10
(16,159 Views)

Buen día Elías, muchas gracias nuevamente por tu atención ya logre hacer que el motor gire los grados que se deseen, pero aun continuo con el problema de como hacer la división de estos grados, buscando que se detenga en cada una de estas divisiones y espere un tiempo determinado para que el otro motor de desplazamiento lineal  haga su recorrido de ida y vuelta y en cuanto este termine el de rotación se coloque en la siguiente división, y así sucesivamente hasta llegar al numero final de grados solicitado donde esperara a que el otro motor termine su recorrido y posteriormente el de rotación girara a la posición inicial de cero grados. Adjunto el programa que tengo con el cual ya giro el motor y también cuento con el programa para que llegue a su posicón inicial donde tengo dificultades es en detener el motor en las divisiones. Gracias y espero tu pronta respuesta. 

0 Kudos
Message 5 of 10
(16,152 Views)

Que tal Monik,

 

Una disculpa por la tardanza, pero había estado fuera de la oficina.

 

Para lograr que se detenga, te recomendaría utilizar una máquina de estados como la arquitectura de tu programá, y ahí poder brincar a un estado donde demos un wait o algun tiempo de espera para que se lleve a cabo.

 

Te adjunto la liga de un tutorial que habla un poco de las máquinas de estado: http://zone.ni.com/devzone/cda/tut/p/id/3024

 

para regresar a la posición inicial, hay que ir guardando un contador que te diga cuantos pasos has avanzado hacia un lado y luego en otro estado recorrer ese número total de pasos hacia el otro.

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
Message 6 of 10
(16,115 Views)

Hola Elias. Gracias por tu atención, creo que he resuelto el problema anterior con los tips que me haz proporcionado y ahora te molestare con esta duda. Necesito que al iniciar mi programa este se calibre es decir que en caso de que no hayan cumplido los motores con el recorrido solicitado por  algún motivo, como puede ser que se haya ido la luz o cualquier otra situación lo primero que haga al iniciar el programa  es checar que los motores se encuentren en su estado inicial y en caso de no encontrarse en esta posición hacer que se vayan a ella y después continué con el proceso solicitado de recorridos, que podrías recomendarme tú,  hacer un programa de calibración o agregarle encoders y si es así como puedo utilizarlos cualquiera de estas dos opciones con labview.

 

Gracias y espero tu pronta respuesta. Monik

0 Kudos
Message 7 of 10
(16,104 Views)

Que tal Monik,

 

Me da gusto saber que fue de ayuda.

 

Para lo que quieres hacer debes de tener manera de sensar o medir la posición actual del motor cada vez que empiezas el programa. Supongo que eso lo puedes haccer con un encoder incremental. O si nadie va mover el motor manualmente podrías guardar la posición actual en un archivo de texto y que tome ese valor y con algún tipo de bandera decirle si es para un lado o para el otro.

 

Ahora, para poder tener esto iniciando, lo más recomendable es en la máquina de estados tener un estado de inicio donde valorará la posición actual, ya sea mediante la lectura de un archivo o con un sensor (encoder Incremental) y si esta es distitna de 0 (posición Inicial) ir a un estado donde revisará hacia que lado debe de moverse y hará el recorrido correspondiente (mismo código que el que ya teníamos) de hecho puedes reutilizar ese estado!!

 

Otra cosa que quería comentarte, preguntas otras cosas sobre el mismo foro esta notificación me llegará solo a mi, y si me encuentro fuera de la oficina por algún motivo será un poco más lento el servicio. Sin embargo, si tu haces un nuevo foro, automáticamente nos notifica a todos los ingenieros y sale como un foro sin respuesta que tambíen llama la atención de otras personas que estan revisandolos.

 

Otra cosa importante son los Kudos, cuando una respuesta funcione, puedes dar Kudos si esta te parece buena y eso nos ayuda a llevar un control de las respuetas buenas que damos o en cuales requerimos mejorar.

 

Estoy a tus ordenes, lo que pueda ayudarte!!! Revisa estos tips que te di y me dices si hay alguna duda!!!

 

Saludos, que tengas una excelente tarde!!

Luis Elias
NI VeriStand and HIL Product Manager
Message 8 of 10
(16,101 Views)

Que tal Mayrita, 

 

En que puedo ayudarte?!

 

Te recomendaría emepzar otro foro para que la respuesta sea más rápida?!

 

Saludos,

Luis Elias
NI VeriStand and HIL Product Manager
0 Kudos
Message 10 of 10
(15,147 Views)