Настройка BLTouch/3DTouch в Klipper, RURAMPS4D + Due

Подписаться на 3Dtoday
Andrico
Идет загрузка
Загрузка
18.11.18
960
13
печатает на RepRap
Техничка
11
Статья относится к принтерам:
RepRap
После приключений, описанных в посте, дошли руки до настройки автоуровня. Датчик 3DTouch от DForce/TriangleLab лежал и ждал своей очереди давно, но на Marlin руки так и не дошли.

Коммутацию подробно описывать не буду, поскольку у каждой платы она своя, но вкратце - для RuRAMPS4D диаграмма приведена здесь, ей я и руководствовался - подключил к разъёму SERVO0 и к отдельно выделенному разъёму Z_Probe. Вместо Z_Probe можно использовать разъём концевика Zmin, но для плат с 3.3V потребуется доп. резистор - в примере ниже будет описано подключение именно к Z_Probe.

Физически датчик должен монтироваться в определённом положении относительно сопла: если по X/Y тут есть некоторая свобода фантазии - лишь бы не ближе 15 мм к хотенду, то по Z условие в документации описано жёсткое:
  • щуп датчика в закрытом положении должен выглядывать из корпуса на длину от 6 до 7 мм (см. регулировочный винт на торце датчика, между крепёжными отверстиями).
  • нижний край пластикового корпуса датчика должен быть приподнят по Z на 8 мм относительно сопла.
Иными словами, разница между соплом и запаркованным щупом по Z должна быть порядка 2 мм.
Мой датчик от продавца пришёл со щупом 8,1 мм - пришлось обращаться к регулировочному винту, чтобы загнать щуп поглубже в корпус - до 6,5 мм.

Итак, датчик смонтирован, время обратиться к конфигу Klipper. Пример конфига есть здесь.

Для начала прописываем серву, pin берёте согласно вашему конкретному железу. Для Arduino Due с RuRAMPS4D сигнальный контакт SERVO0 приходит на пин PC25 (digital pin 5 в нумерации Arduino).
Добавляем в произвольное место конфига секцию servo, название (в данном случае у меня 'bltouch') роли не играет - просто текстовая метка для конкретной сервы.

[servo bltouch]
pin: PC25 #здесь проставьте свой пин, к которому подключена серва
maximum_servo_angle: 180
minimum_pulse_width: 0.0006
maximum_pulse_width: 0.0024

Далее нужно прописать секцию probe, описывающую параметры самого датчика - смещение относительно сопла, команды активации и деактивации. Здесь название сервы должно совпадать с прописанным в секции servo. Пин - это разъём, к которому вы подключили двухконтактный штекер от датчика: для Arduino Due с RuRAMPS4D сигнальный пин Z_Probe подведён к PC14 (digital pin 49 в нумерации Arduino).

[probe]
pin: ^PC14 #здесь проставьте свой пин, куда подключён датчик, ^ - pull-up. Если сигнал нужно инвертировать - ! перед номером.
x_offset: 0.0
y_offset: 37.5
z_offset: 2.16 #см. процесс поиска z_offset ниже по шагам
activate_gcode:
SET_SERVO SERVO=bltouch ANGLE=10
SET_SERVO SERVO=bltouch ANGLE=60
G4 P200
deactivate_gcode:
SET_SERVO SERVO=bltouch ANGLE=90
G4 P100

Как я искал z_offset... :)
  1. Выравниваете стол (не сильно критично конечно, поскольку измерять вы будете в одной и той же точке, но желательно чтобы ровный был на стадии измерения). Определяете координаты X/Y- где будете измерять разницу. Например X150 Y100 (центр, у меня стол 300x200).
  2. Хоумите Z: G28 Z или в GUI/меню.
  3. Перемещаете X/Y в X150 Y100. Поднимаете стол Z0 (то бишь к соплу) - у меня Z0 чётко до касания соплом стола, без зазора вообще. Далее до конца измерений никаких регулировок уровня стола не трогаете.
  4. Хоумите Z: G28 Z или в GUI/меню.
  5. Перемещаете X/Y в положение с учётом смещения датчика относительно сопла. В моём случае это X150 Y62.5 (100-37.5 мм) - щуп датчика окажется точно в положении сопла на шаге 3.
  6. Даёте команду 'SET_SERVO SERVO=bltouch ANGLE=10' - щуп выдвинется на полную длину, затем следом 'SET_SERVO SERVO=bltouch ANGLE=60' - датчик перейдёт в рабочий режим.
  7. Исходя из того, что по Z разница между соплом и щупом около 2 мм поднимаете стол в Z3 - смотрите, сработал ли датчик (при срабатывании сразу же загорится светодиод на нём). Если не сработал - хоумите Z снова и поднимаете до меньших значений с небольшим шагом: 2.9, 2.8, 2.7 и т.д. Задача - максимально точно найти ту высоту, при которой датчик стабильно будет срабатывать. Между попытками измерениями обязательно повторять хоуминг Z - поскольку в дальнейшем все измерения у вас будут делаться после хоуминга.
  8. Если датчик сработал, хоумите Z - уменьшаете последнее значение на небольшую величину (я шагами по 0,005 мм возился). Даёте команду 'SET_SERVO SERVO=bltouch ANGLE=160', чтобы сбросить ошибку датчика (а 99% что он у вас останется моргать диодом, уперевшись щупом в стол), далее шаг 6. Вот здесь как раз я нашёл нужную величину - стол останавливается ровно в момент, когда срабатывает датчик - ни раньше, ни позже: так и должно быть у вас.
  9. Долго и муторно находите искомую дельту: в моём случае Z2.16 - это гарантированное срабатывание датчика. На всякий случай убеждаетесь, что в процессе измерений стол у вас никуда не убежал - X150 Y100 Z0 должен привести сопло в ту же точку с соприкосновением со столом (см. шаг 3).
  10. Прописываете найденный z_offset в секции probe. Настройка самого датчика на этом закончена.
