Попался мне в цепкие лапы принтер, в составе которого есть датчик BL-Touch. Поэтому я решил описать всё, что сумел о нём узнать. Просто раньше я уже видел статьи про этот датчик, но на тот момент они были настолько обрывочными, что составить полное мнение о нём не удавалось. Да и сейчас есть масса статей, в каждой из которых есть часть полезных сведений, но нет всего сразу. Так что будем считать, что я делаю реферат :-).
Начнём с того, что BL-Touch - механический датчик. Как можно механически определять факт касания стола? Дело в том, что если просто выставить некий штырь, то он должен несколько выступать ниже сопла. И он будет неизбежно шкрябать по уже напечатанной модели.
Разные инженеры находят против этого шкрябанья различные решения. Например, у моей первой "Дельты" (да-да, сейчас у меня уже вторая) эффектор собирался вот так:
Экструдер качается на оси из двух верхних винтов. В нижней же части рисунка отходят два чёрных провода - там расположен обычный микрик. Выглядит вся эта конструкция угрожающе. Трогаешь сопло у выключенного принтера (чтобы не обжечься), а оно - гуляет вверх-вниз на пару миллиметров! Но тем не менее, точность у принтера была довольно приличная. Так что глаза боятся, а экструдер - делает.
Чтобы было не так страшно, можно поставить сервомашинку, которая будет убирать щуп всё время, когда он не нужен. Я нахально взял иллюстрации этого дела вот из этого видео:
К самому видео мы ещё вернёмся, а пока - вот сервомашинка в одном положении
А вот - в другом:
Вот щуп готов касаться стола (расположен ниже сопла).
А вот - он убран, чтобы не шкрябал:
Это уже лучше. Но всё равно обладает массой недостатков.
Во-первых, чем больше весит головка, тем хуже скоростные характеристики принтера (иначе жди "звона" на модели). Сервомашинка легче шагового двигателя, но всё равно весит. Плюс крепдение.
А во-вторых... Это, конечно, моё личное мнение, но я его всем навязываю, хоть признаю, что оно может быть и ошибочным... В общем, не нужна автокалибровка для принтеров с картезианской схемой (где ремни так или иначе таскают головку по осям X и Y, а винт - по оси Z). У винта всё равно будет люфт. А у некоторых - и износ. Так что максимум, зачем там, согласно этому мнению, нужен датчик - чтобы помочь в ручной калибровке. Но честно говоря, я свой MZ3D по бумажке выставляю за 5 минут, после чего - месяц не вспоминаю об этом процессе. Это если часто печатаю. А если редко - сейчас середина июля а, последний раз я его в апреле калибровал, когда с новым лаком экспериментировал. И калибровал чисто потому, что лак Intesa чуть более критичен к калибровке, чем Nelly. В общем, лишнее это там.
А вот принтеры Дельта - они просто созданы для автокалибровки. Там все три двигателя работают идентично. Но там механика такова, что что-то лишнее на эффекторе не разместишь. Я на первой Дельте пытался приткнуть вентилятор обдува модели. Либо в каком-то из положений за него задевала одна из диагоналей (если расположить над эффектором), либо он задевал за один из ремней (если чуть в стороне под). Короче, размеры системы "серво машинка + микрик + крепление" сильно подрезают крылья фантазии инженеров.
И вот тут, как раз, на сцену выходит этот самый BL-Touch. Его принцип действия в точности повторяет описанный выше механизм. У него тоже есть щуп, он его умеет выдвигать и убирать, у него есть выход, аналогичный микропереключателю. Собственно, в уже упомянутом видео:
как раз рядом лежат сервомашинка и B:-Touch и показано, что они работают идентично. Но размеры этого датчика таковы, что он прекрасно размещается рядом с хотэндом под эффектором принтеров системы Delta. Наконец-то я вставлю картинку, не взятую из сети, а свою.
Ещё раз повторю, что из этого датчика выходят провода, полностью идентичные системе с сервомашинкой - трёхпроводная линия для управления машинкой (два провода питания и провод с ШИМ сигналом), а также двухпроводный выход (земля и сигнал).
Унутре у него думатель и неонка. Думатель декодирует ширину импульса и формирует ответы (а также умеет таскать щуп вверх и вниз), а неонка - загорается, когда щуп вверху (будь он втянут думателем или вдавлен столом).
При старте, думатель три раза дёргает щуп туда-сюда. Если тот по какой-то причине не ходит - неонка (да знаю я, что это светодиод, но у Стругацких была неонка) начинает мигать, сигнализируя об ошибке. Вот здесь кроется первая возможная проблема. Купил я принтер, собрал, а датчик оказался с браком. Если щуп утоплен слишком глубоко, то по какой-то причине он не сдвинется с места. Продавец уверяет, что это была сбойная партия, и что мне уже едет новый, без брака. Но первый вывод мы делаем такой: Начинать процесс можно только если неонка или всё время светится, или всё время не светится. Если она мигает - ничего хорошего не выйдет. Мой принтер при калировке с мигающим датчиком, в верхней позиции говорит "Бдыщь" и замирает.
Чтобы сбросить ошибку программно, необходимо и достаточно подать следующую команду:
M280 P0 S160
Так как Дельте лучше всего калиброваться перед каждой печатью, то можно вставить эту команду перед установкой нуля. Думателю нужно время для отработки, вот пусть и работает, пока принтер в ноль встаёт. Тогда скрипт запуска печати будет иметь следующий фрагмент:
M280 P0 S160
G28
G29
А вообще, команды, которые можно посылать в думатель, задавая различную ширину импульсов, следующие:
M280 P0 S10 - Вытянуть щуп в измерительное положение
M280 P0 S90 - Втянуть щуп для процесса основной работы принтера
M280 P0 S120 - Запустить процесс самодиагностики до подачи новой команды
M280 P0 S160 - Сбросить состояние ошибки
Возникает вопрос: А насколько можно доверять показаниям этого датчика? Так как я сейчас пишу реферат, то просто сошлюсь на результаты исследований зарубежного специалиста:
А так - если коротко, то ответ следующий: "Доверять можно".
Современные версии "Прошивки" Marlin уже поддерживают данный вид датчика. Достаточно раскомментировать строку
#define BLTOUCH
в файле Configuration.h
А вот здесь https://locxess.de/3d/BLTouch_Anleitung_englisch.pdf
рассказывается, как активировать данный датчик, пользуясь только функциями автокалибровки с сервомашинкой. В этом же документе подробно рассказано, как правильно выставить нулевой уровень, чтобы не мучиться с идеальной калибровкой самого датчика. Мне это ещё предстоит, когда приедет датчик без брака. Вот поставлю его, и буду именно ему ноль выставлять.
Следует упомянуть одну особенность датчика, которая не должна проявиться при использовании готовых программных средств, но лучше о ней знать. Итак. Мы вытянули щуп, дальше - ткнулись в стол. На выходе появился сигнал. Вот самое главное - не тянуть с возвратом щупа в исходное положение. Попробуйте подать команду M280 P0 S10 и затем нажимать на щуп пальцем, удерживая его нажатом состоянии всё дольше и дольше. После определённого момента, датчик сорвётся в состояние ошибки. То есть, ткнулись головкой в стол, почувствовали ноль, тут же увели головку вверх. Иначе - жди беды. Если работаем с картезианским принтером, и двигатель по оси Z работает медленно - вполне можем словить такую ситуацию.
К слову, никто не мешает втянуть датчик той же командой M280 P0 S90, а затем - дёргать за него пальцами, вытягивая его наружу. Точно так же - кратковременно он будет гасить свою неонку и выдавать сигнал, имитирующий разомкнутый микропереключатель, но если выдернуть его надолго - думатель активирует состояние ошибки.
Следующая особенность датчика является именно особенностью, а не проблемой. Но в паре с особенностями прошивки Marlin, она порождает проблему, из-за которой я чуть не повредил покрытие на столе (хорошо, что на всякий случай, экспериментировал с толстым слоем бумаги, повредил только её).
Прошивка Marlin ведёт головку от датчиков нулевого положения (у Дельты они сверху) почти до стола со втянутым щупом. Ближе к столу, щуп выскакивает, и начинается процесс калибровки. Если датчики стоят ниже, чем положено, либо стол чуть поднят (а мы его подняли, чтобы он не грел основание принтера), то процесс выброса щупа начнётся уже почти у самого стола. И не закончится. И датчик войдёт в состояние ошибки. А принтер - врежет со всей дури соплом в стол, а затем - ещё проведёт им в сторону. Наверное, про себя он говорит: "Рвать покрытие, так рвать".
Чтобы устранить данную проблему, можно сдвинуть датичики нуля повыше. Если это сложно (у меня бы потребовалось двигать рельсы), надо уменьшить следующую константу в файле Configuration.h:
#define MANUAL_Z_HOME_POS 340 // Distance between the nozzle to printbed after homing
Тогда щуп начнёт выдвигаться выше, и процесс завершится без проблем. Наверняка можно поправить и код, но такой вариант - проще.
Заключение
Итак, датчик BL-Touch является достаточно удобным механическим датчиком уровня. Он имеет малые размеры, поэтому легко может быть размещён под эффектором принтеров со схемой Дельта. Управление датчиком производится аналогично управлению сервомашинкой, через ШИМ-сигнал. Точность датчика и повторяемость результатов - приемлемы для автокалибровки принтера. Однако, у датчика имеется ряд особенностей, которые лучше знать, чтобы избегать его входа в состояние ошибки.
Однако, цена датчика такова, что автор вряд ли бы купил его чисто ради интереса. Это - самый большой из известных недостатков рассматриваемого датчика. Также известно, что у датчиков могут быть проблемы в целой партии. Поэтому перед подтверждением покупки, их следует тщательно проверять. При малейшем подозрении на брак - выходить на связь с продавцом.
C уважением В.Ш.
комментарии