Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 pequeo anlisis de comportamiento del motor en cuestin: 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 conexin 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 segn nuestras necesidades. Empricamente en mi desarrollo con el tipo de motor usado, he comprobado que una secuencia de medio paso crea una vibracin 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 resear 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 posicin 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,
necesitaramos un enconder externo en el se nos est informando sobre la posicin del motor en cada momento y que cuando este se desconecte se quede registrado en una posicin para que vuelva a ella una vez reiniciado. Esta es una limitacin 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 empricamente 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 mxima, 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 tambin. El usuario puede saber por donde est llendo en cada momento el motor desde su inicio de giro . Tambin 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 numrica booleana que corresponde con los bits de control, al ser la secuencia de 4 pues crearemos un case de 4 estados de ejecucin y controlado por una variable de control numrica 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 seleccin 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 funcin daq assistant que se encargar de elegir los pines digitales a usar, en este caso, de 0 a 3. Una vez seleccionada esta opcin nuestro control ser la salida de la secuencia booleana creada en el array correspondiente al case correspondiente posteriormente multiplexada. Dentro de esta secuencia, tambin deberemos seleccionar nuestra velocidad de control. Para este proceso hemos elegido un bucle for para crear una iteracin que se encarg
Como observamos, una vez creado nuestro SUBVI, lo implementaremos con un controlador de secuencias numrico que controlar la secuencia en cuestin. 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 iteracin 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 cuestin algortmica: 1. 2. 3. 4. 5. 6. Creacin de la secuencia del motor Incremento de la variable de secuenciacin de la misma Integracin dentro de un bucle finito(for). Control de la iteracin del bucle anterior. Creacin de un control de velocidad mediante el tiempo dentro del bucle Creacin 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 lgica 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 funcin creada tiene dos Case que controlar cada sentido de giro invirtiendo al secuencia. Por tanto multiplexamos nuestra seal 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 iteracin de control de nuestro bucle for. En ella creamos una multiplexin del sistema para elegir que el bucle se repita una vez o un nmero determindado por la variable cantidad de pasos2 y reflejada en la variable cantidad de secuencias. Esta iteracin ser recogida en la salida relflejada y que se llama PARA LLEGAR HASTA que el usuario podr observar en su entorno el nmero 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 incrementndose hasta conseguir llegar a su adjunta. Se ha incrementado en 1 porque la iteracin for solo llega hasta i-1 por tanto para igualarse a nuestro objetivo hay que llegar 1 ms. 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 iteracin desde donde va corriendo hasta donde ha de llegar, en este caso ya ha llegado a 48. El botn manual automtico es la multiplexin que nos dice si ir paso a paso o crear una secuencia definida previamente. Cabe resear que la N del for o controladora de iteracin tiene un puntito rojo Por qu es esto? La razn es que si queremos controlar nuestro sistema de forma eficaz debemos crear un reseteo
de la iteracin, un break que nos saque de la funcin cuando queramos halla o no acabado nuestra iteracin. Aadiendo la opcin Condicional terminal lo conseguiremos. Con ella crearemos una parada de finalizacin controlada similar a la de los bucles While. En ella controlaremos el final de nuestro bucle.
3- Una vez ya creada nuestra secuenciacin y nuestra iteracin 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 dnde 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 ralentizacin 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 pequeo, 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 multiplicacin. Como ya tenemos un control del tiempo de nuestro motor, para que el usuario pueda definir velocidades y otros propsitos, 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 rpida en su creacin y donde te dice cada entrada y salida para solo insertar.La variable PASS se crea a partir de una realizacin emprica 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 iteracin secuencial se ponga a break cuando queramos hacer una parada de emergencia o salir de la forma mas rpida 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 mquina. La siguiente imagen muestra este proceso.
El botn de puesta a 0 pasar la secuenciacin a 0 tanto del control de secuenciacin como el del tiempo. Cuando estos estn en 0 se pondr tambin a 0 una variable booleana de control que pondr a 0 toda la iteracin 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 frmulas 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 configuracin fijada. Para ello creamos todo un bucle while exterior que contenga dicha iteracin y que esta se salga de l cuando la cuenta de la iteracin coincida con el numero de iteraciones fijado.
7- An no hemos creado la activacin de nuestro sistema, esto har que el usuario no tenga forma de entrar en l si no es por la activacin del VI y, que adems, 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 activacin del motor como quiere que este gire, en el False de nuestro case crearemos una secuencia que ir cambiando nuestras variables de control e indicacin: