Marlin регулировка контрастности. Калибровка стола

31.01.2023 Компьютер

Иногда владельцу 3д-принтера приходится этим заняться. Поведаю хабра-сообществу о своём способе. Прошу заметить, что руководство подробное, но приводит к отличным результатам - прилипает модель на отлично и не отклеивается в процессе печати.

Для начала отмечу, что своё мастерство я оттачивал на принтере SmartCore Aluminium , приобретённом .

Установка нагревательной платформы

Нагревательную (или не нагревательную, зависит от принтера) платформу для начала надо выставить по высоте. Для этого существует концевик для оси Z.

Из википедии:

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

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

Для дальнейшей калибровки будем использовать Pronterface из пакета ПО Printrun .

Преимуществом этого пакета вижу наглядное и удобное управление соплом и платформой принтера, но если кому-то удобнее использовать Repsnapper , он тоже вполне подойдёт. Cura не подойдёт для калибровки, за неимением необходимого для этого функционала.

Для продолжения давайте убедимся, что при нажатии на кнопку «Калибровка» («Home», изображен белый домик), платформа поднимается и упирается вплотную, но не пытается двигаться дальше, к соплу.
Так-как на моём принтере прошивка взята с напрямую с репозитория SmartCore Aluminium (пусть и не напрямую с Marlin), сопло выезжает на середину платформы. Если у вас это не так, и сопло остаётся в углу по нулевых координатах - ничего страшного, для дальнейшей калибровки это не принципиально.

Калибровка

Следующие действия надо поочерёдно провести на центре, по углам и по контрольному кругу:

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

Проверка

Для проверки я использую простую модель , нарисованную в FreeCAD и cгенерированный gcode в Cura. Пластик чем точнее диаметром, тем лучше - я беру из-за заявленной точности и разнообразия цветов. Впрочем, для проверки будем использовать натуральный цвет ABS-пластика.
Смысл простой маленькой проверочной модели, наверное, ясен - экономия средств и времени.

Именно в такой последовательности есть смысл проверять. Впрочем, если вы уверены в своей калибровке, то можете сразу начать с шага 2. Ну если у вас уже есть опыт и вы абсолютно уверены в своей калибровке, то можете сразу перейти к шагу 3 - распечатывать 5pad.gcode.
Разница в количестве и расположении изделий.
Я же опишу проверку первого шага, поскольку остальные аналогичны.
Предположим, одна сторона платформы слишком высоко откалибрована. Это очень легко обнаружить в результате:

Вид сверху:


И что важнее сейчас для нас - вид снизу:

- вот так выглядит ободная кайма Cura, если сопло расположено слишком высоко к платформе. Пластик падает не точно, иногда цепляясь за соседние линии.

Рассмотрим обратную ситуацию - если сопло слишком прижато к платформе:



Как видим, здесь тоже не всё гладко, пластик, стремясь заполнить доступное пространство, налазит на соседние линии, а на следующем слое повторно цепляется сопло, вмазывается вновь по доступному пространству. Впрочем, надо отметить, что прилипает в таком случае модель очень хорошо, а дефект калибровки не виден на следующих слоях. Более того, может быть даже не заметен вовсе, если вы выберете в Cura подложку для прилипания модели к столу.

Наконец, желаемый и правильный результат:



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

Нормальная ситуация, если такой результат получен на стекле при температуре 100 градусов. При этом, если стекло обезжирено и ровное, то после окончания калибровки, отлипать в процессе печати не будет. Вы можете попробовать отодрать деталь от нагретой платформы после печати. Пока не остынет до 90-80 градусов, у вас это может, даже и не получится, без повреждения стекла. Также, может быть важным отсутствие сквозняка, который влияет на не менее важную равномерность прогрева поверхности платформы.

Вот общие фото для удобства сравнения:

Вид сверху:

Вид снизу:

Дальнейшая проверка аналогична по своей сути, но распечатать следует 4pad.gcode - охватывает немного большую центральную область. И 5pad.gcode - покажет качество калибровки по углам.

Всем удачной калибровки!

На завершение развлекательное видео, на котором отображено наслаждение результатом:


Как видно, печатаю я не на стекле, но об этом в следующей статье.

После того, как я собрал , самое время перейти к его настройке. Настройка 3D принтера — это самый ответственный этап. Если не уделить ему достаточно внимания, то это может привести к неприятным последствиям. Например, первое, что я сделал со своим 3D принтером — это расцарапал каптоновое покрытие на поверхности нагревательного столика. Но обо всем по порядку.

Настройка прошивки 3D принтера

Самое первое после сборки — настройка и заливка прошивки для 3D принтера. Я использовал самую распространенную прошивку Marlin . Скачиваем ее в виде zip-архива и распаковываем в отдельную папку. Устанавливаем также Arduino IDE для правки настроек, компиляции и заливки прошивки в 3D принтер по USB. Arduino IDE нам нужен потому, что контроллер большинства 3D принтеров строится на базе распространенной платы Arduino 2560.

Запускаем Arduino IDE и идем в меню Файл->Открыть… Далее находим нашу распакованную папку с прошивкой Marlin, в ней будет вложенная папка с тем же названием Marlin, а уже в ней файл проекта Marlin.ino . Открываем его, и у нас появляется множество закладок с файлами прошивки. Главная закладка, которая нас будет интересовать — это Configuration.h. Там собраны все основные настройки для нашего 3D принтера, обильно снабженные комментариями на английском. Если владеешь языком, то из комментариев более-менее все понятно. Параметры, которые можно настраивать, выглядят так:

#define НАЗВАНИЕ_ПАРАМЕТРА значение параметра

Некоторые параметры идут только с названием и без значения. Такие параметры просто включают или отключают определенную функцию прошивки. Чтобы выключить такой параметр, достаточно закомментировать его двойной косой чертой //. Включить такой параметр можно удалением двойной косой перед словом #define.

Что нужно выставить в настройках прошивки?

1. Типы термисторов, используемых в нашем 3D принтере для измерения температуры HotEnd’а и нагревательного столика. За это отвечает параметр TEMP_SENSOR (кстати, его проще найти через поиск в меню Правка->Найти… или просто нажать Ctrl+F). Перед этим параметром есть огромная таблица значений с указанием различных наиболее распространенных термисторов. Я использовал самый распространенный термистор EPCOS 100 кОм. Поэтому в параметрах TEMP_SENSOR_0 и TEMP_SENSOR_BED я указал 1. Проверьте также, включен ли параметр PIDTEMP. По умолчанию он должен быть включен, кажется. Он нужен для включения PID-регулятора, управляющего температурой HotEnd’а.

2. Режим нагрева нагревательного столика. Я использовал нагревательный столик на 220 V, подключаемый через реле на 12 V. Если вы не дай Бог купили нагревательный столик на 12 V, то сдайте его обратно в магазин — он наверняка поплавит вам все соединительные клеммы. Все дело в том, что ток 12-ти вольтового столика просто дикий. Разделите его мощность на напряжение и получите ток. Например, для 200 Ваттного столика на 12 вольт ток будет около 17 Ампер! Под такой столик вам не помешал бы отдельный блок питания. А у моего столика 220 Вытт на 220 Вольт ток всего около 1 Ампера, и греться будет только столик, а не провода и клеммники.

Так вот, для столика на 220 Вольт нужно отключить PID-регулирование, иначе реле будет щелкать как оголтелое, и быстро выйдет из строя. Для этого закомментируем строку

3. Настраиваем кинематику. Я собирал 3D принтер с кинематикой CoreXY, поэтому ищем параметр COREXY и включаем его в настройках, удалив двойную косую //.

О достоинствах кинематики CoreXY немного говорится в статье про . Коротко говоря — круче CoreXY пока нет ничего! Разве что только Delta-робот.

4. Настраиваем размеры рабочей зоны. Стандартные нагревательные столики идут размером 200 х 200 мм. Но их нужно еще как-то крепить, поэтому я сделал небольшой отступ по 10 мм от краев, поэтому рабочая зона 200 — 10 х 2 = 180 мм.

#define X_MAX_POS 180
#define X_MIN_POS 0
#define Y_MAX_POS 180
#define Y_MIN_POS 0
#define Z_MAX_POS 100
#define Z_MIN_POS 0

5. Включаем автокалибровку уровня нагревательного столика. На самом деле автокалибровку себе я не делал, но без этого параметра не работает функция безопасной парковки по оси Z:

#define ENABLE_AUTO_BED_LEVELING

И теперь, собственно, включаем безопасную парковку по Z:

О том, что дает безопасная парковка и как она работает, я расскажу немного ниже.

6. Настраиваем скорости перемещений по осям. По мере развития вашего 3D принтера эту настройку нужно будет повторить несколько раз, подстраиваясь под разные моторы.

  • HOMING_FEEDRATE — скорость парковки для каждой из трех осей в миллиметрах в минуту. Для наглядности в прошивке лучше писать скорость в миллиметрах в секунду и умножать на 60, например {80*60, 80*60, 4*60, 0}. В фигурных скобках идут настройки для осей X, Y, Z и E (экструдера).
  • DEFAULT_AXIS_STEPS_PER_UNIT — число шагов для двигателя, требуемое для перемещения оси на 1 миллиметр. Для определения этого числа мы число шагов шагового двигателя на один полный оборот умножаем на делитель микрошагового режима, если он у вас включен (если нет, то на умножаем на 1), и делим на шаг резьбы для винтовых передач или длину ремня на один оборот для ременных передач. Длину ремня на один оборот можно найти, умножив число зубьев шкива на шаг ремня. Для моего принтера получились такие значения: {200*1/(2.0*20), 200*1/(2.0*20), 200*1/1.25, 100*1/23.0}, т.е. по оси X и Y у меня работают шаговики с 200 шагами на один полный оборот, микрошаг у меня отключен (множитель — 1), я применяю зубчатый ремень GT2 с шагом 2мм и шкивы на моторах с 20-ю зубами. На оси Z у меня строительная шпилька с шагом 1.25 мм, а на экструдере у меня моторчик со 100 шагами на один оборот, и шестеренка с длиной внешней окружности 25.0 мм (23.0 — это с учетом вгрызания шестеренки в пластик прутка).
  • DEFAULT_MAX_FEEDRATE — максимальная скорость перемещения по осям в миллиметрах в секунду. У меня {200, 200, 5, 100}.
  • DEFAULT_MAX_ACCELERATION — максимальные ускорения по осям. Мои значения {400, 400, 10, 10000}. Ускорения обычно зависят от максимально возможной скорости. Чем выше возможная скорость, тем выше можно поставить ускорения. Для экструдера вообще ускорение ставится максимальное, потому как экструдер работает в дискретном режиме.

