Gruacon Pic 16f877
-
Upload
jhon-apaza -
Category
Documents
-
view
170 -
download
4
Transcript of Gruacon Pic 16f877
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
RESUMEN En este proyecto se diseñó y construyó una grúa semiautomática que es operada a través de un joystick. El sistema emplea tres motores paso a paso para generar el movimiento en los ejes X, Y y Z, posee como dispositivo de control un PIC 16f877, el cual genera la secuencia de los motores y el sentido de giro de estos de acuerdo a las señales que envía el joystick. El movimiento en los ejes X y Y se puede realizar individualmente o simultaneo. Para el movimiento en Z, se emplean los pulsadores del joystick y cuando se genera este movimiento se inhabilita el movimiento en los otros ejes. DESARROLLO El Joystick El Joystick es un sencillo dispositivo de interfaz con el humano que posee una palanca, la cual puede moverse hacia todas las direcciones posibles en un plano de dos dimensiones y dos botones de
propósitos múltiples. El Joystick visto desde el punto de vista electrónico, no es más que un par de resistencias variables las cuales toman un rango de valores de 0 a 156KΩ dependiendo la posición en que se encuentre la palanca, y además dos pulsadores normalmente abiertos. Para mayor precisión, el Joystick que utilizamos en este proyecto en particular, consta además con dos switches deslizables que permiten al usuario calibrar la sensibilidad en cualquier dirección de ambos ejes. En vista de nuestras necesidades para el proyecto, se agrego un circuito externo muy sencillo que nos permite tener una variación de voltaje de 0 a 4 voltios por cada eje, de acuerdo a los movimientos impuestos por la palanca del Joystick; además el circuito necesario para que un pulsador normalmente abierto, conmute una salida entre 0 y 5 voltios. Los circuitos anteriormente mencionados se muestran a continuación en las siguientes figuras:
5V
VCCR1
33kohm
50%156kOhmKey = a
R2EJE_X
5V
VCCR3
33kohm
50%156kOhmKey = a
R4EJE_Y
5V
VCC
R51.0kohm
BTN_1Key = Space
BOTON_1
5V
VCC
R61.0kohm
BTN_2Key = Space
BOTON_2
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
Control del Sistema El sistema emplea como elemento de mando un joystick, este genera cuatro señales que son adquiridas por el PIC, dos de estas señales son voltajes análogos que varían en un rango de 0 a 4 voltios de acuerdo a la manipulación del joystick, e indican el movimiento en X y Y, las otras dos son digitales (pulsadores), que indican el movimiento en z. Debido a que el cambio de voltaje es muy rápido al movimiento del joystick, para el control del sistema se tuvieron en cuenta las siguientes condiciones: Vx > 3v el movimiento se realiza hacia la derecha en X. Vx < 1v el movimiento se realiza hacia la izquierda en X. Para 1v<Vx<3v no se realiza movimiento en X. Vy > 3v el movimiento se realiza hacia la derecha en Y. Vy < 1v el movimiento se realiza hacia la izquierda en Y. Para 1v<Vy<3v no se realiza movimiento en Y. Donde Vx es el voltaje que genera el joystick cuando se mueve la palanca de derecha a izquierda o viceversa y Vy es el voltaje que genera el joystick cuando se mueve de adelante hacia atrás o viceversa. Para la adquisición de las señales análogas se utilizó el puerto A, el cual contiene las entradas para 8 conversores A/D ó 8 entradas digitales de acuerdo a como se programe. En este proyecto este puerto se programó para que los 2 pines menos significativos sean entradas para las señales análogas (Vx y Vy) y el resto digitales. Para el control del sistema se creo una palabra o byte de control, cuyos cuatro bit menos significativos indican en que eje se va realizar movimiento y el sentido, de la siguiente manera: Bit 0 => ‘1’ movimiento a la derecha en X ‘0’ no hay movimiento a la derecha en X Bit 1 => ‘1’ movimiento a la izquierda en X ‘0’ no hay movimiento a la izquierda en X Bit 2 => ‘1’ movimiento hacia adelante en Y
‘0’ no hay movimiento hacia adelante en Y Bit 3 => ‘1’ movimiento hacia atrás en Y ‘0’ no hay movimiento hacia atrás en Y El código en el microcontrolador que se encarga del control del sistema funciona de la siguiente manera: Primero se lee el estado de los pulsadores en los dos pines menos significativos del puerto D, si alguno fue oprimido se deshabilitan los latchs de las secuencias para los motores X y Y, y se genera el movimiento en Z, si ninguno fue oprimido se toma la señal análoga que indica el movimiento en X y se convierte en un valor digital, una vez terminada la conversión de la señal, se verifica este valor para determinar si se debe realizar movimiento en X y el sentido; dependiendo de este resultado se cargan los bits 0 y 1 de la palabra de control con sus respectivos valores. Después se toma la señal análoga que indica el movimiento en Y, al igual que en la de X, esta también se convierte en un código digital, cuando termina la conversión se verifica este valor para determinar si se debe realizar movimiento en Y y el sentido, para posteriormente cargar los bits 2 y 3 de la palabra de control con sus correspondientes valores de acuerdo a las condiciones anteriormente nombradas. Una vez que la palabra de control ha sido cargada con la información del movimiento que envió el joystick, el siguiente paso que se realiza es leer del puerto D el estado de los finales de carrera para determinar si en alguno de los extremos de la grúa (X o Y), ya no se puede mover mas y evitar forzar los motores. Se realiza una AND lógica entre este dato y la palabra de control debido a que si el fin de carrera es presionado en el sistema, este envía un cero lógico y al realizar la AND con su bit correspondiente en la palabra de control lo coloca a cero, con lo que se elimina el movimiento en este sentido y el resultado final es almacenado en la palabra de control. Cuando la palabra de control contiene la información completa del estado de las variables del sistema, se verifica cuales de los cuatro bits están en ‘1’, para habilitar los latch de los ejes donde se va a realizar movimiento y ejecutar la subrutina correspondiente que genera la secuencia de los motores, al terminar de generarse la secuencia de los motores, se repite este proceso de manera indefinida.
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
Para generar la secuencia de los motores se utiliza el puerto B del microcontrolador, en los cuatro bits menos significativos se genera la secuencia del motor que realiza el movimiento en Y, en los más significativos se genera la secuencia tanto del motor de X como de Z, pero cuando se debe realizar movimiento en Z se deshabilita el latch de X o viceversa. De esta forma se puede generar movimiento simultaneo en los ejes X y Y, pero no en Z. A continuación se presenta el codigo ASM programado en el PIC para el control del sistema. Programa en MPLAB list p=16F877 ORG 0H GOTO PRINCIPAL ADCON0 EQU 1FH ; declaración de registros ADCON1 EQU 9FH PORTA EQU 05H TRISA EQU 85H ESTATUS EQU 03H PORTB EQU 06H TRISB EQU 86H PORTC EQU 07H TRISC EQU 87H PORTD EQU 08H TRISD EQU 88H ADRESH EQU 1EH ADRESL EQU 9EH DELAY1 EQU 21H DELAY2 EQU 22H CONTROL EQU 23H CONTA0 EQU 24H PRINCIPAL BCF ESTATUS,6 BSF ESTATUS,5 ;selecciono el banco 1 MOVLW 0X03 MOVWF TRISA MOVLW 0X00 MOVWF TRISB ; inicialización del puerto B como salida
; para las secuencias de los motores. MOVWF TRISC ; inicialización del puerto C como salida ; para control de los latch de los MOVLW 0XFF ; motores. MOVWF TRISD ; inicialización del puerto D como ; entrada
; para leer pulsadores y finales de ; carrera.
MOVLW B'10000100' ; Justifica el ADRESH a la derecha y ;declara 2 canales análogos en el
;puerto A, además VDD y VSS Como ; referencias.
MOVWF ADCON1 BCF ESTATUS,5 ;selecciono el banco 0 CLRF ADCON0 INICIO CLRF CONTROL BTFSC PORTD,0 ;Verifica si se oprimió el pulsador
;de descender en Z GOTO EJEZD
BTFSC PORTD,1 ;Verifica si se oprimió el pulsador ; de ascender en Z
GOTO EJEZI MOVLW B'01000001' ; frecuencia de conversión del A/D de X MOVWF ADCON0 ; igual a Fosc/8 Y CANAL 0 como ; entrada CALL ESPERA ; retardo necesario para tomar la ; muestra BSF ADCON0,2 ;empezar conversión en X WAIT BTFSC ADCON0,2 ;cuando sea ‘0’ indica fin de conversión GOTO WAIT CALL MOVIM ; salta a subrutina que verifica el ; resultado de la conversión RRF CONTROL,1 ; rotar a la derecha para seguir llenado ; Control RRF CONTROL,1 MOVLW B'01001001' ; Fosc/8 Y CANAL 1 MOVWF ADCON0 CALL ESPERA BSF ADCON0,2 ;empezar conversión en y WAIT1 BTFSC ADCON0,2 GOTO WAIT1 CALL MOVIM SWAPF PORTD,W ANDWF CONTROL,1 BTFSS CONTROL,0 ;pregunto si en el canal1 a/d>4 GOTO DIR BTFSS CONTROL,2 ;pregunto si en el canal2 a/d>4 GOTO DIR2 GOTO EJEXYDD DIR BTFSS CONTROL,1 ;pregunto si en el canal1 a/d<1 GOTO DIR1 BTFSS CONTROL,2 ;pregunto si en el canal2 a/d>4 GOTO DIR3 GOTO EJEXYID DIR2 BTFSS CONTROL,3 ;pregunto si en el canal2 a/d<1 GOTO EJEXD GOTO EJEXYDI DIR3 BTFSS CONTROL,3 ;pregunto si en el canal2 a/d<1 GOTO EJEXI GOTO EJEXYII DIR1 BTFSS CONTROL,2 ;pregunto si en el canal2 a/d>4 GOTO DIR4 GOTO EJEYD DIR4 BTFSS CONTROL,3 GOTO DIR5 GOTO EJEYI DIR5 MOVLW 0XC0 MOVWF PORTC MOVLW 0X00 MOVWF PORTB MOVLW 0X00 MOVWF PORTC GOTO INICIO EJEXYDD MOVLW 0XC0 MOVWF PORTC ; habilita latches de X y Y GOTO MXYDD ; secuencia X y Y der. EJEXYDI MOVLW 0XC0 MOVWF PORTC ; habilita latches de X y Y GOTO MXYDI ; secuencia X der. y Y izq.
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
EJEXYID MOVLW 0XC0 MOVWF PORTC ; habilita latches de X y Y GOTO MXYID ; secuencia X izq. y Y der. EJEXYII MOVLW 0XC0 MOVWF PORTC ; habilita latches de X y Y GOTO MXYII ; secuencia X y Y izq. EJEXD MOVLW 0X40 MOVWF PORTC ; habilita latches de X y Y GOTO MXYDD ; secuencia X y Y der. EJEXI MOVLW 0X40 MOVWF PORTC ; habilita latch de X GOTO MXYII ; secuencia X izq. EJEYD MOVLW 0X80 MOVWF PORTC ; habilita latch de Y GOTO MXYDD ; secuencia Y der. EJEYI MOVLW 0X80 MOVWF PORTC ; habilita latches de Y GOTO MXYII ; secuencia Y izq. EJEZD MOVLW 0X20 MOVWF PORTC ; habilita latch de Z GOTO MXYDD ; secuencia X y Y der. EJEZI MOVLW 0X20 MOVWF PORTC ; habilita latch de Z GOTO MXYII ; secuencia X y Y izq. En esta subrutina se genera la secuencia para el movimiento en X y Y hacia la derecha simultáneamente. MXYDD MOVLW 0X99 ; BINARIO 10011001 MOVWF PORTB CALL RETARDO ; RETRASO MOVLW 0XCC ; BINARIO 11001100 MOVWF PORTB CALL RETARDO ; RETRASO MOVLW 0X66 ; BINARIO 01100110 MOVWF PORTB CALL RETARDO ; RETRASO MOVLW 0X33 ; BINARIO 00110011 MOVWF PORTB CALL RETARDO ; RETRASO GOTO INICIO En esta subrutina se genera la secuencia para el movimiento a la derecha en X y hacia la izquierda en Y. MXYDI MOVLW 0X99 ; BINARIO 10011001 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0XC3 ;BINARIO 11000011 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0X66 ;BINARIO 01100110 MOVWF PORTB CALL RETARDO ;RETRASO
MOVLW 0X3C ;BINARIO 00111100 MOVWF PORTB CALL RETARDO ;RETRASO GOTO INICIO En esta subrutina se genera la secuencia para el movimiento a la izquierda en X y hacia la derecha en Y. MXYID MOVLW 0X99 ;BINARIO 10011001 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0X3C ;BINARIO 00111100 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0X66 ;BINARIO 01100110 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0XC3 ;BINARIO 11000011 MOVWF PORTB CALL RETARDO ;RETRASO GOTO INICIO En esta subrutina se genera la secuencia para el movimiento en X y Y hacia la izquierda simultáneamente. MXYII MOVLW 0X99 ;BINARIO 10011001 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0X33 ;BINARIO 00110011 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0X66 ;BINARIO 01100110 MOVWF PORTB CALL RETARDO ;RETRASO MOVLW 0XCC ;BINARIO 11001100 MOVWF PORTB CALL RETARDO ;RETRASO GOTO INICIO Subrutina que genera el retardo necesario para que los motores respondan a los cambios en los valores de la secuencia y poder romper la inercia de este. RETARDO MOVLW 0X09 MOVWF DELAY1 RETARDO1 MOVLW 0XFF MOVWF DELAY2 RETARDO2 DECFSZ DELAY2,1 GOTO RETARDO2 DECFSZ DELAY1,1 GOTO RETARDO1 RETURN Subrutina que se encarga de verificar el resultado de la conversión A/D de los voltajes Vx y Vy, para determinar el sentido del movimiento en los ejes (si lo hay), y colocar los ‘1’ en los respectivos bits de la palabra de control. MOVIM BCF ESTATUS,2 BSF ESTATUS,0 MOVLW 0X03 SUBWF ADRESH,0 BTFSC ESTATUS,2 ;si es ‘1’, se mueve a la derecha GOTO FIN BSF ESTATUS,0 BSF ESTATUS,5 MOVLW 0X66 SUBWF ADRESL,0 ;si es ‘0’, se mueve a la izquierda BCF ESTATUS,5
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
BTFSC ESTATUS,0 ;si es ‘1’, se mueve a la izquierda GOTO FIN1 BSF CONTROL,3 ;CONTROL=00001000 GOTO FIN1 FIN BSF CONTROL,2 ;CONTROL=00000100 FIN1 BCF ESTATUS,5 RETURN
Subrutina que genera un retardo de aproximadamente 60us necesario para realizar la adquisición del la muestra en la conversión A/D. ESPERA MOVLW 0x05 MOVWF CONTA0 RET1 DECFSZ CONTA0,1 GOTO RET1 RETURN END
(a) Vista completa del proyecto
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
(b) Operación por medio del joystick
(c) Cicuito completo: Control y Potencia
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
+V
V65V
C233pF
C133pF
XTAL14.000MHZ
R51k
R61k
S4
S5
S6
S3
+V
V55V
+V
V45V
S2
S1
R2156k 40%
R1156k 40%
1 A2
3 B4
MotorY
+V
V316V
D12DIODEQ12
TIP122
D11DIODEQ11
TIP122
D10DIODE
Q10TIP122
Q9TIP122
D9DIODE
74LS373
D7D6D5D4D3D2D1D0
Q7Q6Q5Q4Q3Q2Q1Q0
OE E
U3
P16F877
1 A2
3 B4
MotorX
+V
V212V
D8DIODEQ8
TIP122
D7DIODEQ7
TIP122
D6DIODE
Q6TIP122
Q5TIP122
D5DIODE
74LS373
D7D6D5D4D3D2D1D0
Q7Q6Q5Q4Q3Q2Q1Q0
OE E
U2
74LS373
D7D6D5D4D3D2D1D0
Q7Q6Q5Q4Q3Q2Q1Q0
OE E
U1
D1DIODE
Q1TIP122
Q2TIP122
D2DIODE
Q4TIP122
D4DIODE
Q3TIP122
D3DIODE
+V
V116V
1 A2
3 B4
MotorZ
R433k
R333k +V
V65V
C233pF
C133pF
XTAL14.000MHZ
R51k
R61k
S4
S5
S6
S3
+V
V55V
+V
V45V
S2
S1
R2156k 40%
R1156k 40%
1 A2
3 B4
MotorY
+V
V316V
D12DIODEQ12
TIP122
D11DIODEQ11
TIP122
D10DIODE
Q10TIP122
Q9TIP122
D9DIODE
74LS373
D7D6D5D4D3D2D1D0
Q7Q6Q5Q4Q3Q2Q1Q0
OE E
U3
P16F877
1 A2
3 B4
MotorX
+V
V212V
D8DIODEQ8
TIP122
D7DIODEQ7
TIP122
D6DIODE
Q6TIP122
Q5TIP122
D5DIODE
74LS373
D7D6D5D4D3D2D1D0
Q7Q6Q5Q4Q3Q2Q1Q0
OE E
U2
74LS373
D7D6D5D4D3D2D1D0
Q7Q6Q5Q4Q3Q2Q1Q0
OE E
U1
D1DIODE
Q1TIP122
Q2TIP122
D2DIODE
Q4TIP122
D4DIODE
Q3TIP122
D3DIODE
+V
V116V
1 A2
3 B4
MotorZ
R433k
R333k
(d) Diagrama Circuital Completo
UNIVERSIDAD FRANCISCO DE PAULA SANTANDER INGENIERÍA ELECTRÓNICA
MICROCONTROLADORES GRUA CONTROLADA POR UN PIC 16F877
Iván Ernesto Zambrano López Jorge Humberto Oviedo Rodríguez Darwin Carreño Niño [email protected] [email protected] [email protected]
Ing. Gabriel Sánchez Suárez [email protected]
CONCLUSIONES El Joystick es un dispositivo muy versátil a la hora de implementar control de movimientos, debido a que su uso es muy sencillo para cualquier tipo de usuario, el montaje de circuiteria externa es muy sencillo y tiene un bajo costo. Los potenciómetros internos del Joystick varían muy sensiblemente en respuesta a los movimientos impuestos por la palanca, lo que impide tener una variedad de datos exactos obtenidos con el conversor para propósitos de variación de velocidad, pero se pueden diferenciar bien la dirección de los movimientos. Una de las grandes ventajas de los microcontroladores PIC sobre los demás, es debido a que posee módulos de aplicaciones específica como son los conversores A/D y el generador PWM, reducen hardware externo cuando se emplea en un sistema con lo que se reduce tamaño en el circuito y por ende costos en el proyecto. La familia de microcontroladores PIC es una de las más versátiles en el mercado, debido a que contiene una gama muy variada de dispositivos que varían en tamaño y complejidad con lo que se pueden emplear en sistemas sencillos y a medida
que aumente la complejidad también se encuentran PIC más avanzados que se adaptan a estas características. En el control de motores paso a paso es muy común el empleo de microcontroladores por la sencillez del sistema que se quiere y la poca robustes que representan, en comparación, por ejemplo con el empleo de un PC. Utilizar latches (74HC373) minimiza el empleo de recursos del microcontrolador o dispositivo de control para aplicaciones con motores PAP en donde los datos enviados son los mismos para todos los motores. BIBLIOGRAFIA http://www.ctv.es/pckits/tpjoysticke.html http://www.epanorama.net/documents/joystick/pc_joystick.html http://www.epanorama.net/documents/joystick/pc_circuits.html www.microchip.com
• MPLAB IDE v6.xx Quick Start Guide • MPLAB IDE v5.xx Quick Start Guide • PIC16F87X Data Sheet • Application Development MPLAB IDE