Auto Bed Leveling для Дельта-робот принтера

Auto Bed Leveling для Дельта-робот принтера

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

Для дельта-принтеров, в которых стол при работе неподвижен, теоретически  можно настроить его уровень один раз и больше к этому не возвращаться. Но механизм регулировки все-равно нужен, т.к. при сборке бытовых 3д-принтеров возможны некоторые отклонения в окончательных размерах конструкции, и даже погрешность в 0,5мм для уровня стола — это много.

Возникает желание упростить конструкцию, избавиться от механизма регулировки уровня, и просто прикрутить стол к основанию. Этого можно добиться активировав функцию автоматического измерения уровня перед печатью — ENABLE_AUTO_BED_LEVELING.

Возможность применения авто-уровня в Дельта-робот кинематике имеет свои нюансы. Они не очевидны, но значимы. Попробую объяснить свою мысль простыми словами.

Стандартный алгоритм взятия пробы стола примерно такой (для прошивки Марлин):

1. Отправляем эффектор (каретку) вниз, в координату по Z заведомо ниже стола. Стандартно в прошивке значение равно — (минус) 10мм.

2. Эффектор двигается вниз пока не сработает датчик (не упрется им в стол), пусть датчик — обычная кнопка, и её смещение относительно уровня сопла равно нулю.

3. Кнопка сработала, эффектор остановился. Принтер «думает» что достигнута назначенная конечная точка (-10мм). Это происходит из-за отсутствия обратной связи (энкодера) который бы показал в какой реально позиции находится сопло.

4. Вычисляем настоящую позицию эффектора. Это мы можем сделать, т.к. программа (Марлин, прошивка) постоянно контролирует количество  шагов совершенных двигателями каждой оси. Зная кол-во шагов на 1мм (задается в конфигурации прошивки) и сколько всего шагов совершили двигатели при работе, можно вычислить пройденный путь. В дельта-робот кинематике все чуть сложнее, тут мы знаем (задаем) количество шагов на градус поворота рычага и вычисляем угол поворота, а затем уже координату в которой находится эффектор.

5. Запоминаем в программе вычисленное значение Z-координаты, которое и будет искомым уровнем стола (учитывая пункт 2 — смещение датчика относительно сопла = 0).

 

Какой бы ни был датчик высоты: емкостный, пьезо-датчик, оптический, механический, — его срабатывание сопровождается погрешностью. В случае с кнопкой погрешность срабатывания составит +- 0.025мм, что вполне приемлемо, и достаточно для правильного нанесения первого слоя.

Т.е. мы присваиваем (в алгоритме 4,5 пункты) значению Z координату с ошибкой. Для кнопки — 0.025мм.

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

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

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

Чем это чревато? Приведу пример: измерив уровень стола на его краю с погрешностью 0.025мм и переместившись после этого в центр и опять сделав замер, мы получим в центре погрешность уже 0.1мм, а ожидалась та же самая 0.025мм. Прошло некоторое время, чтобы выявить (понять) источник этих ошибок.

 

Что нужно, чтобы Автолевел заработал правильно:

1. Очень точно исполненная кинематика.

2. Очень точный датчик уровня стола.

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

 

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

 

Что имеем в результате:

1. Достаточную точность сканирования всей поверхности для наложения первого слоя на стол.

2. Уходим от алгоритма Автолевела, предложенного автором проекта FirePick (интересно, а сам он его тестировал?), т.е. нет необходимости использовать для вычислений Forward алгоритм.

3. Минус — по команде G29, по сетке, имеем сравнительно низкую скорость проведения замеров, что компенсируется достаточно быстрой кинематикой. Получается гораздо быстрее чем на Пруше, но чуть медленнее чем на обычной дельте.

 

Решение простое, проверенное, рабочее.

 

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *