CONTROL DE UN MOTOR PASO A PASO CON LABVIEW

CONTROL DE UN MOTOR PASO A PASO CON LABVIEW

Descargar archivos…

En esta practica vamos a realizar un programa para poder controlar un motor paso a paso mediante un algoritmo de LabView para que el usuario pueda realizar el control del mismo de distintas facetas del mismo.

Para realizar el desarrollo del ejercicio primero debemos realizar un pequeño análisis de comportamiento del motor en cuestión:

Motor paso a paso: Es un motor alimentado por corriente continua que se compone de cuatro bobinas en nuestro caso, vamos a realizar nuestro trabajo con el modelo bipolar que tiene cuatro cables de conexión en las que cada cable estará unido a cada una de las bobinas. Dos de los …

La secuencia de conexionado corresponde a la siguiente:

Como podemos observar podemos elegir una secuencia de 4 pasos o una secuencia de 8 pasos según nuestras necesidades. Empíricamente en mi desarrollo con el tipo de motor usado, he comprobado que una secuencia de medio paso crea una vibración extrema en el motor y consigue hacer que el motor se descoordine en algunos pasos de la misma. Por tanto realizaremos la secuenca de 4 pasos. La secuencia de 4 pasos ha garantizado un corrcto trabajo. Dentro del motor paso a paso cabe reseñar que su control, como hemos dicho, se realiza mediante una secuencia de pasos. Ventaja que nos sirve para poder mover el motor a donde queramos de una forma precisa. Una desventaja de este motor es que el no tiene una posición de inicio fija y por tanto cada vez que sea atacado con una secuencia este se moverá conforme a la misma, por tanto, si queremos que el motor se pueda establecer en un punto o grado determinado del giro y sea controlado a partir de este y otro punto dentro de los 360 grados, necesitaríamos un enconder externo en el se nos esté informando sobre la posición del motor en cada momento y que cuando este se desconecte se quede registrado en una posición para que vuelva a ella una vez reiniciado. Esta es una limitación que nos presenta el encoder y que podremos mejorar tratando sus pasos. En nuestro caso nuestro motor se mueve 7,5 grados. Esto se ha comprobado empíricamente controlando los pasos uno a uno y contando la cantidad de los mismos. Dividiendo esta cantidad de pasos entre los 360 grados los cuales nos dan 48 grados de giro paso a paso.

Una vez controlado la cantidad de grados de giro debemos saber la velocidad con la que estamos realizando nuestros pasos, esto quiere decir que debemos saber que nuestro interface DAQ NI 6008 trabaja a 2ms en cada pulso para tratar la frecuencia de paso de secuencia a secuencia, esto quiere decir que trabaja a 5KHz de frecuencia máxima, velocidad que nuestro motor no puede soportar correctamente. Este problema, por tanto, deberemos tratarlo y controlarlo por software.

Comencemos con nuestro algoritmo:

¿Qué queremos?

Necesitamos controlar un motor paso a paso en el podamos controlar sus pasos y podamos controlar su velocidad y cantidad de giro también. El usuario puede saber por donde está llendo en cada momento el motor desde su inicio de giro . También podremos controlar su sentido de giro Para salir del programa o del nuestro VI solo lo podremos hacer una vez el motor halla parado.

Debemos crear una secuencia numérica booleana que corresponde con los bits de control, al ser la secuencia de 4 pues crearemos un case de 4 estados de ejecución y controlado por una variable de control numérica y al ser una secuencia que hará que el motor gire en un sentido para el giro en el sentido opuesto debemos hacer la secuencia opuesta. En el numero de secuencia 0 de uno, haremos el numero 3 del otro, el 1 será el 2 y el 2 el 1. Con un multiplexor de un canal crearemos una selección booleana para elegir el sentido del motor o secuencia de paso del motor. Todo esto, para ahorrar espacio se ha integrado en un subvi llamado SECUENCIA_PASO_A_PASO en el que se ha implementado todo el sistema secuencial para los dos sentidos de giro:

