Extensive z offset processing что это
Настройка оси Z на Ender-оподобных принтерах
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
Истоки конкретно моей проблемы и финальное решение описаны здесь
Итак, вводные данные:
Принтер: Ender 3. Модернизации: BL-Touch, Petsfang, Марлин 1.1.9, подсветка.
Пластик: PLA от Bestfilament, потом белый от Rec, PETG от Bestfilament.
Сопло 0.4, температура 205-210, слой 0.2. Скорость: от 30 до 60мм/сек
Скорость первого слоя: 15-30мм.
Поверхность: дорогое (и бесполезное) стекло от creality, старая коцанная стоковая поверхность, магнитная поверхность. В текущем вариант это стекло от Creality, только перевернутое, т.к. на лицевой части присутствует логотип, дающий отпечаток на моделях.
Температура стола 60-65
Симптомы (в совокупности):
Все началось с того, что при печати со 100%-м заполнением начал прощелкивать экструдер, а слой, на котором это происходило, по ощущениям напоминал наждачную бумагу. Какие варианты проверял:
2. Высокая скорость печати, пластик не успевает расплавиться. Способы проверки: уменьшение скорости вплоть до 10% и/или постепенное увеличение температуры до 230. Результат: нулевой. т.е. проблема не в подаче пластика.
3. Правильная затяжка роликов по z. Полностью с нуля пересобрал раму и настроил ролики. По Z теперь двигается мизинцем. Результат: «ещё более свободное плавное» движение по Z, но проблема осталась
В этот момент пришло четкое понимание закономерности: первые 2-3 слоя по z не происходит движения. При этом ручное движение по оси происходит нормально, а проблема только в процессе печати.
4. Прошивка. Т.к. механика на мой взгляд работала идеально, решил, что проблема в прошивке. Действие: пересобрал марлин. Попутно поигрался с jerk-ами и другими параметрами по Z. Заодно откалибровал подачу прутка. Результат: нулевой
Дальше была пауза в поисках решения, а печать происходила следующим образом: первые 3 слоя я стою у принтера и при смене слоя добавляю смещение по z на высоту слоя. Что меня смущало: в процессе печати 3 слоя без подъема, но z-offset отлично компенсировало проблему. Т.е. причину в железе я отметал.
6. Т.к. была проблема только с первыми тремя слоями, решил попробовать обмануть систему: выкрутил стол на максимальную высоту. Результат предсказуемо нулевой.
В общем, по прошествии нескольких месяцев я печатал через заднее место, пока на одном из зарубежных форумов откопал один малюсенький пост с похожей ситуацией и решение.
1. Даже при минимальном повреждении ролика его надо менять. Возможно, что имеет смысл ставить замену колес в плановое ТО
Фотографировал специально таким образом, чтобы были видны все неровности (изначально это тест для HG-Smoother). На самом деле, выглядит куда лучше в жизни ) Слой 0.2, скорость 60
Ситуация до замены роликов (один из самых тяжелых случаев):
А это фото замененного ролика:
В планах замена всех роликов на рельсы.
P.S. У соседа Ultimaker 2. Удивляется, что качество распечаток не только сопоставимо с его принтером, но иногда и выше.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Non-zero value results in printhead starting
75mm up the Z axis #7
Non-zero value results in printhead starting
Comments
SnowDrifterr commented Nov 9, 2019
I installed the z-offset plugin from the market place, set it to 1.7mm(imported from S3D), and its behavior is to attempt to print
75mm off the print bed. Seem to happen on any non-zero setting. When loading the preview in flashprint, the print does show on the bed.
Printer is a flashforge adventurer 3
Setting to zero, or uninstalling the plugin results in normal printing behavior. But I still need to be able to adjust it for my use case
The text was updated successfully, but these errors were encountered:
SnowDrifterr commented Nov 10, 2019
First couple lines of g-code:
;FLAVOR:Marlin
;TIME:5183
;Filament used: 1.13638m
;Layer height: 0.1
;MINX:-26.655
;MINY:-14.893
;MINZ:0.2
;MAXX:26.658
;MAXY:14.881
;MAXZ:4.4
;ZOFFSETPROCESSED
;Generated with Cura_SteamEngine 4.3.0
M140 S40
M105
M190 S40
M104 S240
M105
M109 S240
M82 ;absolute extrusion mode
M140 S[bed0_temperature] ; set bed temperature
M104 S[extruder0_temperature] T0 ; set extruder temperature
M104 S0 T1 ; set extruder temperature
G28 ; home all axes
M132 X Y Z A B ; recall home offsets
G1 Z50 F3300 ; lower bed
M7 T0 ; stabilize bed temperature
M6 T0 ; stabilize extruder temperature
;M651 ; set case fan on
M907 X100 Y00 Z40 A100 B20 ; set motor current
G92 E0
G92 E0
G1 F1500 E-6.5
;LAYER_COUNT:43
;LAYER:0
M107
G0 F3600 X-.753 Y14.749 Z1.9 ;adjusted by z offset
G92 Z0.2 ;consider this the original z before offset
;TYPE:SKIRT
G1 F1500 E0
G1 F600 X-4.279 Y14.868 E0.10267
G1 X-4.511 Y14.869 E0.10943
fieldOfView commented Nov 11, 2019
As pointed out by @Ghostkeeper on reddit:
The Z offset code seems to be working fine by that g-code. It moves first to Z1.9 and then says that the current coordinate is Z0.2. That effectively results in an offset of 1.7mm.
There’s one code in your starting g-code that looks weird. It’s this one:
M132 X Y Z A B ; recall home offsets
I’m not familiar with this Makerbot-specific g-code. But according to the documentation on Reprap.org it could be the thing that’s messing with your Z offset. Depends what’s stored in that EEPROM. But an EEPROM can get corrupt or just fail to read.
Basically, this is your firmware not interpreting gcode according to its specification. Interestingly it does so in a way that is comparable to the newer Ultimaker printers. I am special-casing these printers to use a different (far less efficient) way to offset the prints. I may expose that alternative way in a future version of the plugin.
Краткая шпаргалка по калибровкам 3Д принтера (Marlin)
Здесь я размещу краткую шпаргалку по необходимым калибровкам 3Д принтера. Это шпаргалка больше для себя, но если еще кому-то пригодится — буду очень рад. Для калибровки понадобится любая программа, способная передавать g-code команды на принтер и отображать ответ, например Repetier-Host, но в некоторых случаях можно обойтись только меню принтера, если там есть соответствующие возможности. Калибровки будут относиться только к прошивкам на базе Marlin. По мотивам постов из этих ваших интернетов и видео с канала Дмитрия Соркина
Калибровка PID
Для калибровки PID экструдера или стола используется команда:
M303 E0 S235 C8 U
где M303 — команда калибровки
E0 — номер экструдера. Нумерация экструдеров начинается с 0. Т.е. 0 — это первый экструдер. E-1 это нагреваемый стол, можно калибровать и стол, если на нем включен PID
S235 — температура калибровки, здесь 235 градусов. Рекомендуется обычная температура печати для того пластика, который чаще всего используете
С8 — количество циклов калибровки. 8 волне достаточно
U — применить настройки сразу. Без этой команды калибровка просто покажет цифры, но не применит их в настройках.
N.B.: Имеет смысл перед калибровкой PID экструдера включить на половину мощности вентилятор обдува модели командой M106 S127 что бы привести ситуацию к более реальным условиям.
Вот пример результата калибровки в программе Repetier-Host (вывод в консоль):
Последние 3 строки — результаты калибровки. Их нужно внести в прошивку или указать в настройках (если в команде M303 не был указан параметр U), после чего записать в энергонезависимую память либо из меню принтера, либо с помощью команды M500.
Калибровка уровня стола для датчика BLTouch
Для калибровки уровня стола на принтере с установленным датчиком уровня BLTouch или 3DTouch, (при первой ли установке, просто так ли, или при любом вмешательстве в экструдер или печатную голову) необходимо выполнить серию команд, например в Repetier Host:
Теперь с помощью листа бумаги калибруем зазор между соплом и столом с помощью команды:
Возможны дробные величины, через точку. Возможны отрицательные величины. даем эту команду несколько раз, подгоняя зазор, что бы чувствовалось, как бумага трется об сопло. Например, зазор большой. Даем G1 Z1. Т.е. опускаем сопло на 1 мм. Если бумага свободно двигается, даем G1 Z1 еще раз. Если бумагу зажало, откатываемся вверх на 1 мм командой G1 Z-1 и начинаем опять опускать, но уже по чуть-чуть: G1 Z0.1 и т.п. Пока не будет нужного зазора.
После чего сохраняем настройки в энергонезависимую память либо из меню принтера, либо с помощью команды M500.
После калибровки выключаем принтер, включаем снова, проверяем сохранился ли Z offset и пробуем что-либо напечатать и на первом слое подгоняем зазор с помощью babystepping-а. Значение, полученное в babystepping при идеальной толщине выкладки первого слоя добавляем к Z offset (если значение babystepping положительное, то увеличиваем Z offset, если значение babystepping-а отрицательное, то, соответственно, уменьшаем)
Extensive z offset processing что это
Подключение датчика BLTouch к robin nano v1.1
Датчик BLtouch используется для построения карты высот стола. Общую информацию о работе и подключении можно посмотреть в видео:
BLTouch от Trianglelab. В комплекте с датчиком идут провода, но их длины не хватает для подключения к плате на FB4S. Для удлинения проводов можно использовать еще один комплект удлинителя
Для надежного подключения к плате можно использовать JST XH 2.54 3 Pin коннектор.
Для установки на другую голову, необходимо сделать кронштейн для датчика. Основные требования:
Принцип работы датчика
У датчика есть управляемый щуп, который он может выдвигать и задвигать по команде. Так же он может с высокой точностью и повторяемостью определять прохождение щупом «точки детекции». Когда стол толкает вытянутый щуп, в определенный момент он достигает «точку срабатывания» и датчик фиксирует именно это. Bltouch не замеряет высоту от стола или насколько вытянут щуп. Он лишь сообщает МК, что щуп достиг «точки срабатывания», но делает это с погрешностью в тысячные доли миллиметра. МК знает высоту по Z и по тому, где сработал датчик, определяет высоту до стола в этом месте.
В данном примере используется метод Unified Bed Leveling, который сочетает приемущества остальных способов, позволяет строить, редактировать и сохранять сетку.
У датчика 5 проводов, которые можно разделить на две группы: управление щупом (серва) и концевик. Обычно провода обозначаются цветом.
Для прогнозируемой и понятной работы Bltouch, парковку оси Z следует сделать по датчику, а не по концевику. В данном случае, чтобы не вносить лишних изменений и оставить возможность отключить Bltouch только прошивкой, не изменяя подключения проводов, датчик подключен в разъем ZMax (пин PC4).
Управление выдвиганием щупа подключено в разъем PB2 (обозначен на плате).
Выбор ног для подключения может быть произвольным, однако надо учитывать, что на плате Robin Nano разъемы ZMin, Zmax, PWR-DET, MT1-DET, MT2-DET выполненый как вход. Выражается это в схемотехнике на плате:
Разъем PB2 выполнен как выход, с токоограничивающим резистором R38 номинало 100 Ом.
На плате разъемы расположены следующим образом:
Настройки приведены для сборки под FB4S.
Ноги МК на которые подключен датчки (Marlin/src/pins/stm32f1/pins_MKS_ROBIN_NANO.h):
Файл Marlin/Configuration.h, секция «Z Probe Options».
Поскольку используется парковка по BLtouch, а не по концевику, то нужно включить:
Отключить ручной режим, включить BLTouch
Смещение сопла относительно датчика (зависит от физического положения датчика X,Y,Z). При первоначальной настройке Z можно поставить 0.
В моем случае, как видно из чертежа, датчик смещен на 37 мм по оси X в положительную сторону и на 20 мм по оси Y в отрицательную.
Измерять 3 раза и выпадающее значение отбрасывать:
Включение функции теста точности датчика (позволяет оценить точность работы датчика командой M48 ):
Задать способ построения сетки. Используется рекомендуемый метод Unified Bed Leveling
Включить Z_SAFE_HOMING и задать точку для парковки:
Задание границ для замеров
Можно задать отступы и границы, куда может дотянуться щуп датчика. При парковке головы по концевикам осей X и Y на FB4S сопло оказывается вне пределов стола по оси Y. По оси X сопло не может достигнуть край стола, в моем случае оно смещено на 13мм. Для упрощения расчетов, я применил коррекцию только по оси Y:
Исходят из этих настроек, точка 0,0 для сопла будет совпадать с позицией концевика по оси X, и на 6мм сдвинута по оси Y от точки, где срабатывает концевик.
В моем случае, никаких дополнительных ограничений по перемещению датчика нет:
Первичная настройка датчика
Или из меню принтера, «initialize eeprom».
Для лучшей геометрии моделей можно выровнять плоскость стола параллельно плоскости движения головы в плоскости XY. Для этого нужно выбрать 4 точки по краям стола. В моем случае это точки с координатами (0,25), (208,25), (208,200), (0,200).
Максимальнальная координата по Y, в моем случае, ограничена перемещением головы, я просто использовал максимальное значение (200).
Перемещение головы выполняется командой G1.
Замер высоты выполняется командой G30. Будет произведен замер в текущем положении головы и в ответе на команду будет текущая высота по Z.
Подкручивая винты, можно выставить стол, чтобы значения во всех 4 точках были одинаковые. Обычно нужно сделать проход по 4 точка несколько раз.
Примерный список команд:
В качестве альтернативы ручному методу с выполнением команды G30, можно использовать функцию ASSISTED TRAMMING. Работает это так: датчик замеряет высоту по 4 точкам и, зная шаг винтов регулировки стола, сообщает на сколько какой винт нужно повернуть.
Настройки функции в Marlin/Configuration_adv.h:
Запускается замер командой G35. После замера 4 точек будет выведен результат:
Построение сетки поверхности стола:
Начнется измерение высоты в точках, куда возможно дотянуться щупом. В моем случае, для сетки из 100 точек (10*10) щуп смог дотянуться до 72. Посмотреть результат измерения можно или командой «G29 T» или «M420 V». После замера ответ выглядит приблизительно так:
Для использования сетки, остальные значения нужно рассчитать. Делается это командой:
Эта команда, заполняет «один шаг» в сетке, поэтому для заполнения сетки полностью, ее нужно выполнить несоклько раз. Между запусками, можно посмотреть результат командой «G29 T». В моем случае, запустить команду нужно было дважды. В результате получилась полная сетка поверхности:
Теперь результат можно сохранить. Есть возможность сохранить несколько сеток, указав номер.
Проверить, что настройки сохранены: перезагрузить принтер и посмотреть состояние:
В выводе команды должна быть сетка с актуальными значениями, состояние «Mesh is valid», а так же «Bed Leveling ON»
В процессе эксплуатации стол может немного изменять свое положение. Для быстрой коррекции в стартовый код можно добавить команду измерения наклона стола по 3-м точкам. Датчик проведет измерение в 3 точках (можно указать больше) и сделает «наклон» сохраненной сетки под эти измерения. Для того, чтобы корреция происходила после нагрева стола, но до нагрева сопла, нужно настроить стартовый код в слайсере. Обычная логика такая: если слайсер не находит в стартовом коде команд управления температурой (M104, M109, M140, M190), он их добавит автоматически. Если какие-то из этих команд есть, он соответсвенно не будет добавлять команды для нагрева стола или сопла. Это позволяет управлять очередностью нагрева. А для того, чтобы не править стартовый код при изменении температуры, в командах можно указать макросы, которые слайсер заменит на соответствующие значения.
А код для прочистки сопла разместить в стартовом g-код для филамента.
Настройка Z probe offset
Окончательная настройка Z probe offset делается на тестовой печати. Нужно запустить пробную печать небольшой модели с большим количеством линий юбки. Тестовый кубик с 30 линиями юбки отлично подойдет. Во время печати юбки из меню Tune-> BabyStepping изменяя высоту стола нужно добиться правильной укладки линий.
BabyStepping это возможность изменять высоту стола небольшими шагами (по умолчанию по 0.01 мм). Эти изменения не влияют на расчеты и никак не учитываются прошивкой, это просто возможность «подвигать» мотор оси Z, равносильно тому, что повернуть винт оси рукой. Поэтому значение BabyStepping сбрасывается при парковке.
Когда уровень стола будет устраивать, нужно запомнить итоговое значение BabyStepping и остановить печать. Полученное значение нужно прибавить к Z PROBE OFFSET и сохранить настройки в eeprom.
Сохранение сетки и восстановление после прошивки
Для того, чтобы после смены прошивки и сброса eeprom не проводить замер стола по новой, можно сохранить результаты. Посмотреть текущие значения можно командой:
А установить значение для конкретной точки:
После обновления прошивки или просто сброса eeprom достаточно запустить этот файл «на печать» и нужные значения будут восстановлены.
Установка датчика автоматического уровня 3DTouch на 3D принтер Creality CR10S
Небольшая инструкция по подключению датчика 3DTouch на принтер Creality CR10S.
Внешний вид датчика 3DTouch.
Ссылка на проверенный магазин 3D печати – http://ali.pub/3ey6fd Ссылка на датчик автоматической калибровки уровня 3DTouch – http://ali.pub/3ey670 Первым делом необходимо скачать и распечатать модель держателя для датчика.
Может не самая удачная конструкция держателя, но вполне рабочая.
Далее, разбираем принтер, прикручиваем и подключаем датчик.
Схема подключения 3DTouch.
Конфигурирование прошивки Marlin для 3DTouch
Прошивка – Marlin 1.1.9.
Правим файл конфигурации Configuration.h.
Строка 709. Комментируем эту строку, т.к. должен остаться лишь один способ калибровки.
Было: #define PROBE_MANUALLY
Стало: //#define PROBE_MANUALLY
Строка 727. Включаем калибровку с помощью датчика 3DTouch и активируем работу сервопривода.
#define SERVO0_PIN 11
Строки 777-779. Настраиваем положение датчика Bltouch относительно сопла.
Вы можете выставить мои значения, если использовали такое же крепление как у меня. Если ваш способ крепления отличается, то придется замерить смещение датчика относительно сопла с помощью линейки.
Строки 975-979. Меняем способ калибровки стола.
Строки 1022-1023. Установите количество точек сетки на измерение.
// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 3
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
// Set the number of grid points per dimension.
#define GRID_MAX_POINTS_X 4
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
Если стол кривой, то можно установить больше точек для калибровки стола. Для хорошего стола вполне хватит матрицы 3 на 3.
Строка 782. Определяем границу от края стола, в которой запрещается делать замеры.
#define MIN_PROBE_EDGE 10
#define MIN_PROBE_EDGE 40
Ось Z не трогаем. Этот параметр настроем через меню принтера позднее.
Строки 1026-1029. Снимаем комментирование. Эти параметры определяют зону стола, в которой допускается проводить калибровку.
//#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE
//#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE
#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE
#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE
Строка 1143. Снимаем комментарий.
Это все изменения в прошивке, которые я внес для работы датчика автоматического уровня 3DTouch.
Теперь можно включить принтер и проверить работу датчика.
Будьте осторожны при первом включении принтера после установки датчика 3DTouch. Неверное конфигурирование и подключение могут привести к механическому повреждению элементов принтера. Будьте готовы выключить питание в любой момент.
Настройка Probe Z Offset
Это последний параметр, который нужно настроить. Здесь необходимо задать смещение датчика относительно сопла по оси Z.
Заключение
Читал много отрицательных отзывов по работе датчика 3DTouch. И даже, какое-то время сомневался в его покупке. Но опасения не оправдались. Датчик работает идеально, нареканий нет. Считаю его покупку вполне оправданным вложением.
Расскажете об этой статье своим друзьям: