Контроллер координатного станка

Сделал свой step-dir контроллер для станка с ЧПУ на ПЛИС. В основе лежит epm240 и L298.

Из того что реализовано:
— подключения 3-х биполярных двигателей с током до 2 А на обмотку
— 3 режима работы двигателя (одна обмотка, две обмотки и полушаг)
— питание 7.5-35 В
— ШИМ стабилизация тока двигателей
— подключены все сигнальные линии LPT порта к ПЛИС.
— 16 дополнительных выводов (подключение джойстика, обратной связи, реле, дисплея – всего на что хватит емкости чипа)
— перепрошивка ПЛИС в готовом устройстве

Не хватает:
— опторазвязка
— реле

В устройство заложен большой потенциал, можно легко переназначать выводы, добавлять режимы работы двигателей, или еще какие-то функциональные блоки, которые никак не повлияют на работу существующих. Возможно перенаправлять сигнал с ЛПТ порта на любой из 16 пинов.

Внутреннее устройство одного из каналов


Счетчик с декодером написан на VHDL
entity step_dir2_1 is
	port (step, dir : in bit;
			--enable : out bit_vector (0 to 1);
			--a : out bit_vector (3 downto 0);
			a1 : out bit;
			a2 : out bit;
			b1 : out bit;
			b2 : out bit;
			ena : out bit;
			enb : out bit;
			mode : in bit_vector (0 to 1) );
end step_dir2_1;

architecture first of step_dir2_1 is
signal count : integer range 0 to 7; 
signal enable : bit_vector (0 to 1);
signal a : bit_vector (3 downto 0);
begin

a1 <= a(3);
a2 <= a(1);
b1 <= a(2);
b2 <= a(0);
ena <= enable(1);
enb <= enable(0);

process (step)
begin
if (step = '1' and step'event) then
	if dir = '1' then
		count <= count + 1;
		else count <= count - 1;
	end if;
end if;
end process;

process (count)
begin
case mode is
	when "11" => a <= "0000";
				enable <= "00";
	when "00" =>
		enable <= "11";
		case count is
			when 0|4 => a <= "1001";
			when 1|5 => a <= "1100";
			when 2|6 => a <= "0110";
			when 3|7 => a <= "0011";
		end case;
	when "01" =>
		case count is
			when 0|4 => a <= "1000";
						enable <= "01";
			when 1|5 => a <= "0100";
						enable <= "10";
			when 2|6 => a <= "0010";
						enable <= "01";
			when 3|7 => a <= "0001";
						enable <= "10";
		end case;
	when "10" =>
		case count is
			when 0 => a <= "1000";
						enable <= "01";
			when 1 => a <= "1100";
						enable <= "11";
			when 2 => a <= "0100";
						enable <= "10";
			when 3 => a <= "0110";
						enable <= "11";
			when 4 => a <= "0010";
						enable <= "01";
			when 5 => a <= "0011";
						enable <= "11";
			when 6 => a <= "0001";
						enable <= "10";
			when 7 => a <= "1001";
						enable <= "11";
		end case;
end case;
end process;

end first;	


ШИМ собран на обычных триггерах, к входу которых подключается компаратор.
Схема ШИМа


Тактируется от встроенного генератора, частота которого делится до 20 кГц.

ПЛИС можно заменить на EPM3064, но тогда надо будет ставить внешний генератор.

Назначение входов-выходов
LPT CNC_Controller
1 -> PIN_14
2 -> dir X
3 -> step X
4 -> dir Y
5 -> step Y
6 -> dir Z
7 -> step Z
8 -> PIN_15
9 -> PIN_16
10 < — PIN_55
11 < — PIN_54
12 < — PIN_53
13 < — PIN_52
14 -> PIN_17
15 < — PIN_51
16 -> PIN_18
17 -> PIN_19


Все входы сконфигурированы с триггером Шмитта и включены подтягивающие резисторы. В режиме полного шага с одной активной обмоткой можно подключать униполярные двигатели.

Готовое устройство выглядит так



В архиве проект в Квартусе, схема и печатка в eagle 5.
CNC_Controller.rar

Файлы в топике: CNC_Controller.zip

Комментарии (27)

RSS свернуть / развернуть
ооооофигеть круто
0
  • avatar
  • oss
  • 26 апреля 2011, 00:57
зря делал
то же самое валяется у меня на столе, только там нет ничего программируемого
зато есть опторазвязка и 2 реле
подключается туда 4 двигателя +1 в параллеь по оси х ( у меня станок имеет 2 движка по этой оси)

драйвера имеют шим и 1\8 и 1\16 шага + схему отключения движков при простое

при наличии компа, джойстик берется в магазине и подключается в усб на компе
мах3 имеет функцию работы от джойстика (я купил цифровую клавиатурку за 5 баксов)

индикатор реализуется на мк с подключением к выводам лпт

т.е. твой контроллер на плис тут просто не нужен, т.к. плис ставят при работе от усб, чтобы обеспечить большую скорость и тайминги, а так же избавиться от лпт
точнее избавление от лпт решает все другие задачи автоматом
-2
Штука делалась для себя и четкого представления что понадобиться не было, я попытался заложить как можно больший потенциал. Если пофантазировать, то без изменения схемы можно добавить uart (понадобиться преобразователь уровней только) и интерпретатор g-кода, подключить 6 коллекторных двигателей и энкодеры для обратной связи. ШИМом можно управлять программно: отключать, задавать свой коэффициент заполнения. При желании легко добавить 1/8, 1/16 и даже 1/32 шага.

Выбрал ПЛИС так как они дают большую гибкость и нравятся мне больше :)
+2
Что значит зря делал? С чего такая демотивация? А статьи в духе Atiny + LED это не зря?
Автор выбрал интересную тему для освоения. И девайс аккуратный вышел)
0
С чего такая демотивация?
как будто калобайта не знаешь :D
-1
ну автор и реализовал в духе Atiny + LED
я тебе как владелец станка говорю, что практического смысла в плате нет

по моему мнению надо реализовывать (даже для самообразования) то, чего еще нет или сделано криво
а для этого надо быть в теме
+1
Например? Сам с чего начинал?
0
с изучения теоретической части контроллеров чпу
паять мне было лень, платить 500 баксов за готовый контроллер тоже жаба давила
купил набор готовых плат у китайцев и поплатился

сами драйвера tb6260 или как их там
судя по форумам оказались фуфлом в плане критичности к питанию и если 5в отвалится, то вылетят полевики и корпус разлетится осколками
жутко боится обрыва
стоит 5 баксов в слушем случае

китайская плата под лпт оказалась без опторазвязки и от наводок срабатывали концевики. Это при том, что они подтянуты к питанию.

учтя все эти недостатки, я и нарисовал плату + задержку подачи +30в, чтобы +5 сначало пришло и прошли все переходные процессы

потом я покурил еще тему и увидел контроллер на плисине с усб за 50 евров
при этом он имел плагин для мах3, где все энкодеры и джойстики с индикаторами реализованы

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

а у автора мы видит просто плисину в роли коммутатора выходов/Выходов

проект на плис для чпу — очень хорошее направление с денежным уклоном
есть люди, готовые заплатить небольшую сумму за готовый продукт
0
Можешь дать ссылку на проект хорошего контроллера? С USB, развесистым функционалом и доступного для повторения :)
+2
да кого вы слушаете, Калобайт такой же владелец станка, как дедок в соседнем подъезде владелец жигулей около подъезда которыми ни разу не пользовались уже 10 лет… Молодец автор! интересная тема!
0
а прочитал следующее сообщение калобайта, уже по теме )) это ответ на «зря делал»
0
практического смысла в плате нет
Время покажет

Спорить с вами смысле нет (по форуму знаю), тем более что это больше похоже на троллинг.
0
да я и не спорю
каменты тут для выражения своего мнения к чье-то писанине
ты ожидал только положительные восхищения? ну я тебя и спустил на землю
0
вопрос не в практичности устройства, а в его исполнении. Удобно человеку сделать на ПЛИС, он сделал. кто то вообще на лампах предпочитает :) Я бы тоже на ПЛИС сделал.
0
Очень здорово получилось. Молодец!
0
Мне понравилось! Сам только решил начать ими заниматься.Побольше бы устройств на ПЛИС =)
0
Если интересно могу еще что-то выложить или помочь с созданием своих устройств.
0
Конечно выкладывайте.Я только в самом начале пути-собираю отладочную плату на камне epm240t100c5n
dl.dropbox.com/u/11463601/DSC09586.JPG, задумок много, только я в программировании полный 0, радует то что хоть можно «графически» составлять =)
0
Что-то выложу, но все мои «проекты» делались в образовательных целях, это единственное законченное устройство.
По поводу платы лучше было бы сразу добавить фильтрующие конденсаторы в питание, их надо ставить как можно ближе к выводам.
А программировать научитесь, главное понимать логику работы.
0
Так «образоваться» то и нужно), с конденсаторами протупил, но думаю можно будет на макетку напаять в смд исполнении, вот еще не до конца решил что поставить на отладочной плате с которой будет соединятся макетка с плис.
0
Хорошо, в ближайшее время выложу термометр на ds1820 и подключение к компу через ком-порт.
0
Аккуратная платка. А говорил, что с разводкой не дружишь ;)
0
Развести ее было труднее всего, несколько раз переделывал и доделывал (хорошо что был человек постоянно указывающий на ошибки :)).
0
Делал что-то подобное в далеком 2007 году…

в результате плюнул на аппаратную реализацию… и перешел на чтение G-кода… уж очень понравилось на примитивных движках от флопиков рисовать маленькие кружочки и элипсы =) сам проект был продан как диплом… уже к сожалению ничего не осталось…
0
Прикольно, но блоки компараторов у нас прям как близнецы-братья (схема в моем персональном блоге). В окончательный варианте я даже в делитель опорного напряжения постоянный резистор добавил для плавности регулировки. Значит я таки на правильном пути. Спасибо за хорошую подсказку.
0
Даже не знаю как компараторы можно подключить по-другому. Триггеры у вас странно подключены, никакого ШИМа там нет, их можно убрать и ничего не измениться.
0
ШИМ вроде есть. Макетировал с осцилографом и он мне ее показывал :). Первоначально подавал сигнал с компаратора на сброс триггера, а на D-вход подавал единицу. Муть какая-то получалась. При этом включении более стабильно, правда частоту генератора пришлось поднять до 35-40 KHz. Скважность сигнала изменяется в зависимости от установки опорного напряжения. Спасибо за замечание.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.