Para comunicar nuestro sistema con el motor, como hemos dicho previamente, utilizaremos un DAQ NI 6008 que será elegido por la función daq assistant que se encargará de elegir los pines digitales a usar, en este caso, de 0 a 3. Una vez seleccionada esta opción nuestro control será la salida de la secuencia booleana creada en el array correspondiente al case correspondiente posteriormente multiplexada. Dentro de esta secuencia, también deberemos seleccionar nuestra velocidad de control. Para este proceso hemos elegido un bucle for para crear una iteración que se encarg

Como observamos, una vez creado nuestro SUBVI, lo implementaremos con un controlador de secuencias numérico que controlará la secuencia en cuestión. El control de el DAQ Assistant será por tanto el mismo que equivale a las salida booleana en forma de array que he llamado LUCES BONITAS jeje…

Las funciones implementadas previamente se estructuran dentro de bucle for para crear una iteración continua y determinada de los pasos:

 

Para poder explicar de forma correcta, se muestra adjunto un diagrama para mostrar el proceso que se ha realizado en cuestión algorítmica:

  1. Creación de la secuencia del motor
  2. Incremento de la variable de secuenciación de la misma
  3. Integración dentro de un bucle finito(for).
  4. Control de la iteración del bucle anterior.
  5. Creación de un control de velocidad mediante el tiempo dentro del bucle
  6. Creación de un control de velocidad mediante el tiempo dentro del bucle

REALIZAREMOS UN ESTUDIO DEL DIAGRAMA POR PARTES:

1-Como se menciono antes se ha creado primero la secuencia lógica que va a interpretar el motor para realizar el paso correctamente

 

 

Esto lo creamos en un SUBVI para implementar un ahorro de espacio y una eficiencia a la hora de trabajar. Este SUBVI está customizado para entender un motor dentado.

2-Una vez creado esto, y como hemos visto al principio, la función creada tiene dos Case que controlará cada sentido de giro invirtiendo al secuencia. Por tanto multiplexamos nuestra señal de salida para elegir nuestro sentido de giro. Una vez acabado este proceso, incrementamos la variable de control secuencial para ir a la siguiente secuencia de forma ordenada. Crearemos movimiento secuencial gracias a esto.

Todo este sistema estará implementado dentro de un bucle for controlado así:

En la primera imagen observamos la iteración de control de nuestro bucle for. En ella creamos una multiplexión del sistema para elegir que el bucle se repita una vez o un número determindado por la variable “cantidad de pasos2″ y reflejada en la variable “cantidad de secuencias”. Esta iteración será recogida en la salida relflejada y que se llama “…PARA LLEGAR HASTA” que el usuario podrá observar en su entorno el número de iteraciones que ha de realizar y que será la premisa a la que tiene que llegar la variable “VOY POR…” y que será la encargada de ir incrementándose hasta conseguir llegar a su adjunta. Se ha incrementado en 1 porque la iteración for solo llega hasta i-1 por tanto para igualarse a nuestro objetivo hay que llegar 1 más. Vemos el reflejo en el panel frontal de lo antes dicho. La barra de llenado es el reflejo del control una vez activado el motor y el control se ejerce en la variable de control superior. Los otros indicadores nos muestran la iteración desde donde va corriendo hasta donde ha de llegar, en este caso ya ha llegado a 48. El botón manual automático es la multiplexión que nos dice si ir paso a paso o crear una secuencia definida previamente. Cabe reseñar que la N del for o controladora de iteración tiene un puntito rojo ¿Por qué es esto? La razón es que si queremos controlar nuestro sistema de forma eficaz debemos crear un reseteo de la iteración, un break que nos saque de la función cuando queramos halla o no acabado nuestra iteración. Añadiendo la opción “Condicional terminal” lo conseguiremos. Con ella crearemos una parada de finalización controlada similar a la de los bucles While. En ella controlaremos el final de nuestro bucle.

 

 

