Informe de trabajo
Nombre Cargo
Erika Cecilia Bayona
Naren Hernando Silva
Cristian Rodríguez
INTRODUCCION
El desarrollo de este ejercicio se basa en el diseño de máquinas de estado, implementando ya sea
Moore o Mealy, verificamos por medio de la simulación que se hace gracias al lenguaje VHDL y el
quit de desarrollo DE1. Para obtener un buen funcionamiento es necesario adicionar unas partes
fundamentales que hacen funcionar el ascenso, por ejemplo, un motor paso a paso, un contador, un
multiplexor, un divisor de frecuencia que nos da el tiempo de espera que desea el usuario que
demore el ascensor en mantener sus puertas abiertas.
OBJETIVOS
Diseñar e implementar por medio de máquinas de estado el comportamiento de un
ascensor.
Simular y comprobar que el diseño de la máquina de estados es el apropiado para el
ascensor.
Obtener por medio del proceso de codificación los distintos conjuntos de proyectos
que hacen posible la lógica del ascensor.
DESCRIPCIÓN DEL PROBLEMA
Realizar el diseño del control de un ascensor mediante código vhdl teniendo en cuenta los
siguientes parámetros de diseño
El ascensor será diseñado para cuatro pisos.
Utilizará sensores de final de carrera para indicar el piso en donde se encuentra
Se diseñará un displey siete segmentos para indicar al usuario el piso donde se encuentre el
ascensor
Dentro del ascensor se instalará una botonera con los pulsadores de los pisos incluido la
parada de emergencia.
Se utilizará en la parte de potencia el diseño de un motor paso a paso.
Se utilizarán sensores de proximidad para las puertas con un temporizador de 3 segundos
que serán el tiempo en que se tardan en cerrar o permanecer abiertas.
Por piso se tendrá dos botones que permitirán que el ascensor suba o baje dependiendo del
piso que se encuentre.
Desarrollo del problema
Lo primero que se debe tener presente y quizá lo más importante es saber quiénes son las señales de
entrada y cuáles son las salidas, si son asíncronas o no, de esta forma se puede empezar a desarrollar
el problema imaginando como sería la lógica del ejercicio.
Se diseñó un multiplexor con el cual se podrá seleccionar la salida que veremos en el display de 7
segmentos que nos indica en qué posición se encuentra el ascensor para que el usuario presione
adecuadamente el botón que ordena ir a la posición a donde se le pidió.
Se implementó un motor paso a paso el cual será responsable de subir o bajar el ascensor además de
también ser empleado para la función de abrir o cerrar las puertas.
Se creó un contador que determina el tiempo de espera que el ascensor necesita para que las
personas entren y sus puertas se cierren, para ello es necesario aplicar un divisor de frecuencia para
determinar la cantidad de segundos que permanezca en determinado estado.
Además de tener muy en cuenta cada una de las condiciones que posiblemente puede tener este
ascensor como lo es los botones exteriores, interiores, sensores de fin de curso y demás.
Uniendo en el proyecto principal los diferentes sub-proyectos que describen el mecanismo o
funcionamiento del ascensor para un edificio de 4 pisos podemos comprobar que sea correcto el
desarrollo del problema, llevándolo a visualización por medio del quit de desarrollo Altera DE1.
El código que describe el problema se presenta a continuación, combinando cada uno de los
sub_codigos que se requieren.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity main_ascensor is
port (
clk50, rst : in std_logic;
start, PC, PA, p1,p2,p3,p4: in std_logic;
MOTOR : out std_logic_vector (3 downto 0);
LED : out std_logic_vector(6 downto 0)
);
end entity;
architecture rtl of main_ascensor is
-- Ascensor
component ASCENSOR IS
port (
clk, rst : in std_logic;
start,temp, sPC, sPA, sp1,sp2,sp3,sp4: in std_logic;
MOTOR : out std_logic_vector (1 downto 0);
sen1,sen2,sen3,sen4 : out std_logic;
cta_temp : out integer range 0 to 50;
en_temp : out std_logic
);
end component;
-- Divisor de frecuencia
component digital_clock_top is
port (
clk50mhz: in STD_LOGIC;
clk: out STD_LOGIC
);
end component;
--Temporizador
component contador is
port (
en :in std_LOGIC;
clk: in STD_LOGIC;
count : in integer range 0 to 50;
temp: out std_LOGIC
);
end component;
-- Motor paso paso
component Motor_paso1 is
port(
clk : in std_logic;
input : in std_logic_vector(1 downto 0);
reset : in std_logic;
output : out std_logic_vector(3 downto 0)
);
end component;
-- Multiplexor 4_1
component mux4_1 is
port(
sen1,sen2,sen3,sen4: in STD_LOGIC;
y: out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
signal clk,temp1, en1,s1,s2,s3,s4: std_LOGIC;
signal cuenta : integer range 0 to 50;
signal motor1 : std_LOGIC_VECTOR (1 downto 0);
begin
I_DIV : digital_clock_top port map (clk50mhz=>clk50, clk=>clk);
I_ASC : ASCENSOR port map (clk=>clk50, rst=>rst,start=>start, temp=>temp1,
sPC=>PC, sPA=>PA,
sp1=>p1,sp2=>p2,sp3=>p3,sp4=>p4,
MOTOR=>motor1,sen1=>s1,sen2=>s2,sen3=>s3,sen4=>s4,
cta_temp => cuenta,en_temp => en1);
I_TEMP : contador port map (en => en1, clk=>clk, count => cuenta, temp =>temp1);
I_MOT : Motor_paso1 port map (clk=>clk,input=> motor1,reset=> rst,output=> motor);
I_MUX : mux4_1 port map (sen1=> s1,sen2=>s2,sen3=>s3,sen4=>s4, y=>LED);
end rtl;
Conclusiones
Se diseñó una máquina de estados que cumplen con las especificaciones que se dieron para
el desarrollo del ejercicio.
Para describir el control de cualquier automatismo se puede recurrir a máquinas de estados
teniendo en cuenta los parámetros de diseño, señales de entrada, salida, estados etc.
Para llevar a cabo el funcionamiento del sistema del ascensor fue esencial saber cuáles eran
las entradas y cuáles eran las salidas para facilitar la comprensión del problema.