- roboforum.ru
- Калибровка стола Marlin UBL
- Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Re: Калибровка стола Marlin UBL
- Anet A8 Plus: как прикрутить автоуровень BLTouch (и прошить принтер на Marlin 2.0)
- Подпишитесь на автора
roboforum.ru
Технический форум по робототехнике.
- Список форумов‹Мастерская‹3D печать
- Изменить размер шрифта
- Версия для печати
- Магазин
- Правила
- Wiki
- FAQ
- Регистрация
- Вход
Калибровка стола Marlin UBL
Калибровка стола Marlin UBL
setar » 28 фев 2019, 13:21
Приветствую начинающих печатников и профессионалов.
Этот небольшой пост я решил выложить, чтобы на многочисленные вопросы о методике калибровки стола, отвечать ссылкой.
Речь идет о новой методике программного выравнивания стола unified bed leveling (UBL) реализованной в прошивке MARLIN.
Оригинальная документация http://marlinfw.org/docs/features/unifi . eling.html
Суть выравнивания заключается в том, что изначально со стола снимается (при использовании датчика уровня, например Bltouch) матрица реальных высот, и по всем этим точкам строится сглаженная криволинейная поверхность.
Далее эта виртуальная поверхность используется как ноль модели при печати (есть опция постепенного выравнивания к физическим координатам).
После активации UBL сопло начинает двигаться в виртуальной координатной системе, с учетом кривизны стола. Например при горизонтальном движении на высоте 0.1 мм над уровнем стола, координата Z будет плавно подкручиваться для огибания всех неровностей.
Этот механизм особенно востребован на системах со значительной областью печати ( 300+ мм) поскольку поверхность стола обычно имеет форму пропеллера и механически не выравнивается.
Для большего эффекта, я испытывал реальный принтер, но с поверхностью стола имеющей подкладки с одной стороны создающими перепад в 5 мм. При такой сильно измененной геометрии использовать постепенное выведение к реальной координатной сетке (Fade Height) не рационально, и эта опция отключена Fade Height = 0
0. подготовка
Прогреваем стол и сопло до рабочей температуры
M109 S230
M190 S120
— ожидаем стабилизации 10-15 мин —
1. калибровка датчика
1.1. проверка текущей конфигурации EEPROM
M503
— skip—
Unified Bed Leveling System v1.01 active.
Active Mesh Slot: 1
EEPROM can hold 16 meshes.
— skip —
echo: M851 Z-1.55
— skip —
1.2. выключаем выравнивание
SENDING:G29 D
Unified Bed Leveling System v1.01 inactive.
1.3. обнуляем смещение сенсора относительно сопла
M851 Z0
1.4. сохраняем текущее состояние
M500
1.5. перемещаемся в точку тестирования
G1 z20 x200 y200
1.6. тестируем точность сенсора и среднюю координату срабатывания
SENDING:M48 P10 V2
M48 Z-Probe Repeatability Test
1 of 10: z: 5.077
2 of 10: z: 4.919
3 of 10: z: 5.104
4 of 10: z: 5.009
5 of 10: z: 5.138
6 of 10: z: 5.188
7 of 10: z: 5.088
8 of 10: z: 5.015
9 of 10: z: 5.018
10 of 10: z: 5.174
Finished!
Mean: 5.072989 Min: 4.919 Max: 5.188 Range: 0.269
Standard Deviation: 0.079403
1.7. перемещаемся на место в котором был замер стола
g1 z20 x200 y226 ; датчик смещен на 26мм позади сопла, сопло должно встать на место где был датчик
1.8. производим тест на зажим бумажки (обычной A4), постепенно вручную уменьшая коордирату Z по 0.1 мм , первый прижим к столу покажет искомую координату
тест на зажим листа бумаги Z=3.6
1.9. вычитая из реальной высоты из теста на зажим бумаги , среднюю высоту замерянную датчиком, получаем смещение датчика
3.6-5.07=-1.47мм
1.10. сохраняем смещение датчика в EEPROM
M851 Z-1.47
M500
2. калибровка стола
2.1. основная калибровка
G29 P1 T
SENDING:G29 T
Bed Topography Report:
( 0,390) (390,390)
0 1 2 3 4 5 6
6 | +6.956 +7.033 +7.083 +6.979 +6.704 +6.494 +6.654
|
5 | +7.520 +7.345 +7.208 +7.136 +7.113 +6.832 +7.002
|
4 | +8.227 +8.117 +8.064 +7.840 +7.787 +7.808 +7.756
|
3 | +8.703 +8.681 +8.267 [+8.606] +8.363 +8.305 +8.288
|
2 | +9.517 +9.098 +9.087 +9.123 +9.001 +9.005 +8.960
|
1 | +10.072 +9.788 +9.895 +9.869 +9.759 +9.471 +9.396
|
0 | . . . . . . .
0 1 2 3 4 5 6
( 0, 0) (390, 0)
2.2. заполнение недоступных областей
G29 P3 T
Нужно повторить команду если остались пустые ячейки, пустых ячеек быть не должно.
SENDING:G29 P3 T
Bed Topography Report:
( 0,390) (390,390)
0 1 2 3 4 5 6
6 | +6.956 +7.033 +7.083 +6.979 +6.704 +6.494 +6.654
|
5 | +7.520 +7.345 +7.208 +7.136 +7.113 +6.832 +7.002
|
4 | +8.227 +8.117 +8.064 +7.840 +7.787 +7.808 +7.756
|
3 | +8.703 +8.681 +8.267 [+8.606] +8.363 +8.305 +8.288
|
2 | +9.517 +9.098 +9.087 +9.123 +9.001 +9.005 +8.960
|
1 | +10.072 +9.788 +9.895 +9.869 +9.759 +9.471 +9.396
|
0 | +10.627 +10.477 +10.703 +10.615 +10.518 +9.938 +9.832
0 1 2 3 4 5 6
( 0, 0) (390, 0)
2.3. сохранение матрицы поправок
G29 S1
2.4. Активация и сохранение автоуровня
G29 F0
G29 A
M500
3.2.
Прогреваем стол и сопло до рабочей температуры
M109 S230
M190 S120
3.3. контроль состояния EEPROM
SENDING:M503
—
echo:Unified Bed Leveling:
echo: M420 S1 Z0.00
Unified Bed Leveling System v1.01 active.
Active Mesh Slot: 1
EEPROM can hold 16 meshes.
—
echo:Z-Probe Offset (mm):
echo: M851 Z-1.00
3.4. загрузка и активация системы автоуровня
G29 L1
G29 J
G29A
3.5. проверка встроенным тестом
G26 B120 H250 L0.4 O0.5 S0.6 X200 Y200 U100
Ну и в завершение приведу пример стартового кода для использования UBL.
При этом происходит загрузка матрицы , ее «подтягивание» на актуальную высоту по 4 контрольным точкам (по углам).
Re: Калибровка стола Marlin UBL
setar » 09 июл 2019, 12:07
включение UBL в прошивке Marlin 2.0
// датчик стола блтач
#define BLTOUCH
#define MIN_PROBE_EDGE 0
#define MULTIPLE_PROBING 2
#define Z_PROBE_SPEED_FAST (HOMING_FEEDRATE_Z / 1.5)
//тут свои циферки по смещениям
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 25 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.7 // (больше минус — сильнее вдавливаем в стекло)
#define AUTO_BED_LEVELING_UBL
#define RESTORE_LEVELING_AFTER_G28
#define G26_MESH_VALIDATION
#define MESH_INSET 0 // Set Mesh bounds as an inset region of the bed
#define GRID_MAX_POINTS_X 7 // тут свое пожелание по матрице , я использую 7×7 на столе 400×400 Don’t use more than 15 points per axis, implementation limited.
Re: Калибровка стола Marlin UBL
whoim » 05 фев 2020, 00:23
Re: Калибровка стола Marlin UBL
setar » 07 фев 2020, 16:29
прошивке все равно какого типа у вас датчик, главное чтобы сигнал Z_PROBE отрабатывал
Если у вас проба на Z_MIN_PIN должно быть определение #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
Можно вообще любой контакт назначить
//#define Z_MIN_PROBE_PIN 32 // Pin 32 is the RAMPS default
концвик должен быть объявлен в максимуме (и использоваться по факту для хоминга ) #define USE_ZMAX_PLUG
Re: Калибровка стола Marlin UBL
whoim » 07 фев 2020, 16:38
Re: Калибровка стола Marlin UBL
Myp » 06 окт 2020, 00:20
Re: Калибровка стола Marlin UBL
setar » 06 окт 2020, 11:50
ну да, оно заполняет лишь одну строку/столбец
хотя лучше бы в идеале эти пустоты не появлялись.
P.S.
тут еще новый удобный функционал появился не так давно — опишу тут, потом в инструкцию добавлю.
Предыстория: UBL задуман классно, но реализация в коде и математике — хреновоя
например, если включена функция автозаписи таблицы поправок при каждом сохранении EEPROM (я всегда отключаю) то со временем таблица в сохраненном слоте портится. Дело в том что на эталонную таблицу обычно наложена поправка получаемая по G29 J.
Ну и при 10-15 сохранениях с поправками — все плывет.
Для себя нашел следующую тему:
не пользуюсь функцией G29 J вообще, предпочитая ручное внесение поправок, так получается гораздо точнее (возможно реализация G29 J кривая).
Для внесения поправок использую функцию параллельного переноса поверхности поправок
например для большего вдавливания в стекло на 0.1мм руками перед печатью делаю так:
G29 L1
G29 P6 C-0.1
G29 S1
для удаления головы от стола и уменьшения «вмазывания» например на 0.05
G29 L1
G29 P6 C0.05
G29 S1
с таким скриптом сделал кнопочки в октопринте вверх и вниз сопло
теперь блтач использую один раз, после механических изменений типа протяжки болтов и тех обслуживания.
причем карту поверхности строю 15×15
Re: Калибровка стола Marlin UBL
Myp » 06 окт 2020, 13:54
у меня по периметру всегда получается 1 пустой столбец + слева дополнительный пустой столбец.
Я так и не понял от чего это зависит.
Как рассчитываются координаты точек для сетки?
Координаты точки матрицы 0:0 не совпадают с нулём координат стола?
на столе 101х101 и матрицей 6х6 точек я получаю вот такую картинку.
Код: Выделить всё • Развернуть
Офсет датчика 27мм по X и 2мм по Y
то есть верхняя строка явно должна смочь тестироваться
и второй ряд слева уже тоже попадает в доступное пространство
Добавлено спустя 26 минут 51 секунду:
для 8 точек такая же петрушка.
если смотреть на принтер то видно что при пробинге столбца номер 3 по факту каретка уезжает в ноль по оси X
то есть первые два ряда вобще где-то в минусе находятся.
Re: Калибровка стола Marlin UBL
setar » 06 окт 2020, 14:03
скорее всего у тебя отступы от края стоят большие, плюс смещение датчика от опла — получается большая мертвая зона
тут даже картинка по мертвым зонам есть.
https://marlinfw.org/docs/features/unif . eling.html
выведи в ноль поля
#define PROBING_MARGIN 0
этот параметр тоже занули
#define MESH_INSET 0
Re: Калибровка стола Marlin UBL
Myp » 06 окт 2020, 14:08
Уже занулены.
По факту точки третьего столбца находятся на нуле координат, а 0 и 1 столбец где-то в минусе по координатам
для 15 точек ещё веселее
4 столбец реально был протыкан когда каретка была в нуле по Y.
0,1,2,3 столбцы это где-то в отрицательных координатах.
Код: Выделить всё • Развернуть
может алгоритму не нравится мой маленький стол 101 мм?
Re: Калибровка стола Marlin UBL
setar » 06 окт 2020, 14:29
есть вероятность что не правильно выставлены размеры и положение стола на доступном поле перемещения, у меня такое было.
// The size of the print bed
#define X_BED_SIZE 400
#define Y_BED_SIZE 355
// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS -21
#define Y_MIN_POS -55
#define Z_MIN_POS 0
#define X_MAX_POS (435-21)
#define Y_MAX_POS (410-55)
#define Z_MAX_POS 342
особенность в том что эти значения перемещений, должны соответствовать реальным относительно начала координат (левый ближний угол стола).
Раньше я ставил в MIN_POS всегда ноль, максимум = размеру стола, а выравнивал все посредством manual homing position .
Так НЕ Правильно (хотя и работает везде кроме автоуровня).
желательно переопределения хоминг позиции не использовать
//#define MANUAL_X_HOME_POS 0
//#define MANUAL_Y_HOME_POS 0
//#define MANUAL_Z_HOME_POS 0
Re: Калибровка стола Marlin UBL
Myp » 06 окт 2020, 17:56
такс
очевидно алгоритму не нравится когда задана точка парковки вручную
убрал, стало лучше.
Код: Выделить всё • Развернуть
остальные размеры у меня не заданы жёстко.
#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 101
Добавлено спустя 16 минут 32 секунды:
Re: Калибровка стола Marlin UBL
setar » 06 окт 2020, 18:45
что говорит G29 T1 V4 ?
интересны координаты сетки
Добавлено спустя 4 минуты 54 секунды:
Re: Калибровка стола Marlin UBL
Myp » 07 окт 2020, 12:59
мне тоже интересны координаты сетки но.
их нет, тока высоты.
Код: Выделить всё • Развернуть
а можно задавать вручную точки меша?
щас берётся весь стол и на него накладываестя сетка, а потом уже определяется куда проба не может доехать.
по уму бы надо сначало определять доступную для пробинга область и уже на эту область накладывать координаты сетки точек.
Чтобы не было как у меня, из за 2 мм офсета, я теряю всю полосу в 20 мм.
а ежели я поставлю
#define MESH_MIN_Y 2
по идее это сдвинет нижнюю границу для сетки на 2 мм и я смогу пробоваться у самого краешка.
Re: Калибровка стола Marlin UBL
setar » 07 окт 2020, 13:39
вот так сделай, получишь нижнюю строку
#define MESH_INSET 2
Добавлено спустя 18 минут 55 секунд:
Кстати никто тебя не заставляет заполнять пустоты автоматом.
Сделай это вручную:
- Берем пластиковую карточку
- G29 P2 B T V4 H
- Сначала будет произведен замер толщины тестовой карты в центре стола — подкладываем ее под сопло и крутя ручку на LCD экране (для этого режима LCD обязателен) слегка прижимаем карту соплом к столу, степень прижима запоминаем и далее стараемся его повторить. Делаем Click
- далее сопло будет приезжать на точки сетки в которых пока нет данных и так же прижимая сопло через карточку кликаем когда получим нужную степень прижима
- проверяем сетку G29 T
- сохраняем ее например в 1 слот (используется по умолчанию если не указано иное)
G29 S1
Источник
Anet A8 Plus: как прикрутить автоуровень BLTouch (и прошить принтер на Marlin 2.0)
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
Решил поставить китайский BLTouch (он же 3D Touch) на свой принтер, но конкретно для Anet A8 Plus мануалов не нашёл. Мне, как новичку, было непросто разобраться, поэтому собрал всё в кучу.
Чтобы заставить работать датчик автоуровня, нужно сделать несколько вещей:
1. Повесить датчик и подключить электрику.
2. Прошить принтер на Marlin, предварительно поправив файлы конфига.
3. Настроить всё это добро.
1. Физическая часть
Перед всеми манипуляциями крайне желательно выставить стол вручную.
Я распечатал вот это крепление с Thingiverse из ABS, датчик крепится слева от экструдера под вентилятор охлаждения. В сложенном состоянии концевик оказался ниже сопла, пришлось подложить гайки под крепление.
Сам датчик я купил на Али вот здесь с доставкой из России, кстати привезли очень быстро. В описании указана распиновка:
- Чёрный — земля
- Белый — Z min
- Коричневый — земля
- Красный — +5 Вольт
- Оранжевый — сигнал
На деле провода оказались другого цвета:
- Чёрный — земля
- Белый — Z min
- Зелёный — земля
- Красный — +5 Вольт
- Жёлтый — сигнал
Электрику я подключал, посмотрев вот это видео:
Только на видео простой A8, не Plus. У нас сигнальный провод подключается к седьмому пину дисплея, а не к шестому (в прошивке это будет пин 29). Сделать это можно разными способами, я скрутил конец провода в петлю, залудил и просто накинул на пин, поверх воткнув разъём дисплея. Остальные провода я подключил вместо концевика оси Z по схеме:
2. Прошивка и конфиг
Прошивал вот по этому мануалу. Не знаю, как у других, в моей плате уже есть бутлоадер и прошиваться можно просто через USB кабель. Если загрузчика нет, то его можно залить с помощью ардуинки, вот хороший мануал. Короче:
- Качаем последнюю версию Arduino IDE
- Качаем Anet A8 board definition
- Распаковываем board definition, как указано в ридми (Мои документы\Arduino\hardware)
- Качаем последнюю версию марлина, распаковываем архив в какую-нибудь папку
- Качаем файлы конфига для Anet A8 Plus, копируем с заменой эти файлы в папку \Marlin
- Открываем файл \Marlin\Marlin.ino в Arduino IDE
Теперь надо сразу отредактировать конфиг. Некоторые параметры подбираются опытным путём, мне пришлось заливать прошивку в плату не один десяток раз. На сайте марлина есть подробное описание всех параметров. Старые мануалы не актуальны для второй версии марлина, теперь некоторые параметры называются по-другому. Я читал инструкцию на странице товара на Али, вот этот и этот мануалы, приходилось гуглить и исправлять, вот что у меня получилось. Файл Configuration.h:
- #define Z_MIN_PROBE_ENDSTOP_INVERTING false
- #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
- #define BLTOUCH
- #define SERVO0_PIN 29
- #define AUTO_BED_LEVELING_BILINEAR
- #define GRID_MAX_POINTS_X 4 // количество точек, по которым происходит калибровка. Я поставил 4, то есть калибровка будет по 16 точкам, всё-таки стол немаленький. Можно выставить разные значения для X и Y.
- #define Z_SAFE_HOMING
- #define REVERSE_ENCODER_DIRECTION // У меня почему-то оказалось инвертированным направление энкодера. Чтобы пофиксить, пришлось раскомментировать эту строчку.
- #define NOZZLE_TO_PROBE_OFFSET // расстояние по осям X и Y от концевика до сопла
- #define EEPROM_SETTINGS
- #define MIN_PROBE_EDGE 15 // отступы от краёв стола до точек, по которым будет проводиться калибровка. Я поставил 15 мм, чтобы сопло не задевало скрепки на стекле, а вот справа нужно оставить 75 мм, иначе каретка упрётся в раму — для этого в файле Configuration_adv.h укажем #define MIN_PROBE_EDGE_RIGHT 75
В таком виде прошивка не лезет в память принтера, я для экономии места выпилил возможность работы с SD-картой и PID-регулятор стола:
Сразу скажу, что у меня после перепрошивки начала плавать температура сопла на 10 градусов вверх и вниз, калибровка PID не дала результатов, в итоге я подсмотрел значения коэффициентов у такого же принтера:
и записал их в прошивку:
- #define DEFAULT_Kp 22.2
- #define DEFAULT_Ki 1.08
- #define DEFAULT_Kd 114.0
Температура держится более-менее стабильно. Также эти коэффициенты можно записать в EEPROM.
Продолжаем процесс перепрошивки:
- Выбираем «Инструменты -> Плата -> Anet V 1.0 (Optiboot)
- Устанавливаем библиотеку u8glib: жмём «Скетч -> Подключить библиотеку -> Управлять библиотеками», ищем в поиске «u8glib», ставим
- Подключаем наш принтер через USB кабель (включать блок питания не обязательно), жмём зелёный круг со стрелкой и ждём, пока скетч скомпилится и загрузится в принтер. В процессе компиляции могут вылезать ворнинги, ничего страшного.
После запуска принтер может ругаться разными ошибками на EEPROM:
После каждой перепрошивки нужно сбрасывать EEPROM, я прямо через меню жму Configure -> Restore Settings, затем Store Settings и перезагружаю принтер. Если всё получилось, главный экран выглядит вот так:
Нужно настроить Z Offset, то есть расстояние от края сопла до края концевика по оси Z. Делать это нужно на заранее выровненном столе. Я сделал просто: поставил через меню Configuration -> Probe Z Offset значение смещения -1.00 мм, чтобы принтер разрешил нам опускать сопло ниже концевика. Сделал Auto Home, потом в меню Motion -> Move Axis — Move Z и начал опускать экстудер по 0.1 мм, просовывая лист бумаги между соплом и столом. Получившееся значение (например, -0.27) вычел из Probe Z Offset, полученный результат (например, 0.73) выставил в Configuration -> Probe Z Offset. Потом повторил процедуру. Короче, наша цель такая: после Auto Home и опускания экстудера до Z=0 между соплом и столом должна пролезать бумажка, как при ручной настройке — это и будет высота первого слоя. Не забываем сохранить настройки в EEPROM: Configuration -> Store Settings. Вот тут чувак показывает с 5:52:
Настраиваем все остальные параметры (ускорения, джерки и т.д.) и можно печатать. Осталось добавить в стартовый G-code команду G29 (автокалибровка стола) после G28 (автохоум), если хотим, чтобы калибровка происходила перед каждой печатью.Могу сказать, что мне повезло и китайский датчик работает прекрасно, никаких багов не замечено. Вот тут видно, как при печати крутится ось Z, компенсируя кривизну стола:
Раньше, чтобы напечатать вот такую деталь для металлоискателя во всю область печати 300х300, приходилось потратить немало нервов, я задолбался крутить эти барашки и перезапускать печать — один угол впечатывается в стол, другой висит в воздухе.
Теперь об этой проблеме можно не думать, первый слой ложится ровно даже на больших деталях:
Источник