lunes, 28 de abril de 2008

Control de un motor por medio de Labview

El objetivo del laboratorio presentado es mostrar la forma de enviar y transmitir datos desde un PC por medio de labview, a traves de una targeta de adquisicion de datos conectado a un motor.

Descripcion.

Por medio del programa se desea controlar la velocidad del motor con un sistema de control en lazo cerrado, donde el error se genera al restar el voltaje enviado desde el programa y el voltaje emitido por el motor.


Labview envia los datos por el puerto serial, a traves del cable de datos (2DB9) codificado en ASSCI. En la targeta de adquicision de datos se codifica esta informacion en forma binaria, se multiplaxa la trama por medio del PIC 16F877 y luego los bits se envia a un conversor digital analogo, donde la salida es un voltage definido dependiendo del valor emitido desde el software.

El motor posee un encoder con un sensor que emite un tren de pulsos que se lleva a un conversor de frecuencia a voltaje, y este voltage que entrega el motor es llevado al conversor analogo digital que posee el PIC internamente debidamente programado. De esta manera el PC recibe los datos que pueden ser visualizados desde labview y alli realizar la ley de control.
  • DESARROLLO.
El desarrollo de este laboratorio se divide basicamente en dos partes:
La primera parte consiste en la creacion del programa en labview y la configuracion del puerto de transmicion y recepcion. La segunda parte consta en el diseño de la targeta de adquisicion de datos, que incluye la elaboracion del programa que correra el PIC, para transmitir y recepcionar la informacion.

Programa en labview.


En labview lo primero que hacemos es crear el tablero de control, que consta en nuestro caso de un dial por el cual emitiremos un voltaje cualquiera. Igualmente contamos con un visualizador para seber el voltaje que se esta recibiendo. Se adicionan interruptores y leds para hacer mas entendible y completo el programa.


Seguidamente lo que se hace es crear los casos correspondientes para la configuracion del puerto, de manera que estos casos iran acoplados con el panel de control ya anteriormente establecido.

Los pasos que muestran la configuracion del puerto en labview se pueden encontrar, junto con otros tutoriales de este software, en:

http://www.labview.tk/ , en ejemplos, Comunicaciones serie por puerto RS-232



Como podemos observar en esta grafica tenemos el encendido y apagado del sistema por el cuan se pretenderá controlar la transición o recepción hacia o desde la tarjeta de adquisición, seguida de un led verde el cual facilita la tarea de visualizar el estado en el que se encuentra, a su vez conectado a una estructura de casos el cual tiene uno o más sub diagramas, o los casos, exactamente uno de los cuales se ejecuta cuando se ejecuta la estructura. El valor por cable a la terminal de selección que determina caso a ejecutar y puede ser booleanos, cadena, entero, o tipo enumerado.



Aquí observamos el dial el cual será el que variara la velocidad del motor, pero como este dial lo pretenderemos manera de 0-5 voltios, para tener un valor en bits, colocamos un multiplicador el cual con la ayuda de una constante nos dará el valor desde 0 a 255, conectamos este valor a un elemento array, y este valor lo pasamos de array a string.



Es la configuración del puerto: Velocidad de transmisión, a 9600 baudios y escoger el puerto serial por el cual se realizara la transmisión (com1).






Ahora el dato se pasa de string a array, después se convierte un array de booleanos 8, 16, o 32 elementos, dependiendo del número de bits en el número entero. El 0th elemento de la matriz se corresponde con el bit menos significativo de los dos del complemento de la representación binaria del entero, a su vez se permite crear la visualización de la recepción, dando una constante para que el sistema lo visualice tanto en datos de voltaje como en datos el sistema vinario variando de 0 a 255, ahora Convierte un array 1D a un grupo de elementos del mismo tipo que la matriz elementos.







Se divide un grupo en cada uno de sus elementos individuales. Al hilo de un grupo a esta función, la función redimensiona automáticamente para mostrar los resultados para cada elemento en el grupo que con cable., visualizando esto con ayuda de led`s.












El codigo que debe tener el micro controlador necesario para que funcione todo el circuito es:

LIST p=16f877A;Comando que indica el PIC usado
INCLUDE "p16f877A.inc";Etiquetas Genéricas para el pic 16f877A

;UNIVERSIDAD AUTÓNOMA
;INGENIERÍA ELECTRÓNICA

;ESTUDIANTES DE INGENIERIA ELECTRONICA
;MIGUEL ANGEL SALAZAR BECERRA
;MILLER DAVID CORTES HOYOS
;ABEL ENRIQUE HERRERA MONTIEL


org 0 ; inicio del programa

goto INICIO

nop;Libre (para evitar errores)
nop

TEMP1 EQU .20

bcf STATUS,RP1
bsf STATUS,RP0 ;Ir banco 1 TRIS, TXSTA, ADCON1 está alli



RETARDO
nop
movlw .249
movwf TEMP1
CICLO
nop
decfsz TEMP1,f
goto CICLO
return

ADC
bcf STATUS,RP1
bsf STATUS,RP0 ;Configuración de uno de los Registros de Conversión AD
movlw b'00001110' ;A/D Port AN0/RA0
movwf ADCON1 ;canal 0, justificado a la Izquierda, con un único canal análogo y los demás digitales. muestro solo 8 bits menos significativos(ADRESL)
bcf STATUS,RP0
movlw b'01000000'
movwf ADCON0
bsf ADCON0,0
return


CONF_PUERTOS ;Configuración de Puertos
bcf STATUS,RP1
bcf STATUS,RP0
bsf TRISA,0 ;RA0 como entrada del conversor de frecuencia a voltaje
clrf TRISB ;PORTB salida
clrf TRISC ;PORTC salida; todos como salidas para que no hayan errores si están configurados como entradas
;RC6/TX salida, pin de transmisión
bsf TRISC,7 ;RC7/Rx entrada, pin de recepción
clrf TRISD ;PORTD salida
clrf TRISE ;PORTE salida
return

CONF_USART
bcf STATUS,RP1
bcf STATUS,RP0
;Configuración de la USART y modo Transmisión
movlw d'25' ;9600 baudios Xtal=4Mhz
movwf SPBRG ;configuramos la velocidad del PIC

bsf TXSTA,BRGH ;Selección de alta velocidad
bcf TXSTA,SYNC ;Modo asíncrono
bcf TXSTA,TX9 ;8 bits de datos a transmitir
bsf TXSTA,TXEN ;Activa la transmisión serial, TXIF = 1 (Buffer de transmisión vacío)
bcf STATUS,RP0 ;Ir a banco 0 RCSTA ADCON0 esta alli
;Configuración del Timer
movlw b'00000101';
movwf OPTION_REG ; utilizamos el timer0 del option register para generar tiempo de adquisición y el prescaler 1:64
;Configurar el modo recepción
bsf RCSTA,SPEN ;habilita el puerto serie
bcf RCSTA,RX9 ;8 Bits de datos
bsf RCSTA,CREN ;Para Rx Continuo
return

BUCLE ;Bucle para generar el tiempo de adquisición. 16us + el tiempo de ejecucion de las instrucciones (recomendado 20 us)

btfss INTCON,T0IF ;Se desbordó el registro TMR0?
goto BUCLE ;No, TOIF=0. Esperar que el timer0 desborde. Este es el tiempo de adquisición. FOSC=4MHZ T=250ns Desborde=64*250ns=16us

bcf INTCON,T0IF ;Limpiar el indicador de desborde. Tiempo de adquisición mínimo recomendable 20us
bsf ADCON0,2 ;Empezar la conversion A/D
return
CONVERSION
btfsc ADCON0,2 ;ADCON0 es 0? (la conversion esta completa?)
goto CONVERSION ;No, ir _conversion

movf ADRESL,W ;Si, W=ADRESL
movfw PORTD ;visualizamos la conversión en el PORTD para efectos de simulación y prueba
movwf TXREG ;Pasa el resultado al registro de transmision de la USART
return
COMUNICACION

ESPERATx ; Proceso de Transmisión
btfss PIR1,TXIF ;Espera hasta que transmisión culminó (Cuando el registro TXIF se ha vaciado)
goto ESPERATx ;NO,TXIF=0 , ir _esperaTx


ESPERARRx ; Proceso de Recepción
btfsc RCSTA,OERR ; Verifica error de desborde
goto LIMPIAR ;OERR=1 ir a subrutina de limpieza de bit indicador de desborde

btfss PIR1,RCIF ;Pregunta si el buffer de RX es full (RCIF se pone a 1 cuando un byte ha llegado exitosamente)
goto ESPERARRx
movf RCREG,W ;RCIF=1, W=RCREG y pone a cero el RCIF al dejar vacío RCREG
movwf PORTB ;PORTB = W

goto BUCLE ;Ir a _bucle para adquisición análogo digital

LIMPIAR

bcf RCSTA,CREN ;Unica manera de limpiar error de desborde. CREN=0
bsf RCSTA,CREN ;Habilito nuevamente recepción continua
goto ESPERARRx
return
INICIALIZACION
call CONF_PUERTOS
call CONF_USART
clrw ; borro registro w
movwf PORTA
movwf PORTB
movwf PORTC ;me aseguro de que los puertos son cero antes de usarlos
movwf PORTD
movwf PORTE
call ADC
call RETARDO
return

INICIO
call INICIALIZACION ;Llama la rutina creada anterior mente para inicializar todas las variables para la comunicación y recepción
call CONVERSION ;Subrutina que realiza el proceso de conversión análogo digital
call COMUNICACION ;Subrutina que realiza la comunicación seriar con el computador
goto $-2
END