Из основных настроек вроде все. Если чего забыл — допишу потом.

После всех изменений, сохраняем файл Configuration.h (Ctrl+S). Перед заливкой прошивки проверьте подключение контроллера по USB. Также в Arduino IDE проверьте настройки в меню Сервис->Плата… (Нужно поставить «Arduino Mega 2560 или Mega ADK»), а также Сервис->Последовательный порт… Обычно после подключения контроллера по USB нужный порт в этом пункте меню появляется автоматически. Теперь запускаем заливку Файл->Загрузить (Ctrl+U) или просто нажмите кнопку со стрелочкой (вторая слева в панельке под меню). Несколько секунд подождем, пока в строке состояния внизу не появится «Загрузка завершена». Если выскочат оранжевые ошибки, значит где-то чего-то не так наменяли. Нужно снова распаковать архив с прошивкой Marlin в эту же папку с заменой всех файлов. А можно просто где-то сохранить исходный Configuration.h и в случае ошибок просто перезаписать его поверх испорченного.

Первый запуск 3D принтера

Итак, волнующий момент — первый запуск 3D принтера!

Для управления своим 3D принтером я использую Repetier-Host . При его установке он сам скачивает последнюю версию слайсера Slic3r для нарезки 3D-моделей на слои.

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

  • Последовательное соединение и Порт (можно auto).
  • Скорость в бодах = 250000.

Во вкладке Принтер ставим

  • Скорость перемещения = 4800 мм/мин (у меня пока такая с моими шаговичками с током на 0,4 А)
  • Скорость оси Z = 150 мм/мин
  • Температура экструдера начальная = 200°С (у меня ABS-пастик)
  • Температура стола начальная = 100°С (у меня все еще ABS-пластик)

Во вкладке Размеры

  • Тип принтера — Классический принтер
  • Начало X = 0, Начало Y = 0, Начало Z = Min.
  • Мин X = -100, Макс X = 90, Слева: 0
  • Мин Y = -100, Макс Y = 90, Спереди: 0
  • Ширина области печати: 190 мм
  • Глубина области печати: 190 мм
  • Высота области печати: 100 мм

Жмем ОК и понеслась

В верхнем левом углу программы Repetier-Host есть кнопка Подсоединить. Жмем ее, и, если в настройках Соединения мы указали все правильно, то программа подключится к нашему 3D принтеру. Далее справа есть панель с закладками. Нас пока будет интересовать закладка Управление. В ней есть все необходимые кнопки, чтобы погонять наш 3D принтер по рабочему полю, но сначала нужно припарковаться!

Парковка — это установка печатающей головки в начальное положение. Для определение начальных положений осей на 3D принтере устанавливаются так называемые концевые датчики. Это могут быть как магнитные или оптические датчики, так и обычные кнопочки-»микрушки». Я в качестве концевых датчиков использовал обычные SMD-кнопочки, напаянные на кусочки фольгированного стеклотекстолита, т.е. сделал небольшие платки с выключателями, которые привинтил к началу каждой из осей. Благо мой сделан из фанеры, в которой можно сверлить дырки где захочется

Кстати говоря, есть два варианта установки концевого датчика на ось Z — сверху и снизу. Снизу — это безопасный вариант, но самый долгий, потому как для поиска начала координат по оси Z столику придется отъехать на самый низ, а потом снова подняться на самый верх для начала печати. Второй вариант — установка концевика сверху. Самый быстрый, но небезопасный вариант. Как обойти все опасности парковки по оси Z, я расскажу ниже.

Перед началом парковки опустим нагревательный столик пониже на безопасное расстояние, чтобы сопло случайно не начало возить по его поверхности. Для этого клацаем на положительное направление оси Z: пару раз по +10 или сразу на +50, но только аккуратно — не врежьтесь в пол! Кстати говоря, я не так расцарапал свой каптоновый слой Об этом позднее…

Для начала попробуем припарковать ось X. В Repitier-Host есть кнопочки для отдельной парковки каждой из осей (домики с буквами X, Y и Z). Жмем домик с X, и смотрим, как головка мчится к концевому датчику оси X, ткается об него, после чего слегка отъезжает на заданное расстояние. Все ОК!

Если же головка уперлась в датчик, но двигатель продолжает пытаться ее протолкнуть дальше, и рычит, как дикий зверь, значит с датчиком что-то не так. Возможно, вы его не туда воткнули. Проверьте схему подключения вашего датчика к плате RAMPS.

Бывает так, что головка начинает ехать не в ту сторону. В этом случае нужно инвертировать направление оси в прошивке контроллера. За это отвечает параметр INVERT_X_DIR. У меня стоят вот такие настройки для направлений осей:

#define INVERT_X_DIR true
#define INVERT_Y_DIR false
#define INVERT_Z_DIR true

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

Вообще говоря, для кинематики CoreXY, наверное, нельзя поехать «не туда». Либо сразу поедет куда надо, либо будет клинить и перемещаться диагонально, потому как в кинематике CoreXY оба двигателя работают синхронно даже для перемещения по одной из осей. В общем, если клинит или едет по диагонали, значит один из двигателей надо инвертировать. А вот какой именно — это уже зависит от того, с какой из углов своего 3D принтера вы хотите сделать началом координат.

