Comando de un ascensor de cuatro pisos

Anuncio
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
Descargar