Robot Con Fpga
Robot Con Fpga
Robot Con Fpga
8
Introduccin a las Mquinas de Estados
Desarrollo: Para cada uno de los siguientes apartados, realizar los diseos electrnicos
que se piden.
Encuentre las ecuaciones booleanas de los flip-flops y de las variables de salidas de esta
mquina de estados.
A continuacin se presenta este algoritmo usando el lenguaje de programacin VHDL:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity carta_asm_2 is
RESET : in STD_LOGIC;
end carta_asm_2;
begin
process (RELOJ,reset,esiguiente, S)
begin
case esiguiente is
when s0 =>
atras <= '0';
giro_izq <= '0';
giro_der <= '0';
if S =X"0" then
adelante <= '1';
esiguiente<= s0;
end if;
when s1 =>
adelante <= '0';
atras <= '1';
giro_izq <= '0';
giro_der <= '0';
esiguiente<= s2;
when s2 =>
adelante <= '0';
atras <= '0';
giro_izq <= '1';
giro_der <= '0';
esiguiente<= s0;
when s3 =>
adelante <= '0';
atras <= '1';
giro_izq <= '0';
giro_der <= '0';
esiguiente<= s4;
when s4 =>
adelante <= '0';
atras <= '0';
giro_izq <= '0';
giro_der <= '1';
esiguiente<= s0;
when s5 =>
adelante <= '0';
atras <= '1';
giro_izq <= '0';
giro_der <= '0';
esiguiente<= s6;
when s6 =>
adelante <= '0';
atras <= '0';
giro_izq <= '1';
giro_der <= '0';
esiguiente<= s7;
when s7 =>
when s8 =>
adelante <= '1';
atras <= '0';
giro_izq <= '0';
giro_der <= '0';
esiguiente<= s9;
when s9 =>
adelante <= '1';
atras <= '0';
giro_izq <= '0';
giro_der <= '0';
esiguiente<= s10;
end case;
out_epresente <= esiguiente;
end if;
end process;
end Behavioral;
Haga un proyecto nuevo en el sistema de desarrollo Quartus en el cual se compile el
cdigo anterior. En Quartus haga un smbolo de esta mquina de estados. Programe la
tarjeta para que muestre, usando cuatro leds, el estado presente, as mismo muestre
tambin las salidas: adelante, atras, giro_izq y giro_der.
Las entradas SI, SD y reset introduzcalas usando los botones de la tarjeta. Conecte
al reloj maestro al divisor del reloj para poder visualizar mejor la operacin de la mquina
de estados, como se muestra en la figura 3.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity divider is
end divider;
begin
process (reloj)
begin
if rising_edge (reloj) then
if cuenta=X"4000000" then
cuenta:=X"0000000";
else
cuenta:= cuenta+1;
end if;
end if;
end process;
end Behavioral;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity sensa_boton is
clk : in STD_LOGIC;
reloj : out STD_LOGIC;
epresente: buffer STD_LOGIC);
end sensa_boton;
begin
process (esiguiente,boton)
begin
if rising_edge (clk) then
case esiguiente is
end case;
end if;
end process;
end Behavioral;
Figura 5. Mquina de estados para evadir obstculos para ser conectado a la etapa
de potencia.
Despus cambie los pines de entrada de S[0..1], PIN_U15 y PINV15, por los pines
PIN_A8 y PIN_A9 y conectelos a dos interruptores de contacto, con los cuales se
detectaran los obstculos que un robot mvil deber evitar.
Conecte la etapa de potencia con la tarjeta de Altera y los motores en la base que contendr
el mini-robot mvil. Pruebe que el robot funciona apropiadamente evitando obstculos, al
principio use como entradas de sensado los botones de la tarjeta de Altera, despus
sustituya estos por sensores infrarrojos, como se indica a continuacin, usando el
comparador LM339: