Advertisement
Guest User

Untitled

a guest
May 27th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.29 KB | None | 0 0
  1. library IEEE;
  2. use IEEE.STD_LOGIC_1164.ALL;
  3. Use IEEE.std_logic_arith.all;
  4. USE IEEE.NUMERIC_STD.ALL;
  5.  
  6. entity encoder_module is
  7.     generic ( ROZDZIELCZOSC_ENCODERA : integer := 20;
  8.                   ILOSC_TAKTOW_ZEGARA_NA_SEK : integer := 10000
  9.              );
  10.     Port ( clk10kHz : in  STD_LOGIC;
  11.            A                 : in  STD_LOGIC;
  12.            B                 : in  STD_LOGIC;
  13.               obrot_w_prawo : out STD_LOGIC := '0'; --obrót zgodnie z ruchem wskazówek zegara
  14.               obrot_w_lewo  : out STD_LOGIC := '0'; --obrót przeciwnie do ruchu wskazówek zegara
  15.            obroty_na_sek : out  STD_LOGIC_VECTOR(7 downto 0) := "00000000"
  16.              );
  17. end encoder_module;
  18.  
  19. architecture Behavioral of encoder_module is
  20.  
  21.     signal AB                 : std_logic_vector(1 downto 0) := "00";
  22.     signal AB_poprzednie   : std_logic_vector(1 downto 0) := "00";
  23.     signal takty : integer := 0;
  24.     signal stopien_obrotu  : integer :=0 ;
  25.  
  26. begin
  27.    
  28.     process(clk10kHz)
  29.     begin
  30.  
  31.         if (clk10kHz'event and clk10kHz='1') then
  32.             takty <= takty + 1;
  33.            
  34.             if takty >= ILOSC_TAKTOW_ZEGARA_NA_SEK  then
  35.                 obroty_na_sek <= conv_std_logic_vector(abs(stopien_obrotu*(2/(ROZDZIELCZOSC_ENCODERA*4))/2),8);
  36.                                                                         -- obroty_na_sek =(stopien_obrotu / ROZDZIELCZOSC_ENCODERA *4)
  37.                 takty <= 0;
  38.                 stopien_obrotu <= 0;
  39.             end if;
  40.            
  41.           AB_poprzednie <= AB;
  42.           AB(0) <= A;
  43.           AB(1) <= B;
  44.           if (AB(0) = '1' and AB_poprzednie(0) = '0') then -- A zbocze rosnące
  45.               if (B='0') then -- obrót w prawo
  46.                  obrot_w_prawo <= '1';
  47.                  obrot_w_lewo <= '0';
  48.                       stopien_obrotu <= stopien_obrotu + 1;
  49.               elsif (B='1') then -- obrót w lewo
  50.                  obrot_w_prawo <= '0';
  51.                  obrot_w_lewo <= '1';
  52.                       stopien_obrotu <= stopien_obrotu - 1;
  53.               end if;
  54.           elsif (AB(1) = '1' and AB_poprzednie(1) = '0') then -- B zbocze rosnące
  55.               if (A='1') then -- obrót w prawo
  56.                  obrot_w_prawo <= '1';
  57.                  obrot_w_lewo <= '0';
  58.                       stopien_obrotu <= stopien_obrotu + 1;
  59.               elsif (A='0') then -- obrót w lewo
  60.                  obrot_w_prawo <= '0';
  61.                  obrot_w_lewo <= '1';
  62.                       stopien_obrotu <= stopien_obrotu - 1;
  63.               end if;
  64.           elsif (AB(0) = '0' and AB_poprzednie(0) = '1') then -- A zbocze opadające
  65.               if (B='1') then -- obrót w prawo
  66.                  obrot_w_prawo <= '1';
  67.                  obrot_w_lewo <= '0';
  68.                       stopien_obrotu <= stopien_obrotu + 1;
  69.               elsif (B='0') then -- obrót w lewo
  70.                  obrot_w_prawo <= '0';
  71.                  obrot_w_lewo <= '1';
  72.                       stopien_obrotu <= stopien_obrotu - 1;
  73.               end if;
  74.           elsif (AB(1) = '0' and AB_poprzednie(1) = '1') then -- B zbocze opadające
  75.               if (A='0') then -- obrót w prawo
  76.                  obrot_w_prawo <= '1';
  77.                  obrot_w_lewo <= '0';
  78.                       stopien_obrotu <= stopien_obrotu + 1;
  79.               elsif (A='1') then -- obrót w lewo
  80.                  obrot_w_prawo <= '0';
  81.                  obrot_w_lewo <= '1';
  82.                       stopien_obrotu <= stopien_obrotu - 1;
  83.               end if;
  84.           else
  85.               obrot_w_prawo <= '0';
  86.               obrot_w_lewo <= '0';
  87.           end if;          
  88.            
  89.         end if;
  90.  
  91.     end process;
  92.  
  93. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement