Story Transcript
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
Diseño de Microcontroladores Proyecto final
Comando de un ascensor de cuatro pisos
Alumno: Gonzalo Cánepa Profesor: José Juarez Gonzalo Cánepa
Página 1
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
INDICE 1. Introducción 1.1 Propuesta inicial 1.2 Modificaciones y propuesta realizada 2. Diseño y armado del kit (Tarjeta entrenadora) del MC68HC11E1CFN2 2.1 Características del MC68HC11E1CFN2 2.2 Circuitos de la tarjeta 2.2.1 Circuito de alimentación 2.2.2 Circuito de clock 2.2.3 Circuito del reset 2.2.4 Circuito de transmisión serie asincrónica 2.2.5 Circuito de interrupciones externas 2.2.5 Circuito de selección de modos de arranque 2.2.6 Conexión de VRL y VRH 2.2.7 Referencia para el conversor A/D 2.3 Circuito del motor paso a paso 2.4 Diseño y armado de las placas utilizadas por la planta 2.4.1 Conexión de leds 2.4.2 Conexión de pulsadores de entrada 3. Metodología de resolución 3.1 Diseño del programa ascensor para el HC11 3.2 Distribución de puertos 3.3 Esquema de funcionamiento 4. Diagramas de flujo 5. Código en lenguaje Assembler 6. Conclusión 7. Bibliografía
Gonzalo Cánepa
Página 2
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
1. 1.1
Introducción
Propuesta inicial:
Inicialmente se basaba en un motor paso a paso con una polea empotrada y comunicada con otra a través de una correa la cual se fijaba el cubículo del ascensor y dos guías laterales impedían el desbordamiento del mismo.
Gonzalo Cánepa
Página 3
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
1.2
Modificaciones y propuesta realizada:
La propuesta inicial se cambió debido a la complicación a la hora de conseguir sistemas poleas con correas dentadas de tamaño compatibles con el proyecto; y la solución encontrada fue utilizar el sistema del carro de una impresora Además del cubículo del ascensor el proyecto cuenta con un display de 7 segmentos, 4 leds indicadores y 9 pulsadores (4 para “llamada”, 4 de “ir a piso” o “internos” y una parada de emergencia). Los “leds indicadores” reflejan que pulsador de “llamada” o de “ir a piso” fue activado y el display de 7 segmentos indica en que piso está el cubículo. Los pulsadores de “llamada” se diferencian de los de “ir a piso” en el caso de que haya múltiples llamadas (llamadas desde varios pisos a la vez). En este caso, el ascensor debe ir a buscar al pasajero del piso mayor y luego recoger a los demás pasajeros. Esto se debe a que lo más probable es que todo aquel que llame al ascensor desee dirigirse a “planta baja”. En cambio los pulsadores de “ir a piso” (internos al cubículo del ascensor) solicitaran el programa más inteligente para cada situación particular El microcontrolador se comunicará con la planta a través de cuatro fines de carrera que le indicarán en que piso está posicionado el cubículo. Nota: Si bien el motor ideal para el sistema es un motor de corriente continua (DC motor), el proyecto está pensado para utilizar un motor paso a paso. Esto se debe a que por motivo personal de estudio decidí aprender a controlar este tipo de motores. Los “leds indicadores” están compartidos entre los pulsadores de “llamada” y los “internos”. Si bien esto no tiene sentido para el caso real, es muy ilustrativo para observar el correcto funcionamiento de la planta
Gonzalo Cánepa
Página 4
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
2. 2.1
Diseño y armado del kit del MC68HC11E1CFN2
Características del MC68HC11E1CFN2
El microcontrolador MC68HC11E1CFN2 es de encapsulado PLCC (Grafico 2) y se diferencia de otro microcontrolador de la familia E1 de la siguiente forma:
Grafico 2
Las características de memoria del microcontrolador se detallan en la siguiente tabla:
Gonzalo Cánepa
Página 5
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
Finalmente, la distribución de puertos de Entrada/Salida está dada en la siguiente tabla:
Para el funcionamien to del ascensor el PORTC debe setearse como salida y el PORTD como entrada. Nota: El PORTD tiene la particularidad de que el bit 0 y el bit 1 están compartidos con la transmisión de datos del puerto serie (necesario para cargar un programa) por lo que para su utilización como bit de entrada o salida debe colocarse un jumper en la creación del kit. En el caso particular de este kit estos bits solo serán utilizados para el puerto serie
2.2
Circuitos de la tarjeta
2.2.1 Circuito de alimentación
Donde a Vcc In se conecta una fuente estándar de 9V C1 = 0,33 µF C2 = 0,01 µF C3 = 0,1 µF C2 = 1 µF
Gonzalo Cánepa
Página 6
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
El MC7805 es un regulador de voltaje que entrega un voltaje de 5V a partir de 9V y permite una circulación máxima de corriente de 500 mA. Si los valores de corriente son cercanos a este se aconseja incorporar un disipador 2.2.2 Circuito de clock En donde C1 = C2 = 22 pF R = 10 MO Y el cristal es de 8MHz
2.2.3 Circuito del reset
2.2.4 Circuito de transmisión serie asincrónica
Los capacitores empleados son electrolíticos de 22 µF y 25 V
Gonzalo Cánepa
Página 7
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
2.2.5 Circuito de interrupciones externas
2.2.5 Circuito de selección de modos de arranque El circuito se repite para MODB
2.2.6 Conexión de VRL y VRH
VRL está directamente conectado a GND
2.2.7 Referencia para el conversor A/D
Gonzalo Cánepa
Página 8
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
2.3
Circuito del motor paso a paso
Las 4 resistencias son de 4K7 En la entrada A corresponde al bit 0 del PORTB B corresponde al bit 1 del PORTB C corresponde al bit 2 del PORTB D corresponde al bit 3 del PORTB El integrado ULN2803 es un arreglo de transistores darligston con VccALIMENTACIÓN = 5V y VccMOTOR < 50V y una limitación de corriente máxima de 500mA. Cumple la función de separar el circuito de potencia del motor sin la necesidad de la utilización de 4 transistores individuales
2.4.1 Conexión de leds Los leds se conectan con una resistencia en serie que limita la circulación de corriente a través del led
Gonzalo Cánepa
Página 9
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
2.4.2 Conexión de pulsadores de entrada La utilización de las resistencias de pull-down evita que el microcontrolador confunda el uno lógico con el cero lógico
Gonzalo Cánepa
Página 10
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
3. 3.1
Metodología de resolución
Diseño del programa ascensor para el HC11
En primer lugar hay que tener en cuenta que un motor paso a paso se controla a través de una secuencia. Esta secuencia puede ser muy básica o muy compleja dependiendo de la exactitud buscada. Para el caso del ascensor la secuencia de subida será A,B,C,D y la de bajada será D,C,B,A (ver Circuito del motor paso a paso) El ascensor tiene una parada de emergencia, la cual se ejecutará a través de la interrupción IRQ 3.2 ? ? ? ? ?
3.3
Distribución de puertos El PORTA no será utilizado puesto que es de 3 entradas y cuatro salidas fijas. En los 4 bits menos significativos del PORTB se controlará el motor paso a paso y en los 4 más significativos se encenderán los “leds indicadores”. El PORT es configurado enteramente como salida En los 7 bits más significativos del PORTC se controlará el Display de 7 segmentos (el punto no se utiliza). Teniendo en cuenta las limitaciones del PORTD, los 4 bits útiles (bit 2, bit 3, bit 4 y bit 5) serán utilizados para los fines de carrera. El PORT es configurado enteramente como entrada En los 4 bits menos significativos del PORTE serán utilizados para los pulsadores “internos” y en los 4 más significativos para los pulsadores “de llamada”. Esquema de funcionamiento
La estructura del programa se basa una subrutina de inicialización, la cual debe ejecutarse solo en el caso de que el cubículo no este posicionado sobre un fin de carrera al inicio del programa. Una vez inicializado, se ejecutará un programa principal en el cual se chequeará el estado de los fines de carrera y se mostrará el Nº correspondiente en el display de 7 segmentos. Luego se verifica si se ha presionado un pulsador, y en ese caso se ejecutará la subrutina correspondiente que modificará una variable llamada “motor”. Luego, a partir del valor de la variable “motor” el microcontrolador decidirá si se ejecutará una secuencia para subir o para bajar, mientras que en cada paso de dicha secuencia se comprobará si se ha llegado a destino. Gonzalo Cánepa
Página 11
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
4. Diagramas de flujo PROGRAMA PRINCIPAL ¿PORTD = 00?
¿ PORTD = 00000100 B?
SI
Procedimiento INICIALIZACION
SI
DISPLAY : = N_CERO
CONSTANTES MOTOR: BAJAR = 01 SUBIR = 02 QUIETO = 04
¿ PORTD = 00001000 B?
SI
DISPLAY : = N_UNO
SI DISPLAY : = N_DOS
¿ PORTD = 00010000 B?
CONSTANTES DYSPLAY: N_CERO : =01111110B N_UNO : = 00001100B N_DOS : = 10110110B N_TRES : = 10011110B
VARIABLES SI DISPLAY : = N_TRES
¿ PORTD = 00100000 B?
PULSADORES: byte $00 MOTOR: byte $00 SECUENCIA_MOTOR: byte $00 DISPLAY: byte $00 COND_ESPERA: byte $01 MOTOR_INTERRUMPIDO: byte $00 CONTADOR: byte $FF
PORTC : = DISPLAY CONFIGURACIONES
Subrutina CARGAR PULSADORES
PULSADORES =0
Gonzalo Cánepa
NO
Subrutina ESCANEAR PULSADORES
Página 12
DDRC : = 11111111 DDRD : = 00000000 OPTION : = 00100000 habilitar interrupciones PUNTERO A PILA : = $01F8
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
SI ¿MOTOR = BAJAR?
SI ¿MOTOR = SUBIR?
¿SECUENCIA = 00010000B?
SI
¿SECUENCIA = 00000000B?
SI
Rotar la secuencia hacia la izquierda (LSL)
Rotar la secuencia hacia la derecha (LSR)
SECUENCIA : = 00000001B
La secuencia del Motor se controla en los 4 bits menos significativos. Si se desborda => se acomoda
SECUENCIA : = 00001000B
SI ¿MOTOR = QUIETO?
PORTB : = 0
Desconecta el motor si no se está utilizando.
Subrutina REFRESH LEDS
¿MOTOR = QUIETO OR COND_ESPERA = 1?
SI COND_ESPERA : = 0
¿PORTD = 0 & PULSADORES ?0?
Gonzalo Cánepa
Página 13
SI
Subrutina ESPERA
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
Subrutina RETARDO
SI ¿PULSADORES = 0?
Procedimiento DEC_CONTADOR
COD_ESPERA : = 0
CONTADOR : = FFH
SUBRUTINA CARGAR_PULSADORES
PULSADORES : = (PORTE) OR (PULSADORES)
SUBRUTINA GUARDAR_PULSADORES
PULSADORES : = (A) AND (PULSADORES)
B : = QUIETO
Gonzalo Cánepa
Página 14
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO ESPERA
b = 20 ; b > 0 ; b : = b - 1
Subrutina RETARDO
Subrutina REFRESH LEDS
Subrutina CARGAR PULSADORES
SUBRUTINA RETARDO
y = 6FFFH ; y > 0 ; i : = i - 1 y : = 0100 H
PROCEDIMIENTO INICIALIZACIÓN
MOTOR : = BAJANDO
PULSADORES : = 00001000B
Gonzalo Cánepa
Página 15
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO DEC_CONTADOR
COND_ESPERA : = 01
CONTADOR : = CONTADOR - 1
SI ¿CONTADOR = 0?
PULSADORES : = 00001000
SUBRUTINA REFRESH LEDS
A : = PULSADORES
Rotar la A hacia la izquierda (LSLA)
Rotar la A hacia la izquierda (LSLA)
Rotar la A hacia la izquierda (LSLA)
Rotar la A hacia la izquierda (LSLA)
A : = (PULSADORES) OR (A)
A : = (A) AND (11110000H )
PORTB : = (PORTB) OR (A)
Gonzalo Cánepa
Página 16
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
SUBRUTINA ESCANEO PULSADORES
¿ PULSADORES = 10000000B?
SI
¿ PULSADORES = 01000000B?
SI
¿ PULSADORES = 00100000B?
Gonzalo Cánepa
SI
¿ PULSADORES = 00010000B?
SI
¿ PULSADORES = 00001000B?
SI
¿ PULSADORES = 00000100B?
SI
Procedimiento PISO_CERO_LLAMADA
Procedimiento PISO_UNO_LLAMADA
Procedimiento PISO_DOS_LLAMADA
Procedimiento PISO_TRES_LLAMADA
Procedimiento PISO_CERO
Procedimiento PISO_UNO
Página 17
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
¿ PULSADORES = 00000010B?
SI
¿ PULSADORES = 00000001B?
SI
Procedimiento PISO_DOS
Procedimiento PISO_TRES
MOTOR : = B
* SALTO INCONDICIONAL 1
PROCEDIMIENTO PISO_CERO_LLAMADA
¿ PORTD = 00000100B?
SI A : = 01111111B
Subrutina GUARDAR_PULSADORES
¿PORTD = (00001000B ó 00010000B ó 00100000B)?
Gonzalo Cánepa
SI B : = BAJANDO
Página 18
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO PISO_UNO_LLAMADA
¿ PORTD = 00000100B?
SI
¿ PORTD = 00001000B?
SI
B : = SUBIENDO
¿PULSADORES = (00010000B ó 00100000 B)?
SI
¿MOTOR = SUBIENDO?
A : = 10111111B
Subrutina GUARDAR_PULSADORES
* SALTO INCONDICIONAL 1
¿PORTD = (00010000B ó 00100000B)?
Gonzalo Cánepa
SI B : = BAJANDO
Página 19
08/08/2008
SI
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO PISO_DOS_LLAMADA
¿PORTD = (00000100B ó 00001000B)?
SI
¿ PORTD = 00010000B?
SI
B : = SUBIENDO
SI ¿PULSADORE S = 00010000B ?
¿MOTOR = SUBIENDO?
A : = 11011111B
Subrutina GUARDAR_PULSADORES
* SALTO INCONDICIONAL 1
¿ PORTD = 00100000B?
Gonzalo Cánepa
SI B : = BAJANDO
Página 20
08/08/2008
SI
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO PISO_TRES_LLAMADA
¿PORTD = (00000100B ó 00001000B ó 00010000B)?
¿ PORTD = 00100000B?
SI B : = SUBIENDO
SI A : = 11110111B
Subrutina GUARDAR_PULSADORES
PROCEDIMIENTO PISO_CERO
¿ PORTD = 00000100B?
SI A : = 11110111B
Subrutina GUARDAR_PULSADORES
¿PORTD = (00001000B ó 00010000B ó 00100000B)?
Gonzalo Cánepa
SI B : = BAJANDO
Página 21
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO PISO_UNO
¿ PORTD = 00000100B?
SI
¿ PORTD = 00001000B?
SI
B : = SUBIENDO
A : = 10111111B
Subrutina GUARDAR_PULSADORES
* SALTO INCONDICIONAL 1
¿PORTD = (00010000B ó 00100000B)?
Gonzalo Cánepa
SI B : = BAJANDO
Página 22
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO PISO_DOS
¿PORTD = (00000100B ó 00001000B)?
SI
¿ PORTD = 00010000B?
SI
B : = SUBIENDO
A : = 11111101B
Subrutina GUARDAR_PULSADORES
* SALTO INCONDICIONAL 1
¿ PORTD = 00100000B?
Gonzalo Cánepa
SI B : = BAJANDO
Página 23
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
PROCEDIMIENTO PISO_TRES
¿PORTD = (00000100B ó 00001000B ó 00010000B)?
¿ PORTD = 00100000B?
SI B : = SUBIENDO
SI A : = 11111110B
Subrutina GUARDAR_PULSADORES
Gonzalo Cánepa
Página 24
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
INTERRUPCIÓN IRQ
Subrutina RETARDO
A : = MOTOR
SI ¿MOTOR = QUIETO? NO MOTOR_INTERRUMPIDO : = MOTOR
MOTOR : = MOTOR_INTERRUMPIDO
MOTOR : = QUIETO
Gonzalo Cánepa
Página 25
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
6. Conclusión El proyecto realizado costó mucho tiempo y trabajo, pero ver la planta terminada y funcionando es la recompensa al esfuerzo. Los conocimientos adquiridos son muy amplios, tanto en electrónica con la realización del kit como también a la hora de programar y crear un programa extenso en solo 512 bytes de memoria. También fue muy gratificante por primera vez controlar un motor paso a paso, que si bien se lo controló con la secuencia más básica debido al escaso torque del mismo, me enteré de otros métodos Si bien el proyecto es muy lógico y algorítmico, resultó realmente complejo en el momento del diseño poder imaginar como realizar la memoria en caso de presionar más de un pulsador a la vez En definitiva fue una gran experiencia y muy gratificante desde los momentos en que empezó a funcionar.
Gonzalo Cánepa
Página 26
08/08/2008
Universidad Nacional de Quilmes – Ing. Automatización y Control Industrial
7. Bibliografía ?
MICROCONTROLADOR 68HC11: Fundamentos, recursos y programación. http://www.microbotica.es
?
Ambiente de desarrollo para un HC11 – por Juan Pablo Guzmán Peralta (Trabajo final de licenciatura)
?
kit11 v61 - Kit de iniciación al microcontrolador - Universidad de Zaragoza http://www.unizar.es/euitiz/micros.htm
?
M68HC11E family – Hoja de datos (datasheet) – MOTOROLA
?
MC68HC11E1CFN2 – Hoja de datos (datasheet) – MOTOROLA
?
MAX232 , ULN2803, MC7805, MC34064 – Hoja de datos (datasheet)
Gonzalo Cánepa
Página 27
08/08/2008