3- Una vez ya creada nuestra secuenciación y nuestra iteración de control sobre la secuencia que, controlaremos así tanto la secuencia como la cantidad de la misma y. nos permitirá a posteriori crear un control exhaustivo de hasta dónde queremos llevar nuestro motor. Debemos crear un control del tiempo dentro del bucle, que a su vez, nos dará la oportunidad de controlar la velocidad. Nuestro DAQ trabaja a 2ms de velocidad en sus salidas digitales como hemos mencionado. Esto quiere decir que es una frecuencia de 500HZ de frecuencia, se refleja en una velocidad excesiva para nuestro motor y que no reconocerá bien y no hará lo que pretendemos. Para ello debemos crear una ralentización controlada de la secuencia:

 

Este tiempo será controlado por una variable llamada “TIEMPO POR PASO EN MILISEGUNDOS” como se ha mencionado, el tiempo es muy pequeño, lo que posibilita una frecuencia muy alta y a su vez una velocidad demasiado pesada para poder controlar el motor. Esto se soluciona creando un incremento en forma de producto que multiplique nuestro tiempo, y reflejado en “TIEMPO POR PASO EN MILISEGUNDOS” y “TIEMPO DE PASO” TIEMPO DE PASO nos indica nuestro control realizado en CONTROL DE TIEMPO. TIEMPO POR PASO EN MILISEGUNDOS refleja lo dicho y resultado de nuestro retardo creado en la multiplicación. Como ya tenemos un control del tiempo de nuestro motor, para que el usuario pueda definir velocidades y otros propósitos, se crea una variable llamada “TIEMPO EN DAR UNA VUELTA”. El SUBVI regla de 3.vi no es mas que un vi creado que hace reglas de tres de forma mas rápida en su creación y donde te dice cada entrada y salida para solo insertar.La variable PASS se crea a partir de una realización empírica del motor. Se calcula que con el tiempo por paso a 100ms, el motor realiza una vuelta exacta del mismo con 48 pasos. Por tanto si hacemos un tiempo distinto ese valor PASS será directamente proporcional a las constantes previamente dichas. Esto no es mas que una regla de tres:

 

A partir de PASS se calcula cuanto tardará en dar una vuelta.

4- En nuestro sistema hemos creado un reset haciendo que nuestro bucle for de iteración secuencial se ponga a break cuando queramos hacer una parada de emergencia o salir de la forma mas rápida posible de nuestro movimiento del motor sin que esto afecte al sistema del software de control. Para conseguir esto de forma eficiente debemos hacer que todo lo que controla al motor se ponga a 0 y que así el usuario deba volver a configurar la máquina. La siguiente imagen muestra este proceso.

El botón de puesta a 0 pasará la secuenciación a 0 tanto del control de secuenciación como el del tiempo. Cuando estos estén en 0 se pondrá también a 0 una variable booleana de control que pondrá a 0 toda la iteración indicativa y de control.

 

 

5- Nuestro usuario debe ser capaz de poder ser informado en todo momento de la velocidad a la que está llendo su motor. Para ello hemos creado un SUBVI que controlará este proceso de una forma implementada. Para ello hemos creado este SUBVI llamado RPM:

Con las fórmulas de velocidad angular y, a partir de esa de Revoluciones por minuto y Revoluciones por segundo creamos este sub VI que nos informa de todo. Creando una variable compartida, crearemos el control sobre la variable periodo. Esta variable será controlada en el VI principal por la variable TIEMPO EN DAR UNA VUELTA que equivale al periodo de la circunferencia.

 

 

6- Una vez finalizado el bucle for con todo lo mencionado, debemos asegurar el final de este proceso y que no vuelva a comenzar una vez acabada la configuración fijada. Para ello creamos todo un bucle while exterior que contenga dicha iteración y que esta se salga de él cuando la cuenta de la iteración coincida con el numero de iteraciones fijado.

7- Aún no hemos creado la activación de nuestro sistema, esto hará que el usuario no tenga forma de entrar en él si no es por la activación del VI y, que además, no pueda crear una parada o salida del VI de la misma manera. Por tanto crearemos un Case que se ejecute por un control booleano:

 

Para que el usuario pueda controlar previa activación del motor como quiere que este gire, en el False de nuestro case crearemos una secuencia que irá cambiando nuestras variables de control e indicación:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

About these ads

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s