Você está na página 1de 20

Universidade Federal do Rio Grande do Sul

Escola de Engenharia
Departamento de Engenharia Eltrica
ENG04475 Microprocessadores I



Projeto:
Sistema de controle para elevador de cargas com movimento vertical e
horizontal





Nomes:
Alessandro Girardi
Antnio Soares Azzalini
Cesar Eduardo Butzge


Porto Alegre, 17 de Dezembro de 2012.

Introduo:
Nosso projeto busca fazer o controle de um elevador de carga que deve transportar
cargas de um setor a outro dentro de uma empresa. O usurio deve inserir informaes sobre
o destino do elevador, fazer o carregamento sem exceder a carga mxima permitida e travar a
porta da cabine de carga. Feito isso, o elevador deve ser acionado para comear o transporte.
A empresa ter 3 setores atendidos pelo sistema de transporte, sendo um definido
como ponto de origem, de onde devem partir ou chegar as cargas.
Nos pontos de interesse, sensores sero os responsveis pelo envio da informao ao
controlador. Teremos um sensor para informar que o elevador chegou ao cho em cada setor,
um sensor para informar que o elevador chegou na altura dos trilhos horizontais em cada
setor e sensores de posicionamento horizontal, que indicar em que ponto do trilho horizontal
a carga deve descer.


Funcionamento:
O sistema de cargas ter como origem o setor 1, que est no meio do percurso entre o
setor 2 e o setor 3. Sempre que o elevador estiver no setor 1, ele buscar a informao sobre
qual ser o destino (setor 2 ou setor 3), que ser informado pelo operador, atravs de uma
chave. Quando o elevador estiver no setor 2 ou setor 3 ele sempre voltar ao setor 1.
Quando o elevador estiver no cho de cada setor, o sistema verificar se a porta da
cabine est fechada, se o peso est dentro do limite mximo permitido e aguardar o boto de
incio.
Se em algum momento ocorrer um problema, o boto de emergncia ser acionado e
todos os motores sero desligados. Quando os motores forem desligados, os leds do
posicionamento do setor estaro mostrando qual a localizao atual do elevador. O sistema
aguardar o boto de incio ser acionado para fazer o elevador retornar ao setor 1, ou seja,
sempre que ocorrer uma emergncia o elevador para a execuo atual e retorna ao setor 1.
Depois da chegada ao setor 1, o sistema deve ser reinicializado para voltar a operar
normalmente.

Hardware
Conversor Analgico Digital

Com o objetivo de simular um suposto peso no elevador de carga, usamos um
potencimetro em que poderamos variar uma tenso em suas sadas. Com este
potencimetro podemos variar uma tenso de 5V a 0V, sendo esta tenso ligada em um
conversor analgico digital.
O conversor AD utilizado foi o ADC0804, cujas principais caractersticas so que sua
sada de 8 bits e possui apenas uma entrada analgica, o que se enquadrava perfeitamente
em nosso projeto. A resoluo deste conversor dada por
SI
2
8
, , logo a resoluo de
0,0195V.
Em nosso projeto usamos apenas os 5 bits mais significativos, sendo que no momento
em que o LED mais significativo fosse ligado, nosso elevador no poderia ser mais
direcionado para nenhum lugar.E quando este bit estivesse desligado, estaria todos os
comandos de desejo ativados.
Teremos no nosso projeto final as sadas DB7,DB6,DB5,DB4 E DB3 ligadas nos pinos
P2.7, P2.6, P2.5, P2.4 e P2.3 respectivamente.


Figura

Observamos na figura acima que o ADC0804 alimentado pela tenso de 5V gerada
pelo regulador de tenso, nota-se tambm, observando que os pinos wR

e INIR

esto ligados
entre si, que este conversor est operando no modo Free-Running, ou seja, ele est fazendo a
converses continuamente, e o tempo entre estas converses dado pelo circuito RC ligado
aos pinos CLK R e CLK IN. Utilizando os valores de capacitor e resistor mostrados acima
obtido um tempo de converso de aproximadamente 100s.


Arranjo das chaves e botes

Como em nosso projeto simulamos sensores de localizao de setor e sensor de porta
(se fechada ou aberta), implementados um circuito em que estes sensores pudessem ser
manipulados atravs de chaves, tambm atravs de chave podemos escolher o destino do
elevador (setor 2 ou setor 3), a partir do setor 1.Introduzimos em nosso esquema um boto de
liberao de acionamento dos motores.
Cada ponto entre resistor e chaves, iro ser conectados no nosso
microcontrolador.Sendo BOTAO, PORTA, CHAO 1,CHAO 2, CHAO 3, SETOR 1, SETOR 2 , SETOR
3 concetados com os pinos P0.0, P0.1 P0.2, P0.3, P0.4, P0.5, P0.6 E P0.7, respectivamente, e a
chave DESTINO ligada no pino P3.3.






