Advertisement
Guest User

Untitled

a guest
May 27th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.35 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 <=
  38.                         conv_std_logic_vector(abs(stopien_obrotu*(2/(ROZDZIELCZOSC_ENCODERA*4))/2),8);
  39.                                                                         -- obroty_na_sek =(stopien_obrotu / ROZDZIELCZOSC_ENCODERA *4)
  40.                 takty <= 0;
  41.                 stopien_obrotu <= 0;
  42.             end if;
  43.            
  44.           AB_poprzednie <= AB;
  45.           AB(0) <= A;
  46.           AB(1) <= B;
  47.           if (AB(0) = '1' and AB_poprzednie(0) = '0') then -- A zbocze rosnące
  48.               if (B='0') then -- obrót w prawo
  49.                  obrot_w_prawo <= '1';
  50.                  obrot_w_lewo <= '0';
  51.                  stopien_obrotu <= stopien_obrotu + 1;
  52.               elsif (B='1') then -- obrót w lewo
  53.                  obrot_w_prawo <= '0';
  54.                  obrot_w_lewo <= '1';
  55.                  stopien_obrotu <= stopien_obrotu - 1;
  56.               end if;
  57.           elsif (AB(1) = '1' and AB_poprzednie(1) = '0') then -- B zbocze rosnące
  58.               if (A='1') then -- obrót w prawo
  59.                  obrot_w_prawo <= '1';
  60.                  obrot_w_lewo <= '0';
  61.                  stopien_obrotu <= stopien_obrotu + 1;
  62.               elsif (A='0') then -- obrót w lewo
  63.                  obrot_w_prawo <= '0';
  64.                  obrot_w_lewo <= '1';
  65.                  stopien_obrotu <= stopien_obrotu - 1;
  66.               end if;
  67.           elsif (AB(0) = '0' and AB_poprzednie(0) = '1') then -- A zbocze opadające
  68.               if (B='1') then -- obrót w prawo
  69.                  obrot_w_prawo <= '1';
  70.                  obrot_w_lewo <= '0';
  71.                  stopien_obrotu <= stopien_obrotu + 1;
  72.               elsif (B='0') then -- obrót w lewo
  73.                  obrot_w_prawo <= '0';
  74.                  obrot_w_lewo <= '1';
  75.                  stopien_obrotu <= stopien_obrotu - 1;
  76.               end if;
  77.           elsif (AB(1) = '0' and AB_poprzednie(1) = '1') then -- B zbocze opadające
  78.               if (A='0') then -- obrót w prawo
  79.                  obrot_w_prawo <= '1';
  80.                  obrot_w_lewo <= '0';
  81.                  stopien_obrotu <= stopien_obrotu + 1;
  82.               elsif (A='1') then -- obrót w lewo
  83.                  obrot_w_prawo <= '0';
  84.                  obrot_w_lewo <= '1';
  85.                  stopien_obrotu <= stopien_obrotu - 1;
  86.               end if;
  87.           else
  88.               obrot_w_prawo <= '0';
  89.               obrot_w_lewo <= '0';
  90.           end if;          
  91.            
  92.         end if;
  93.  
  94.     end process;
  95.  
  96. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement