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