Advertisement
Guest User

Untitled

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