Пробуем повторить процедуру с осью Y — жмем на домик с буквой Y. Каретка ткается в концевик, слегка отъезжает и останавливается. Все ОК!

С парковкой оси Z все немного сложнее. Нужно расположить концевой выключатель таким образом, чтобы он сработал слегка не доводя нагревательный столик до сопла. Для этого делают концевик регулируемым по высоте, и плавно доводят ось Z до минимального расстояния между соплом и столиком. Но микроны ловить не нужно. В программах управления обычно есть специальная настройка, позволяющая поставить концевик на некотором расстоянии от требуемого, а потом программно вычесть недостающие миллиметры — так безопаснее и удобнее в настройке.

Однако не спешите радоваться! Есть и еще одна проблема с парковкой оси Z. Это крепление нагревательного стола. Когда X и Y стоят в нулях, то сопло обычно висит прямо над креплением стола, и паркуя столик по оси Z, мы обязательно ткнем этим креплением в сопло и чего-нибудь попортим. Разработчики прошивки Marlin, тем не менее, разработали механизм безопасной парковки по оси Z. О нем я говорил выше в разделе про настройку прошивки 3D принтера. Поведение этого механизма оказалось для меня немного странным. Суть его в том, что перед парковкой оси Z сопло отводится в безопасное положение — на середину стола по X и Y. Но что будет, если столик уже по оси Z находится в нуле? Правильно — парковка по X и Y как раз шибанет сопло о крепление стола!

Я решил немного модернизировать алгоритм безопасной парковки. С моей точки зрения, логичным было бы перед парковкой осей X и Y сперва опустить столик немного вниз, чтобы головка не налетела на крепление. Именно это я и сделал, модернизировав прошивку Marlin. Все операции по парковке описаны в файле Marlin_main.cpp. В функции process_commends() есть обработчик G-кода G28 (Home all Axis — припарковать все оси). Ищем в файле «case 28:» и далее прямо перед строчкой «#ifdef QUICK_HOME» вставляем следующий код:

// Dimanjy FIX
// Опускание оси Z на заданное безопасное расстояние перед парковкой осей X и Y
current_position = 0; current_position = 0; current_position = 0;
destination = 0; destination = 0;
destination = Z_RAISE_BEFORE_HOMING * home_dir(Z_AXIS) * (-1);
current_position = 0;
feedrate = max_feedrate;
plan_set_position(current_position, current_position, current_position, current_position);
plan_buffer_line(destination, destination, destination, destination, feedrate, active_extruder);
st_synchronize();
current_position = destination;

Расстояние, на которое опустится ось Z, задается все в том же файле настроек Configuration.h в параметре Z_RAISE_BEFORE_HOMING в миллиметрах. Мне хватает 10 мм, чтобы объехать крепление стола.

Я даже записал небольшое видео модернизированного процесса парковки головки 3D принтера. Скоро выложу…

Но, наверняка, есть и другие варианты безопасной парковки. Просто я, видимо, в них пока не разобрался и решил проблему, что называется «в лоб» — по программерски.

Ну все, вроде припарковались.

Калибровка стола 3D принтера

Настройка 3D принтера у нас еще в самом разгаре! Перед первой печатью необходимо очень точно выставить параллельность стола 3D принтера к его печатающей головке. Для этого в конструкции большинства 3D принтеров предусмотрены подпружиненные регулировочные винты. Гоняя печатную головку по всем четырем углам, мы аккуратно подкручиваем винты и добиваемся минимального расстояния от стола до печатающей головки. Я для этого использую ровный квадратный кусок бумаги. Если бумага между соплом и столом проходит с трудом — можно считать, что сопло находится на минимальном расстоянии от стола. Если бумага застревает, то мы придавили сопло столиком — нужно слегка подтянуть винт и увеличить зазор. И так несколько раз по кругу.

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

По просьбе подписчика выкладываю пост о прошивках (Firmware) для 3D принтеров. Данный пост разделен на две части. Первая часть посвящена новичкам и ее я решил оформить в качестве FAQ, надеюсь подобное изложение материала будет кратким, понятным и ответит на большинство вопросов. Во второй части - экзотика, прошивки, которые давно покрылись слоем пыли и совсем молодые или специализированные прошивки. Эта статья так же войдет в книгу "3D Ликбез".

Более подробно про настройку написано в статье.В. Что такое прошивка для принтера?

О. Прошивка для 3D принтера - это написанный программный код, основной задачей которого является считывать и воспроизводить G-code (Специально разработанный код для ЧПУ станков). Это основная задача прошивки. Дополнительный функции, такие как вывод информации о процессе печати, печать с SD карты памяти, управление принтером через интерфейсы - это все дополнительные функции, и в разных прошивках набор этих дополнительных модулей разнообразен, как и сама идея каждой отдельной прошивки.

В. Что можно настроить в прошивке?

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

В. Какую прошивку выбрать для новичка?

О. Если вы собираете принтер самостоятельно, то для начала стоит освоить прошивку под названием Marlin. В подавляющем большинстве случаев используется именно эта прошивка, даже заводских принтерах.

