19 октября 2013 г.

3D принтер RepRap. Часть 5 - прошивка, калибровка, печать




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


Прежде всего следует взглянуть на процес 3D печати "свысока". Он состоит из нескольких этапов и на каждом этапе используются свои инструменты.

Процесс создания модели

Создание и подготовка модели

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

С созданием модели все понятно - оно представляет из себя просто процесс конструирования 3D модели объекта в каком-то из 3D редакторов или CAD-систем.

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

Второй этап, это экспорт модели в формат пригодный для дальнейшей обработки. Исторически так сложилось, что для 3D принтеров таким форматом является STL.

Слайсинг

С технической точки зрения это, наверное, самая сложная часть всего процесса 3D печати на FDM принтерах. Суть её в следующем: сначала модель объекта нарезается на тонкие слои (отсюда и название - slicing). Высота слоя, как и огромное количество других параметров, указывается в настройках программы выполняющей слайсинг (слайсера). Затем каждый слой анализируется, и для него генерируется маршрут по которому будет перемещаться сопло экструдера выдавливая пластик. И наконец, на основе информации обо всех маршрутах генерируется код программы на специальном языке - G-code, который, собственно, и описывает необходимые перемещения каретки, экструдера, температуры стола и экструдера и т.п. То есть на вход программе-слайсеру подается модель объекта в формате STL, а на выходе мы получаем программу на языке G-code, выполнив которую принтер должен напечатать этот самый объект.

Например, вот как выглядит STL модель куба-компаньона из игры Portal:
Куб-компаньон, модель в формате STL
Если пропустить её через слайсер, и попробовать визуализировать сгенерированный G-code (я для этих целей воспользовался программой Repetier), то получится что-то типа такого:
Визуализация G-code
Хорошо видны отдельные слои, и окантовка вокруг объекта, служащая для очистки сопла перед печатью. Можно визуализировать не все слои, а только часть:
Частичная визуализация G-code
Здесь видны внутренности слоя - сплошной периметр, и полое заполнение в форме сот.

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

Печать

Последний этап, собственно печать, состоит в загрузке G-code в принтер, и его интерпретации прошивкой принтера.

Загрузка G-code в принтер может быть осуществлена двумя способами. Первый способ состоит в подключении принтера к компьютеру, и использовании специальной программы (host software) для работы с принтером и загрузке G-code. Второй способ состоит в загрузке G-code на карту памяти, с которой его будет читать принтер. Т.к. я использую первый способ, то далее речь пойдет только о нем.

Интерпретация и выполнение G-code выполняется прошивкой (firmware) принтера, которая загружена в память микроконтроллера (во флеш AVR, в случае RAMPS).

Теперь, приступим к детальному рассмотрению всех этапов, по принципу "снизу-вверх" и начнем с последнего, прошивки.

Прошивка

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

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

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

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

Сначала займемся файлом Configuration.h. Первый параметр заслуживающий внимания:
#define BAUDRATE 250000
Это скорость COM-порта. Обратите внимание, что значение по умолчанию в 250000 бод является нестандартным, и при использовании Linux с ним возникнут проблемы. Т.к. в качестве OS у меня установлен Arch Linux, то пришлось понизить скорость COM порта до стандартных - 115200 бод.

Далее необходимо выбрать тип платы, на которой будет запущен Marlin, с помощью задания соответствующего значения константе MOTHERBOARD. Список допустимых значений указан там же, в комментариях (для RAMPS v1.4 это 34).
#ifndef MOTHERBOARD
#define MOTHERBOARD 34
#endif
Тип платы определяет какие пины микроконтроллера подключены к каким устройствам (шаговым двигателям, термисторам, нагревателям и т.д.).

Следующая важная группа констант относится к выбору типа температурного сенсора (в моем случае это 100k thermistor для термисторов хотэнда и стола):
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 1

Следующая интересная константа:
#define PREVENT_DANGEROUS_EXTRUDE
Суть её в следующем - если она определена, то принтер будет игнорировать команды на подачу прутка, если температура экструдера ниже той, что определена константой EXTRUDE_MINTEMP. Возможность это, конечно, полезная, т.к. случайная подача прутка в холодный хотэнд ни к чему хорошему не приведет. Но для первоначальной калибровки экструдера нам будет необходимо подавать пруток без предварительного нагревания хотэнда, поэтому эту константу нужно закомментировать (и не забыть убрать комментарий, когда калибровка будет выполнена).

Если вы используете такие же концевики как и я, то включенное по умолчанию инвертирование концевиков нужно отключить:
const bool X_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
const bool Y_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
const bool Z_ENDSTOPS_INVERTING = false; // set to true to invert the logic of the endstops.
Также, если используется только три минимальных концевика, то стоит включить
#define DISABLE_MAX_ENDSTOPS

Поскольку для оси Z используется червячная передача, для сохранения положения по оси Z не требуется удержания роторов шаговых двигателей, и при простое их можно отключать, что бы зря не греть ни драйвер ни сами двигатели. Для этого нужно включить:
#define DISABLE_Z true

Размеры рабочей области, в миллиметрах:
#define X_MAX_POS 200
#define X_MIN_POS 0
#define Y_MAX_POS 200
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0

Последнее, на что нужно обратить внимание в этом файле, это константа, задающая количество шагов (на самом деле - микро-шагов) которое нужно совершить шаговому двигателю, для перемещения по оси на 1 мм. Это массив с четырьмя элементами, которые задают количество шагов на миллиметр по осям X, Y, Z и E (экструдер) соответственно. У меня он выглядит так:
#define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402, 78.7402, 200*16/1.25, 638.23}
Значения для осей X и Y обычно стандартные, и не нуждаются в изменении (формулы для расчета этих значений можно найти здесь). Значение для оси Z зависит от резьбы на червяках для оси Z, и может нуждаться в корректировке. Значение для экструдера, помимо всего остального, также зависит от диаметра зубчатой части болта, поэтому его придется корректировать экспериментально (об этом позже).

На этом с файлом Configuration.h пока все, перейдем к файлу pins.h. Этот файл отвечает за назначение пинов микроконтроллера конкретным устройствам принтера. Нас интересует часть относящаяся к RAMPS v1.4, а начинается она вот с такого участка:
#if MOTHERBOARD == 33 || MOTHERBOARD == 34
Если вы используете схему подключения, описанную в предыдущей статье, то нужно внести пару изменений - отключить неиспользуемые нагреватели и датчики (это больше косметическое изменение), и поменять номер пина температурного датчика для стола. Вот как у меня выглядит этот участок со внесенными изменениями:
#define HEATER_0_PIN       10   // EXTRUDER 1
#if MOTHERBOARD == 33
#define HEATER_1_PIN       -1
#else

