дк, обязательно внешний генератор юзать чтоль?
и еще вопросик. есть код(для проверки работоспособности):
test_bench:
Код
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.all;
USE ieee.numeric_std.ALL;
ENTITY dem_al_TB_vhd IS
END dem_al_TB_vhd;
ARCHITECTURE behavior OF dem_al_TB_vhd IS
-- Component Declaration for the Unit Under Test (UUT)
COMPONENT dem_al
PORT(
Tg : IN std_logic;
knopka_90 : IN std_logic;
knopka_Min_90 : IN std_logic;
Enable : OUT std_logic;
FF : OUT std_logic_vector(1 to 12);
Dir_1 : OUT std_logic;
Dir_2 : OUT std_logic;
Step_1 : OUT std_logic;
Step_2 : OUT std_logic
);
END COMPONENT;
--Inputs
SIGNAL Tg : std_logic := '0';
SIGNAL knopka_90 : std_logic := '0';
SIGNAL knopka_Min_90 : std_logic := '0';
--Outputs
SIGNAL Enable : std_logic;
SIGNAL FF : std_logic_vector(1 to 12);
SIGNAL Dir_1 : std_logic;
SIGNAL Dir_2 : std_logic;
SIGNAL Step_1 : std_logic;
SIGNAL Step_2 : std_logic;
BEGIN
-- Instantiate the Unit Under Test (UUT)
uut: dem_al PORT MAP(
Tg => Tg,
knopka_90 => knopka_90,
knopka_Min_90 => knopka_Min_90,
Enable => Enable,
FF => FF,
Dir_1 => Dir_1,
Dir_2 => Dir_2,
Step_1 => Step_1,
Step_2 => Step_2
);
Tg <= not Tg after 10 ms;
knopka_90 <= '1' after 20 ms, '0' after 30 ms;
END;
vhdl:
Код
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity dem_al is
Port ( Tg : in STD_LOGIC;
knopka_90 : in STD_LOGIC;
knopka_Min_90 : in STD_LOGIC;
Enable : out STD_LOGIC;
FF : out STD_LOGIC_VECTOR(1 to 12) := "000000000000";
Dir_1 : out STD_LOGIC;
Dir_2 : out STD_LOGIC;
Step_1 : out STD_LOGIC;
Step_2 : out STD_LOGIC);
end dem_al;
architecture Behavioral of dem_al is
begin
process (Tg)
variable k: integer;
variable F: integer := 600; --чтобы не было неуказанного начала шага в момент включения
begin
if (knopka_90='1') then --определяем направление вращения (по часовой)
k:=1; --для определения вращения каждого двигателя на разных этапах движения
F:=0; --счетчик для выполнения шага(для плавности разгона. определяет паузу между импульсами)
end if;
if (knopka_min_90='1') then --определяем направление вращения (против часовой)
k:=0;
F:=0;
end if;
if (F<586) then --когда угол меньше 90
Enable<='1'; -- сигнал активного состояния для драйвера PLS...
if (Tg='1') then -- Когда тактовый сигнал=1
F:=F+1; -- Складываем для остановки при угле=90гр.
FF<=CONV_STD_LOGIC_VECTOR(F,12); --для просмотра F
if (k=1) then --определяем направление вращения первого двигателя
Dir_1<='1';
elsif (k=0) then
Dir_1<='0';
end if;
if (F=1 or F=17 or F=25 or F=29 or F=31 or F=32) then -- Первая фаза разгона в противофазе
if (k=1) then --определяем направление вращения второго двигателя
Dir_2<='0';
elsif (k=0) then
Dir_2<='1';
end if;
Step_1<='1'; --шаг первого
Step_2<='1'; --шаг второго
elsif (F=42 or F=47 or F=50 or F=52 or F=53) then -- Вторая фаза разгона первым
Step_1<='1';
elsif (F=55 or F=56) then -- Третья фаза разгона синфазно
if (k=1) then
Dir_2<='1';
elsif (k=0) then
Dir_2<='0';
end if;
Step_1<='1';
Step_2<='1';
elsif (F>56 and F<531) then -- Движение синфазно
if (k=1) then
Dir_2<='1';
elsif (k=0) then
Dir_2<='0';
end if;
Step_1<='1';
Step_2<='1';
elsif (F=534 or F=536 or F=539 or F=544 or F=554) then -- Вторая фаза торможения первым
Step_1<='1';
elsif(F=555 or F=557 or F=561 or F=569 or F=585) then -- Третья фаза торможения в противофазе
if (k=1) then
Dir_2<='0';
elsif (k=0) then
Dir_2<='1';
end if;
Step_1<='1';
Step_2<='1';
end if;
else --когда тактовый=0 и F>585 (угол больше 90)
Step_1<='0';
Step_2<='0';
Enable<='0';
end if;
end if;
end process;
end Behavioral;
т.е. есть два движка. второй закреплен на валу первого. суммарный угол поворота=90 градусов. в симуляции все работает. а после прошивки шаговый двигатель просто шагает безостановочно и все. еще нет никаких пропусков импульса в соответствии с условием сравнения F. но в начальный момент, когда F=600 двигатели не шагают. Условие на проверку направления работает.
Сообщение отредактировал stu - Apr 17 2011, 18:25