STEP/DIR контроллер 3-х шаговых двигателей на
микроконтроллере
(для станка ЧПУ)
Как-то загорелся я построить себе
домашний ЧПУ станок для сверления плат, а в будущем, может, и для их
гравировки. Купил шаговики (униполярные), от старых матричных принтеров,
материалы. Несколько месяцев ушло на сборку, большая часть времени ушла на поиск
нужных материалов (фторопласт, направляющие). В результате станок был готов.
Вот пришло время собрать
электронику. Сразу покопавшись в просторах инета, начитался, что обязательно
нужна опторазвязка LPT-порта. Относительно контролера, сразу захотелось на
микроконтроллере – если что и прошивку можно переписать, и подправить. В общем,
нашел одну схему на PIC, с контролем по току, ШИМом и прочей ерундой. После
сборки и прошивки схема сразу заработала, но… рано обрадовался! После первого
же запуска станка появилась куча глюков – то ШИМ пропадал, то включался в
ненужное время, пропуск шагов, зависание. Настраивал, переделывал я эту схему
пару дней, в результате просто забил.
Решил применить самое популярное в
инете решение L297+L298. Сразу же сжег одну L298. В общем, после настройки и
отладки L298 дико грелась даже при довольно большом радиаторе (двигатели брали
до 3-х ампер). Во время 10-минутного теста станка разорвалась вторая L298, при
том, что никакого замыкания нигде не было и температура и ток была в пределах
нормы. Заменил все L298 на полевики IRFZ34n, и все кардинально улучшилось! Они
почти не грелись даже на максимальной нагрузке, так что могли спокойно
обходится без радиатора совсем. Но не все так хорошо. С полевиками в режиме
удержания не запускался ШИМ. Может где-то был косяк в схеме, так как ШИМ не
работал ни на одной из трех плат. В общем наигрался я и с этой схемой, в
результате чего просто добавили таймер на ne555, который бы отключал двигатель
после секундного простоя.
После запуска появилась куча глюков
– станок растягивал все по осям, корявил и дергался. Причина оказалась в
опторазвязке. Прикинув, что станок у меня питаться будет от отдельного
компьютерного блока питания и что LPT порту ничего не угрожает, выбросил ее
совсем, поигрался с настройками в MACH3 - часть глюков исчезла, но не все. В
конце концов забил я и на эту схему и на станок в общем.
Прошло пол года, а станок все
пылился в углу комнаты. Как-то вечером, после сверления вручную очередной
платы, опять появилось вдохновение. Решил сделать станку новые мозги – на
контроллере со своей прошивкой.
Почему выбор пал именно на Atmega16?
Такой жирный и дорогой с кучей ненужной периферии? (Впрочем, дороговизна
относительна - 3шт. L297 – 75 грн., Мега16 – 36 грн.)
- У меня валялись несколько не востребованных мег16 в дип
корпусе – это основная причина.
- У него куча выводов. Не очень то хотелось играться со
всякими сдвиговыми регистрами. Кроме того (по опыту предыдущих схем) - чем
оно проще тем лучше.
- У меги16 целых три внешних прерывания, что очень
удобно. Конечно, можно было обойтись без них совсем, но см. пункт 1 и 2.
- Хотелось бы в будущем добавить всяких полезных функций
– датчики температуры на двигатели, управление вытяжкой и охлаждением.
Вырисовалась вот такая схема (сразу
извините за месиво, делалось очень быстро):
Все резисторы по 27 Ом., кроме
R1,R27 (4.7k), R6,R28,R33,R34 (100Ом. Впрочем их можете не ставить, как и
светодиоды – они нужны были только для отладки). Колодка J1 – питание (1 +12,
2-3 земля, 4 +5). +12 можете не подводить (в будущем планировалось управлять реле).
Если будете питать схему не от компьютерного БП, то поставьте 7805 в цепь
питания.
Так же стоит добавить пару
конденсаторов по 100nF возле ног контроллера.
ХА – выход управляющих сигналов для
первого двигателя.
ХВ – для второго.
ХС – для третьего.
ХD – запасной разъем. Для платы с
реле.
JP1 – разъем ISP для
программирования контроллера.
X9 – подключение аварийной кнопки.
С LPT порта должны приходить такие
сигналы:
2 – STEP A
3 – STEP B
4 – STEP C
5 – DIR A
6 – DIR B
7 – DIR C
В разъеме управляющих сигналов для
двигателей 1 контакт – ШИМ выход, 2 – 5 – управляющие выходы, 6 – земля.
Так же с LPT порта выведена пара
запасных контактов – на всякий случай.
Силовые цепи размещаются на
отдельных платах.
Тут есть два варианта:
1.
Все силовые цепи коммутируются через
полевики Q2-Q5, ШИМ сигнал отдельно коммутирует + питания через полевик Q6.
Кому ШИМ не нужен, можете его выкинуть.
Достоинства: упрощение конструкции из-за
отсутствия логики, нет необходимости применять отдельные радиаторы для каждого
полевика или изолировать их друг от друга – в основном греется только Q6.
2.
Здесь применены элементы лог. «И»
для вывода ШИМ сигнала через полевики.
Достоинства: на один полевик и
транзистор меньше.
Недостатки: Придется на каждый
полевик цеплять радиатор, либо изолировать их друг от друга. Еще нужно будет
развезти логику.
Так же контроллер должен работать и
с мостовыми схемами для биполярных двигателей, но такой вариант не проверялся.
Кто сильно горит желанием, может втулить вместо полевиков L298... но я б такого
не делал.
Для себя я выбрал первый вариант. В
конце вместо IRF520 поставил IRFZ34N, а вместо IRF9530 – IRF9Z34N.
Еще лучше добавить шунтирующие диоды
или поставить сборку L6210. Я никакие диоды не ставил и еще ничего не сгорело.
Контроля по току нет - это
усложнило бы схему и сделало бы ее менее надежной, без него все прекрасно
работает вот уже пол года. Кроме того, мне он был не нужен.
Логика работы такова: По спадающему
фронту сигнала STEP происходит переключение обмоток в направлении, которое
определяет сигнал DIR. При отсутствии сигнала STEP больше 750мс, включается
режим удержания, при котором на двигатель подается 20-процентный ШИМ. Каждый
двигатель управляется независимо от других. Все просто и банально.
После прошивки контроллера, схема
должна сразу заработать. Ах да, забыл… во фьюзах выберете работу от внешнего
кварца и выключите JTAG.
В настройках MACH3 сигнал STEP –
низкоуровневый.
Если двигатель дергается, но не
крутится, проверьте правильность подключения обмоток.
Работает сей девайс уже несколько
месяцев, глюков не наблюдалось. По сравнению с предыдущими вариантами мозгов
станка – это небо и земля.
Прошивка МК