В настоящее время для популярных 3D принтеров используется бесплатное программное обеспечение Marlin, которое получило широчайшее распространение благодаря открытому исходному коду, возможности простой настройки на своё аппаратное обеспечение и широко распространённому аппаратному обеспечению - платам Arduino Mega и RAMPS Shield v.1.4.
Прошивка компилируется в Arduino IDE и записывается в плату Arduino Mega подобно обычному скетчу.
Скачать последнюю версию Marlin можно по ссылке. Загрузите себе архив (кнопка "Download ZIP"), распакуйте его в отдельную папку и откройте в Arduino IDE файл Configuration.h.
Первым делом выберем плату, под которую будет компилироваться наша прошивка - Arduino Mega2560. Версия платы R3, R2 или любая другая - не важна. Главное - совместимость с Arduino Mega2560 по разъёмам (чтобы на плату можно было установить дочернюю плату - RAMPS shield).
Основные настройки
Настройка скорости передачи данных
найдите в тексте строку
#define BAUDRATE 250000
и установите скорость 250000. Обычно принтеры использую эту скорость, однако её можно изменить на 115200 бод/с или другую, поддерживаемую вашей программой на компьютере.
Тип платы
Тип платы выбираем Ramps 1.4 с силовыми выходами на экструдер, вентилятор, стол (extruder, fan, bed - "EFB")
#define MOTHERBOARD BOARD_RAMPS_13_EFB
Неважно если вы не используете вентилятор или подогрев стола.
Настройки температуры
Выбор датчика температуры
В списке датчиков температуры выберите номер термистора, соответствующий вашему датчику температуры на экструдере и столе:
#define TEMP_SENSOR_0 1 #define TEMP_SENSOR_1 0 #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_BED 1
TEMP_SENSOR_0 соответствует датчику температуры первого экструдера, а TEMP_SENSOR_BED - датчику температуры стола. Если один из датчиков не используется, установите значение его номера в ноль.
Минимальная температура
Минимальная температура должна отличаться от нуля чтобы показать что датчик работает. Это мера безопасности, не позволяющая нагревателю работать бесконечно долго. Значения можно оставить по умолчанию:
#define HEATER_0_MINTEMP 5 #define HEATER_1_MINTEMP 5 #define HEATER_2_MINTEMP 5 #define BED_MINTEMP 5
Единицы измерения - градусы Цельсия.
Максимальная температура
В зависимости от материала, которым вы печатаете, значение максимальной температуры для экструдера и подогрева стола может отличаться. Это значение не даёт перегреваться экструдеру и столу сверх необходимого. Оно также зависит от термической стойкости частей экструдера. Например, экструдер типа J-head имеет фторопластовую трубку внутри для направления пластиковой нити, которая может быть повреждена при нагреве до 240°C. Чтобы этого не случилось, укажем максимальное значение в 230 градусов для экструдера и 120°C для стола:
#define HEATER_0_MAXTEMP 230 #define HEATER_1_MAXTEMP 230 #define HEATER_2_MAXTEMP 230 #define BED_MAXTEMP 120
PID-регулировка температуры
Эту функцию рассмотрим позже, пока что её можно оставить как есть.
Защита от опасного выдавливания материала
Для того, чтобы исключить механическое повреждения нашего принтера отключим выдавливание материала когда он недостаточно нагрет (температура экструдера ниже температуры плавления материала):
#define PREVENT_DANGEROUS_EXTRUDE
Эту функцию при необходимости можно отключить командой M302 из вашей программы.
Слишком длительное выдавливание можно отключить опцией
#define PREVENT_LENGTHY_EXTRUDE
Это полезно при необходимости быстрой отмены печати при ошибке.
Минимальная температура экструдера определяется строкой
#define EXTRUDE_MINTEMP 170
Настройки механики
Концевые выключатели
Концевые выключатели - обычные выключатели (механические, впрочем можно использовать датчики оптического типа или на эффекте Холла), которые срабатывают при перемещении механизмов принтера в предельные точки и предотвращающие дальнейшее движение. Это позволяет защитить механизмы принтера от поломок и автоматически определять положение экструдера при начале работы.
Подтягивающие резисторы
Для простых схем подключения механических выключателей хорошим тоном считается использования подтягивающих резисторов (в случае если механический выключатель подключён между портом микроконтроллера и землей или питанием). К счастью, на плате Arduino (а точнее, на её микроконтроллере ATmega2560) подтягивающие резисторы уже имеются, и их достаточно включить командой
#define ENDSTOPPULLUPS
Прошивка Marin позволяет настраивать подтягивающие резисторы для каждой оси отдельно, благодаря чему можно использовать разные типы датчиков на разных осях. Просто раскомментируйте или закомментируйте нужную строку:
#ifndef ENDSTOPPULLUPS #define ENDSTOPPULLUP_XMAX #define ENDSTOPPULLUP_YMAX // #define ENDSTOPPULLUP_ZMAX #define ENDSTOPPULLUP_XMIN #define ENDSTOPPULLUP_YMIN // #define ENDSTOPPULLUP_ZMIN #endif
Инвертирование логики концевых выключателей
Некоторые концевые выключатели в нормальном (невключённом) состоянии имеют замкнутые контакты и размыкают их только при срабатывании. Такие выключатели обозначаются как NC (normally closed). Противоположный тип - нормально открытые выключатели (NO, normally open). В зависимости от типа наших выключателей настроим нашу прошивку, имея в виду что false обозначает NC, а true - NO:
const bool X_MIN_ENDSTOP_INVERTING = false; const bool Y_MIN_ENDSTOP_INVERTING = false; const bool Z_MIN_ENDSTOP_INVERTING = false; const bool X_MAX_ENDSTOP_INVERTING = false; const bool Y_MAX_ENDSTOP_INVERTING = false; const bool Z_MAX_ENDSTOP_INVERTING = false;
Сколько концевых выключателей использовать - три или шесть?
Обычно принтеру достаточно знать начальную точку (позицию с нулевой координатой) по всем трём осям и не перемещать экструдер дальше указанного максимума, который мы можем ему указать в настройках. В таком случае мы можем установить на принтер только три концевых выключателя в нулевых точках всех трёх координат. Однако бывают случаи, например, при пропуске шагов шаговыми двигателями или непредвиденных сдвигах его механизмов, когда экструдер может стремиться выехать за пределы своё рабочей зоны. От таких ситуаций защитят дополнительные концевые выключатели, которые должны быть установлены в максимально допустимых координатах по всем осям.
Строка
//#define DISABLE_MAX_ENDSTOPS
должна быть раскомментирована если вы используете дополнительные концевики (на макс. координатах по осям), а строка
//#define DISABLE_MIN_ENDSTOPS
должна быть раскомментирована если установлены концевики для определения нулевой позиции экструдера.
Инверсия направления вращения шаговых двигателей
Существует только один способ определить правильность движения шагового двигателя в данной ситуации - попробовать его включить. Вы можете подождать до завершения процесса настройки принтера и позже вернуться к этому разделу если двигатели перемещают экструдер не в нужном направлении (например, при установке экструдера в нулевое положение).
Для проверки сделаем так:
- Установим экструдер в среднее положение по всем осям
- Приготовимся быстро выключить принтер
- Пошлём принтеру команду передвинуть экструдер по одной оси на десять миллиметров в сторону увеличения.
- Если экструдер движется по направлению в начальной координате, направление вращения шаговика по этой оси придётся инвертировать.
- Повторим шаги 3-4 для остальных осей.
Для проверки работы шагового двигателя на экструдере следует разогреть его до температуры плавления пластика или, если не хотите этого делать, извлеките пластиковую нить из экструдера, и включить экструдер на продавливание некоторого количества нити, например, 10 мм. Во время работы двигателя проверьте правильность его вращения.
Инвертировать вращения двигателя можно из нашего конфигурационного файла или просто перекоммутировав его обмотки. Оба способа равнозначны, но наш легче:
#define INVERT_X_DIR false #define INVERT_Y_DIR true #define INVERT_Z_DIR true #define INVERT_E0_DIR true #define INVERT_E1_DIR true #define INVERT_E2_DIR false
Для инвертированной оси значение устанавливаем в true, а для нормальной - false.
Направление движения в нулевую точку
Это направление движения экструдера когда вы нажимаете кнопку начальной координаты ("home", "дом")
#define X_HOME_DIR -1 #define Y_HOME_DIR -1 #define Z_HOME_DIR
Разрешение перемещаться после срабатывания концевых выключателей
Если вы используете оптические концевые выключатели, их можно установить посередине диапазона перемещения оси и разрешить принтеру двигаться дальше после срабатывания выключателя. Такая возможность имеет мало смысла и редко используется, но если вы хотите её использовать, установите значения в true для разрешения движения за пределы минимума координат:
#define min_software_endstops true
и максимума:
#define max_software_endstops true
Размеры рабочей области принтера
Здесь мы можем указать программе пределы перемещения экструдера. Лучше указать чуть меньшее перемещение чем допускается механикой, а позже, после проверки работы принтера, установить максимально возможные значения
#define X_MAX_POS 190 #define X_MIN_POS 0 #define Y_MAX_POS 190 #define Y_MIN_POS 0 #define Z_MAX_POS 190 #define Z_MIN_POS 0
Настройки движения
Количество осей
Здесь цифра "4" обозначает количество осей плюс количество экструдеров:
#define NUM_AXIS 4
Скорость перемещения к началу координат ("дому")
Скорость перемещения экструдера к началу координат обозначается в мм/мин, для каждой оси отдельно. В других местах нашего файла настроек скорость перемещения указывается в мм/с, а ускорение - в мм/с2
#define HOMING_FEEDRATE {50*60, 50*60, 4*60}
Число шагов шагового двигателя
Контроллер шагового двигателя получает от микроконтроллера платы Arduino команды на выполнение каждого шага. Контроллеру требуется знать не количество миллиметров, на которые мы двигаем экструдер или стол, а число шагов для этого. Давайте определим сколько шагов требуется для перемещения на один миллиметр:
- для зубчатых ремней:
число_шагов_на_мм = (число_шагов_двигателя_на_оборот * микрошаг_драйвера) / (шаг_ремня * число_зубьев_на_шкиве)
- для винтовых передач:
число_шагов_на_мм = (число_шагов_двигателя_на_оборот * микрошаг_драйвера) / шаг_винта
- для экструдера с прямым приводом:
число_шагов_на_мм = (число_шагов_двигателя_на_оборот * микрошаг_драйвера) / (диаметр_сопла * 3,1415)
- для экструдера с шестерёнчатой передачей:
число_шагов_на_мм = (число_шагов_двигателя_на_оборот * микрошаг_драйвера) *передаточное_число_зубчатой_передачи/ (диаметр_сопла * 3,1415)
В итоге должна получиться строка вида DEFAULT_AXIS_STEPS_PER_UNIT {X,Y,Z,E1}, например
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,200.0*8/3,760}
Запись скетча в контроллер
После того как мы настроили нашу прошивку, сохраним её, нажав
Далее наш скетч можно проверить, нажав кнопку "Проверить"
Если в коде нет ошибок, появится сообщение "Компиляция завершена". Если ошибки есть, следует перепроверить наши изменения в файле Configuration.h и исправить опечатки.
Нажав "Загрузка", запишем новую прошивку в контроллер нашего 3D принтера:
Наш принтер готов к работе!
Последняя проверка - направление вращения шаговых двигателей, как мы писали выше. Для этого вам потребуется программа на компьютере, который подключён к 3D принтеру, например, Pronterface.
При помощи интерфейса программы можно проверить перемещение экструдера 3D принтера по осям и работ экструдера. Перед подачей команд перемещения следует установить экструдер в среднее положение по всем осям.
- Включите принтер
- Запустите программу Pronterface
- Подключитесь в программе к принтеру
- Приготовьтесь быстро отключить принтер
- Пошлите команду на перемещение по оси X на +10 мм
- Если экструдер движется в сторону уменьшения координаты, двигателю этой оси следует изменить направление вращения
- Повторите шаги 5-6 для остальных осей
Для двигателя экструдера проверка аналогична - нагрейте экструдер до температуры плавления нити и продавите несколько миллиметров материала.
Принтер почти готов к работе!