Кремень КД Реклама
Кремень КМ Реклама

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

3dfirst
Идет загрузка
Загрузка
18.09.2019
9904
20
3D-печать

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

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

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

29

'Я — твой слуга, я — твой работник...' (Kraftwerk, 1978)

Минуло уже 3 года с момента сборки и запуска моего 3D принтера RPMachine. Первый год, в основном, подчищал некоторые косяки, допущенные при проектировании и устранял "детские" болезни (из самого существенного пришлось заменить дешевые китайские муфты на уже более-менее серьезные вот такие, добавить экран MKS TFT28 с модулем MKS DET power для нештатных ситуаций с отключением питания, заменить ШД 4401 на самые мощные в линейке Nema 17 - 17HS6401 c 0,73 Нм, перейти на черные ремни GT2 10-ки, а также перевести ШД на драйверы TMC2208, что очень благотворно сказалось на снижении шума - это был самый актуальный вопрос, на самом деле), зато последние 2 года принтер отработал на полную катушку, словом, настоящий помощник :)

Единственное, что постоянно меня "грызло" изнутри и не давало покоя, что полноценно печатать двумя соплами так и не получилось. Изначально за основу была взята система 2-х сопел как у Makerbot Replicator 2X, т.е. два статичных сопла, отстоящих др.от др. на 40 мм. Причина - банальна, так проще всего на тот момент было реализовать печать 2-мя материалами. Для принтеров с небольшой рабочей зоной, возможно, это не является проблематичным, но для моего принтера это оказалось достаточно критичным недостатком - как бы ни калибровал и не подгонял сопла по высоте, нет-нет а второе сопло цепляло/срывало/пачкало модель, результаты не удовлетворяли. В итоге, эксплуатация велась в режиме одного материала, просто поставил сопла разного диаметра (0,4 и 0,8 мм) на оба экструдера, чтобы не менять постоянно и печатать в двух, наиболее часто используемых режимах.

Безусловно, все эти годы я внимательно отслеживал информацию о том, кто и как внедряет и использует печать в режиме двух сопел. Для меня, как и для большинства, наиболее актуальной была возможность печати водорастворимой PVA поддержкой. Переключение сопел в виде "качелей" выглядело не столь убедительно в плане точности и надежности, вертикальное же переключение второго сопла с помощью сервопривода (как у профессиаональных FDM машин), требовало определенных знаний и серьезной компетенции и казалось мне сложным в реализации. Конечно же, почти сразу в поле зрения попал 3D принтер от испанской BCN3D c режимом печати двумя независимыми эксирудерами - IDEX. Такая схема переключения экструдеров показалась мне оригинальной и интересной, но в тоже время достаточно замороченной в плане ее применения на своем принтере, до поры...(как говорится, нужда заставила). Спустя некоторое время, обратил внимание на схему IDEX снова, т.к. ее не только активно внедрили и пропиарили BCN3D, но применили также и голландцы из Leapfrog на принтерах Bolt/Bolt Pro, некоторые китайские фирмы (FlashForge, Vivedino, XTLW), а также отечественные производители (Dragon3D).

В итоге, после анализа всех "за" и "против", схема IDEX была признана мной самой перпективной в целях будущей модернизации RPMachine (относительно простая и недорогая реализация при ожидаемо стабильной работе на крупноформатном принтере) и надлежащей к незамедлительному исполнению "в железе". 

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

1. В каждый момент времени формирования слоя (модель, поддержка) печатает только одно сопло, второго рядом нет, соответственно, ничего не цепляется и т.п. В случае проектирования осей IDEX "с нуля" достаточно легко реализовать различные варианты промежуточной очистки сопел (purge), установить пеналы для сброса пластика, чистящие щеточки и т.п. 

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

3. Высокая универсальность двухэкструдерной схемы IDEX. Т.к. несущие каретки независимы по X, можно комбинировать как сам тип экструдеров (боуден-боуден, директ-директ или боуден-директ), так и отдельно для каждого предусмотреть свои конструктивные особенности, режим работы и вариант охлаждения/обдува (обычный, высокотемпетатурный и т.п.). Плюс вес на каждую несущую каретку по X cнижен вдвое по сравнению со стандартным вариантом.

4. Высокая точность позиционирования сопел (каждое сопло позиционируется со стандартной для оси X точностью и повторяемостью).

5. Относительная простота калибровки сопел, оффсет второго экструдера можно потом вписать в подготовительный gcode, генерируемый слайсером ( M218 T1 X... Y...). Конечно, печать калибровочных шаблонов тоже понадобится, после каждой смены сопел, но без этого в двухэкструдерных схемах пока никуда. Зато по Z настраивать зазор достаточно у одного сопла, а второй можно просто выставить, подогнав платформу встык к уже откалиброванному (в моем случае я просто винтом ослабляю второй хотенд, который упирается в стекло платформы вровень с первым соплом). Т.к. принтер предназначен для габаритных деталей, то при слоях 0,3-0,4 мм это работает нормально.  

6. Возможны специальные режимы работы (одновременное дублирование, зеркальная печать), позволяющие значительно повысить общую производительность печати.  

В общем, очевидные плюсы явно были, чтобы попробовать все это в работе. 

Ниже попытаюсь описать свой опыт переделки принтера под режим IDEX.

В принципе, всего 2 основных этапа - установка дополнительной оси X и корректировка прошивки для дальнейшего управления процессом печати.

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

Этап 1. Создание дополнительной оси X для перемещения второго экструдера.

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

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

Ну, и немного тюнинга 

Общий вид двух независимых осей X

Этап 2. Настройка прошивки (актуально для версии Marlin 1.1.9) под печать в режиме IDEX. 

Исходные положения концевых оптических датчиков (когда ось X была одинарной) следующие:

по оси X - Xmax (Xmin - программный), по Y - Ymax (Ymin - программный), по Z - Zmin (Zmax - программный)

Cоответственно, после появления дополнительной оси по X у нас получаются следующие крайние положения оптических датчиков: 

Ось X1 (экструдер 1, левый) - Xmin, крайнее левое положение (X1max - программный).

Ось X2 (экструдер 2, правый) - Xmax, крайнее правое положение (X2min - программный)

Ymax и Zmin - без изменений

во вкладке configuration.h: 

// The following define selects which electronics board you have. 

// Please choose the name from boards.h that matches your setup

#ifndef MOTHERBOARD

  #define MOTHERBOARD BOARD_RAMPS_14_EEB

#endif

Указывается тип управляющей платы (у меня прижилась BIGTREETECH KFB 2,0, с учетом, что печать в основном соплами 0,5 и 0,8 мм и толстыми слоями на данный момент мне достаточно). 

--

// This defines the number of extruders

// :[1, 2, 3, 4, 5]

#define EXTRUDERS 2

--

// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).

// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).

// For the other hotends it is their distance from the extruder 0 hotend.

//#define HOTEND_OFFSET_X {0.0, 0.00} // (in mm) for each extruder, offset of the hotend on the X axis

//#define HOTEND_OFFSET_Y {0.0, 0.00} // (in mm) for each extruder, offset of the hotend on the Y axis

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

--

// @section homing

// Specify here all the endstop connectors that are connected to any endstop or probe. 

// Almost all printers will be using one per axis. Probes will use one or more of the

// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.

#define USE_XMIN_PLUG

//#define USE_YMIN_PLUG

#define USE_ZMIN_PLUG

#define USE_XMAX_PLUG

#define USE_YMAX_PLUG

//#define USE_ZMAX_PLUG

--

// Enable pullup for all endstops to prevent a floating state

#define ENDSTOPPULLUPS

#if DISABLED(ENDSTOPPULLUPS)

  // Disable ENDSTOPPULLUPS to set pullups individually

  #define ENDSTOPPULLUP_XMAX

  #define ENDSTOPPULLUP_YMAX

  //#define ENDSTOPPULLUP_ZMAX

  #define ENDSTOPPULLUP_XMIN

  //#define ENDSTOPPULLUP_YMIN

  #define ENDSTOPPULLUP_ZMIN

  //#define ENDSTOPPULLUP_ZMIN_PROBE

#endif

--

// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).

#define X_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.

#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.

#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.

#define X_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.

#define Y_MAX_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.

#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.

#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe.

--

// Direction of endstops when homing; 1=MAX, -1=MIN

// :[-1,1]

#define X_HOME_DIR -1

#define Y_HOME_DIR 1

#define Z_HOME_DIR -1

--

// Travel limits after homing (units are in mm)

// The size of the print bed 

#define X_BED_SIZE 425 // рабочий ход блока экструдера 1 до безопасного сближения с блоком экструдера 2

#define Y_BED_SIZE 405

--

// Travel limits (mm) after homing, corresponding to endstop positions.

#define X_MIN_POS 0

#define Y_MIN_POS 0

#define Z_MIN_POS 0

#define X_MAX_POS X_BED_SIZE

#define Y_MAX_POS Y_BED_SIZE

#define Z_MAX_POS 505

--

во вкладке configuration_adv.h: 

#define DUAL_X_CARRIAGE 

#if ENABLED(DUAL_X_CARRIAGE)

  #define X1_MIN_POS X_MIN_POS // крайнее левое (нулевое) положение сопла экструдера 1 - к датчику Xmin

  #define X1_MAX_POS X_BED_SIZE // максимальное положение сопла экструдера 1 до безопасного сближения с экструдером 2

  #define X2_MIN_POS 90 // нулевое положение сопла экструдера 2 до безопасного сближения с экструдером 1   #define X2_MAX_POS 505 // расстояние между соплами, когда экструдеры 1 и 2 разведены по своим крайним положениям 

  #define X2_HOME_DIR 1 // указание крайнего положения сопла экструдера 2 - к датчику Xmax

  #define X2_HOME_POS X2_MAX_POS // крайнее правое (максимальное) положение сопла экструдера 2

      // However: In this mode the HOTEND_OFFSET_X value for the second extruder provides a software

      // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops

      // without modifying the firmware (through the "M218 T1 X???" command).

      // Remember: you should set the second extruder x-offset to 0 in your slicer.

  // There are a few selectable movement modes for dual x-carriages using M605 S

  // Mode 0 (DXC_FULL_CONTROL_MODE): Full control. The slicer has full control over both x-carriages and can achieve optimal travel results

  // as long as it supports dual x-carriages. (M605 S0)

  // Mode 1 (DXC_AUTO_PARK_MODE) : Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so

  // that additional slicer support is not required. (M605 S1)

  // Mode 2 (DXC_DUPLICATION_MODE) : Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all

  // actions of the first x-carriage. This allows the printer to print 2 arbitrary items at

  // once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])

  // This is the default power-up mode which can be later using M605.

  #define DEFAULT_DUAL_X_CARRIAGE_MODE DXC_FULL_CONTROL_MODE

(Выбираем полный контроль слайсера за перемещением экструдеров. В слайсере оффсет второго сопла будет задаваться через M218 T1 X... Y...) 

// Default settings in "Auto-park Mode" 

  #define TOOLCHANGE_PARK_ZLIFT 0.2 // the distance to raise Z axis when parking an extruder

  #define TOOLCHANGE_UNPARK_ZLIFT 1 // the distance to raise Z axis when unparking an extruder

  // Default x offset in duplication mode (typically set to half print bed width) 

  #define DEFAULT_DUPLICATION_X_OFFSET 100

#endif // DUAL_X_CARRIAGE 

--

во вкладке PINS.h :

// The X2 axis, if any, should be the next open extruder port 

#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(X_DUAL_STEPPER_DRIVERS)

  #ifndef X2_STEP_PIN

    #define X2_STEP_PIN D42_EPIN(X2_E_INDEX, STEP)

    #define X2_DIR_PIN D40_EPIN(X2_E_INDEX, DIR)

    #define X2_ENABLE_PIN D44_EPIN(X2_E_INDEX, ENABLE)

(указать, на какие свободные пины будет перенаправляться управление шаговым двигателем второй оси X, я использовал свободные D40, D42 и D44) 

--

во вкладке pins_RAMPS.h :

// Steppers 

//

#define X_STEP_PIN 54

#define X_DIR_PIN 55

#define X_ENABLE_PIN 38

#ifndef X_CS_PIN

  #define X_CS_PIN -1

#endif

#define X2_STEP_PIN 42

#define X2_DIR_PIN 40

#define X2_ENABLE_PIN 44

#ifndef X2_CS_PIN

  #define X2_CS_PIN -1

#endif

(прописываем пины D40, D42, D44 управления ШД дополнительной (новой) оси X) 

С прошивкой все. Далее строим калибровочные шаблоны, калибруем и печатаем. 