В. В чем принципиальная разница между прошивками?

О. Прошивки можно разделить по типу поддерживаемого "железа" (микроконтроллера) и на разные ветви одной базовой прошивки, причем последние могут идти как параллельная версия, так и полностью переработанная. Подробнее о прошивках в конце статьи.

О. Для начала включите принтер. Если вы приобрели принтер у производителя, скорее всего прошивка в него уже залита, и лезть в первый же час работы не стоит. Я понимаю, что очень хочется, но если возникнут проблемы сперва обратитесь к производителю.

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

В. Как залить прошивку в электронику?

О. В 90% случаев у вас на руках имеется Arduino mega 2560 + Ramps 1.4. Или любая другая плата на основе Arduino mega 2560. (В противном случае, читайте вторую часть статьи). Если это так, то вам потребуются программы: Arduino IDE (для работы с файлами прошивки), Pronterface (для настройки и управлением принтера), и сама Marlin .

Первым делом устанавливаем Arduino IDE, и пытаемся подключить Arduino Mega к компьютеру. Если это удалось, и нашлись и установились все драйверы, то радуйтесь, можно двигаться дальше, в противном случае у вас либо Mega основанная на usb чипе ch340g, либо мертвая плата. Платы на ch340g дешевле, но к ним нужно искать специальный драйвер, на всякий случай оставлю его .

И перед тем, как начать настраивать прошивку, просто залейте ее в arduino, дабы убедиться, что электроника жива, а не ломать себе голову тем, что я конфигурирую-конфигурирую да не выконфигурирую.

Напомню, что пошаговая инструкция хорошо описана в статье.

В. Я прошил принтер, но двигатели едут не туда/температура неправильно показывается, не загорается дисплей.

О. Самое время настроить прошивку, для этого открываем в Arduino IDE файл configuration.h и начинаем читать комментарии. Опять же, в статье, упомянутой выше есть полный перечень настроек, но почитать на русском языке о всех возможностях прошивки будет не лишним.

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

О. Сам ни раз натыкался на это, а реальная проблема была, когда первый раз начал калибровать delta принтер, каждый раз вносить изменения, перепрошивая принтер это смерти подобно. На такие случаи придумали записывать настройки в энергонезависимую память, т.н. EEPROM. Данная функция включается в конфигурации и позволяет в том же pronterface записывать изменения в принтер из консоли при помощи M-команд.

А теперь давайте подробней рассмотрим каждую из прошивок. Разобьем их пожалуй по поддерживаемой электроники.

Прошивки для Arduino (Atmel):

Прошивки для плат на основе 32-битных процессоров ARM.

Любые вопросы, вы можете задать мне лично в VK или написав в ЛС: http://vk.com/tigeer

Перед началом работы с непрофессиональным или полу профессиональным 3D принтером, а также Kit-набором для самостоятельной сборки часто необходимо «залить» и настроить прошивку. Прошивка представляет собой программный код, основными задачами которого являются: считывание и воспроизведение G-code, управление принтером через различные интерфейсы, вывод информации о процессе печати. Другими словами, прошивка необходима, чтобы железо и набор электроники «ожили» и можно было ими управлять. Заливается прошивка на плату управления. У разных 3D принтеров различные платы управления, соответственно, прошивки тоже разные.

В наших 3D принтерах Prusa i3 Steel используется связка плат Arduino Mega 2560 и Ramps 1.4, поэтому в данной статье мы подробно рассмотрим и разберем настройки подходящей для них прошивки, Marlin.

Если вы еще не собрали электронику, то ознакомьтесь со статьей:

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

Где взять?

Последняя версия прошивки Marlin выложена на официальном сайте разработчика https://github.com/MarlinFirmware/Marlin . Скачать более ранее версии прошивки можно по ссылке . Также на сайте присутствуют много различных версий, но мы рекомендуем скачивать самую последнюю версию, помеченную как Latest release. На момент написания статьи, данной версией была 1.0.2-2

Под Downdloads нажмите на Source code (zip) и скачайте архив прошивки себе на компьютер. Далее извлеките содержимое архива в папку.

Установка Arduino IDE

После того, как вы скачали прошивку, нужно ее отредактировать и в дальнейшем записать на микроконтроллер платы управления (Arduino mega 2560). Для этих целей понадобиться программа Arduino IDE, скачать которую можно бесплатно с официального сайта Arduino.

Обратите внимание! Данная программа Arduino IDE регулярно обновляется и возможен такой вариант, что при заливки прошивки на плату, с новыми версиями Arduino IDE могут возникнуть проблемы, а именно будут вылазить ошибки, и вы не сможете записать прошивку в микроконтроллер. Поэтому, при возникновении проблем, попробуйте скачать более старую версию программы, например версию 1.6.0)

Для надежности можете сразу скачать проверенную версию 1.6.0


Нажмите на Windows Installer, и вас перекинут на другую страницу, где необходимо нажать на кнопку JUST DOWNLOAD, далее начнется скачивание файла. Установите программу и приступите к следующему шагу.

Редактирование прошивки Marlin

Вы скачали непосредственно саму прошивку Marlin и программу Arduino IDE, с помощью которой можно редактировать. Откройте папку с прошивкой "Marlin", найдите файл "Marlin" с расширением.ino


Откройте этот файл, откроется программа Arduino IDE


Вверху окна программы находиться много вкладок, в каждой из которых располагаются куски кода, от которых и зависит работа 3D принтера. Вам потребуется только несколько основных вкладок. Первая и основная вкладка это "Configuration.h"


Этот конфигурационный файл, который содержит основные настройки. Именно в этой вкладке необходимо произвести основные изменения.

Обратите внимание! Все изменения в прошивке проведите по порядку сверху вниз. Эти изменения затронут основные участки кода, и они необходимы для начального запуска вашего 3D принтера.

Устанавливаем необходимую скорость в бодах

Первое, что необходимо поменять - скорость в бодах. По умолчанию скорость стоит 250000 (47 строчка кода)

// This determines the communication speed of the printer #define BAUDRATE 250000


// This determines the communication speed of the printer #define BAUDRATE 115200

Если вы используете плату , то скорость должна быть 250000.

Выбираем управляющую плату

После установки скорости в бодах, необходимо указать используемую плату управления (55 строчка кода).

#ifndef MOTHERBOARD #define MOTHERBOARD BOARD_ULTIMAKER #endif


По умолчанию стоит плата 3D принтера Ultimaker - BOARD_ULTIMAKER, поэтому необходимо поменять плату. Весь список плат находится во вкладке "BOARDS_H"


Там предоставлен огромный список различных плат, но вам необходимы только следующие:

#define BOARD_RAMPS_13_EFB 33 // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)

#define BOARD_RAMPS_13_EEB 34 // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)

#define BOARD_RAMPS_13_EFF 35 // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Fan)

#define BOARD_RAMPS_13_EEF 36 // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Fan)

Эти платы относятся к Arduino mega 2560 и Ramps 1.4. В зависимости от модификации вашего 3D принтера, необходимо выбрать соответствующую плату. Например, стандартная связка 1 экструдер + обдув рабочей области + нагревательный стол соответствует плате BOARD_RAMPS_13_EFB

Название платы необходимо скопировать и заменить на вкладке "Configuration.h", меняем следующие строчки:


Меняем название 3D принтера

При настройке обязательно придумайте название своему 3D принтеру и укажите это в прошивке. Зачем? Название принтера отображается на его LCD дисплее, такая возможность точно предусмотрена на таком дисплее.

Найдите строчки: (59 строчка)

// #define CUSTOM_MENDEL_NAME "This Mendel"

Перед #define стоят "//" - это означает, что данные строчки не используются в коде, а служат в качестве пояснений. Чтобы активировать данную строчку, необходимо раскомментировать строку, уберите // перед строчкой.

Измените название по умолчанию "This Mendel" на ваше название 3D принтера, например, "P3Steel". Получаем следующие:

Выбираем датчик температуры стола и экструдера

Выше были указаны настройки прошивки для 1 экструдера и нагревательного стола, то есть в 3D принтере присутствуют два нагревательных элемента, температуры которых необходимо регулировать. Контроль температуры производится с помощью датчиков температуры - термисторов.

Существует большое количество различных термисторов с различными характеристиками, поэтому в прошивке необходимо указать какой именно термистор стоит у вас. Это нужно, чтобы в дальнейшем принтер показывал верную температуру. В прошивке найдите список поддерживаемых термисторов:

//// Temperature sensor settings: // -2 is thermocouple with MAX6675 (only for sensor 0) // -1 is thermocouple with AD595 // 0 is not used // 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup) // 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup) // 3 is Mendel-parts thermistor (4.7k pullup) // 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !! // 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup) // 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup) // 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup) // 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup) // 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) // 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup) // 10 is 100k RS thermistor 198-961 (4.7k pullup) // 11 is 100k beta 3950 1% thermistor (4.7k pullup) // 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed) // 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" // 20 is the PT100 circuit found in the Ultimainboard V2.x // 60 is 100k Maker"s Tool Works Kapton Bed Thermistor beta=3950 // // 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k // (but gives greater accuracy and more stable PID) // 51 is 100k thermistor - EPCOS (1k pullup) // 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup) // 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup) // // 1047 is Pt1000 with 4k7 pullup // 1010 is Pt1000 with 1k pullup (non standard) // 147 is Pt100 with 4k7 pullup // 110 is Pt100 with 1k pullup (non standard)

В списке найдите свой, запомните цифру слева. Как правило, многие используют китайский термистор 100 кОм, для него подходит термистор под номером "1".

// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)

Внесите изменения в нужном месте (строчки 115-118)

#define TEMP_SENSOR_0 -1 #define TEMP_SENSOR_1 -1 #define TEMP_SENSOR_2 0 #define TEMP_SENSOR_BED 0

По умолчанию в прошивке активированы два первых термистора:

TEMP_SENSOR_0 - отвечает за термистор первого экструдера

TEMP_SENSOR_1 - отвечает за термистор второго экструдера

TEMP_SENSOR_BED - отвечает за термистор стола

Поменяйте строчки и получите следующее:


TEMP_SENSOR_1 и TEMP_SENSOR_2 не используются, поэтому напротив них ставим "0" нули.

Ограничение максимальной температуры

Для ограничения максимальной температуры необходимы следующие строчки (140-143)

#define HEATER_0_MAXTEMP 275 #define HEATER_1_MAXTEMP 275 #define HEATER_2_MAXTEMP 275 #define BED_MAXTEMP 150