#define HEATER_1_PIN       -1    // EXTRUDER 2 (FAN On Sprinter)
#endif
#define HEATER_2_PIN       -1  
#define TEMP_0_PIN         13   // ANALOG NUMBERING
#define TEMP_1_PIN         -1   // ANALOG NUMBERING
#define TEMP_2_PIN         -1   // ANALOG NUMBERING
#define HEATER_BED_PIN     8    // BED
#define TEMP_BED_PIN       15   // ANALOG NUMBERING

На этом пока все, можно компилировать Marlin и загружать его в контроллер.

Начальная калибровка

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

Для выполнения калибровки нам придется "общаться" с принтером, посылая ему на выполнение команды G-code, и читая его ответы на них. Для этих целей удобно воспользоваться специализированным ПО (host software). Здесь мой выбор пал на Printrun - набор утилит, из которых я пользуюсь только Pronterface - собственно программой для общения с принтером. Основными критериями для выбора послужили функциональность, бесплатность и кроссплатформенность (как минимум - работа в Linux).

Pronterface

Рассмотрим вкратце основные возможности Pronterface.
Интерфейс Pronterface
Его интерфейс разбит на несколько групп (на рисунке они пронумерованы цифрами). Элементы первой группы отвечают за подключение к принтеру и управление процессом печати (а также загрузку файлов для печати). Элементы второй и третей групп позволяют в ручном режиме управлять положением каретки, устанавливать нежную температуру экструдера и стола для печати, подавать пруток в экструдер, а также отключить моторы (не дожидаясь пока они отключатся автоматически, спустя какое-то время бездействия). Под номером четыре находится окно терминала, в который выводится все что нам сообщает принтер (а иногда и сам Printrun). Именно сюда будут выводиться ответы принтера на посылаемые ему команды. Ну а поле для ввода и кнопка Send обозначенные номером пять, собственно, и позволяют посылать принтеру любые команды на выполнение.
Клетчатое поле по центру представляет собой модель области для печати. Здесь будет схематически визуализироваться процесс печати объекта.

В целом интерфейс простой и интуитивно понятный (при этом может быть расширен с помощью макросов и добавления собственных кнопок). Для печати файла достаточно загрузить G-code файл (с помощью кнопки Load file) и нажать Print.

Также Pronterface имеет возможность самостоятельно вызывать слайсер для генерации G-code из STL модели, но я предпочитаю не пользоваться этой возможность, а генерировать G-code самостоятельно.

Калибровка срабатывания концевиков

Калибровку начнем с концевиков, так как. в случае их неправильной работы команды на перемещение каретки могут выполняться некорректно (или игнорироваться).

Итак, прежде всего подключимся к принтеру с помощью Pronterface. Для этого достаточно указать верные номер COM-порта, его скорость (baud rate) и нажать кнопку Connect. Если все сделано верно, принтер ответит чем-то похожим на это:

echo: External Reset
Marlin 1.0.0
echo: Last Updated: 2012-11-09 | Author: alik
echo: Free Memory: 5528  PlannerBufferBytes: 1232

Теперь нужно руками передвинуть каретку принтера в такое положение, что бы ни один из концевиков не был активирован. После этого отправим принтеру команду M119, в ответ на которую он должен сообщить нам состояние концевиков (помните, что вывод может немного отличаться в зависимости от версии Marlin, но суть от этого не меняется):

SENDING:M119
Reporting endstop status
x_min: open
y_min: open
z_min: open

Итак, принтер нам сообщает что все три концевика "открыты", то есть не активированы. Если же вместо этого принтер ответил что состояние всех коцевиков - TRIGGERED, то есть "активированы" - значит в файле Configuration.h нужно поменять значения констант X_ENDSTOPS_INVERTING, Y_ENDSTOPS_INVERTING, Z_ENDSTOPS_INVERTING на противоположное, и повторить эксперимент.

В случае если для части концевиков считанное состояние оказалось open, а для остальных - TRIGGERED - скорее всего проблема в самих концевиках или неправильном подключении (конечно при условии что используются одинаковые концевики, в противном случае нужно будет корректировать значения вышеупомянутых констант по отдельности).

Теперь нужно проверить срабатывание каждого концевика. Переместите каретку руками по одной из осей (например X) до срабатывания концевика, и снова отправьте принтеру команду M119. На этот раз ответ должен быть таким:

SENDING:M119
Reporting endstop status
x_min: TRIGGERED
y_min: open
z_min: open

Если концевик остался в состоянии open - скорее всего он неисправен, или неправильно подключен. Эту процедуру нужно повторить по очереди для каждого из концевиков.

Регулировка тока шаговых двигателей

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

Ток настраивается с помощью маленького подстроечного резистора на самом драйвере. О процедуре настройки можно прочитать здесь или здесь. В целом она достаточно проста: что бы рассчитать насколько нужно повернуть подстроечный резистор для Pololu A4988 сначала рассчитаем значение Vref воспользовавшись следующей формулой: Vref = Ток * 0,4, где Ток - значение тока указанное в даташите к двигателю. Теперь поворачивая резистор нужно добиться того, что бы напряжение между пинами GND и REF драйвера соответствовало рассчитанному значению Vref. Что бы добраться до пина REF щупом мультиметра, на плате Pololu предусмотрен специальный пятачок с отверстием, который обведен на обратной стороне драйвера: 
Доступ к пину REF
Ну а сверху он находится вот здесь:
Доступ к пину REF

Калибровка перемещения каретки

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

Начнем с оси X (для остальных осей процедура аналогична). Прежде всего нужно убедиться что мотор вращается, и вращается в нужном направлении. Для этого руками переместим каретку на примерно середину оси X, установим режим относительного позиционирования отправив принтеру команду G91, и отправим команду на перемещение каретки по оси X в сторону увеличения координат (то есть в сторону от концевика) на 2 сантиметра: G1 X20. Результаты могут быть разные:
  • Каретка переместилась в нужном направлении. 
  • Каретка переместилась в противоположном направлении. Эту проблему проще всего решить изменив значение константы INVERT_X_DIR на противоположное.
  • Ничего не произошло или мотор начал вибрировать. Скорее всего мотор подключен неправильно, можно попробовать поменять местами два любых его провода и попробовать снова. Если перепробовали все комбинации но мотор так и не начал вращаться - возможно ему не хватает тока, в этом случае можно попробовать заново отрегулировать ток с помощью подстроечного резистора на драйвере шагового двигателя. Если и это не помогло, можно попробовать подключить другой двигатель (в случае если текущий неисправен). Если другой двигатель также вибрирует - скорее всего проблема в драйвере, можно попробовать использовать другой (кстати не такая большая редкость - один из пяти моих драйверов оказался неисправен, и как раз приводил к вибрации мотора).
Теперь, когда мотор вращается в нужном направлении, нужно откалибровать точность его перемещения. Для этого сначала вернем каретку в её начальное положение с помощью команды G28 X, включим абсолютное позиционирование - G90, и переместим каретку на 10см - G1 X100. Осталось измерить насколько реально переместилась каретка (я это делал с помощью штангенциркуля), и если оно отлично от 10см - скорректировать первый элемент массива DEFAULT_AXIS_STEPS_PER_UNIT в противоположную сторону (т.е. если получилось больше 10см - уменьшить, если меньше - увеличить). Обычно значения по умолчанию дают точное позиционирование для осей X и Y, а вот с осью Z возможно придется немного повозиться, т.к. значение зависит от резьбы на червяках оси Z.

Калибровка подачи прутка

На этом этапе нужно добиться точной подачи пластикового прутка, то есть что бы при выполнении команды "подать Nмм прутка" экструдер подавал ровно Nмм. Для выполнения этой операции хотэнд не должен быть установлен - пруток должен свободно выходить с нижней стороны экструдера. Напомню, что для выполнения этого этапа калибровки нужно закомментировать строку #define PREVENT_DANGEROUS_EXTRUDE, в противном случае команды на подачу прутка при холодном хотэнде будут игнорироваться.

В целом процедура аналогична калибровке позиционирования каретки. Сперва нужно выяснить вращается ли мотор в нужном направлении. Для этого нужно запустить подачу прутка нажатием кнопки Extrude в Pronterface (в поле рядом с ней указывается сколько миллиметров прутка нужно подать). Вращается ли мотор в правильном направлении или нет можно легко понять по направлению вращения болта с засечками. Ну и если направление неправильное - достаточно поменять значение константы INVERT_E0_DIR, которая определена в файле Configuration.h, на противоположное.

Точность подачи прутка я проверял следующим образом: "зарядил" в экструдер кусок прутка длиной около 20см. Нанес отметку на пруток, которая будет служить точкой отсчета:
Нанесение отметки на пруток при калибровке экструдера
Затем отправил принтеру команду на подачу 10см прутка, и снова нанес отметку на пруток. Теперь что бы узнать сколько миллиметров прутка реально подал экструдер нужно извлечь этот кусок прутка и измерить расстояние между двумя отметками. Если оно получилось больше 10см, значит нужно немного уменьшить последний элемент массива DEFAULT_AXIS_STEPS_PER_UNIT, если меньше - увеличить.

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

Калибровка температуры

Следующий важный этап это калибровка установки и удержания целевой температуры хотэндом и столом с подогревом.

Вначале немного о том как происходит установка температуры в Marlin. Когда принтер получает команду на установку заданной температуры хотэнда (например команду M109) он блокирует выполнение остальной части G-code пока хотэнд не достигнут целевой температуры. Как определить что температура достигнута? Самый простой способ - просто дождаться когда температура, которую сообщает термистор, будет равна целевой. Но у такого способа есть большой недостаток, а именно - возможность войти в бесконечные автоколебания, вызванная тем что замеры температуры производятся не непрерывно, а через некоторые промежутки времени. Например, при целевой температуре в 180С, реальные замеры могут бесконечно колебаться в виде последовательности: 179С, 182С, 178С, 181С, 179С и т.д., так и не попав в желаемые 180С. Для противодействия этому в Marlin предусмотрен простой механизм, который работает следующим образом. Как только при очередном замере температура оказалась в пределах TEMP_WINDOW градусов от целевой, запускается таймер на TEMP_RESIDENCY_TIME секунд. Если в течении этого времени отклонения от целевой температуры не выходили за пределы TEMP_HYSTERESIS, то целевая температура считается достигнутой. Константы TEMP_WINDOW, TEMP_RESIDENCY_TIME и TEMP_HYSTERESIS находятся в файле Configuration.h. Эти параметры подбираются исходя из соображений чем меньше разброс - тем лучше, но что бы при этом "устаканивание" колебаний температуры не занимало слишком много времени (у меня они следующие: TEMP_RESIDENCY_TIME = 10, TEMP_HYSTERESIS = 3, TEMP_WINDOW = 1).

Теперь о том как происходит управление температурой хотэнда в Marlin. Основная задача состоит в том что бы подобрать такой ток через нагревательный элемент, что бы температура достигла заданной, а затем удерживать её максимально близко к заданной температуре. Для этих целей используется ПИД-регулятор (пропорционально-интегрально-дифференциальный регулятор). ПИД-регулятор, по сути, это просто способ расчета управляющего воздействия (в нашем случае - тока через резистор) на основе обратной связи (данные с термистора). Называется он так потому что управляющее воздействие формируется исходя из трех составляющих:

  • Пропорциональной. Эта составляющая пропорциональна ошибке (отклонению от целевой температуры), то есть чем больше ошибка - тем сильнее нужно греть (в случае если целевая температура выше текущей) нагревательный элемент.
  • Интегральной. В нашем случае она пропорциональна сумме ошибок, рассчитанных при каждом замере температуры. Эта составляющая позволяет подобрать оптимальное управляющее воздействие, когда вклады других составляющих несущественны. Например в случае когда текущая температура равна целевой, пропорциональная и дифференциальные составляющие будут равны нулю, а это привело бы к отключению нагревательного элемента и падению температуры, затем снова к его включению, опять отключению и т.д., то есть к автоколебаниям. Проблема в том, что даже когда хотенд нагрелся до целевой температуры, через нагревательный элемент всё равно должен течь небольшой ток, для поддержания его температуры. Именно в этом и заключается суть интегральной составляющей - накапливая ошибку, со временем она приобретает значение которое позволяет температуре стабилизироваться.
  • Дифференциальной. Эта часть пропорциональна скорости изменения ошибки. Она помогает не проскочить целевую температуру, уменьшая ток через нагревательный элемент если температура растет слишком быстро. Также она помогает компенсировать возмущения вблизи целевой температуры, когда вклад пропорциональной составляющей уже очень мал.
Управляющее воздействие рассчитывается как сумма всех трех составляющих, где каждая составляющая умножена на свой коэффициент: DEFAULT_Kp для пропорциональной, DEFAULT_Ki для интегральной и DEFAULT_Kd для дифференциальной (определения этих констант находятся все в том же файле Configuration.h). Собственно главная проблема заключается в подборе оптимальных значений этих констант. Делается это экспериментальным путем - из Pronterface устанавливаем желаемую температуру хотенда, скажем, в 180C, и следим за графиком изменения температуры (не забудьте включить флажок Watch). Если возникают какие-то проблемы, то в зависимости от их характера меняем соответствующие коэффициенты ПИД-регулатора (например если наблюдается сильное колебание температуры вблизи целевой - можно попробовать увеличть интегральную составляющую, и немного уменьшить пропорциональную и дифференциальную). 