Для примера привожу коды для управления работой экструдеров во вкладке Scripts Simplify3D (режим Both Extruders): 

пример Starting Script 

G21 ; set units to millimetres

G90 ; set to absolute positioning

M107 ; start with the fan off

G28 X0 Y0 ; move to the X/Y origin (home)

G28 Z0 ; move to the Z origin (home)

G1 Z15.0 F600 ; move Z to safety position 15.0 mm

M218 T1 X506.55 Y-1.05 ; X2 offset - прописывается итоговое расстояние между двумя соплами, измерянное после построения серии калибровочных шаблонов

пример Tool Change Script 

{IF NEWTOOL=0}G1 X505 F4800; travel X2 to home X2max - сопло 1 рабочее, сопло 2 уезжает на парковку вправо

{IF NEWTOOL=0}G1 Y2 F4800; travel Y to Y=2 - общее перемещение по Y для механической чистки сопел

{IF NEWTOOL=0}G1 Y[[current_position_y]] F4800; travel Y to previous - возврат сопла 1 в прежнюю координату по Y

{IF NEWTOOL=1}G1 X0 F4800; travel X1 to home Xmin - cопло 2 рабочее, сопло 1 уезжает на парковку влево

{IF NEWTOOL=1}G1 Y2 F4800; travel Y to home Y=2 - общее перемещение по Y для механической чистки сопел

{IF NEWTOOL=1}G1 Y[current_position_y] F4800; travel Y to previous - возврат сопла 2 в прежнюю координату по Y

(Из-за того, что платформа в данной версии принтера занимает почти все пространство по XY, уже нет возможности устанавливать пеналы для сплевывания пластика и чистящие щеточки. Поэтому на уровне Y2 у меня просто стоят тонкие пластины/лезвия, через которые сопла проезжают и чиркают, это позволяет сбросить часть подтекающего пластика у неактивного сопла). 

Также можно настроить температурный режим работы сопел до и после переключения, например: 

{IF NEWTOOL=0}M104 S170 T1;

{IF NEWTOOL=0}M109 S[extruder0_temperature] T0;

{IF NEWTOOL=1}M104 S170 T0;

{IF NEWTOOL=1}M109 S[extruder1_temperature] T1;

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

пример Ending Script 

M104 S0 T0 ; left extruder off

M104 S0 T1 ; right extruder off

M140 S0 ; heated bed off

G28 X0 Y0 ; move XY to min endstops

M84 ; steppers off

Собственно, сам момент переключения экструдера 1

Переключение экструдера 2

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

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

Красный PLA - основной (сопло 0,8 мм), серый PLA - имитирует PVA поддержку (сопло 0,5 мм).

Синий PLA - основной (сопло 0,5 мм), оранжевый PLA - имитирует PVA поддержку (сопло 0,8 мм).

Контрольная деталь:

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

На работе был небольшой остаток пластика Stratasys SR35, это специализированный, растворимый в щелочном растворе материал поддержки для группы пластиков ABS/ASA Stratasys. Конечно, он не разрабатывался для использования c PLA пластиком, но в отстутствие PVA руки чесались попробовать что-то растворимое :)

Могу сказать, что PLA пластик оказался стоек к едкому натру. Результат ниже, после выдержки в ванне с NaOH и растворения SR35 (единственное, что после переключения ванны с 60 С на 70С деталь из PLA повело в нижней части).  

Деталь с растворимой поддержкой:

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

После удаления растворимой поддержки:

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

Считаю поставленную задачу в первом приближении решенной :) И, конечно, по-прежнему удобно принтер использовать и при печати одним соплом, благо, теперь нагрузка на несущую каретку по X снизилась вдвое.

RPMachine: Большой помощник малого офиса, часть 2. A maximis ad minima. Модернизация принтера для печати в режиме 2х независимых экструдеров

В общем, вот такая вот история. Как только разживусь PVA пластиком (может, кто-нибудь подскажет, какой наиболее качественный и стабильный сейчас), обязательно сделаю тестовую печать и выложу результат.

P.S.: В заключение, хочу поблагодарить Анатолия Рыжика (StrannikZet) за ценные советы при модификации прошивки Marlin и настройке режима переключения экструдеров в Simplify3D.

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

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

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

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