Числа стоящие справа, а именно 275 и 150 - это максимальные температуры экструдера и нагревательного стола соответственно.

Когда температура превышает максимальный Temp, ваш нагреватель будет выключен. Эта функция существует для того, чтобы защитить ваш экструдер от случайного перегрева. Если вы используете хотенд с тефлоном внутри, то рекомендуем ограничить температурой 260 градусов.

Ограничение минимальной температуры

Также в прошивке по умолчанию стоит ограничение минимальной температуры экструдера в 170 градусов. Это означает что, если температура экструдера будет ниже 170 градусов, то двигатель экструдера не будет вращаться и пластик не будет подаваться. Защита от проталкивания не прогретого пластика (строчка 230).

#define EXTRUDE_MINTEMP 170

Если хотите отключить данную функцию, то перед строчкой поставьте "//"

Настройка концевых выключателей

Настройка логики работы концевиков

В первую очередь на что нужно обратить внимание - это какие концевики вы используете и какой у них принцип работы. В прошивке необходимо правильно указать логику работы концевиков. Найдите следующие строчки (301-306)

Const bool X_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Y_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Z_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.

Если у вас механические концевики, то при срабатывание цепь замыкается, напротив каждой строчки соответствующей оси поставьте значения "true". Если вы используете оптические концевики, то при срабатывании цепь размыкается, напротив каждой строчки соответствующей оси поставьте значения "false".

По умолчанию в прошивке напротив каждого концевика стоят значения "true", что соответствуют механическим концевикам.

После настройки работу концевиков можно проверить командой M119 в консоли.
В ответ должен прийти текст:
x_min: open – концевик не сработал;
x_min: TRIGGERED – концевик сработал.

Установка положения "HOME" - дом

В прошивке поддерживаются 3 пары концевиков: для каждой оси X, Y и Z по два концевика min и max. Как правило, ставятся концевики только для минимального положения каждой оси, а максимальное задается в прошивке.

Положение дом (начальное положение), будет находиться в минимальных положениях концевиков и это задается в прошивке: (строчки 337-339)

#define X_HOME_DIR -1 #define Y_HOME_DIR -1 #define Z_HOME_DIR -1

Изменения направления вращения двигателей

При сборке 3D принтера, а именно при подключение шаговых двигателей к плате, возможна такая ситуация: когда вы все настроили и подключили, при нажатии "home" (дом), каретка одной из осей едет в другую сторону (не к концевику), тогда необходимо перевернуть коннектор шагового двигателя на 180 градусов или поменять значения в прошивке:

#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true #define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false #define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true #define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false #define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false

Например, если у вас каретка оси Y в другую сторону, то необходимо найти строчку

#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false

и поменять "false" на "true". И так с каждой осью и экструдером.

Установка габаритов перемещения

Чтобы 3D принтер определял рабочую область, необходимо указать ее размеры в прошивке: (строчки 345-350)

#define X_MAX_POS 205 #define X_MIN_POS 0 #define Y_MAX_POS 205 #define Y_MIN_POS 0 #define Z_MAX_POS 200 #define Z_MIN_POS 0

Напротив каждой строчки укажите соответствующие габариты, по умолчанию рабочая область задана 205x205x200 мм

Настройка шагов перемещения по осям

Указание количества шагов шаговых двигателей - одна из главных настроек прошивки (строчка 490):

#define DEFAULT_AXIS_STEPS_PER_UNIT {78.7402,78.7402,200.0*8/3,760*1.1} // default steps per unit for Ultimaker

В скобках через запятую для каждой оси указывается количество шагов, который должен сделать шаговый двигатель, чтобы каретка проехала 1 мм. Откуда взять данные значения? Можно рассчитать или возьмите уже известные.

Расчет осей X и Y (ремни)

По всем осям стоят шаговые двигатели 200 шагов на оборот, 16 микро-шагов на шаг (это устанавливается перемычками на плате).

По осям X и Y стоит приводной ремень GT2 с шагом 2 мм и шкивы с 20 зубьями.

Получается:

(200*16)/(2.0*20)=80

Столько шагов должен сделать шаговый двигатель, чтобы ось X и Y проехала ровно 1 мм.

Если у вас зубчатый шкив Gt2 с шагом 2 мм и с количеством зубьев 20, то формула такая:

(200*16)/(2.0*16)=100

Расчет оси Z (ходовой винт)

По оси Z могут стоять:

  • Шпилька М8 с шагом резьбы 1,25 мм, тогда формула: 200*16/1.25=2560
  • Шпилька M5 с шагом резьбы 0.8 мм, тогда формула: 200*16/0.8=4000
  • Трапецеидальный винт диаметром 8 мм с шагом 1 мм и заходностью 1, тогда формула: 200*16/1=3200
  • Трапецеидальный винт диаметром 8 мм с шагом 2 мм и заходностью 1, тогда формула: 200*16/2=1600
  • Трапецеидальный винт диаметром 8 мм с шагом 2 мм и заходностью 4, тогда формула: 200*16/2*4=400

В Pruse i3 Steel используются шпильки М5 , тогда получается число 4000.

Расчет экструдера

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

Открутите сопло и уменьшите ограничение минимальной температуры сопла до 5 градусов:

#define EXTRUDE_MINTEMP 5

Теперь экструдер будет работать при холодном сопле. Не меняя настроек экструдера, нажмите прогнать пластик на 100 мм. Измерьте длину прутка прошедшего через экструдер линейкой или штангенциркулем.

Подбирая настройку экструдера добейтесь точной цифры на разумной длине прутка, например 200 мм. После настройки верните ограничения минимальной температуры:

#define EXTRUDE_MINTEMP 170

Ограничение максимальной скорости перемещения по осям

#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 25} // (mm/sec)

По умолчанию стоят скорости 500,500,5, 25 мм/c на оси X,Y,Z и экструдер соответственно. Рекомендуем понизить скорость с 500 до 200.

Настройка ускорения перемещений по осям

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

#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot. #define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves #define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for retracts

Для осей X и Y стоят ускорения 9000 мм/c^2 - это очень много.

Для первичной настройки установите не более 1000 и для DEFAULT_ACCELERATION поставьте 1500, вместо 3000.

Активация дисплея

Последние, что остается сделать - это активировать нужный вам дисплей. Один из самых популярных дисплеев, это . Найдите и раскомментируйте следующие строчки:

#define ULTRA_LCD #define SDSUPPORT #define ULTIPANEL #define REPRAP_DISCOUNT_SMART_CONTROLLER

Перед этими строчками, не должны стоять "//". Должно получиться следующее:


Заливка прошивки

После всех основных изменений прошивки, можно ее заливать. В программе Arduino IDE зайдите во вкладку "Инструменты" -> "Плата" и выберите "Arduino/Genuino Mega or Mega 2560"


И там же нужно выставить верный COM порт вашего 3D принтера. Для заливки прошивки нажимаем на круг со стрелкой.


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

Как известно для качественной печати на 3D принтере необходимо тщательно выровнять поверхность стола. К сожалению сделать это не всегда возможно. Довольно часто стол представляет собой криволинейную поверхность и даже использование стекла не позволяет полностью решить эту проблему. По счастью в последних прошивках Marlin всё больше и больше внимания уделется возможности калибровки поверхности стола. Полностью автоматическая калибровка требует применения дополнительных датчиков, что не всегда доступно, но кроме неё есть возможность калибровки стола в ручном режиме. Именно об этом я и хочу рассказать.

Добавляем поддержку автокалибровки в прошивку

Включаем поддержку ручной калибровки

Задаём опции сетки

Внимание! Не использовать больше 7 точек на ось. Это ограничение прошивки.

Добавляем пункты в меню принтера

Скрипт выполняемый после калибровки. Тут по умолчанию какие-то телодвижения экструдером, не факт что они нужны. Не уверен на этот счёт.

// #define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10"

После этого заливаем обновлённую прошивку.

Калибруем стол

Для ручной калибровки используется так называемый Mesh Bed Leveling (MBL). Т.е. способ калибровки по массиву точек. Соответственно поверхность стола разбивается на сетку и по узлам сетки производятся замеры Z координаты перемещением вручную оси Z. Собствено для измерения нужен только лист бумаги и прямые руки.

В каждой точке под сопло экструдера подкладываем лист бумаги и движением оси Z (либо посылая специальную G команду через ПО с компьютера, либо через меню принтера) добиваемся такого состояния когда лист под экструдером ещё можно свободно двигать, а уменьшение положения экструдера на один шаг уже мешает листу перемещаться. После этого текущая точка записывается и продолжаем со следующей и так до конца.

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

По умолчанию для калибровки используется сетка 3×3 т. е. 9 точек, но при желании можно задать в прошивке другое количество (не более 7 на ось, т. е. не более 49 всего).

Для дополнительного увеличения точности калибровки можно перед её выполнением разогреть стол и экструдер до рабочих температур. Это позволит учесть и скомпенсировать температурные расширения.

Через внешнюю программу

Для калибровки стола есть специальная команда G29

  1. G29 S0 читаем текущие значения точек в памяти принтера.
  2. G29 S1 перемещение принтера в первую точку для начала процесса настройки. Фактически принтер сначала паркуется в исходное положение, потом переходит к первой точке.
  3. G29 S2 записываем текущую точку и двигаемся к следующей
  4. Повторяем процесс для всех точек
  5. Используем команде M500 для записи измеренных величин в память принтера

Через меню принтера

Выбираем в меню Presets следующие пункты


После чего видим на экране следующую надпись и наблюдаем как принтер паркуется в домашнюю позицию


Затем принтер предлагает нам кликнуть по энкодеру.


После клика экструдер переходит к первой точке


И мы видим регулировку оси Z.



Кликом по энкодеру сохраняем значение и перемещаемся к следующей точке. Повторяем калибровку каждой точки (всего их 9 штук). После последней точки принтер выполнит парковку и покажет нам следующее:



Итого

В моём случае даже такая ручная калибровка позволила существенно улучшить качество печати. Причём заметно невооружённым взглядом. Дополнительным бонусом стало то, что перестал мазать стекло клеем для лучшего прилипания — в связи с тем, что после калибровки принтер учитывает неровности стола первый слой теперь укладывается абсолютно ровно и прилипает просто отлично. Опять же это сразу видно. Раньше из-за неровностей одна часть прилипала хуже и в результате без покрытия клея модель отваливалась.