LEDs
Pelo fato de ser uma simulao, usamos LEDs ligados no microcontrolador,
para tornar visvel em qual posio o elevador esta e qual de seus motores esta ligado. A parte
negativa dos LEDs estaro ligadas com o microcontrolador.Sendo os LEDs da primeira figura
ligados nos pinos P1.1, P1.2, P1.3, P1.4 e P1.5, respectivamente da esquerda para direita.Para
os motores, os LEDs SUBIR,DESCER, DIREITA e ESQUERDA sero ligados nas portas P3.0,
P3.1, P3.4 e P3.5 respectivamente.
Primeiramente temos em nossa figura 5 LEDs representando onde est o elevador.Se
estiver no SETOR 1, significa que o elevador esta entre o cho e a parte area do setor 1, de
mesma forma se repete para os LEDs do SETOR 2 e SETOR 3.Se estiver ligado o LED SETOR 1-
2, significa que o elevador se encontra entre a parte area do setor 1 e a parte area do setor
2. Se estiver ligado o LED SETOR 1-3, significa que o elevador se encontra entre a parte area
do setor 1 e a parte area do setor 3.








Microcontrolador:

O microcontrolador escolhido para a realizao de projeto foi o AT89S52, fabricado
pela Atmel. Este um microcontrolador de 8bits com uma memria flash de 8K Bytes,
memria RAM interna de 256 Bytes, possui 32 portas de entrada e sada entre outras
caractersticas.
O motivo principal, pelo qual este modelo de microcontrolador foi escolhido, a
intimidade que ns podemos obter com ele durante a realizao das diversas aula prticas
da disciplina.


Figura

Podemos observar entre os pinos XTAL1 e XTAL2 a conexo de um cristal de
11.0592MHZ e dois capacitores de 33pF que so responsveis pela gerao do clock para que
o microcontrolador possa funcionar.
Observa-se tambm a conexo de um circuito RC ao pinos RST do microcontrolador,
este circuito responsvel pelo Power-on Reset, ou seja, sempre que o sistema ligado o
microcontrolador resetado, isto acontece pois ao ligarmos o circuito o capacitor de 10uF que
est descarregado faz com que o pino RST seja alimentado com 5V durante um determinado
tempo, resetando o microcontrolador. Caso seja necessrio fazer o reset com o circuito ligado,
basta pressionar o um boto fazendo com que o capacitor seja descarregado.

CIRCUITO COMPLETO

Aps detalhar completamente cada segmento do HARDWARE, iremos unir
cada parte para formar nosso circuito final.Como esclarecido anteriormente iremos conectar
cada pino dos circuitos integrados que temos, em nossos circuitos complementares que temos.




SOFTWARE
Para a segunda parte do relatrio vamos inserir os cdigos que foram gravados dentro
do nosso microcontrolador 89S52.


;====================================================================
; ENG 044775
;====================================================================
;
; PROJETO: Sistema de controle para elevador de cargas com
; movimento vertical e horizontal
;
;====================================================================
;====================================================================
; DEFINIES
;====================================================================

SENSORES EQU P0

MOTORES EQU P3 ; PARCIALMENTE
UTILIZADA(BITS 0,1,4,5)

PESO EQU P2 ; RECEBE SDA DO
CONVERSOR AD

LEDS EQU P1 ; MOSTRA EM QUE
ESTADO O ELEVADOR EST

PESO_MAX EQU 1000$0000b

MASK_OFF EQU 1111$1111b

DESTINO EQU P3.3 ; ESCOLHE DESTINO DO
ELEVADOR
; 0 = SETOR 2
; 1 = SETOR 3
MASK_DESTINO EQU 0000$1000b

;====================================================================
; BOTO LIGA - PORTA
;====================================================================

LIGA EQU SENSORES.0 ; BOTO DE LIGAR
MASK_LIGA EQU 0000$0001b

S_PORTA EQU SENSORES.1 ; SENSOR PORTA FECHADA
MASK_PORTA EQU 0000$0010b

;====================================================================
; SENSORES DE CHO DE CADA SETOR
;====================================================================

S_CHAO1 EQU SENSORES.2
MASK_CHAO1 EQU 0000$0100b

S_CHAO2 EQU SENSORES.3
MASK_CHAO2 EQU 0000$1000b

S_CHAO3 EQU SENSORES.4
MASK_CHAO3 EQU 0001$0000b

;====================================================================
; SENSORES DE ALTURA/POSIO DO SETOR
;====================================================================

S_SETOR1 EQU SENSORES.5
MASK_SETOR1 EQU 0010$0000b

S_SETOR2 EQU SENSORES.6
MASK_SETOR2 EQU 0100$0000b

S_SETOR3 EQU SENSORES.7
MASK_SETOR3 EQU 1000$0000b