Далее в конфиге нужно добавить соответствующую секцию для настройки автолевелинга. Я использую Mesh Bed Leveling, поэтому добавил 'bed_mesh' и в неё всего 2 параметра для начала - координаты прямоугольника, в пределах которого делать замеры. Важно: координаты указываются для сопла, не для датчика! Т.е. никакие offset'ы здесь не учитываются - вы должны сами проверить границы, в которых датчик будет касаться стола. Offset'ы прописанные вами будут учтены только в расчётах кривизны стола, но не при движениях в процессе замера.

После того, как убедились, что механизм работает и риска зафигачить соплом в стол нет - в секции своего stepper_z меняете position_min на отрицательную величину: в рамках этой величины датчик будет поднимать стол до срабатывания. Важно: position_min не должен превышать разницу между соплом и датчиком по высоте!!! т.е. в моём случае не более 2.19 - я выбрал 1.5 мм для безопасности (position_min = -1.5), чаще всего этого хватает (если не хватает - имхо вам предстоит серьёзный разговор со своим столом, разберитесь - почему он настолько кривой :))

[bed_mesh]
min_point = 35,35
max_point = 278,148

#параметры ниже не трогал, добавил на будущее и закомментировал
#probe_count: 3,3
#fade_start: 1.0
#fade_end: 5.0

Вот собственно и всё: сохраняете конфиг, перезапускаете службу klipper и можно пользоваться.

При подаче команды BED_MESH_CALIBRATE должен запуститься процесс замера - проще показать на видео. После замеров будет сформирована таблица для дальнейших поправок в процессе печати, её можно посмотреть командой BED_MESH_OUTPUT. Чтобы сохранить текущие замеры в конфиге - можно дать команду SAVE_CONFIG, но у себя в силу хлипкости фанерного стола я предпочитаю замерять всё непосредственно перед печатью. BED_MESH_CLEAR очищает таблицу измерений.

В слайсере я добавил следующие команды в starting script:
SET_SERVO SERVO=bltouch ANGLE=160 ;сбрасываем ошибку на датчике, если она есть
G28 ; стандартно - хоуминг
BED_MESH_CALIBRATE ; выполняем замеры
G0 X150 Y100 Z10 F1000 ; переводим сопло в центр, тут по желанию

а в ending script добавил:
SET_SERVO SERVO=bltouch ANGLE=160 ;сбрасываем ошибку на датчике, если она есть

Профит.
Подписаться на 3Dtoday
11
Комментарии к статье

Комментарии

18.11.18 в 21:06
0
Ах да, забыл - поскольку Z выставлен в 0 до касания соплом стола, потребуется в слайсере задавать offset для z - это и будет ваш "лист бумаги", я использую 0,01 мм для удаления сопла от стола на эту велиину.
18.11.18 в 22:52
0
В дискорд канале клиппера ночью (gmt+3) обычно есть один из разработчиков клиппера. Часто вижу онлайн помощь страждущим, но надо инглиш, В их irc не заходил, но там, говорят, еще больше разрабов и повер юзеров.
19.11.18 в 00:13
0
Да там в принципе неплохо и на гитхабе отвечают :)
19.11.18 в 00:53
0
Yep. Но дискорд/ирц пооперативней. Такой, опенсурс лайв суппорт.
19.11.18 в 07:49
0
В дискорд давно завлекают, зарегаюсь как созрею на сборку Voron 2, а пока чот не до этого :)
19.11.18 в 13:06
0
Вот вот, я там и торчу, в вороне и в клиппере. Очень много околопринтерной.принтерной информации проскакивает интересной. Они, кстати, зарелизили мануал по сборке второго ворона.
19.11.18 в 13:09
0
за что не очень люблю 3DT, так это за постоянный оффтоп в комментах :) написал в лс :)
19.11.18 в 14:47
1
Спасибо за инструкцию. Как раз едет датчик. Правда буду ставить на марлин. Но перерыв кучу, ваша самая последовательная и понятная.
19.11.18 в 14:55
1
Но перерыв кучу, ваша самая последовательная и понятная.
Спасибо, я старался сделать её именно такой и именно оттого, что сам не нашёл инструкций "для чайников" когда мне было нужно. Есть про физическое подключение, есть про включение в прошивке, но не про цельный процесс. Психанул и пока свежо было - описал процедуру, как есть :)
С Z0 у меня позиция отличная от большинства - я делаю его не по бумаге, а до касания: предпочитаю в слайсере иметь возможность отталкиваться от реального нуля без учёта толщины листа. Единственное - S3D с точностью до 0,1мм это позволяет задать, более точно не получится - если только в gcode править.
19.11.18 в 21:56
1
Единственное - S3D с точностью до 0,1мм это позволяет задать, более точно не получится
В смысле не получится более точно указать?

Там 2 знака после запятой. Я ставил и 0,05 без проблем (но для моих задач 0,1 лучше оказалось)
19.11.18 в 22:00
0
В смысле не получится более точно указать?
Пардон, в тексте опечатка - да, имелось ввиду именно 0,01. Спасибо за уточнение.

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Обзор 3D-принтера Creality CR-X

Оптика на FDM 3D-принтере – как это делается

Технология обработки печатных изделий

RIZE представляет полноцветный настольный 3d-принтер XRIZE и новые материалы

Pixel tolerance

Американские ракетчики напечатали на 3D-принтере трехметровый топливный бак