Перейти к содержанию
    

Доброго все времени суток.
Есть потребность в небольшом логическом модуле управления, в который будет приходить 4 входа от концевых датчиков и 5 выходов, два будут управлять направлением шаговых драйверов, еще два это разрешающие на входы Enable драйверов  и еще один это генерирующий импульсы на входы STEP.
то есть модуль будет состоять из генератора частоты 1000 hz и логики переключения двумя каналами по двум осям (одновременно может двигаться только одна ось). Последовательность перемещения будет цикличной и в процессе работы меняться не будет. Если грубо то выглядеть это будет так - вначале идет перемещение по оси X до активации концевика, переключение на ось Z, через 3 секунды переключение на ось X только в обратную сторону, опять концевик, опять 3 секунды и обратно по оси X, внешне будет похоже на змейку.
Вопрос в следующем, можете посоветовать к каким операторам лучше обратиться для создания данной схемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не правильно сформулировали вопрос, главный вопрос какую цифровую схему вы видите для реализации описания в FPGA вашей потребности

Что насчет цифоровой схемы? С моделированием цифровых схем "дружите"?

В современных платах FPGA  тактовая частота подается от 50МГц и выше. Дальше Ваше описание цифровой схемы которое делит тактовую частоту до 100Гц (если Вы видите в этом необходимость), формирует импульсы для шаговых двигателей и обрабатывает концевики...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, с цифровыми схемами есть небольшой опыт, но зачем? Ведь проще описать последовательность операторами. Есть опыт в GRAFCET у FESTO и в TIA PORTAL, но в данной конструкции интегрировать Модули от сименс или от Фесто нет финансовой возможности.
Чем плох язык VHDL для написания данной логики?

Изменено пользователем Станислав Н

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Vhdl также как и verilog это как карандаш в руках хужника. Если художник не умеет рисовать, то карандаш не поможет. 

Предлагаю начать рисовать цифровую схему на листочке. Потом опишете ее на vhdl и промолелируете, т.е. проверите ее правильность работы. Когда симуляция покажет что схема работает тогда начнёте проверки на плате. Иначе никак...

PS GRAFCET у FESTO и в TIA PORTAL это высокоуровневые языки от производителей. Сравнивать их с Vhdl/verilog  не коректно мягко говоря. Наверное модули которые программируются с помощью этих языков сложные цифровые устройстава.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения, но разработать цифровую схемы, а позже ее еще раз переписать в VHDL.. вам не кажется, что это как штаны через голову надевать? Или я вас не совсем понимаю.
Есть структурная схема, как правило от нее всегда отталкиваются, но, чтобы от цифровой / логической, первый раз слышу. Часто одной строчкой я могу заменить десяток логических модулей, так зачем такие сложности??

да и как это поможет тому художнику, если он не умеет рисовать в VHDL?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок, начнем с простого, как Вы плаируете например с 50МГц сделать 100Гц? Может лучше работать на на тактовой частоте, есть же сигналы enable?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну, на сколько я знаю можно поставить делитель частоты, скажем, он будет считать до 24.999, потом обнуляется и т.д. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

правильно, дальше на базе примитивной логики тригеров(регистров) и комбинационной логики (and or xor и другие логические операторы) надо описать на VHDL этот делитель частоты. Еще как помощь может быть для Вас это Template там Вы можете найти примеры описаний счетчиков, блоков памяти, FSM  и другие...

Далее написать тестбенч и проверить работу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я не категорично отношусь )))

