Sei sulla pagina 1di 8

Experimento 6

Controlador de alarme
Disciplina: EN3723 Lgica Programvel.

Discentes:
Fernando Henrique Gomes Zucatelli
Fernando Soler
Turma: A/Diurno
Prof Dr. Rodrigo Reina Muoz.

Santo Andr, 08 de Dezembro de 2014

Sumrio
1.
2.

OBJETIVOS ....................................................................................................................... 2
PARTE EXPERIMENTAL ................................................................................................ 2
2.1. Condies de acionamento .......................................................................................... 2
3. RESULTADOS E DISCUSSO ....................................................................................... 3
3.1. Condies de acionamento .......................................................................................... 3
4. CONCLUSO .................................................................................................................... 4
5. REFERNCIAS BIBLIOGRFICAS ............................................................................... 4
6. ANEXOS ............................................................................................................................ 4
6.1. Controle de Alarme ...................................................................................................... 4

1. OBJETIVOS
O objetivo deste experimento programar uma mquina de estados que
descreva o funcionamento de um alarme contendo um sensor de movimento e outro
de abertura de porta, alm de um boto para retornar dos estados em movimento e
de porta aberta para o de espera e um de reset para reiniciar o sistema.

2. PARTE EXPERIMENTAL
2.1.

Condies de acionamento

A Figura 1 apresenta a mquina de estados que descreve o funcionamento do


alarme de acordo com as seguintes regras:

Se rst = 0 o controlador levado ao estado de inicializao INICIO.


- Do estado INICIO o controlador vai incondicionalmente para o estado
ESPERA
- No estado ESPERA o controlador aguarda por algum evento para tomar uma
deciso. Assim:
- Sporta = 1, o controlador vai para o estado FRONTAL. Nesse estado, a sirene
que indica a abertura da porta habilitada (SIport = 1). O controlador permanece
nesse estado at que a chave de parada, ps = 1. Na ocorrncia desta ltima
condio, o sistema volta para estado espera.
- Smov = 1, o controlador vai para o estado MOVIMENTO, no qual tem-se
SImov = 1, at que ps = 1, retornando para o estado ESPERA.

Figura 1 Mquina de estados.

3. RESULTADOS E DISCUSSO
3.1.

Condies de acionamento

A Figura 2 apresenta o resultado temporal da simulao, sendo apenas


substitudo o clock baseado no relgio interno da mquina pela varivel ck para
permitir simulao mais rpida.

Figura 2 Resultado da simulao.

Entre a Figura 3 e a Figura 6 encontram-se as figuras com as imagens do


funcionamento da mquina de estados conforme o proposto na Figura 1. Na qual os
LEDs vermelhos indicam o estado da mquina e os verdes os atuadores acionados.
As 4 chaves da direita utilizadas na operao do sistema esto desligadas
quando estiverem na posio para cima.
O uso das chaves em vez dos botes foi para permitir melhor confiabilidade da
entrada dos sinais.

Figura 3 Resultado da simulao. Estado incio. Reset acionado.

Figura 4 Resultado da simulao. Estado espera. Reset desacionado.

Figura 5 Resultado da simulao. Estado frontal.

Figura 6 Resultado da simulao. Estado movimento.

4. CONCLUSO
As mquinas de estado tambm permitem o controle de sua transio, assim
podemos controlar a navegao na mquina com transies que contemplem
restries lgicas.
Deve-se entretanto salientar que algumas condies caso no estejam
propriamente interpretadas no hardware ou de acordo com o ciclo de clock da
mquina podem fazer a mquina de estados oscilar entre dois ou mais estados
porque as condies de transio foram definidas de forma simples podendo ser
atendidas a cada novo estado.

5. REFERNCIAS BIBLIOGRFICAS
DE2 115 Altera, Manual do Usurio. Disponvel em:
<ftp://ftp.altera.com/up/pub/Altera_Material/13.0/Boards/DE2115/DE2_115_User_Manual.pdf>. Acesso em 04 de Nov. 2014

6. ANEXOS
6.1.
Controle de Alarme
LIBRARY IEEE;
USE IEEE.STD_logic_1164.all;

ENTITY Control_alarme IS
PORT(

rst, ps, sporta, smov

: IN BIT;

clock_maquina, ck

: IN BIT;

SIporta, SImov

: OUT BIT;

BUFFER

BIT_VECTOR (1 DOWNTO 0);


clkout_1, clkout_2, clkout_3

: BUFFER BIT);

END Control_alarme;

ARCHITECTURE behave OF Control_alarme IS


TYPE st IS (inicio, espera, frontal, movimento); --novo tipo para os estados
SIGNAL estado :

st;

BEGIN
abc: PROCESS(rst, ps, sporta, smov, ck)
BEGIN

IF (rst = '1') THEN


estado <= inicio;
ELSIF (ck'EVENT and ck = '1') THEN
--ELSE
CASE estado IS
WHEN inicio =>
estado <= espera;

WHEN espera =>


SIporta <= '0';
SImov <= '0';
IF

smov = '1' THEN


estado <= frontal;

ELSIF sporta = '1' THEN


estado <= movimento;
ELSE
estado <= espera;
END IF;
WHEN frontal =>
SIporta <= '1';
IF ps = '1' AND smov = '0' THEN

estado <= espera;


ELSE
estado <= frontal;
END IF;
WHEN movimento =>
SImov <= '1';
IF ps = '1' AND sporta = '0' THEN
estado <= espera;
ELSE
estado <= movimento;
END IF;
END CASE;
END IF;
END PROCESS abc;

WITH estado SELECT -- decodifica estado


q <= "00" WHEN inicio,
"01" WHEN espera,
"10" WHEN frontal,
"11" WHEN movimento;

-- 1 : 1000 , 50MHz -> 50KHz


contador_1: PROCESS (clock_maquina)
VARIABLE counter_1

: INTEGER RANGE 1 TO 1000;

BEGIN
IF (clock_maquina'EVENT and clock_maquina = '1') THEN
IF (counter_1 = 1000) THEN
counter_1 := 1;
clkout_1 <= '1';
ELSE
counter_1:= counter_1 + 1;
clkout_1 <= '0';
END IF;
END IF;

END PROCESS contador_1;

-- 1 : 1000 , 50KHz -> 50Hz


contador_2: PROCESS (clkout_1)
VARIABLE counter_2

: INTEGER RANGE 1 TO 1000;

BEGIN
IF (clkout_1'EVENT and clkout_1 = '1') THEN
IF (counter_2 = 1000) THEN
counter_2 := 1;
clkout_2 <= '1';
ELSE
counter_2:= counter_2 + 1;
clkout_2 <= '0';
END IF;
END IF;
END PROCESS contador_2;

-- 50Hz -> 1Hz = 1s


contador_3: PROCESS (clkout_2)
VARIABLE counter_3

: INTEGER RANGE 1 TO 50;

BEGIN
IF (clkout_2'EVENT and clkout_2 = '1') THEN
IF (counter_3 = 50) THEN
counter_3 := 1;
clkout_3 <= '1';
ELSE
counter_3:= counter_3 + 1;
clkout_3 <= '0';
END IF;
END IF;
END PROCESS contador_3;
END behave;

Potrebbero piacerti anche