Escuela Politécnica Superior de Elc he 4º Ingeniería Industrial EXAMEN DE SISTEMAS ELECTRÓNICOS Y AUTOMÁTICOS 2º Parte: Microcontroladores + Instrumentación Nombre: ______________________________________________________________________ 1 de septiembre de 2005 Microcontroladores CUESTION 1 (0.5 puntos) En un PIC16F876 se desea que en su reinicialización se a pase a ejecutar un programa que comienza en la dirección 10 de la memoria de programa. Indicar cómo se consigue. SOLUCIÓN: El PIC16F876 pertenece a la gama media, y en esta gama, el vector de reset (la posición de memoria de programa a la que apunta el PC tras resetear) es la más baja, es decir la 0000. Luego en esa posición se debe poner una instrucción de salto hacia donde queremos que comience el programa: org 0x00 goto 0x0A o bien, org 0x00 goto 0x10 según se haya interpretado el número 10 del enunciado. CUESTION 2 (0.5 puntos) ¿Qué instrucciones existen en la gama baja que no tiene la gama media? y, ¿cuáles son específicas de la gama media y no de la gama baja? SOLUCIÓN: Gama baja -> OPTION y TRIS Gama media -> RETURN, RETFIE, ADDLW Y SUBLW 1 PROBLEMA 1 (3 punto) Confeccionad un programa en ensamblador para el PIC16F84A, suponiendo que se ejecutará sobre la tarjeta MicroPICTrainer, que trate sobre el control de los leds conectados al puerto B desde los interruptores conectados al puerto. En concreto, se desea que RB0 refleje el estado de RA0; RB1 el complemento de RA0, RB2 tenga el valor de la suma lógica (OR) entre RA0 y RA1 y por último, RB3 tenga el valor de la multiplicación lógica (AND) entre RA0 y RA1. SOLUCIÓN (A): Una posible solución es extraer los bits RA0 y RA1 de PORTA a dos celdas de memoria de datos y, posteriormente, realizar las operaciones mediante el uso de las instrucciones iorwf y andwf, que realizan las funciones OR y AND con el contenido de dos bytes. ;Control de los leds RB0 y RB1 desde el interruptor RA0. ;RB0 refleja el estado de RA0 ;RB1 el complemento de RA0 ;RB2 es RA1 or RA0 ;RB3 es RA1 and RA0 List p=16F84 ;Tipo de procesador include"P16F84.INC" ;Definiciones de registros internos PA0 PA1 PROD SUM Inicio equ equ equ equ 0x11 0x12 0x13 0x14 ;aqui ;aqui ;aqui ;aqui guardaré guardaré guardaré guardaré el el el el bit 0 de PORTA (RA0) bit 1 de PORTA (RA1) resultado de la operación resultado de la operación org goto 0x00 Inicio ;Vector de Reset org 0x05 ;Salva el vector de interrupción clrf bsf clrf movlw movwf bcf PORTB STATUS,RP0 TRISB b'00011111' TRISA STATUS,RP0 ;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida "and" "or" ;Puerta A se configura como entrada ;Selecciona banco 0 Loop clrwdt movf PORTA,W andlw b'00000001' movwf PA0 movf PORTA,W andlw b'00000010' movwf PA1 rrf PA1,F btfsc PORTA,0 goto RA0_es_1 bcf PORTB,0 bsf PORTB,1 call SUMA call PRODUCTO goto Loop ;Refresca el WDT timer ;Mueve el contenido de PORTA a W ;Máscara para obtener RA0 ;Copia RA0 a PA0 (RA0 es el bit 0 de PA0) ;Mueve el contenido de PORTA a W ;Máscara para obtener RA1 ;Copia RA1 a PA1 (RA1 es el bit 1 de PA1) ;Rota a la drcha. PA1(ahora, RA1 es el bit 0 de PA1) ;RA0 = 1 ?? ;Si RA0=1, salta a RA0_es_1 ;Pone RB0 a 0 (RA0) ;Pone RB1 a 1 (complemento de RA0) ;Salto a la subrutina que hace RA1 or RA0 ;Salto a la subrutina que hace RA1 and RA0 ;Bucle sin fin RA0_es_1 bsf PORTB,0 bcf PORTB,1 call SUMA call PRODUCTO goto Loop ;Pone RB0 a 1 (RA0) ;Pone RB1 a 0 (complemento de RA0) ;Salto a la subrutina que hace RA1 or RA0 ;Salto a la subrutina que hace RA1 and RA0 ;Bucle sin fin ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SUMA movf PA0,W ;Copia PA0 a W iorwf PA1,W ;RA0 or RA1 movwf SUM ;Salva el resultado en SUM btfsc SUM,0 ;SUM = 1?? goto SUM_es_1 ;Si SUM=1, salta a SUM_es_1 bcf PORTB,2 ;Pone RB2 a 0 2 return ;Fin subrutina bsf PORTB,2 ;Pone RB2 a 1 return ;Fin subrutina ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SUM_es_1 PRODUCTO movf PA0,W ;Copia PA0 a W andwf PA1,W ;RA0 and RA1 movwf PROD ;Salva el resultado en PROD btfsc PROD,0 ;PROD = 1? goto PROD_es_1 ;Si PROD=1, salta a PROD_es_1 bcf PORTB,3 ;Pone RB3 a 0 return ;Fin subrutina PROD_es_1 bsf PORTB,3 ;Pone RB3 a 1 return ;Fin subrutina ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; end ;Fin del programa fuente SOLUCIÓN (B): Otra posible solución más compacta consiste en considerar los cuatro casos que ocurren según el valor de las 2 entradas: ENTRADAS RA0 · RA1 RA0 + RA1 NOT RA0 RA0 RA1 RA0 RB3 RB2 RB1 RB0 0 0 1 1 0 1 0 1 0 0 0 1 0 1 1 1 1 0 1 0 0 1 0 1 List p=16F84 ;Tipo de procesador include"P16F84.INC" ;Definiciones de registros internos org goto Inicio Loop RA0_es_1 CASO_00 CASO_01 CASO_10 CASO_11 0x00 Inicio org 0x05 clrf PORTB bsf STATUS,RP0 clrf TRISB movlw b'00011111' movwf TRISA bcf STATUS,RP0 clrf PORTB clrwdt btfsc PORTA,0 goto RA0_es_1 bcf PORTB,0 bsf PORTB,1 btfsc TORTA,1 goto CASO_10 goto CASO_00 bsf PORTB,0 bcf PORTB,1 btfsc TORTA,1 goto CASO_11 goto CASO_01 bcf PORTB,2 bcf PORTB,3 goto Loop goto CASO_10 bsf PORTB,2 bcf PORTB,3 goto Loop bsf PORTB,2 bsf PORTB,3 goto Loop end ;Vector de Reset ;Salva el vector de interrupción ;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida ;Puerta A se configura como entrada ;Selecciona banco 0 ;Inicializa PORTB a 0 ;Refresca el WDT timer ;RA0 = 1 ?? ;Si RA0=1, salta a RA0_es_1 ;Pone RB0 a 0 (RA0) ;Pone RB1 a 1 (complemento de RA0) ;RA1 = 1?? ;caso RA1=1 RA0=0 ;caso RA1=0 RA0=0 ;Pone RB0 a 1 (RA0) ;Pone RB1 a 0 (complemento de RA0) ;RA1 = 1 ?? ;caso RA1=1 RA0=1 ;caso RA1=0 RA0=1 ;or ;and ;bucle infinito ;estos casos son iguales ;or ;and ;bucle infinito ;or ;and ;bucle infinito ;Fin del programa fuente 3 PROBLEMA 2 (3 puntos) Confeccionad un programa en ensamblador para el PIC16F873, suponiendo que se ejecutará sobre la tarjeta MicroPICTrainer, que produzca el apagado y encendido de los leds conectados a los bits 1 y 2 del puerto B (RB1 y RB2) cada 100 ms haciendo uso del sistema TIMER1. Nunca deben estar encendidos o apagados los dos leds simultáneamente, es decir, la secuencia debe ser: RB1 RB2 t t+100 ms t+200 ms t+300 ms Suponed también que el sistema Watchdog ha sido activado en la palabra de configuración y asociarle un preescalado de 1 dentro de vuestro programa. SOLUCIÓN: list p=16F873 include"P16F873.INC" Delay Inicio Loop ;Tipo de procesador ;Definiciones de registros internos equ .25000 ;cuenta a realizar por TIMER1 con preescalado 4 ;para temporizar 100ms org goto ;Vector de Reset 0x00 Inicio org 0x05 clrf PORTB bsf STATUS,RP0 clrf TRISB bcf STATUS,RP0 movlw b'11001000' movwf OPTION_REG clrf T1CON bsf T1CON,TMR1ON bsf T1CON,T1CKPS1 clrwdt movlw b'00000010' movwf PORTB call PAUSA movlw b'00000100' movwf PORTB call PAUSA goto Loop ;Salva el vector de interrupción ;Borra los latch de salida ;Selecciona banco 1 ;Puerta B se configura como salida ;Selecciona banco 0 ;Preescaler de 1 asociado al WDT ;Inicializacion del registro de control del TIMER1 ;Timer1 ON ;Preescalado a 4 del Timer1 ;Refresca el WDT timer ;RB1=1 RB2=0 ;Retardo de 100 ms ;RB1=0 RB2=1 ;Retardo de 100 ms ;Bucle Infinito ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PAUSA bcf PIR1, TMR1IF ;Baja bandera del TIMER1 movlw low ~Delay ;carga cuenta a realizar movwf TMR1L movlw high ~Delay movwf TMR1H ESPERA btfss PIR1,TMR1IF ;Comprobación del desbordamiento goto ESPERA return ;Retorna al programa principal ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; end ;Fin del programa fuente 4 PROBLEMA 3 (3 puntos) El contenido de la memoria de programa del PIC16F84A a partir de la posición 0000h es el siguiente: 1. Deducid con ayuda del manual el programa allí almacenado. 2. Si tras resetear el PIC y su memoria de datos, el programa anterior se ejecuta hasta la línea 21 (dirección de programa=0x14), indicad el contenido de las celdas de propósito general de la memoria de datos, el valor del acumulador (W), y el del contador de programa (PCL). MEMORIA DE DATOS address 00 0000 0010 0020 0030 0040 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F PCL W PCL 5 SOLUCIÓN: Contador Primera Inicio Bucle equ equ 0x0c 0x10 org goto 0x00 Inicio org movlw movwf movlw movwf movlw movwf incf movlw movwf incf movlw movwf incf decfsz goto 0x05 .10 Contador Primera FSR 0x01 INDF FSR,F 0x23 INDF FSR,F 0x45 INDF FSR,F Contador,F Bucle nop nop El programa anterior, si se ejecuta hasta la línea 21, almacena el patrón 012345 en 10 posiciones contiguas de la memoria de datos, empezando desde la dirección 0x10: W 45h PCL 15h 6 Instrumentación PROBLEMA 1 (4 puntos) Un sensor potenciométrico de valor nominal 50 Ω , se encuentra conectado remotamente a un medidor, que se puede modelar como una impedancia resistiva de 100 kΩ, y a una fuente de alimentación de 3V mediante un esquema de 3 hilos tal como se muestra en la figura 1. SENSOR POTENCIOMÉTRICO Rcable REMOTO R=50 Ω R2=R·(1-x) Alimentación Vi Rcable R1=R·x Vo L MEDIDOR Rcable resistencia de los cables de conexión 150 m Figura 1 a)Calculad la tensión en el medidor en el caso ideal que la resistencia del cableado sea despreciable (Rcable=0) . b) Calculad la tensión en el medidor si la resistividad de los cables es 40Ω/km y el sensor se encuentra a unos 150 m. c) Calculad la tensión en el medidor, considerando la resistencia de los cables, utilizando un esquema de 4 hilos (Figura 2). d)¿Cuál de los dos esquemas eléctricos proporciona una medida de tensión más próxima al valor ideal?¿Cómo se podría conseguir el valor de tensión ideal a partir de los dos esquemas anteriores? 7 SENSOR POTENCIOMÉTRICO Rcable REMOTO R2=R·(1-x) Alimentación Rcable Vi Vo L R1 =R·x M EDIDOR Rcable Rcable resistencia de los cables de conexión Figura 2 SOLUCIÓN: a)Calculad la tensión en el medidor en el caso ideal que la resistencia del cableado sea despreciable (Rcable=0) . Si despreciamos la resistencia de los cables y consideramos que la resistencia del medidor es muy alta (100k Ω) en comparación con las del resto del circuito (decenas de Ω), el circuito resultante es el siguiente: Vi VOL = Vi R(1-x) Rx Rx = Vi x = 3 x (V ) R(1 − x ) + Rx VOL = 3x (V ) + VOL - 8 b) Calculad la tensión en el medidor si la resistividad de los cables es 40Ω/km y el sensor se encuentra a unos 150 m. Considerando la resistencia de los cables, el circuito resultante del esquema de medida de 3 hilos es el siguiente: Vi Rcable Rcable = 150m R(1-x) VOL = Vi Rx 40Ω = 6Ω 1000m Rx + Rcable 50 x + 6 =3 = 2.4193x + 0.2903 (V ) 2 Rcable + R 12 + 50 VOL = 2.4193 x + 0.2903 (V ) + VOL Rcable - c) Calculad la tensión en el medidor, considerando la resistencia de los cables, utilizando un esquema de 4 hilos (Figura 2). Considerando la resistencia de los cables, el circuito resultante del esquema de medida de 4 hilos es el siguiente: Vi Rcable Rcable = 150m VOL = I ⋅ Rx = R(1-x) Rx + VOL Vi 2Rcable + R Rx = 40Ω = 6Ω 1000m 3 ⋅ 50 x = 2.4193 x 12 + 50 (V ) VOL = 2.4193 x (V ) - Rcable 9 d)¿Cuál de los dos esquemas eléctricos proporciona una medida de tensión más próxima al valor ideal?¿Cómo se podría conseguir el valor de tensión ideal a partir de los dos esquemas anteriores? El esquema de 3 hilos disminuye la sensibilidad de la tensión de salida (de 3x a 2.42x), y además añade una tensión de offset. El esquema de medida de 4 hilos, elimina la tensión de offset pero sigue teniendo una sensibilidad inferior a la ideal. Para corregir el error de sensibilidad (previa corrección del error de offset mediante la utilización del circuito de 4 hilos) amplificaríamos la señal con una ganancia G = 62/50: SENSOR POTENCIOMÉTRICO REMOTO Rcable R2 =R·(1-x) Alimentación Rcable R 1=R·x 3x (V) Vi Vo L M EDIDOR Rcable Rcable G resistencia de los cables de conexión 10 PROBLEMA 2 ( 2 puntos) En el esquema de la figura 3 se presenta un sistema de control de temperatura mediante una NTC. Se desea que el relé active la alarma cuando la temperatura ambiente alcanza los 45ºC. Se pide diseñar el valor del potenciómetro de control de temperatura teniendo en cuenta los siguientes datos: Relé (Bobina de 30mH y resistencia despreciable): Intensidad de activación = 10mA. NTC: R0 (25ºC) = 1000 Ω, B = 3290K Fuente de tensión: Vfuente=12V Figura 3 SOLUCIÓN: La NTC es un sensor cuyo valor resistivo depende de la temperatura, de forma que a mayor temperatura menor es su resistencia. Por tanto, si desde un temperatura ambiente normal, la temperatura asciende hasta los 45ºC, la resistencia del termistor disminuirá aumentando la corriente de la malla eléctrica en la que se encuentre. Este hecho nos permite diseñar el valor del potenciómetro, sabiendo que la intensidad de activación del relé que conecta la alarma es de 10 mA y su equivalente DC es simplemente un cortocircuito (puesto que el enunciado nos dice que su resistencia es despreciable). RNTC = R0e 1 1 B − T T0 RNTC ( 45º C) = 1000e 1 1 3290 − 318 298 ≈ 500Ω Aplicando la ley de Ohm a la malla eléctrica del esquema de la figura 3: V = I·(RNTC + P) 12 = 10·10-3 ·(500 + P) --> P = 700Ω Luego, utilizaremos un potenciómetro de valor nominal 1kΩ y lo ajustaremos al valor obtenido de 700Ω. 11 TEST(4 puntos. Resp Correcta = 0.25 puntos. Resp Incorrecta = -0.25 puntos) Indica si los siguientes enunciados son verdaderos (V) o falsos (F): 1 Un bimetal es un sensor primario formada por dos semiconductores con distinto coeficiente de dilatación térmica unidos firmemente, por ejemplo, mediante soldadura autógena, y sometidos a la misma temperatura. F 2 Las galgas extensiométricas se basan en la variación de la inductancia eléctrica de un conductor o semiconductor cuando es sometido a un esfuerzo mecánico. F 3 Un sensor primario convierte una magnitud física de cualquier tipo en una magnitud de tipo resistivo. F 4 Las aplicaciones de las LDRs se centran en la medida de luz (fotometría) y en la detección de cambios de luz. V 5 Los metales se caracterizan por poseer coeficientes térmicos positivos de variación de la resistencia eléctrica, ello es producto de que al aumentar en los mismos la energia interna aumenta su resistividad. V 6 Los termistores son sensores de temperatura de tipo resistivo. El nombre de termistor nace de la contracción de las palabras inglesas "thermal" y "resistor". V 7 Las NTCs y PTCs son sensores cuya curva de calibración es totalmente lineal con la variación de la temperatura. F 8 Se denomina condensador diferencial al formado por tres placas planas paralelas, en donde, en general, las placas exteriores suelen ser fijas y la placa central móvil, en respuesta a la variable a detectar. V 9 Los sensores capacitivos pueden utilizarse como sensores de proximidad para la detección de objetos metálicos y no metálicos. V 10 Los sensores inductivos no pueden utilizarse para la medida de distancias puesto que su equivalente en DC es un cortocircuito. F 11 Un termopar es un sensor de temperatura construido por dos semiconductores dopados fuertemente cuya característica principal es que produce una tensión proporcional a la diferencia de temperaturas entre los puntos de unión de ambos semiconductores. F 12 El efecto piezoeléctrico se produce en los cristales de cuarzo. V 13 El amplificador operacional integrado 741 tiene un CMRR infinito F 14 El amplificador de instrumentación es un amplificador diferencial con dos seguidores en las entradas, cuyas características más importantes son: baja impedancia de entrada, alto CMRR, alta impedancia de salida y ganancia estable y variable con una sola resistencia. F 15 El efecto Hall consiste, básicamente, en la aparición de una tensión sobre un conductor por el que circula una corriente al situarlo bajo la influencia de un campo magnético. V 16 El término piezoeléctrico tiene origen griego: piezo significa presión, por lo que se podría asignar un significado etimológico de electricidad producida por la presión. V 12