Marlin умеет выполнять автоматический подбор коэффициентов ПИД-регулятора, для его запуска нужно отправить принтеру команду M303(по умолчанию автоподбор происходит при температуре хотенда в 150C). Через какое-то время подбор завершится, и в конце ответа от принтера будет что-то на подобие:
Clasic PID
Kp: 45.48
Ki: 5.83
Kd: 88.67
PID Autotune finished ! Place the Kp, Ki and Kd constants in the configuration.h

Полученные значения можно прописать в файл Configuration.h и использовать их в качестве "базы" для дальнейшей калибровки.

Со столом все проще (сказывается его большая инертность, а также то что отклонения от целевой температуры для стола не критичны) - там нет никакого ПИД-регулятора, вся регулировка происходит включением нагревательного элемента, если температура ниже целевой, и отключением если выше. Для настройки доступны только две константы, смысл которых, думаю, понятен из названия: BED_MINTEMP и BED_MAXTEMP.

Покрытие для стола

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

Для печати PLA в качестве покрытия лучше всего подходит синий малярный скотч (его можно найти в строительных супермаркетах):
Синий малярный скотч
Клеится очень легко, без пузырей (клеить нужно встык), и так же легко снимается. Такого покрытия обычно хватает на две-три печати, после чего его нужно обновить.

Для ABS обычно используют полиимидную ленту, больше известную под названием Kapton tape:
Полиимидная лента
Купить можно в интернет магазинах (список некоторых из них есть здесь), я покупал на DealExtreme. Стоит существенно дороже малярного скотча, но и хватает её на дольше.

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

Регулировка зазора по оси Z

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

Вся регулировка производится при рабочей температуре хотэнда и стола (обычно это где-то 180-200C для хотэнда и 60-80С для стола). Это связано с тем что при нагревании зазор уменьшается, из-за расширения материалов стола и хотэнда.

Первое что нужно сделать это отрегулировать положение концевика оси Z так, что бы в "домашнем" положении по оси Z (Z координата равна нулю) зазор между соплом и столом составлял где-то 0,5-1мм.

Дальнейшая регулировка осуществляется с помощью четырех болтов, удерживающих стол на пружинах. Сначала стол и каретка перемещаются так, что бы сопло было в одном из углов стола. Затем, вращением болтов нужно добиться того, что бы в щель между соплом и столом проходил лист бумаги. При этом лист должен ходить не свободно, а с небольшим усилием. Эту процедуру нужно повторять для каждого из углов до тех пор, пока зазоры везде не станут одинаковыми (т.е. лист бумаги будет проходить примерно с одинаковым усилием). Использование листа бумаги помогает выставить везде одинаковый маленький зазор примерно в толщину листа (около 0,1мм).

Параметры слайсера

Что бы напечатать первый объект нам нужен G-code для этого объекта. Проблема в том, что G-code содержит слишком много параметров специфичных как для принтера, так и для материала которым он будет печататься. Поэтому обычно модели распространяются в виде *.STL файлов, а G-code из них генерируется непосредственно перед печатью. Так что перед тем как напечатать первый объект - рассмотрим основные настройки слайсера, и процедуру генерации G-code.

Выбор программ-слайсеров достаточно богат, из наиболее популярных: Slic3r, Skeinforge, RepSnapper, KISSlicer. Я пользуюсь программой Slic3r, поэтому оставшаяся часть этого раздела будет в основном посвящена ей (хотя большинство описываемых здесь параметров есть во всех слайсерах). Среди преимуществ Slic3r: простота и аккуратность интерфейса, высокая скорость слайсинга, хорошее качество генерируемого G-code, ну и проект этот достаточно быстро развивается. Есть конечно и недостатки, например сборка и работа со Slic3r под Linux это сущий ад, но они не столь существенны

В главном окне Slic3r можно добавить модели объектов которые вы хотите напечатать, разместить их на виртуальном столе для печати, и сгенерировать G-code нажатием кнопки Export G-code.
Slic3r
Теперь перейдем к рассмотрению настроек слайсинга. Я не буду описывать все параметры (благо для этого у Slic3r есть замечательные описания каждого параметра во всплывающих подсказках, которые появляются при наведении на значение параметра), а лишь опишу наиболее, на мой взгляд, важные из них - оказывающие существенное влияние на качество печати, или те что обязательно нужно установить в корректные значения перед началом печати.

Начнем с вкладки Print settings. Первая категория - Layers and Perimeters:
Layers and Perimeters
Здесь нас больше всего интересует первый параметр - высота слоя (Layer height).
Большая высота слоя - слева, меньшая - справа
Интуитивно кажется что чем меньше высота слоя - тем лучше, но в реальности не все так однозначно. Рассмотрим основные плюсы и минусы меньшей высоты слоя.
Плюсы:

  • Большее разрешение по оси Z (можно передать больше деталей)
  • Более гладкая вертикальная поверхность (на вид и на ощупь)
  • Лучшее сцепление между слоями
Минусы:
  • Увеличивается время печати
  • Из-за большей степени "расплющивания" пластика модель становится более подвержена заворачивающимся углам (подробнее об этом ниже)
Вот как разная высота слоя влияет на внешний вид модели (нижняя модель напечатана с высотой 0,25мм, верхняя - 0,18мм):

Разная высота слоя
Разница, конечно, видна, но нельзя сказать что она существенна. Поэтому не всегда стоит стремиться к минимальной высоте слоя - для некоторых моделей разницу разглядеть не удастся, а вот печататься модель будет существенно дольше.Обычно оптимальные значения для высоты слоя находятся в диапазоне (0.5 - 0.8) * диаметр сопла. Выход из этого диапазона чреват сильным ухудшением качества.

В группах Vertical shells и Horizontal shells задается число слоев для вертикальных и горизонтальных оболочек. Обычно значений указанных на скриншоте вполне достаточно.
Структура печатаемого объекта
Перейдем к разделу Infill:
Infill
Два основных параметра здесь это Fill density и Fill pattern. Fill density (плотность заполнения), указывает насколько плотно должны заполняться внутренние полости объектов (значение в диапазоне 0 - 1). Большие значения соответствуют более плотному заполнению, меньшие - менее. Fill pattern (шаблон заполнения) задает способ заполнения внутренних полостей (я предпочитаю прямолинейное заполнение).

Следующий раздел - Speed:
Speed
Основной принцип здесь: чем большую скорость удастся установить - тем лучше. Помимо очевидного выигрыша в скорости печати, увеличение скорости может немного улучшить качество, за счет того что горячее сопло быстрее покидает область на которую только что был выдавлен пластик, и дает ему возможность быстрее застыть. Основные ограничивающие факторы для повышения скорости это мощность двигателей (могут начать пропускать шаги, особенно двигатель экструдера), жесткость конструкции (может возникнуть сильная вибрация), и мощность нагревательного элемента хотэнда (может не справляться с большим объемом пластика). Можно начать со значений по умолчанию, а если возникнут какие-то проблемы - попробовать немного уменьшить скорость.

Skirt and brim:
Skirt and brim
Окантовка (skirt) представляет собой замкнутую полосу опоясывающую все печатаемые объекты. Она всегда печатается до начала печати самих объектов, и основное её предназначение - прочистка сопла. Параметр Loops определяет ширину окантовки в слоях (3-4 будет достаточно), а Skirt height - высоту (обычно один слой). Параметр Distance from object задает минимальное расстояние до объектов. С помощью параметра Minimum extrusion length можно задать минимальное количество пластика, которое необходимо использовать на окантовку, прежде чем начинать печатать объекты (соответственно ширина окантовки может быть увеличена).

Поля (brim) представляют собой поля высотой в один слой, которые будут добавлены вокруг объекта. Параметр Brim width задает ширину полей. Поля удобно использовать при печати высоких объектов с небольшим основанием - они хорошо удерживают объект и не дают ему завалиться при перемещениях стола по оси Y.
Остальные разделы на вкладке Print Settings нас пока не интересуют (можно смело оставлять значения по умолчанию). Единственное на что следует обратить внимание это параметр Threads в разделе Advanced - он задает число потоков в которых будет выполняться слайсинг. Я бы советовал установить его на единицу больше числа ядер вашего процессора.

Рассмотрим раздел Filament вкладки Filament Settings:
Filament settings
Параметр Diameter задает диаметр прутка, причем здесь должен быть указан фактический диаметр. То есть если при измерении диаметр прутка оказался равным 2.8мм вместо 3мм, то нужно указывать именно 2.8мм, поскольку на основании этого значения рассчитывается объем выдавливаемого пластика.

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

Параметры в группе Temperature задают температуру хотэнда и стола для первого и остальных слоев. На скриншоте выше температуры указаны для PLA.

В разделе Cooling настраивается охлаждение, пока там можно оставить настройки по умолчанию.

Последняя вкладка с настройками - Printer Settings. В разделе General нужно установить размер стола для печати (Bed size), его центр (Print center) и базовое смещение по оси Z (Z offset). Последний параметр определяет расстояние между соплом и столом в домашнем (Z = 0) положении. Также нужно убедиться что параметр G-code flavor установлен в RepRap (Marlin/Sprinter/Repetier).
Printer Settings - General
Раздел Custom G-code позволяет задать свой G-code который будет выполняться перед началом печати, после окончания, и на каждом слое. Пока там можно оставить значения по умолчанию.

И последний раздел - настройки для нашего единственного экструдера, Extruder 1:
Extruder 1 settings
Первое что нужно установить это диаметр сопла (Nozzle diameter).

Группы Position и Retraction when tool is disabled нас не интересуют, т.к. относятся к принтерам с несколькими экструдерами.

Группа Retraction включает настройки втягивания пластика при переносе сопла между разными участками модели:

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

Основной параметр втягивания это Length - то есть на сколько миллиметров втягивать пруток назад. Чем он меньше - тем лучше. Настраивать его лучше экспериментально, уменьшая его до тех пор, пока при переносе сопла не начнут появляться тонкие нити протекшего пластика, а затем немного увеличить (до их исчезновения).

Этих настроек слайсера должно быть достаточно для начала печати.

Первая печать

Теперь все готово для печати первого объекта. Но не стоит начинать с чего-нибудь типа бюста магистра Йоды. В качестве первого объекта для печати я бы рекомендовал вот этот. Он представляет собой полый параллелепипед со стенками толщиной в один слой. Этот "кубик" очень быстро печатается, на него уходит совсем чуть-чуть материала, а главное - на нем хорошо видны все проблемы принтера и калибровки.

Первый объект для калибровки

Затем для проверки качества заполнения можно напечатать вот этот объект, представляющий собой обычный параллелепипед.

Продолжить калибровку можно на этом объекте. На нем присутствуют отверстия различной формы, и свесы (overhang) под разными углами.
Объект для калибровки с отверстиями и свесами
Ну и для тестирования печати "мостов" можно воспользоваться вот этим объектом. Он поможет оценить насколько длинные мосты сможет печатать принтер.
Объект для проверки качества "мостов"
Итак, если с печатью этих объектов у вас проблем не возникло - значит ваш принтер готов к работе, и можно напечатать что-нибудь интересное. Что делать если возникли проблемы? К сожалению, ответить на такой вопрос в рамках этой статьи не получится, т.к. диагностика проблем печати это очень обширная тема. Но я, все же, постараюсь дать пару советов по наиболее распространенным проблемам:

  • Первый слой не пристает к столу и тянется за соплом. В этом случае нужно проверить зазор между соплом и столом (возможно он слишком велик), температуру стола и хотэнда (возможно слишком низкие). Иногда помогает протирание стола спиртом для удаления жира и пыли.
  • Слои "сваливаются" с предыдущего слоя. Возможно слишком высокая температура хотэнда, высокая скорость печати, слишком большая высота слоя.
  • В стенках объекта виднеются щели или мелкие отверстия, или заполнение не "держится" за стенки объекта. Скорее всего выдавливается недостаточный объем пластика (можно проверить увеличив Extrusion multiplier).
  • На стенках виден регулярный "волнообразный" узор. Может быть вызвано недостаточным натяжением ремней или некачественными шпульками осей X и Y.

Более подробно о диагностике и устранении проблем печати можно почитать здесь.

Советы по улучшению качества

Направлений для улучшения качества печати много, некоторые из них: модернизация конструкции принтера, использование более качественного прутка, более тонкая настройка параметров слайсера и прошивки (или использование более продвинутого слайсера). Но это все, по большей части, индивидуально, зависит от принтера, а результат часто оказывается плохо воспроизводим. Здесь я хотел бы рассказать о том что лично мне помогло существенно повысить качество печати, а именно - использование охлаждения. Также я постараюсь дать несколько простых советов по созданию моделей, следование которым поможет скрыть основные проблемы FDM технологии и RepRap Prusa Mendel в частности.

Охлаждение

Сначала немного о том для чего нужно охлаждение и что, собственно, необходимо охлаждать. При печати на FDM принтере материал после выдавливания из сопла еще какое-то время остается мягким (поскольку он еще не успел остыть и отвердеть), а следовательно - подвержен деформациям. Деформации эти бывают разные, например провисание "мостов", "заваливание" свесов (либо их закручивание), заворачивающиеся углы (curling corners). Чем дольше пластик остается мягким - тем сильнее модель успевает деформироваться.

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

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

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

Что бы установить охлаждение на RepRap Prusa Mendel сперва нужно выбрать вентилятор. Главные критерии выбора тут это максимальная производительность, минимальная вибрация и шум, подходящий размер (4x4 или 5x5 сантиметров), питание 12В.

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

Подключается вентилятор в разъем для второго хотэнда - D9. Включение, выключение и управление скоростью вращения вентилятор настраивается в Slic3r на вкладке Filement Settings в разделе Cooling. У меня вентилятор включен всегда на максимальной скорости, кроме печати первого слоя (для моего вентилятора эти настройки оказались оптимальны).

Я использую два вентилятора для охлаждения. Основной: 4x4см, установленный на каретку с помощью такого крепления, подключен в разъем D9:
Основной вентилятор

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

Общие советы

У FDM технологии печати (и у конструкции RepRap Prusa Mendel в частности) есть несколько слабых мест, которые проявляются при печати некоторых частей объекта, таких как мосты, свесы, острые углы и т.п. Поэтому если при создании модели объекта и подготовки её для печати придерживаться некоторых правил (преимущественно направленных на минимизацию количества проблемных мест) - это может положительно сказаться на качестве напечатанного объекта. Ниже речь пойдет об этих "проблемных местах", а также о том как их избегать.

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

Избегайте острых углов
Этот пункт, пожалуй, нуждается в небольшом дополнительном пояснении. Что бы понять суть проблемы взглянем на картинку:
Изгиб материала
При печати углов и дуг выдавленная нить пластикового прутка изгибается. В месте изгиба внутренняя сторона "нити" проходит по меньшему радиусу (R1) чем внешняя (R2). Таким образом, внутренняя сторона сжимается, а внешняя - растягивается. Проблема возникает потому, что, на самом деле, выдавленный пластик имеет форму скорее расплющенной ленты, а не нити. Внешняя, растягиваемая сторона ленты стремится сжаться и начинает деформироваться. Эти деформации известны как заворачивающиеся углы (curling corners):
Заворачивающийся угол
Больше всего эта проблема проявляется в местах где угол находится на свесе. У внешнего края ленты нет контакта с предыдущем слоем, и он может свободно подниматься вверх вызывая тем самым сворачивание:
Заворачивание угла на свесе
Очевидно, что сила с которой пластиковая лента стремится деформироваться зависит от того, насколько сильно отличаются радиусы R1 и R2. Причем важна относительная разница, а не абсолютная (абсолютная всегда будет равна ширине пластиковой ленты). Если считать что ширина пластиковой ленты одинакова, то сила деформации зависит от радиуса кривизны: чем он больше - тем для нас лучше.
Слева - меньший радиус кривизны. Справа - больший.
Как следствие этого, при создании моделей следует избегать частей с маленьким радиусом кривизны, а именно: острых углов, маленьких отверстий в объекте или щелей. Все "острые" части следует делать максимально гладкими и скругленными.

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

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

Печатайте тонкие объекты в нескольких экземплярах
Здесь под тонкими объектами я понимаю объекты, у которых площадь занимаемая ими в плоскости X-Y достаточно маленькая (меньше 1см^2), типичный пример - болт. При печати таких объектов возникает следующая проблема: поскольку площадь каждого слоя маленькая - он печатается очень быстро, и следующий слой начинает печататься до того как предыдущий успевает хотя бы немного остыть и отвердеть, а это приводит к деформации и снижению качества печати. У Slic3r есть свой вариант решения этой проблемы - принудительное увеличение времени печати (путем снижения скорости печати) для таких объектов (настройки находятся в разделе Cooling). К сожалению, это плохое решение, т.к. при увеличенном времени печати горячее сопло находится в длительном контакте с верхним слоем, и тоже не дает материалу остыть. Очень простое и действенное решение заключается в том что бы печатать такие объекты в сразу нескольких экземплярах, размещая их на некотором расстоянии друг от друга. Тогда слои будут печататься по очереди, и пока один объект печатается - остальные остывают:
Печать двух болтов одновременно

Программы для создания моделей

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

Blender

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

FreeCAD

FreeCAD - открытая САПР, поэтому больше всего подходит для проектирования всевозможных деталек. Для создания моделей во FreeCAD используется параметрическое моделирование, то есть всю модель легко и быстро изменять управляя несколькими параметрами. Кроме того, у FreeCAD, на мой взгляд, замечательный и интуитивно понятный интерфейс для создания моделей и чертежей (скетчей). Единственная проблема - очень низкая стабильность работы. Из-за постоянных вылетов, зависаний и глюков работать во FreeCAD практически невозможно (и речь даже не о ночных сборках, а о релизных версиях).
FreeCAD

OpenSCAD

OpenSCAD - программа для неинтерактивного 3D моделирования. В отличие от других 3D редакторов, где создание модели производится "мышкой" - здесь модель генерируется по её текстовому описанию на очень простом языке. Вкратце суть можно описать так: есть несколько базовых объектов (сфера, параллелепипед, цилиндр, полигон и т.п.) и базовых операций над объектами (объединение, пересечение, разность, выдавливание и т.п.). Собственно OpenSCAD модель это код, описывающий какую последовательность операций над какими объектами нужно выполнить что бы получить желаемую модель.

Поначалу может показаться что это слишком сложно и ненаглядно, но, на самом деле, процесс этот намного проще и удобнее чем кажется. Такой подход позволяет очень просто создавать параметрические модели. Кроме того, текст OpenSCAD модели представляет собой полное её описание (как исходный текст программы), что повышает возможность повторного использования как самой модели, так и её составных частей. В последнее время я делаю все модели исключительно в OpenSCAD. Конечно, есть и минусы - неудобный интерфейс, отсутствие подсветки синтаксиса, сложность "отладки модели" (понять почему модель не хочет собираться в STL), но плюсы, пожалуй, их перевешивают.
OpenSCAD

Netfabb

Netfabb Basic не является полноценной программой для 3D моделирования, а служит, в основном, для работы с STL файлами. Однако она содержит очень полезную возможность исправления моделей, что очень помогает при восстановлении моделей которые Slic3r отказывается обрабатывать.
Netfabb Basic

Заключение

На этом все. Понимаю, что многое осталось за кадром, но этот маленький цикл статей изначально ни в коей мере не претендовал на полноту.

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

Надеюсь эти статьи окажутся кому-нибудь полезными.

255 комментариев:

«Самые старые   ‹Старые   201 – 255 из 255
Alik комментирует...

Вас, наверное, интересуют параметры retraction. Они в этом посте видны на скриншоте настроек экструдера в Slic3r.Если экспериментирование с настройками retraction не помогает, можно попробовать немного понизить температуру экструдера.

Игорь Бондаренко комментирует...

Здравствуйте! Подскажите как напечатать деталь, если много мест которые принтер должен печатать в воздухе? Редактировать деталь возможности нет. В "Repetier-Host" подпорки вставить не получается.

Alik комментирует...

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

Игорь Бондаренко комментирует...

Здравствуйте!Спасибо за совет.Подскажите ещё почему рекомендуете синий скотч? В чём разница от обычного? Структура?

Alik комментирует...

Это малярный скотч, у него поверхность более шероховатая, поэтому пластик пристает лучше. Цвет, конечно, значения не имеет, просто синий малярный скотч самый распространенный.

Александр Ефимов комментирует...

Добрый день!
При подключении к arduino через Pronterface идут нечитаемые кракозябры. Причем завершения подключения (минут через 10) так и не происходит.
Команда M119 выдает: [ERROR] Printer is not online.
Хотя да, сообщения об ошибке и Connection выводятся на английском.
В чем может быть проблема ?

Alik комментирует...

Единственное что могу посоветовать - проверить что настройки COM порта в прошивке и Pronterface совпадают.

Александр Ефимов комментирует...

Решил проблему, заменив скорость сообщения на @250000.
Правда теперь ошибка: Extruder switched off. MAXTEMP triggered !
Error:Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)
[ERROR] Error:Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)
Термопара подключена только к D10.

Alik комментирует...

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

Александр Ефимов комментирует...

Да, действительно. Переключил термисторы на T0. Все нормально загрузилось. Теперь проблема с двигателем. Во первых не нашел схему для его подключения. У меня провода :синий, желтый, красный,зеленый. Пришлось перебором пробовать. Стал вертеться при таком подключении: 2b-красный,2a-зеленый,1a-желтый,1b-синий. Вопрос в том, что при подачи команды g1 x10 он прокрутится на немного, а потом просто пищит. И на команду g1 x1 может больше крутится,чем на g1 x10. Через какоето количество попыток совсем крутить перестал, только на оси z и то,так же не равномерно, с долгим пищанием после прокручивания.

Alik комментирует...

Адександр, в предыдущей статье я написал про подключение двигателя и калибровку драйвера. И как я уже отвечал кому-то в комментариях: проблемы с двигателями могут возникать по многим причинам. Самые распространенные: неправильное подключение, неправильная калибровка драйвера, недоатсточная мощность блока питания, бракованный драйвер. У меня была похожая проблема (двигатель немного крутился и начинал пищать и греться), оказалось дело в бракованном драйвере. Советую почитать комментарии к этой и предыдущим статьям.

руслан коханов комментирует...

Здравствуйте подскажите пожалуйста с такой проблемой. Стол отрегулирован правильно, паркуется ось z тоже шикарно, но в начале печати экструдер опускается ниже 0 точки и дерет стол, пропусков шагов нет, у меня prusa i3

Alik комментирует...

Возможно у вас выставлен Z Offset в настройках слайсера, из-за которого экструдер пытается опуститься ниже нуля по оси Z?

руслан коханов комментирует...

Проблема в том что я испробовал 3 слайсера и везде такая беда

Alik комментирует...

А если принтеру просто послать G1 Z0, тоже опускается ниже 0? Проверяли на холодном экструдере и столе (если зазор калибровали без прогрева, то из-за теплового расширения металлов зазор будет меньше)?

руслан коханов комментирует...

Калибровка в горячем состоянии, при комманде g1 z0 чётко в нулевое стает

Alik комментирует...

Тогда нужно смотреть сгенерированный G-code. Очень похоже что у слайсера был выставлен Z-Offset.

руслан коханов комментирует...

Спасибо большое. Помогло. И ещё такой вопрос я собираю меtal H-bot, подойдёт ли для него ардуино и рампс? Если да то то какие строчки закоментить или раскоментить что бы ось Х и У работали такhttp://patlah.ru/etm/etm-13/dom%20kompyter/3d_printer/3d_p-02a-23.gif
http://patlah.ru/etm/etm-13/dom%20kompyter/3d_printer/3d_p-02a-24.gif

Alik комментирует...

Насчет H-bot, к сожалению, ничего не подскажу. Попробуйте поспрашивать на форумe RepRap.

Александр Ефимов комментирует...

Добрый день.
Проблема с разъемом Y. Совсем не реагирует на команды из pronterface. Сам двигатель и драйвер на другом разъеме работают,
так же на драйвере в разъеме Y есть напряжение.
Не подскажите, что сделать в данной ситуации?

Alik комментирует...

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

Unknown комментирует...

добрый вечер вылазит ошибка при прошивки
avrdude: stk500v2_setparm(): failed to set parameter 0x9e
avrdude: stk500v2_command(): unknown status 0xc8
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.

avrdude: stk500v2_command(): unknown status 0x01
avrdude: stk500v2_disable(): failed to leave programming mode
не подскажете что делать первый рас пытаюсь прошить

Alik комментирует...

Похоже на проблему с подключением Ардуино, или отсутствием драйвера.

Анонимный комментирует...

Из всего что читал, Ваша статья самая емкая и доступная, сегодня настроил концевики, сделал калиброву... осталось откалибровать экструдер, найти стеклышко на кровать, выровнять и ... год назад, когда начал пилить алюминиевый профиль, никто не верил, даже сам сомневался, но думаю, завтра запущу! Еще раз спасибо за труд!
Вопрос: по Z строительные шпильки на 6мм, при калибровке на 20 см. все ок., на 10 - всегда сбой в 2 мм, если выправляю на 10, не идет на 20см. Пропусков шагов нет. Почему перемещение по Z может быть не линейное? Грешу на шаг резьбы на шпильках..

Alik комментирует...

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

Александр Ефимов комментирует...

По поводу проблемы с разъемом Y. С обратной стороны Ramps был плохо пропаян контакт под гнездом для Y-драйвера. После припаивания стал работать.

Ильсеяр комментирует...

Алик! Спасибо за статью (несколько слов в ней поняла)))) Прочитала комментарии. Мой принтер распечатал одну скачанную деталь, а после смены катушки начал свистеть и работает только один вентилятор, больше никаких признаков жизни. Может моя проблема типична или проблема в пользователе?

Alik комментирует...

Какой у вас принтер? И какая именно часть издает звук? И о каких вентиляторах речь, вытяжных, или для охлаждения хот-энда?