просто по другому нельзя делать разработку на FPGA )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот пример описание ШИМа (Широтно-импульсная модуляция (ШИМ, или Pulse-Width Modulation, PWM)

 

Первый процесс описывает счетчик который считает 1 период ШИМ сигнала,  второй процесс компаратор, третий процесс позволяет менять период сигнала шима и длительность нуля

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use IEEE.NUMERIC_STD.ALL;

entity shim is
  generic ( N : natural := 3 );
Port (
clk : in STD_LOGIC;
rst : in STD_LOGIC;
en : in STD_LOGIC;
--load : in STD_LOGIC;
Period : in STD_LOGIC_VECTOR (N-1 downto 0);
Duty_cycle : in STD_LOGIC_VECTOR (N-1 downto 0);
ready_period : out STD_LOGIC;
out_shim : out STD_LOGIC );
end shim;

architecture Behavioral of shim is

signal count_shim : STD_LOGIC_VECTOR (N-1 downto 0);
signal reg_Period :  STD_LOGIC_VECTOR (N-1 downto 0);
signal reg_Duty_cycle :  STD_LOGIC_VECTOR (N-1 downto 0);

begin

process (all)
begin
if rst = '1' then
	count_shim <= (others=>'0');
elsif(rising_edge(clk)) then
	if en = '1' then
		if count_shim = reg_Period  then
			ready_period <= '1';
			count_shim <= (others=>'0');
		else
			count_shim <= count_shim + std_logic_vector( to_unsigned(1, count_shim'length ));
			ready_period <= '0';		
		end if;
	end if;	
end if;
end process;

process (all)
begin
if rst = '1' then
	out_shim <= '0'; 
elsif(rising_edge(clk)) then
	if count_shim < reg_Duty_cycle then
		out_shim <= '1' ; 
	else 
		out_shim <= '0';
	end if; 
end if;
end process;

process (all)
begin
if rst = '1' then
	reg_Period <= (others=>'0');
	reg_Duty_cycle <= (others=>'0');
elsif(rising_edge(clk)) then
	if ready_period = '1' then
		reg_Period <= Period;
		reg_Duty_cycle <= Duty_cycle;
	end if;
end if;
end process;	


end Behavioral;

ниже пример схемы детектирования концевика (коментариев не даю)  - как пример

--detect_sensor


  library ieee;
 use ieee.std_logic_1164.all;
 --use ieee.std_logic_unsigned.all;
 use IEEE.NUMERIC_STD.ALL;
 
 entity  detect_sensor is
   generic ( N : natural := 32 );
 Port (
	clk : in STD_LOGIC;
	rst : in STD_LOGIC;
	sensor : in STD_LOGIC; 
	en_detect : in STD_LOGIC; 
	sensor_rising : out STD_LOGIC; 
	sensor_falling : out STD_LOGIC
	);
 end detect_sensor;
 
 architecture Behavioral of detect_sensor is
 
 signal opto_sensor_shift_r :  unsigned (N-1 downto 0);
 signal reg_sensor_falling, reg_sensor_rising :  STD_LOGIC;
 
 
 begin
 
 sensor_rising <= reg_sensor_rising;
 sensor_falling <= reg_sensor_falling;
 
 process(all)
 begin
 if(rst = '1') then
	opto_sensor_shift_r            <= (others=>'0');
 elsif(rising_edge(clk)) then
	opto_sensor_shift_r            <= opto_sensor_shift_r(N-2 downto 0) & sensor;
 end if;
 end process;

 process(all)
 begin
 if(rst = '1') then
	reg_sensor_rising <= '0';
	reg_sensor_falling <= '0';
 elsif(rising_edge(clk)) then
 if en_detect = '1' then
	if opto_sensor_shift_r((N-1) downto (N/2)) = to_unsigned(((2**(N/2))-1), N/2) and opto_sensor_shift_r((N/2-1) downto 0) =  to_unsigned(0, N/2) then
		reg_sensor_rising <= '1';
	else
		reg_sensor_rising <= '0';
	end if;

	if opto_sensor_shift_r((N-1) downto (N/2)) = to_unsigned(0, N/2) and opto_sensor_shift_r((N/2-1) downto 0) = to_unsigned(((2**(N/2))-1), N/2) then
		reg_sensor_falling <= '1';
	else
		reg_sensor_falling <= '0';
	end if; 
 end if;	
 end if;
 end process; 
 
  end Behavioral;

 

Из-за этого я и пишу что нужно описывать цифровую схему ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, Maverick_ сказал:

PS GRAFCET у FESTO и в TIA PORTAL это высокоуровневые языки от производителей. Сравнивать их с Vhdl/verilog  не коректно мягко говоря. Наверное модули которые программируются с помощью этих языков сложные цифровые устройстава.

да я и не сравниваю.
У меня есть задача, которую нужно решить, хочу попробовать сам, если не получится то попрошу помощи за вознаграждение.

 

2 часа назад, Maverick_ сказал:

Вот пример описание ШИМа (Широтно-импульсная модуляция (ШИМ, или Pulse-Width Modulation, PWM)

Спасибо, гляну, правда, на первый взгляд что то сложно кажется.

 

2 часа назад, Maverick_ сказал:

Из-за этого я и пишу что нужно описывать цифровую схему

Прошу еще раз прощения, но цифровая схема это уже конечный продукт. Мне очень сильно кажется, что такой путь не совсем правильный, ИМХО.
Меня же учили упрощать логические схемы используя таблицы и графики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Станислав Н, под словами "описывать цифровую схему", наверное, имеется ввиду, что надо взять бумажку и карандаш и нарисовать структурную схему прошивки. Можно не заморачиваться непосредственно кодом модулей на этом этапе - нужно продумать архитектуру и взаимодействие модулей друг с другом. Когда уже будет понятно какие модули должны быть, какие у них порты, протоколы по входам и выходам, короче практически есть ТЗ на них - пишите код, соединяете модули на топе и моделируете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так я же спрашивал, что возможно подразумевается структурная схема. Если это так, то все ок, но из готовой цифровой вытягивать.. мне даже представить сложно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, в некоторых случаях приходится и логику на бумажке "моделировать" с разрисовкой тактовой времянки) Но это ж такие уже случаи... обычно когда места мало и надо логику "паковать" совсем впритык, "продергивая" времянку со входа на выход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...