Кремень FMZ Реклама
Kremen FMHM Реклама

TTL-лазер для Anet A2 (A8) с поддержкой команд M3 - M5

Ibahek
Идет загрузка
Загрузка
18.04.2020
6550
46
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

4

    Приветствую всех, интересующихся данной темой. Хочу поделиться своей реализацией возможности использования принтера Anet A2 для гравировки лазером с TTL-управлением. При этом сохраняется весь функционал принтера и гравера одновременно с небольшой потерей рабочего пространства. Все это будет работать на прошивке Marlin 1.1.9 и да, гравировка может выполняться в автономном режиме (без подключения к компьютеру) с SD карты.

    Начнем с теории и ограничений штатной платы принтера. Как известно TTL-управление это управление всего двумя состояниями выхода - включено (1) и выключено (0). Конечное устройство (лазер), подключенное к данному выходу будет работать соответственно:

                 - на выходе 1 - устройство работает на полную мощность

                 - на выходе 0 - устройство выключено

Так выделяемая мощность в период времени будет зависеть от того какую часть этого периода устройство включено, и какую выключено. Ну а это есть не что иное как PWM-модуляция.

    Следовательно чтобы нам управлять мощностью лазера нам нужно его подключить к выводам микроконтроллера с PWM-модуляцией, а их не так уж и много и самое обидное они все заняты. Всего у МК ATmega1284 4 таймера с 8 выводами.

TTL-лазер для Anet A2 (A8) с поддержкой команд M3 - M5

Для внешних устройств возможно задействовать 3 таймера (6 выводов). Четвертый используется чисто для внутренних задач.

    Из схемы материнской платы принтера видим,

TTL-лазер для Anet A2 (A8) с поддержкой команд M3 - M5

что выводы первого таймера используются в аналоговом режиме (задействованы таймеры для формирования PWM) и управляют нагревом хотэнда и стола. Выводы второго таймера задействованы в цифровом режиме и управляют моторами по осям X и Y. Ну и у оставшегося таймера один из выводов используется в аналоговом режиме - управляет скоростью вращения вентилятора обдува изготавливаемой модели, а второй в цифровом режиме для управления мотором оси Z. 

    Так как основной задачей было сохранить весь функционал принтера было решено для управления лазером задействовать вывод управления вентилятором. Взять сигнал планировалось до выходного транзистора (вывод 44 точка Т35). В связи с тем, что формировать код управляющей программы для гравировки планировалось в сторонних программах и не было никакого желания править его в ручную, необходимо было включить поддержку команд M3 и M5 в Marlin. Но в такой конфигурации у меня не получалось скомпилировать прошивку. Постоянно выдавало ошибку что вывод занят для других функций. Вполне возможно, что можно как-то объединить разные функции, но моих знаний недостаточно для решения данной задачи. Поэтому я пошел другим путем.

 Вообще для поддержки в Marlin команд M3 S***, М4 S***, M5 необходимо указать дополнительно 3 выхода

                     1 - включения (ENABLE)

                     2 - уровень мощности (PWM)

                     3- направление вращения (DIR)

    Углубившись опять в схему материнской платы, в поисках чем все же можно пожертвовать обнаружил вывод (33 T51) на котором висит светодиод и больше ничего, хотя дорожка уходит на разъем дисплея. На основании этого было решено освободить вывод таймера (43 Т1), задействованный для управления осью Z, перекинув его функции на вывод 33. Для этого на обратной стороне материнской платы были перерезаны 2 дорожки. Места разреза показаны зеленым цветом. И брошена перемычка тонким мягким проводом (отмечена желтым цветом). Освободившийся вывод прижал резистором 10К к земле (синий).

TTL-лазер для Anet A2 (A8) с поддержкой команд M3 - M5

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

    Теперь по прошивке. Marlin 1.1.9 скачал с оф.сайта. Пробовал и второй, но с ним быстро не получилось, а долго не было желания возиться. Так что все остальное будет относиться к версии 1.1.9. Для компиляции прошивки использовал Arduino IDE 1.8.5 с добавленной библиотекой Sanguino 1.0.3.

    Marlin распаковываем в отдельную папку. Далее в ней проходим по пути \Marlin\example_configurations\Anet\A8 и копируем файлы конфигурации Configuration.h и Configuration_adv.h. Перемещаемся вверх в папку Marlin и вставляем скопированные файлы с заменой оригиналов. Запускаем файл Marlin.ino из этой же папки.

    В Arduino IDE переходим во вкладку Configuration.h к строкам 856, 857 и меняем true на false и false на true. должно получиться так:

                         #define INVERT_Y_DIR true

                         #define INVERT_Z_DIR false

Это касается только принтеров Anet A2. Для A8 пропустить эту операцию.

    Далее переходим во вкладку Configuration_adv.h. Нас интересуют строки с 1416 позиции.

В частности в этой строке включается поддержка команд М3 - М5. Нужно раскомментировать данную строку (убрать // в начале строки)

В строках 1419 - 1426 можно выполнить некоторые настройки управления лазером (шпинделем). Пояснения там присутствуют. Для лазера рекомендую в пунктах:

                         #define SPINDLE_LASER_POWERUP_DELAY

                         #define SPINDLE_LASER_POWERDOWN_DELAY

значение параметров указать пониже. Этот параметр нужен для шпинделя. Время на его раскрутку и остановку в миллисекундах. Если этого не сделать, то при выполнении гравировки лазер будет включаться и стоять на месте указанное время и только после этого начинать двигаться. Из-за этого будет пережог в начале каждой траектории. У меня этот параметр выставлен на 1 миллисекунду.

                         #define SPINDLE_LASER_POWERUP_DELAY 1

                         #define SPINDLE_LASER_POWERDOWN_DELAY 1

Далее в строках 1437 - 1445 указывается диапазон значений мощности передаваемый в G-коде. Мне удобнее использовать в градации 0 - 255 (0-выключено, 255 полная мощность).

Поэтому эти строки я привел к следующему виду:

                         #define SPEED_POWER_SLOPE 1

                         #define SPEED_POWER_INTERCEPT 0

                         #define SPEED_POWER_MIN 1

   #define SPEED_POWER_MAX 255

    Ну что, теперь осталось только указать какие выводы для чего используются. Для этого в Arduino IDE переходим во вкладку pins_ANET_10.h и вносим следующие изменения.

Для #define Z_STEP_PIN указываем число 27 (цифровой вывод)

                          #define Z_STEP_PIN 27

Теперь мотор оси Z будет тактироваться 33 выводом микроконтроллера.

Далее необходимо прописать выводы для управления лазером. Для этого нужно добавить следующие строки:

                          #define SPINDLE_LASER_ENABLE_PIN      26 // digital pin

                          #define SPINDLE_LASER_PWM_PIN            3 // digital pin - MUST BE HARDWARE PWM

                          #define SPINDLE_DIR_PIN                            26 // digital pin

Я эти строки внес после определения выводов термодатчиков. Выводы включения и направления вращения я указал цифровой вывод 26 (вывод 32 микроконтроллера). Это вывод включения оси Z. Можно использовать цифровой вывод 14 (вывод 15 микроконтроллера), но он управляет включением моторов оси X и Y (E тоже), что может создавать помехи перемещению рабочего инструмента во время включение и отключения лазера (шпинделя). Так как для лазерной гравировки ось Z практически не используется было решено использовать 26 цифровой вывод. Возможно с шпинделем могут возникнуть проблемы так как там необходимо интенсивно использовать ось Z. В таком случае материнскую плату Anet, без кардинальных изменений использовать не получится.

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

    В общем всё. Теперь к 43 выводу микроконтроллера подключаем TTL-вход лазера и в путь. Я использую вот этот софт для формирования управляющей программы для лазера. Для отправки G-кода по кабелю понравилась программа Snapmakerjs. В ней можно выставить начальную точку и за тем обнулить рабочие координаты, что очень удобно

  Если есть советы по более правильной конфигурации было бы интересно "услышать" в комментариях.

Так же задавайте вопросы. Чем смогу, тем помогу.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

4
Комментарии к статье