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.
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.
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".
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”
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.
Figura 4: Ilustração do funcionamento da trava 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.
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:
Figura 5: Diagrama de estados da maquina de estados
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. |
Figura 6: Ilustração do registro de andares requisitados.
Registrador que armazena os andares solicitados
É feito uma operação lógica e dos andares solicitados com os sensores de andar
Exemplo:
É feito uma operação lógica e dos andares solicitados com o inverso do andar atual
Exemplo:
Exemplo:
Se o elevador estiver em um andar qualquer, ele vai para o estado Parado.
Subindo
O elevador sobe enquanto não chega no andar mais alto solicitado;
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.
Descendo
O elevador desce enquanto não passar por um andar solicitado.
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:
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.
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.
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.
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.
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.
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.
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.
Por ultimo é feita uma atribuição de seleção para os valores do motor e uma para a trava de porta
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:
Em seguida declara-se emula-se a o pressionamento do botão de reset e os pulsos de 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:
As formas de ondas encontradas na simulação estão apresentadas abaixo:
Figura 7: Formas de onda da simulação.