Title | Práctica 1 Sistemas de Control y Automatizacion IPN |
---|---|
Author | Mauro Antonio Rojo Cabrera |
Course | Sistemas De Control |
Institution | Instituto Politécnico Nacional |
Pages | 13 |
File Size | 833 KB |
File Type | |
Total Downloads | 8 |
Total Views | 131 |
La relación entre las NOT y el ULN2803, es que las NOT sirven como complemento, es como un seguro. Ya que sí le llega menos voltaje que el que activa la compuerta, no va a registrar el pulso. De este modo, las NOT sirven justamente para asegurar que llegué el voltaje necesario para activar el ULN280...
INSTITUTO POLITÉCNICO NACIONAL. CENTRO DE ESTUDIOS CIENTIFICOS Y TECNÓLOGICOS “JUAN DE DIOS BATIZ” “Reporte de Práctica 1: Control de Variables Físicas” Grupo: 6IV3. Materia: Sistemas de Control y Automatización. Profesor:
DESARROLLO: INDICADOR DE NIVEL: Este proyecto es un detector de nivel de agua, con el apoyo visual de un display que nos mostrará en qué nivel se encuentra el líquido en el tanque de plástico.
Armar y simular el circuito de la figura 1, explique cómo se relacionan las compuertas NOT con el circuito integrado ULN2803.
Los indicadores de nivel suelen ser ocupados para visualizar el nivel de agua en un reservorio. Son fáciles de construir porque utilizan componentes relativamente sencillos de conseguir. El circuito está formado por estados lógicos, que van a representar los sensores que detecten el nivel de agua (sí durante el funcionamiento del circuito nosotros no los presionamos en el orden correcto no va mostrar los valores reales, debido a que les da prioridad a los valores mayores). Estos mismo van conectados a unas NOT y estas mismas NOT están conectadas al ULN2803. Dentro de este circuito integrado se encuentra una serie de transistores Darlington, hablando de transistores Darlington nos referimos a una forma específica de conectar los transistores, de modo que, nos permitirá que la corriente amplificada Figura 2: Estructura interna del ULN2803.
Figura 1: Simulación Indicador de Nivel Proteus.
que pasa por el primer transistor ingrese en la base del segundo transistor y se vuelva a amplificar nuevamente. La relación entre las NOT y el ULN2803, es que las NOT sirven como complemento, es como un seguro. Ya que sí le llega menos voltaje que el que activa la compuerta, no va a registrar el pulso. De este modo, las NOT sirven justamente para asegurar que llegué el voltaje necesario para activar el ULN2803. Después tenemos un arreglo resistivo, que conecta el ULN2803 y 74LS147. A grandes rasgos el 74LS147, es un codificador de 10 líneas a 4 líneas. El 74LS147, hace la codificación y las 4 líneas resultantes van a conectarse a las NOT, que invertirán los pulsos. Para después ingresar al 7447, que es un codificador a 7 segmentos, lo que nos permitirá visualizar los pulsos en el Display de 7 segmentos. Resultando el circuito en lo siguiente:
TERMOMETRO DIGITAL: Figura 3: Representación gráfica de indicador de nivel. Arme el siguiente circuito, programe el PIC y verifique la variación de temperatura.
Figura 4. Esquema de conexión de un PIC16F877A para medir temperatura ambiental.
Figura 5: Circuito armado en Proteus
Funcionamiento del Circuito: En este circuito se ocupa el LM35, que es un sensor de temperatura. En el datasheet del dispositivo nos dice que el Pin de Salida tenemos una variación de 10 mV por °C y que su alimentación va de 4-30 V. Y es capaz de medir temperaturas de -55°C a 150°C. En el circuito la salida del LM35 está conectado al puerto A0 del PIC, este mismo puerto está programado como conversor A/D a 10 bits. Al iniciar la simulación el LED del puerto D4 va a parpadear 3 veces. Para después dar inicio al Termómetro Digital. En el LCD nos saldrá la temperatura mínima, actual y máxima. El rango inicial es de 20°C a 24°C, si la temperatura actual permanece entre ese rango de temperaturas ninguno de los sistemas regulados por los relés se activará. Si la temperatura actual se encuentra fuera del rango se activará el sistema correspondiente; sí es menor al rango se activa el sistema de Calefacción que es representado por una bombilla, sí es mayor al rango se activa el sistema de Enfriamiento que es representado con un motor (simula un ventilador). Sí deseamos modificar los rangos de temperatura debemos presionar el Botón de Selección, los otros dos Push Buttons nos permitirán subir o disminuir la temperatura a comparar y una vez estenos de acuerdo con la selección, presionamos nuevamente el Botón de Selección. Una vez establecidos los valores deseados el LED del puerto D4 encenderá 3 veces, indicando que los datos ya se han guardado.
Figura 6: Diagrama a Bloques de Termómetro Digital con PIC16F877A y LM35.
Caso 1:
Temperatura Actual dentro del Rango de Temperatura s.
Caso 2: Temperatura Actual por debajo del Rango de Temperatura s.
Caso 3: Temperatura actual por encima del Rango de Temperatura s.
(Ventilador y Bombilla apagadas).
(Bombilla encendida).
(Ventilador encendido, no se aprecia el movimiento)
Y el circuito funciona de este modo:
Y el proceso de programación del rango de temperatura es así: Presionamos el botón de selección y el LED dará 3 pulsos para comenzar el proceso, después el LCD nos mostrará lo siguiente:
Ya es decisión nuestra que rango de temperatura establecer. Para este ejemplo yo puse ambas temperaturas en el mismo valor:
Y así es como podemos programar el circuito y verificar lo que ocurre al variar la temperatura del mismo. Usé el código proporcionado, intenté hacerlo con lenguaje ensamblador en MPLAB, pero solo logré que mostrará la temperatura actual, ese código se lo anexo al final de este documento.
Conclusión: Al finalizar la práctica, entiendo conceptos básicos de la Instrumentación Industrial. De las que puedo destacar la Ajustabilidad de Rango que se ve aplicada en el circuito 2 al modificar el rango de temperatura. Las Entradas Deseadas que son representadas por los estados lógicos en el primer circuito y el pin de salida del LM35 en el segundo circuito. Y los errores, que en el segundo circuito luego pasaba que el LM35 medía un valor y en el LCD nos marcaba un grado más o menos del que el sensor detectaba y como sabemos un error es la diferencia entre el valor medido y el valor verdadero, concluyendo que el segundo circuito tenía ±1°C de error. También puedo entender la clasificación de los sistemas de control; Sistemas de Lazo Abierto y Lazo Cerrado. Puedo identificar que el primer circuito de esta práctica es de lazo abierto debido a que la salida no tiene efecto sobre la acción de control, mientras que el segundo circuito es un sistema de Lazo Cerrado porque la salida ejerce un efecto directo sobre la acción de control, hay una retroalimentación en el proceso. La importancia de conocer este tipo de conceptos es mucha, ya que podemos llegar a usarlos en nuestra vida profesional. A grandes rasgos enfrenté complicaciones en simulación y en programación, por lo que retomaré el resultado de está práctica y su repercusión en la elaboración de las prácticas futuras.
Referenci Just a moment... (s. f.). dePerú. Recuperado 19 de marzo de 2021, de https://www.deperu.com/electronica/circuitos-basicos/indicador-denivel-de-agua-con-circuito-integrado-uln2803-37 (2020, 24 abril). ULN2803: todo sobre el par de transistores Darlington. Hardware libre. https://www.hwlibre.com/uln2803/
Código: Este es el código que hice en MPLAB que le mencioné previamente: ;INSTITUTO POLITECNICO NACIONAL. ;CECYT 9 JUAN DE DIOS BATIZ.
unidades
equ 0x32
decenas
equ 0x33
centenas equ 0x34 resto
equ 0x35
; ;ROJO CABRERA MAURO ANTONIO ;GRUPO: 6IV3. ;Sistemas de Control y Automatización.
org 0h goto INICIO org 05h
; ;Práctica 1 ;--------------------------------------------------------------------------------------------
INICIO: clrf PORTA
;Limpia el puerto A
clrf PORTC
;Limpia el puerto C
processor 16f877a
clrf PORTD
;Limpia el puerto D
list p=16f877a
bsf STATUS,RP0
include
bcf STATUS,RP1
;Variable para el DELAY del ADC ;--------------------------------------------------------------------------------------------
val equ h'20'
;Variables para el DELAY del ENABLE LCD val2 equ 0x30 val1 equ 0x31
LCD
;Cambio la banco 1
;Configuración de puertos C-D para el
clrf TRISC salida
;Configura PORTC como
clrf TRISD salida
;Configura PORTD como
;Configuración del puerto A para ADC movlw 00h movwf ADCON1 y E como analógicos
;Configura puerto A
movlw 3fh
;Variables para separar el resultado de ADC en valor BCD
movwf TRISA como entrada movlw h'0'
;Configura el puerto A
bcf STATUS,RP0
;Regresa al banco 0
bcf PORTC,0 INSTRUCCION
; RS=0 MODO
movlw 0x01 ; El comando 0x01 limpia la pantalla en el LCD
;Inicio del programa
movwf PORTD
START call START_LCD ;Inicializa LCD goto START_ADC del Conv. A/D
;Comienza la lectura
call COMANDO comando bsf PORTC, 0
; Se da de alta el
; Rs=1 MODO DATO
return ;Inicia LCD ;Configuración Convertidor A/D
START_LCD: bcf PORTC,0 INSTRUCCION
; RS=0 MODO
movlw 0x01 ; El comando 0x01 limpia la pantalla en el LCD movwf PORTD call COMANDO comando movlw 0x0C línea
; Se da de alta el ; Selecciona la primera
movwf PORTD call COMANDO comando movlw 0x3C
; Se da de alta el ; Se configura el cursor
movwf PORTD call COMANDO comando bsf PORTC, 0
START_ADC movlw b'11000001' ;Configuración ADCON0 movwf ADCON0 ;ADCS1=1 ADCS0=1 CHS2=0 CHS1=0 CHS0= GO/DONE=0 - ADON=1
CICLO: bsf ADCON0,2 progreso GO=1 call DELAY1 conversión
;Conversión en
;Espera que termine la
ESPERA btfsc ADCON0,2 ;Pregunta por DONE=0? (Terminó conversión) goto ESPERA preguntar
; Se da de alta el
movf ADRESH,0
;No, vuelve a ;Si
; Rs=1 MODO DATO ;Rutina que muestra temperatura
return
PRINT_TEMP
;Rutina para enviar un dato ENVIA: bsf PORTC, 0
DATO
; RS=1 MODO
call ERASE_LCD
;Limpia LCD
M1: movlw 'T' movwf PORTD
el comando
call COMANDO
; Se da de alta
movlw 'E'
return
movwf PORTD
;Rutina para enviar comandos COMANDO: bsf PORTC, 1 en 1 call DELAY2
; Pone la señal ENABLE
call ENVIA movlw 'M' movwf PORTD call ENVIA movlw 'P'
; Tiempo de espera movwf PORTD
call DELAY2 bcf PORTC, 1
call ENVIA
; ENABLE=0
call ENVIA movlw 'E'
call DELAY2 return
movwf PORTD call ENVIA
;Rutina para limpar pantalla LCD ERASE_LCD
movlw 'R' movwf PORTD call ENVIA
movlw 'A'
movlw 'C'
movwf PORTD
movwf PORTD
call ENVIA
call ENVIA movlw 'T'
movwf PORTD call ENVIA movlw 'U'
goto CICLO lectura ADC
;Repite el ciclo de
;Rutina que obtine el valor de la temperatura ;a partir del resultado del Conv a/D
movwf PORTD
READ_TEMP:
call ENVIA movlw 'R'
clrf centenas
movwf PORTD
clrf decenas
call ENVIA
clrf unidades movlw 'A'
movwf PORTD
movf ADRESH,W ;Dupilca el valor de ADRESH para addwf ADRESH,W ;obtener un valor de temperatura real aprox
call ENVIA
movwf Resto ADRESH en Resto
movlw '=' movwf PORTD
;Guarda el valor de
call ENVIA ;Comienza el proceso de otención de valores BCD
movlw ' ' movwf PORTD
;para Centenas, Decenas y unidades atraves de restas
call ENVIA
call READ_TEMP que obtine el
;sucesivas. ;Llamada a rutina
;valor de la temperatura a
partir
;del resultado del Conv a/D
CENTENAS1 movlw d'100'
;W=d'100'
subwf resto,W
;Resto - d'100' (W)
btfss STATUS,C d'100'? goto DECENAS1
M2: movf centenas,W de las centenas
;Imprime el dígito
call ENVIA
DECENAS1 movlw d'10' ;Imprime el dígito
btfss STATUS,C
movwf resto
movlw ' '
;Resto menor que ;Si
;No, Salva el resto
incf decenas,1 contador de centenas BCD
movwf PORTD
goto DECENAS1
call ENVIA
call ENVIA
;Resto - d'10' (W)
goto UNIDADES1
call ENVIA
movwf PORTD
;W=d'10'
subwf resto,W d'10'?
movwf PORTD
movlw h'DF'
;Realiza otra resta
;Imprime el dígito
call ENVIA
"°"
;NO, Salva el resto
goto CENTENAS1
movwf PORTD
movf unidades,W de las unidades
;SI
incf centenas,1 ;Incrementa el contador de centenas BCD
movwf PORTD
movf decenas,W de las decenas
movwf resto
;Resto menor que
;Incrementa el
;Realiza otra resta
;Imprime el simbolo UNIDADES1 movf Resto,W; Unidades BCD
;El resto son la
movwf unidades; ;clrf Resto ASCII
;Rutina que obtiene el equivalente en
OBTEN_ASCII movlw h'30' iorwf unidades,f; iorwf decenas,f; iorwf centenas,f; return; ;Rutina que genera un Delay microSeg aprox. para el Conv. A/D
de
20
DELAY1 movlw h'30' movwf val; Loop
decfsz val,1; goto Loop; return;
;Subrutina de retardo para ENABLE_LCD
DELAY2 movlw 0xFF movwf val1 Loop1 movlw 0xFF movwf val2 Loop2 decfsz val2,1; goto Loop2; decfsz val1,1; goto Loop1;
return; ;-------------------------------------------------------------------------------------------en...