|
Aqui apenas 7 macrocélulas são necessárias para construir um controlador simples para motor de passo com 4 fases (ou 2 fases com acionamento em ponte H). O projeto possui apenas um contador de 3 bits que pode avançar ou retroceder e um teste (CASE) que aciona as 4 saídas de acordo com o valor deste contador. O acionamento de um motor de passo segue a seguinte ordem: ![]()
A listagem VHDL é a seguinte: library IEEE;use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity stepper is Port ( step : in std_logic; dir : in std_logic; desliga : in std_logic; f1 : out std_logic; f2 : out std_logic; f3 : out std_logic; f4 : out std_logic); end stepper; architecture Behavioral of stepper is signal ct : std_logic_vector (2 downto 0); begin process (step,dir) -- contador bidirecional de 2 bits begin if desliga='0' then f1<='0'; f2<='0'; f3<='0'; f4<='0'; elsif rising_edge(step) then if dir='0' then -- dir=0 avanca, dir=1 retorna ct<=ct+1; else ct<=ct-1; end if; case ct is when "000" => f1<='1'; f2<='0'; f3<='0'; f4<='0'; when "001" => f1<='1'; f2<='1'; f3<='0'; f4<='0'; when "010" => f1<='0'; f2<='1'; f3<='0'; f4<='0'; when "011" => f1<='0'; f2<='1'; f3<='1'; f4<='0'; when "100" => f1<='0'; f2<='0'; f3<='1'; f4<='0'; when "101" => f1<='0'; f2<='0'; f3<='1'; f4<='1'; when "110" => f1<='0'; f2<='0'; f3<='0'; f4<='1'; when "111" => f1<='1'; f2<='0'; f3<='0'; f4<='1'; when others => end case; end if; end process; end Behavioral; |