Александр Ефимов комментирует...

Добрый день!
Подскажите по такому моменту. По всем осям X,Y,Z при подачи команды 0.1 из pronterface экструдер перемещается, но при подаче команды 10 или 100 двигатели не крутятся, а только пищат. При этом команда M114 показывает, что координата изменилась. В чем здесь может быть проблема?

И еще такой вопрос. Если M114 показывает (0;0;0), то как из pronterface
переместить экструдер в отрицательные координаты. А затем задать новому положению, что это будет точка(0;0;0)?
(Это возникает из-за предыдущей проблемы. Когда пытаюсь привести экструдер в начальную координату, но из-за того, что двигатель иногда не крутится, а pronterface считает, что перемещение произошло, то не удается вернуть экструдер в начальную точку.)

Alik комментирует...

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

По второму вопросу, можно попробовать G28 (home) либо G92 (http://reprap.org/wiki/G-code#G92:_Set_Position).

Unknown комментирует...

Добрый день, подскажите пожалуйста, принтер i3 prusa steel bizon, проблема состоит в том, что при печати слой на слой не накладывается, а печатается немного с отклонением в сторону, в итоге деталь растягивается по столу, вместо того чтобы расти вверх, на изображении должен был получится куб http://my-files.ru/i8szds

Alik комментирует...

Интересная проблема. А вверх каретка поднимается при печати? Пропуска шагов не заметно?

Александр Борознов комментирует...

Каретка поднимается, пропуска шагов нет, каждый шаг печатается с отклонением

Alik комментирует...

Тогда скорее всего проблема либо в настройке прошивки, либо в G-code. Попробуйте послать принтеру команды на перемещение: по одной оси (в разных направлениях), по двум, по трём. Посмотрите глазами на сгенерированный G-code вашей модели, все ли выглядит правильным?

Дмитрий Маренков комментирует...

Здравствуйте. Я воспользовался советами автора и отпечатал несколько тестов. Свесы грубые печатаются нормально, а тонкие закручиваются кверху. Как волосы кучерявятся. Материал PLA экструдер=210 стол=60. Уменьшил температуру до 190/50 крутит ещё больше. Вентилятор включен. Вот фото https://yadi.sk/i/OqYQObqprrpxz

Alik комментирует...

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

Дмитрий Маренков комментирует...

Всем привет. Принтер печатает вместо круга яйцо. Принтер Prusa i3 3d. Ремни натянуты, качество печати пробовал разное. Настройки прошивки не трогал (не знаю как).

Alik комментирует...

Скорее всего неправильно сконфигурирована прошивка, а именно количество шагов на единицу расстояния по одной из осей (X или Y). Попробуйте напечатать что-то вроде рамки 10x10 см чтобы выяснить какая из осей настроена неправильно. Потом её настройки нужно будет подправить в прошивке (DEFAULT_AXIS_STEPS_PER_UNIT если у вас Marlin)

Дмитрий Маренков комментирует...

Принтер печатает квадраты идеально, а кгуги овалом. Точнее круги на разной высоте не соосные.

Alik комментирует...

Интересно, а есть фотография того как это выглядит?

Дмитрий Маренков комментирует...

Для Алика https://yadi.sk/i/urxP_wV7rxvAx Как выглядит яйцо вместо окружности.

Alik комментирует...

На видео плохо видно. Я правильно понимаю что искажение там такого вида http://i64.tinypic.com/29xat1h.png ?

Дмитрий Маренков комментирует...

Да, Алик.http://tinypic.com/view.php?pic=29xat1h&s=9#.V0cPoCO9g4Y. Примерно так. Круг верхнего этажа не соосный с нижним.

Alik комментирует...

Я знаю только две проблемы которые потенциально могут к такому привести: любо ось Z установлена не строго вертикально, либо (что более вероятно) двигатели пропускают шаги.

Дмитрий Маренков комментирует...

И снова здрасте. Вопрос не по теме, если можно. Хочу отпечатать блок деталей как единое целое (как подшипник), но чтобы после печати можно было разобрать на составляющие. Это мне поможет избежать погрешностей и неточностей принтера при сборке изделия. Как это "объяснить" принтеру

Alik комментирует...

Можно собрать все файлы в одну модель (STL файл). Можно добавить все файлы в слайсер, тогда он сгенерирует G-code для печати всех моделей сразу.

Дмитрий Маренков комментирует...

Спасибо. Я пользуюсь фрикадом. В файле проекта все детали вместе, но промежутка между ними нет. Я их не объединял в единое целое. Если их выделить все вместе и экспортировать в stl файл, то при печати они не слипнутся? В РепитерХосте видна линия раздела.

Alik комментирует...

Я не знаю как фрикад экспортирует stl. Но если в RepetierHost или Slic3r между деталями есть достаточный промежуток - то не слипнутся.

Роман комментирует...

Добрый день! Когда собирал первый принтер (prusa i2), в начале печати была такая проблема:
экструдер опускался на стол в то место где нужно начинать печать, затем поднимался на пару мм и печатал уже в воздухе.
Тогда я находил где-то в комментариях, что это проблема в прошивке и необходимо изменить какое-то значение, я его благополучно поменял и принтер стал правильно печатать.
Сейчас собрал самодельный H-bot, все настроил, но появилась такая же проблема, и вот не могу найти или вспомнить что это была за строка. Прошивка Marlin 1.1.0-RC6, Электроника Arduino Mega 2560 & Ramps 1.4. Может кто сталкивался с таким?

Alik комментирует...

Роман, больше похоже на проблему с конфигурацией слайсера. Если пользуетесь Slic3r можно попробовать поиграться с параметрами First Layer Height и Z Offset.

Роман комментирует...

Я пробовал в Cure и в simplifier3d, но не g-code генерить, а печатать с компьютера. Проблема сохраняется.

Alik комментирует...

Тогда не знаю чем помочь. Может быть не откалиброван стол или концевик оси Z.

Роман комментирует...

Стол откалиброван, концевик работает верно. Говорю ведь, что такая проблема была и решалась путем изменений в прошивке, вот только забыл какая строка за это отвечает.

Zdesi комментирует...

Здравствуйте. Такая вот проблема : Перепробавал кучу настроек по позицианированию эструдера, и ни как не получается настроить чтоб печать наченалась с середины стола, скажите в какой строке в прошивке надо настраивать положение эструдера при начале печати?

Alik комментирует...

В прошивке задаются размеры рабочей области (X_MIN_POS/X_MAX_POS и т.п.). Еще проверьте что в слайсере размеры рабочей области заданы верно.

«Самые старые ‹Старые   201 – 255 из 255   Новые› Самые новые»

Отправить комментарий