1
0
mirror of https://github.com/Klagarge/Cursor.git synced 2024-11-30 04:43:26 +00:00
Cursor/Cursor_test/hds/cursor_tester/test.vhd
2021-11-24 10:50:51 +01:00

119 lines
3.3 KiB
VHDL

ARCHITECTURE test OF cursor_tester IS
constant clockPeriod: time := 50 ns;
signal sClock: std_uLogic := '1';
constant pulsesPerTurn: integer := 200;
constant stepPeriodNb: positive := 8;
signal stepEn: std_uLogic := '0';
signal direction: std_uLogic;
signal turning: std_uLogic;
signal stepCount: unsigned(10 downto 0) := (others => '0');
BEGIN
------------------------------------------------------------------------------
-- clock and reset
--
reset <= '1', '0' after clockPeriod/4;
sClock <= not sClock after clockPeriod/2;
clock <= sClock after clockPeriod/10;
------------------------------------------------------------------------------
-- test sequence
--
process
begin
testMode <= '1';
restart <= '0';
go1 <= '0';
go2 <= '0';
setPoint <= '0';
sensor1 <= '0';
sensor2 <= '0';
wait for 1 us;
----------------------------------------------------------------------------
-- advance to first stop point
go1 <= '1', '0' after 1 us;
wait for 4 ms;
----------------------------------------------------------------------------
-- advance to second stop point
go2 <= '1', '0' after 1 us;
wait for 4 ms;
----------------------------------------------------------------------------
-- back to start with sensor reset
restart <= '1', '0' after 1 us;
wait for 0.5 ms;
sensor1 <= '1', '0' after 1 us;
wait for 0.5 ms;
----------------------------------------------------------------------------
-- advance to second stop point
go2 <= '1', '0' after 1 us;
wait for 7 ms;
----------------------------------------------------------------------------
-- go back to first stop point
go1 <= '1', '0' after 1 us;
wait for 4 ms;
----------------------------------------------------------------------------
-- back to start with counter stop
restart <= '1', '0' after 1 us;
wait for 4 ms;
sensor1 <= '1', '0' after 1 us;
wait for 1 ms;
wait;
end process;
------------------------------------------------------------------------------
-- motor feedback
--
turning <= motorOn;
findDirection: process(side1, side2)
begin
if (side1 = '1') and (side2 = '0') then
direction <= '1';
elsif (side1 = '0') and (side2 = '1') then
direction <= '0';
end if;
end process findDirection;
stepEn <= not stepEn after (stepPeriodNb/4)*clockPeriod;
count: process (stepEn)
begin
if turning = '1' then
if direction = '1' then
if stepCount < pulsesPerTurn-1 then
stepCount <= stepCount + 1;
else
stepCount <= to_unsigned(0, stepCount'length);
end if;
else
if stepCount > 0 then
stepCount <= stepCount - 1;
else
stepCount <= to_unsigned(pulsesPerTurn-1, stepCount'length);
end if;
end if;
end if;
end process count;
encoderA <= stepCount(1);
encoderB <= not stepCount(1) xor stepCount(0);
encoderI <= '1' when stepCount = pulsesPerTurn-1 else '0';
END test;