Elevador Didático de 5 andares

Projeto Elevador

 

Este projeto trata de um elevador didático de 5 andares, e o que motivou a escolha pelo desenvolvimento de um elevador foi a possibilidade de utilizá-lo com diversos circuitos e lógicas de controle, fazendo com que se possa realizar desde aplicações utilizando lógicas simples, até controles complexos que, além da lógica de funcionamento normal, consideram questões de segurança.

O Hardware do elevador utilizado neste projeto foi desenvolvido em parceria com alunos do curso de técnólogo em mecatrônica do Instituto Federal de Santa Catarina, na disciplina de projeto integrador, com o intuito de auxiliar no ensino de diversas disciplinas como sistemas digitais, circuitos combinacionais e outras diversas disciplinas na área.  

elevador_1-cortado

Figura 1: Elevador

 

Como foi mencionado muitos são os hardwares de controle que poderiam ser utilizados, sejam um Microcontrolador, um CLP, um circuito de lógica discreta, etc.

Neste artigo iremos apresentar o desenvolvimento de um hardware de controle, utilizando o lógica programável. O hardware que será utilizado é o kit de desenvolvimento CPLD_7064 que possui um CPLD modelo EPM7064SLC44-10, da ALTERA. O projeto foi desenvolvido para funcionar como um elevador de carga, e pensado de modo a ser extremamente didático. Seu funcionamento será descrito a seguir.

Funcionamento

Botões e Sensores

Para começar definimos que todos o Botões e Sensores por padrão estão inicialmente em nível lógico "ZERO", para garantir esta condição todos os botões estão ligados a terra por um resistor de "pull down", desta forma quando pressionamos um botão este ficará com nível lógico "UM", no PLD os botões são representado por uma entrada de 5 bits.

A figura abaixo apresenta o dado que o PLD recebe quando o botão de um andar é pressionado, como pode ser observado o bit correspondente ao botão vai para "1".

Botoes_do_Elevador

Figura 2: Ilustração do sistema de botões

Os sensores de andares, como já foi mencionado, obedecem a mesma lógica dos botões, por padrão estão em "ZERO" e se acionadas vão para "1", a figura abaixo apresenta os valores recebidos pelo PLD quando o elevador passa ou está em um andar, neste momento o bit correspondente ao andar apresenta o valor “1”

Sensores

Figura 3: Ilustração do sistema de sensor.

Além dos sensores de andar outro sensor representa o estado da porta, foi definido que quando a porta está fechada o sensor fica em "ZERO" e quando ela esta aberta o sensor fica em "1", como pode ser observado na figura abaixo.

 

Sensor_Porta

Figura 4: Ilustração do funcionamento da trava da porta.

 

Motor e Travamento da Porta

Os sinais de saída do PLD são o comando do motor e o travamento da porta.

O motor utilizado neste exemplo é um motor DC simples e seu comando se restringe a uma palavra de dois bits:

Saída de controle para o motor Ação no Elevador      
00 Elevador Parado
01 Elevador Sobe
10 Elevador Desce

Para aplicações mais complexas podem ser implementadas técnicas de soft-start e soft-stop de modo a tornar a aplicação mais proxima ainda da realidade.

O comando de travamento da porta é de 1 bit, se o bit está "setado", ou seja, em nível lógico "1" a porta está travada, senão a porta pode ser aberta.

Lógica de Funcionamento

A Lógica de Funcionamento do elevador obedece uma maquina de estados que possui cinco estados:

Espera: No inicio do processo a maquina de estado permanece em um estado de espera para evitar que as transições de estado dos diversos componentes interligados possam interferir na execução das tarefas.

Partida: Após o estado de ESPERA, caso o elevador não esteja localizado em nenhum andar, ou seja, todos os sensores em “ZERO”, o elevador deverá tentar um movimento de descida, até atingir o andar mais próximo abaixo. Assim que a condição: “posicionado sobre um andar” for atendida ele vai para a condição de PARADO;

Subindo: Enquanto o elevador sobe, pode ser chamado a outros andares, acima ou abaixo de sua localização imediata. Ele permanecerá em seu movimento de subida, até que o último andar solicitado acima dele seja atingido;

Parado:Quando o elevador, em movimento, chega a algum andar solicitado, ele para por um intervalo de alguns segundos, e se não houver outro andar solicitado, ele permanece parado no andar; Enquanto o elevador está parado, a porta pode ser aberta, e o elevador não inicia qualquer movimento até que ela volte a ser fechada. Se um botão de andar é pressionado, a solicitação é registrada, e o elevador começa um movimento de subida ou de descida, em direção ao andar correspondente.

Descendo: Enquanto o elevador desce, pode ser chamado a outros andares, acima ou abaixo de sua localização imediata. Ele permanecerá em seu movimento de descida, até que o último andar solicitado abaixo dele seja atingido;

A Figura que representa a máquina de estados é apresentada a seguir: 

maquina_estados

Figura 5: Diagrama de estados da maquina de estados

Registradores

Para o funcionamento da máquina de estados são necessários alguns registradores que serão descritos na tabela abaixo.

Botoes[1..5]

Entrada de 5 bits associada aos botões de chamada do elevador a cada andar do “edifício”. O estado normal destas entradas é '1', e vai a '0' quando o botão é pressionado.

Andar_Solicitado[1..5]

