Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library IEEE;
- use IEEE.STD_LOGIC_1164.ALL;
- Use IEEE.std_logic_arith.all;
- USE IEEE.NUMERIC_STD.ALL;
- entity encoder_module is
- generic (
- ROZDZIELCZOSC_ENCODERA : integer := 20;
- ILOSC_TAKTOW_ZEGARA_NA_SEK : integer := 10000
- );
- Port (
- clk10kHz : in STD_LOGIC;
- A : in STD_LOGIC;
- B : in STD_LOGIC;
- obrot_w_prawo : out STD_LOGIC := '0'; --obrót zgodnie z ruchem wskazówek zegara
- obrot_w_lewo : out STD_LOGIC := '0'; --obrót przeciwnie do ruchu wskazówek zegara
- obroty_na_sek : out STD_LOGIC_VECTOR(7 downto 0) := "00000000"
- );
- end encoder_module;
- architecture Behavioral of encoder_module is
- signal AB : std_logic_vector(1 downto 0) := "00";
- signal AB_poprzednie : std_logic_vector(1 downto 0) := "00";
- signal takty : integer := 0;
- signal stopien_obrotu : integer :=0 ;
- begin
- process(clk10kHz)
- begin
- if (clk10kHz'event and clk10kHz='1') then
- takty <= takty + 1;
- if takty >= ILOSC_TAKTOW_ZEGARA_NA_SEK then
- obroty_na_sek <=
- conv_std_logic_vector(abs(stopien_obrotu*(2/(ROZDZIELCZOSC_ENCODERA*4))/2),8);
- -- obroty_na_sek =(stopien_obrotu / ROZDZIELCZOSC_ENCODERA *4)
- takty <= 0;
- stopien_obrotu <= 0;
- end if;
- AB_poprzednie <= AB;
- AB(0) <= A;
- AB(1) <= B;
- if (AB(0) = '1' and AB_poprzednie(0) = '0') then -- A zbocze rosnące
- if (B='0') then -- obrót w prawo
- obrot_w_prawo <= '1';
- obrot_w_lewo <= '0';
- stopien_obrotu <= stopien_obrotu + 1;
- elsif (B='1') then -- obrót w lewo
- obrot_w_prawo <= '0';
- obrot_w_lewo <= '1';
- stopien_obrotu <= stopien_obrotu - 1;
- end if;
- elsif (AB(1) = '1' and AB_poprzednie(1) = '0') then -- B zbocze rosnące
- if (A='1') then -- obrót w prawo
- obrot_w_prawo <= '1';
- obrot_w_lewo <= '0';
- stopien_obrotu <= stopien_obrotu + 1;
- elsif (A='0') then -- obrót w lewo
- obrot_w_prawo <= '0';
- obrot_w_lewo <= '1';
- stopien_obrotu <= stopien_obrotu - 1;
- end if;
- elsif (AB(0) = '0' and AB_poprzednie(0) = '1') then -- A zbocze opadające
- if (B='1') then -- obrót w prawo
- obrot_w_prawo <= '1';
- obrot_w_lewo <= '0';
- stopien_obrotu <= stopien_obrotu + 1;
- elsif (B='0') then -- obrót w lewo
- obrot_w_prawo <= '0';
- obrot_w_lewo <= '1';
- stopien_obrotu <= stopien_obrotu - 1;
- end if;
- elsif (AB(1) = '0' and AB_poprzednie(1) = '1') then -- B zbocze opadające
- if (A='0') then -- obrót w prawo
- obrot_w_prawo <= '1';
- obrot_w_lewo <= '0';
- stopien_obrotu <= stopien_obrotu + 1;
- elsif (A='1') then -- obrót w lewo
- obrot_w_prawo <= '0';
- obrot_w_lewo <= '1';
- stopien_obrotu <= stopien_obrotu - 1;
- end if;
- else
- obrot_w_prawo <= '0';
- obrot_w_lewo <= '0';
- end if;
- end if;
- end process;
- end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement