library ieee;
use ieee.std_logic_1164.all;
entity revstep is
port(clk : in std_logic;
reverse : in std_logic;
q : out std_logic_vector(3 downto 0));
end revstep;
architecture arc of revstep is
type state_type is (s0, s1, s2, s3);
signal state : state_type;
signal clock : std_logic;
begin
process(clk)
variable cnt : integer range 0 to 49999; --16Mhz, Step Motor Voltage 9V 에서
begin -- 5999 최고 속도, 49999 적정 판단
if (clk'EVENT and clk='1') then -- Votage 가 더 높아지면 최고 속도가
if (cnt=49999)then -- 더 높아질 것이라고 판단됨
clock <= not clock;
cnt:=0;
else
cnt:=cnt+1;
end if;
end if;
end process;
process (clock) -- signal 로 clock 을 설정 해 줌,process 가능
begin
IF (clock'EVENT and clock = '1') then
case state is
when s0 => state <= s1;
when s1 => state <= s2;
when s2 => state <= s3;
when s3 => state <= s0;
end case;
end if;
end process;
process(reverse)--reverse 입력에 따른 스텝 모터 Direction 조절
begin
if(reverse='0')then
case state is
when s0=>q<="1100";
when s1=>q<="0110";
when s2=>q<="0011";
when s3=>q<="1001";
end case;
else
case state is
when s0=>q<="1100";
when s1=>q<="1001";
when s2=>q<="0011";
when s3=>q<="0110";
end case;
end if;
end process;
END arc;
--------------------------
스텝 모터를 테스트 하기 위한 부분이다.
스텝 모터 드라이버는 7026 을 썼고..
2상 여자 방식을 썼다..
AB/A/B
테스트 시에는 스텝 모터가 한 방향으로 무한정 돌아가고..
reverse 버튼이 눌렸을 경우 반대 방향으로 돌아가는 걸 확인 할 수 있었다.