Registrador de 5 bits que armazena a informação de chamada do elevador em cada um dos andares do “edifício”.

Sensores[1..5]

Entrada de 5 bits, associada aos sensores localizados em cada andar do “edifício”.  Quando o elevador ativa um dos sensores, leva a '0' a entrada correspondente.

Ultimo_Andar[1..5]

Registrador de 5 bits, associado aos andares. Um dos bits deverá ser feito '0' quando o elevador passar pelo andar correspondente ao mesmo.

Porta_Fechada

Entrada do sensor da porta do elevador, indica (quando em '1') que ela não está fechada.

Sentido

Registro do sentido de movimento corrente do elevador ('1' para subindo, e '0' para descendo), utilizado enquanto não atende a todos os andares solicitados.

 

 

Registro_de_Andares

Figura 6: Ilustração do registro de andares requisitados.

Andares Solicitados

Registrador que armazena os andares solicitados

 

Andares_Solicitados

Verificação de Andar Solicitado

É feito uma operação lógica e dos andares solicitados com os sensores de andar

Exemplo:

Verificacao_de_Andar_Solicitado

Verificação de Solicitação de Andares Acima

É feito uma operação lógica e dos andares solicitados com o inverso do andar atual

 

Exemplo:

Andares_Acima

Verificação de Solicitação de Andares Abaixo

É feito uma operação lógica e dos andares solicitados com andar atual

 
Exemplo: 
Andares_Abaixo  
 

 Máquina de estados  

 

Funcionamento

Partida

Se o elevador estiver em um andar qualquer, ele vai para o estado Parado.

estado_partida

Subindo

O elevador sobe enquanto não chega no andar mais alto solicitado;

estado_subindo

Parado

Quando o elevador chega a algum andar solicitado, para por um intervalo de 60 segundos. Ele permanecerá parado se a porta estiver aberta ou não houver andar solicitado.

estado_paradoDescendo

O elevador desce enquanto não passar por um andar solicitado.

estado_descendo 

Visão Geral 


maquina_de_estados

O Código

O início do código, como todo o VHDL, começa com a entidade, onde são declarados o clock, resetn, sensores e botões como entradas e o motor e a trava como saídas:

 entidade

A arquitetura possui alguns sinais auxiliares: chamada, andar, pausa_andar e flag. Chamada é responsavel por registrar os andares solicitados, andar registra o ultimo andar, pausa_andar é responsavel por indicar se o tempo de pausa em um andar ja acabou e a flag indica se o elevador estava descendo ou subindo. O signal estado_elevador é a maquina de estados responsável pelo controle do código.

 signals

O código possui três processos: o primeiro controla a os andares chamados e atendidos, o segundo trata dos estados da maquina de estados e o ultimo processo é responsável pela rotina de pausa em um andar.

O primeiro processo inicia verificando se o elevador está em algum andar, caso sim ele atribui esse andar a variável andar. Em seguida, se algum botão foi pressionado então registra-se um chamado. O passo seguinte é, caso a maquina de estados esteja no estado parado, sinalizar que o andar atual ja foi atendido. No final do processo atribui-se o valor da variável andar_chamado para o signal chamado.

 process_1

O segundo processo é responsavel pelo controle da máquina de estados. Quando o reset é pressionado a maquina de estados vai para o estado espera. Na operação normal do elevador, quando está no estado espera passa para partida e sai do estado partida quando encontra o primeiro andar abaixo dele.

 process_2_1

process_2_2

Quando o elevador está no estado subindo ele precia identificar qual o andar solicitado mais alto, andar onde irá parar. Para isso implementou-se o conjunto de testes presentes nesse trexo do código. O primeiro conjunto de if-else é responsavel por identificar qual o andar mais alto solicitado, e os ifs dentro deles são responsável por identificar se o andar atual é o mais alto.

process_2_3

process_2_4

No estado descendo o elevador deve parar en todos os andares solicitaods e, de forma análoga ao estado de subida, precisa identificar o andar mais baixo solicitado para que possa habilitar novamente a subida.

 process_2_5

       process_2_6

Quando  o elevador está no estado parado e a flag de pausa indica que o tempo minimo de parada acabou, caso estava subindo e há um andar mais alto chamando ele continua subindo. Caso esteja no andar mais alto solicitado ou estava descendo e há um andar mais baixo solicitado, então vai para o estado descendo.

 process_2_7

O terceiro processo faz uma contagem enquanto o elevador está no estado parado, de forma que o elevador não vai para o proximo estado antes que a contagem acabe.

 process_3

Por ultimo é feita uma atribuição de seleção para os valores do motor e uma para a trava de porta

 atribuicao

Simulação

Para a simulação do elevador será necessário emular as solicitações dos andares e o posicionamento do elevador, ou seja, os sensores do elevador. Inicialmente se declara os sinais da simulação:

tb_signals

Em seguida declara-se emula-se a  o pressionamento do botão de reset e os pulsos de clock:

 tb_clock

O processo principal inicia com o pressionamento de um botão e o posicionamento do elevador. Em seguida se emula a subida do elevador, pois o elevador está no estado subindo e, em seguida, começa a descida, com a emulação do pressionamento de alguns botões:

 tb_simulando_1

tb_simulando_2

As formas de ondas encontradas na simulação estão apresentadas abaixo:

 simulacao

Figura 7: Formas de onda da simulação.

Arquivos de Projeto