;====================================================================
; ATUADORES(MOTORES H/V)
;====================================================================

MOTOR_SOBE EQU MOTORES.0 ; RXD DO PORT P3
MASK_SOBE EQU 0000$0001b

MOTOR_DESCE EQU MOTORES.1 ; TXD DO PORT P3
MASK_DESCE EQU 0000$0010b

MOTOR_DIR EQU MOTORES.4 ; T0 DO PORT P3
MASK_DIR EQU 0001$0000b

MOTOR_ESQ EQU MOTORES.5 ; T1 DO PORT P3
MASK_ESQ EQU 0010$0000b

;====================================================================
; INTERRUPO
;====================================================================

EMERGENCIA EQU 0003H ; INTERRUPO EXT0

ORG EMERGENCIA
LJMP ROTINA_EMERGENCIA

;====================================================================
; RESET
;====================================================================

ORG 0000H
LJMP INICIO

;====================================================================
; PROGRAMA PRINCIPAL
;====================================================================

ORG 0100H

INICIO:
SETB IT0 ; Configura para interrupcao na borda de descida
SETB EX0 ; Habilita interrupcao externa 0
SETB EA ; Habilita Interrupcoes

SETOR_ID: ; IDENTIFICA EM QUE
SETOR EST O ELEVADOR
MOV A,SENSORES
CPL A
ANL A,#MASK_CHAO1
JNZ SETOR_1

MOV A,SENSORES
CPL A
ANL A,#MASK_CHAO2
JNZ SETOR_2

MOV A,SENSORES
CPL A
ANL A,#MASK_CHAO3
JNZ SETOR_3

LCALL FORA_SETOR

AJMP SETOR_ID

SETOR_1: ; ATIVIDADES NO
SETOR 1

MOV R0,#01H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

MOV A,SENSORES
CPL A
ANL A,#MASK_PORTA
JZ SETOR_1

LCALL VERIF_PESO

MOV A,SENSORES
CPL A
ANL A,#MASK_LIGA
JZ SETOR_1

CLR LEDS.1

LCALL DEST_ELEV

AJMP SETOR_ID

SETOR_2:

MOV R0,#02H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

MOV A,SENSORES
CPL A
ANL A,#MASK_PORTA
JZ SETOR_2

LCALL VERIF_PESO

MOV A,SENSORES
CPL A
ANL A,#MASK_LIGA
JZ SETOR_2

CLR LEDS.2

LCALL RET_SETOR_1

AJMP SETOR_ID

SETOR_3:

MOV R0,#03H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

MOV A,SENSORES
CPL A
ANL A,#MASK_PORTA
JZ SETOR_3

LCALL VERIF_PESO

MOV A,SENSORES
CPL A
ANL A,#MASK_LIGA
JZ SETOR_3

CLR LEDS.3

LCALL RET_SETOR_1

AJMP SETOR_ID

;====================================================================
; VERIFICAO DO PESO
;====================================================================

VERIF_PESO:

MOV A,PESO
CPL A
ANL A,#PESO_MAX
JZ IMPRIME_PESO

JMP VERIF_PESO
IMPRIME_PESO:
MOV A,PESO

RET
;====================================================================
; DESTINO
;====================================================================

DEST_ELEV:

LCALL M_SOBE
MOV A,P3
CPL A
ANL A,#MASK_DESTINO
JZ VAI_SET_2

LCALL M_ESQ
JMP SAIR

VAI_SET_2:
LCALL M_DIR

SAIR:
RET

RET_SETOR_1:

LCALL M_SOBE

MOV A,R0
CJNE A,#02H, VAI_DIR

VAI_ESQ:

CLR LEDS.5

MOV R1,#04H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

CLR MOTOR_ESQ
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR1
JZ VAI_ESQ

SETB MOTOR_ESQ

MOV R1,#00H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA
MOV R0,#01H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

SETB LEDS.5
CLR LEDS.1

LCALL M_DESCE

JMP SAIR1

VAI_DIR:

CLR LEDS.4

MOV R1,#08H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

CLR MOTOR_DIR
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR1
JZ VAI_DIR

SETB MOTOR_DIR

MOV R1,#00H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA
MOV R0,#01H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

SETB LEDS.4
CLR LEDS.1

LCALL M_DESCE

SAIR1:
RET

;====================================================================
; MOTORES
;====================================================================

M_SOBE:

CLR MOTOR_SOBE
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR1
JNZ STOP_S
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR2
JNZ STOP_S
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR3
JZ M_SOBE
STOP_S:
SETB MOTOR_SOBE
MOV LEDS,#MASK_OFF

RET

M_DESCE:

CLR MOTOR_DESCE
MOV A,SENSORES
CPL A
ANL A,#MASK_CHAO1
JNZ STOP_D
MOV A,SENSORES
CPL A
ANL A,#MASK_CHAO2
JNZ STOP_D
MOV A,SENSORES
CPL A
ANL A,#MASK_CHAO3
JZ M_DESCE
STOP_D:
SETB MOTOR_DESCE
MOV LEDS,#MASK_OFF
RET

M_DIR:
; VAI PARA SETOR 2
MOV R1,#08H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

CLR LEDS.5

CLR MOTOR_DIR
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR2
JZ M_DIR

SETB MOTOR_DIR
SETB LEDS.5
CLR LEDS.2

MOV R1,#00H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA
MOV R0,#02H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR
ESTAVA

LCALL M_DESCE

RET

M_ESQ: ; VAI PARA SETOR 3

MOV R1,#04H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR ESTAVA

CLR LEDS.4

CLR MOTOR_ESQ
MOV A,SENSORES
CPL A
ANL A,#MASK_SETOR3
JZ M_ESQ

SETB MOTOR_ESQ
SETB LEDS.4
CLR LEDS.3

MOV R1,#00H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR ESTAVA
MOV R0,#03H ; VALOR PARA IDENTIFICAR ONDE O ELEVADOR ESTAVA

LCALL M_DESCE

RET

;====================================================================
; PROGRAMA DE INTERRUPO
;====================================================================

ROTINA_EMERGENCIA:
; salva contexto
PUSH PSW
PUSH ACC
; executa subrotina
MOV MOTORES,#MASK_OFF

LCALL FORA_SETOR

; restaura contexto
POP ACC
POP PSW
AJMP INICIO
RETI

;====================================================================
; ELEVADOR FORA DO SETOR
;====================================================================

FORA_SETOR:

MOV A,R0
ADD A,R1
MOV R2, A

MOV A,R2
SUBB A,#01H ; VERIFICA SE ESTA NO SETOR 1
JZ DESCER1

MOV A,R2
SUBB A,#02H ; VERIFICA SE ESTA NO SETOR 2
JZ SUBIR2

MOV A,R2
SUBB A,#03H ; VERIFICA SE ESTA NO SETOR 3
JZ SUBIR3

MOV A,R2
SUBB A,#05H ; INDO DO 1 PARA O 3
JZ EXEC13

MOV A,R2
SUBB A,#06H ; INDO DO 2 PARA O 1
JZ EXEC21

MOV A,R2
SUBB A,#09H ; INDO DO 1 PARA O 2
JZ EXEC12

MOV A,R2
SUBB A,#0BH ; INDO DO 3 PARA O 1
JZ EXEC31

AJMP FORA_SETOR

DESCER1:

CLR LEDS.1

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ DESCER1

LCALL M_DESCE
AJMP SAIR_FS
SUBIR2:

CLR LEDS.2

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ SUBIR2

LCALL RET_SETOR_1
AJMP SAIR_FS
SUBIR3:

CLR LEDS.3

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ SUBIR3

LCALL RET_SETOR_1
AJMP SAIR_FS
EXEC13:

CLR LEDS.4

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ EXEC13

LCALL VAI_DIR
AJMP SAIR_FS
EXEC21:

CLR LEDS.5

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ EXEC21

LCALL VAI_ESQ
AJMP SAIR_FS
EXEC12:

CLR LEDS.5

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ EXEC12

LCALL VAI_ESQ
AJMP SAIR_FS
EXEC31:

CLR LEDS.4

MOV A,SENSORES
CPL A ; ESPERA BOTO DE LIGAR PARA CONTINUAR
ANL A,#MASK_LIGA
JZ EXEC31

LCALL VAI_DIR
AJMP SAIR_FS

SAIR_FS:
RET

END


Concluso:
Nosso projeto obteve resultados satisfatrios. Conseguimos obter o resultado prtico
que foi proposto e simulado na ferramenta Keil. O microcontrolador 89S52 se mostrou um
dispositivo bastante verstil e de fcil utilizao.
A programao em assembler nos fez entender como o hardware manipula os dados
internamente e como isso apresentado externamente em seus ports.
A montagem fsica do dispositivo nos esclareceu alguns detalhes de funcionamento dos
ports, bem como as ligaes que devem ser feitas para que o dispositivo funcione
corretamente no modo de operao desejado (leitura/escrita, por exemplo).
Na finalizao do projeto identificamos algumas melhorias que poderiam ser feitas.
Algumas sugestes futuras de melhorias, por exemplo:
- Implementao de um dispositivo de armazenamento das informaes do estado em
que o elevador se encontra no caso de uma queda de energia no sistema.
- Colocao de um display para informaes de peso e identificao do setor. No nosso
projeto optamos pelo no uso do display, mas tnhamos as condies de ter feito isso.
- Implementao de uma lgica que pudesse fazer com que mais setores fossem
inseridos no sistema e que eles pudessem trocar cargas diretamente entre si.
Placa principal:

Você também pode gostar