Калибровка Delta-принтера в Marlin'е

Подписаться на 3Dtoday
uotani
Идет загрузка
Загрузка
04.05.17
10841
22
Техничка
21
Всем привет!
Несмотря на то, что про калибровку дельта-принтеров есть уже немало постов, сам настраивал свой Anycubic plus после прочтения этого поста Калибровка Delta Kossel, хотелось бы остановиться на некоторых аспектах именно прошивки Marlin, которая идет в комплекте к этому, да и наверное многим другим принтерам. Ну и еще несколько моментов, которые я раскопал за несколько недель владения этим пепелацем и которые не нашел в русскоязычном сегменте. Я не делаю выводов какая прошивка лучше, честно не знаю пока, но по некоторым условиям Repetier пока не пошел, поэтому речь пойдет в основном о Marlin.

Итак, для начала немного теории и о калькуляторах для калибровки дельт - о чем не написано (либо я просто не нашел), но наверное многих интересует. В поисках информации, как же быстро и правильно настроить свой принтер, задался вопросом - а почему же в разных калькуляторах предлагаются разные корректировки настроек прошивки? Возьмем два, думаю наиболее популярных калькулятора - Эшера и deltaCalibrationTool, сократим последний до DCT (ссылки приводить не буду, они думаю всем известны, кому нужно, можете найти в посте по ссылке в начале). Рассматривать Diagonal_Rod не вижу особого смысла, думаю все калькуляторы справляются с этой задачей хорошо, да и вручную калибровать его совсем несложно, измеряя распечатанные калибровочные детали. Основное внимание хотелось бы уделить так сказать 2D, геометрической калибровке, то есть альфа-ротации и дельта-радиусу. Собственно эта калибровка делается для того, чтобы "система" четко понимала, где относительно каждой "башни" находится ноль координат XY, от этого зависит корректность расчета перемещений по каждой направляющей для перемещения экструдера на заданное расстояние от начала координат.
Поковырявшись в геометрических построениях, пришел к выводу, что калькуляторы используют две разные методики:
  1. Калибровка относительно "идеального" нуля координат, без его смещения (DCT). В этом варианте вводятся поправки на все углы и дельта-радиусы каждой "башни", чтобы в итоге эти радиусы сходились в "идеальном" нуле координат. При этом общий дельта-радиус можно не менять, достаточно сделать поправки для каждой "башни".
  2. Калибровка относительно "башни" С со смещением нуля координат (Эшер). В этом варианте считается, что "башня" С всегда остается на оси Z, поэтому вся геометрия "поворачивается" относительно "идеального" нуля координат, чтобы альфа-угол C был равен 90гр. (либо от "башни" С строится новая ось Y, по которой строится новый ноль по XY, думаю это вопрос геометрического восприятия, а расчеты одинаковы). При этом Эшер не дает корректировок дельта-радиусов по "башням", вероятно из-за того, что смещая ноль координат по XY, считает, что все "башни" расположены на одной окружности с новым центром, равным началу координат XY, следовательно дельта-радиусы одинаковы для всех "башен", обязательно задается только новый общий дельта-радиус.
Немного рисунка, для наглядности сделал утрированно большие отклонения "реального" расположения "башен" (сплошные линия и окружности) от "идеального" треугольника (пунктир):
890724b994f7df492a63a51351e22383.png
Отсюда можно сделать вывод, что делать калибровку сразу по нескольким калькуляторам не имеет большого смысла, они будут давать разные результаты, в зависимости от метода построения и расчета координат "башен" относительно нуля XY. Забегая вперед, выскажу свое мнение, что выбор метода отчасти зависит от прошивки - для Repetier можно использовать оба метода, для Marlin удобнее Эшер, хотя можно использовать и DCT, если кто захочет посильнее заморочиться с прошивкой.

Дальше перейдем непосредственно к Marlin и калибровке в нем альфа-углов и дельта-радиусов (для прошивки 1.1.0-RC8, в других версиях может отличаться). Для этого понадобиться внести некоторые корректировки в код прошивки. Нужные нам параметры на разных вкладках, поэтому пойдем от простого к сложному.
На вкладке Configuration.h для корректировки дельта-радиуса и диагонального стержня не останавливаемся, кто добрался до калибровки Marlin, наверняка и так это знает.

Корректировку дельта-радиусов и диагональных стержней (diagonal rod) ищем на вкладке Conditionals_post.h, ищем кусок кода, думаю как вводить корректировки, понятно:
#if ENABLED(DELTA)
#ifndef DELTA_RADIUS_TRIM_TOWER_1
#define DELTA_RADIUS_TRIM_TOWER_1 0.0
#endif
#ifndef DELTA_RADIUS_TRIM_TOWER_2
#define DELTA_RADIUS_TRIM_TOWER_2 0.0
#endif
#ifndef DELTA_RADIUS_TRIM_TOWER_3
#define DELTA_RADIUS_TRIM_TOWER_3 0.0
#endif
#ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_1
#define DELTA_DIAGONAL_ROD_TRIM_TOWER_1 0.0
#endif
#ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_2
#define DELTA_DIAGONAL_ROD_TRIM_TOWER_2 0.0
#endif
#ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER_3
#define DELTA_DIAGONAL_ROD_TRIM_TOWER_3 0.0
#endif
#endif
Для корректировки diagonal rod может использоваться команда M665 R132.15 L267.05 A0.0 B0.0 C0.0, после первой прошивки изменения можно вносить только через EEPROM с помощью этой команды, не забываем сохранять командой M500. Это же касается delta_radius и diagonal_rod, R и L соответственно. Не забываем, что все параметры имеют определение с плавающей точкой, поэтому значения должны быть с точкой, даже нули 0.0

Самое "вкусное", а именно корректировка альфа-ротации, находится на вкладке Marlin_main.ccp, ищем кусок кода:
#define SIN_60 0.8660254037844386
#define COS_60 0.5
float delta[ABC],
endstop_adj[ABC] = { 0 };
float delta_radius = DELTA_RADIUS,
delta_tower1_x = -SIN_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1), // front left tower
delta_tower1_y = -COS_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1),
delta_tower2_x = SIN_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2), // front right tower
delta_tower2_y = -COS_60 * (delta_radius + DELTA_RADIUS_TRIM_TOWER_2),
delta_tower3_x = 0, // back middle tower
delta_tower3_y = (delta_radius + DELTA_RADIUS_TRIM_TOWER_3),

Этот кусочек кода как раз и определяет положение "башен" относительно начала координат XY и в "чистой" прошивке, как видим, используются параметры "идеального" треугольника с углом 60гр для "башен" A и B относительно отрицательной оси Y (вертикали, если смотреть сверху, нормально к осям X и Y). Очевидно, что для расчета координат башни C не используются углы, поэтому в этом случае удобнее пользоваться калькулятором Эшера. Но никто не мешает исправить формулу расчета координат этой "башни" и использовать DCT.
Для того, чтобы внести поправки альфа-углов для "башен" А и B, нужно определить новые константы для синуса и косинуса новых углов, раздельно для каждой "башни", делается несложно, добавляем 4 строки (оставил стандартные 60гр. для наглядности):
#define SIN_60 0.8660254037844386
#define COS_60 0.5
#define SIN_A 0.8645994578287160
#define COS_A 0.5024617174693910
#define SIN_B 0.8634219664278440
#define COS_B 0.5044824158381290
А также внести поправки в формулы расчета координат, заменив SIN_60 и COS_60 на соответствующие синусы и косинусы "башен", например
delta_tower1_x = -SIN_A * (delta_radius + DELTA_RADIUS_TRIM_TOWER_1)
Эти формулы встречаются 2 раза на этой вкладке, меняем во всех.

Да, это не Repetier, где нужно просто указать новый угол, придется посчитать. Угол в данном случае рассчитывается от отрицательной части оси Y, для "башни" A по часовой стрелке, для B - против. То есть для A в идеале получаем 270-210=60, для B 330-270=60.

Дальше дело техники и терпения - по калькуляторам получаем углы/корректировки, по ним считаем наши синусы и косинусы, еще для примера:
если получаем альфа-угол А 209.5 гр, значит нужно вычислить синус и косинус угла 270-209.5=60.5 гр,
для альфа-угла B 329гр считаем синус и косинус угла 329-270=59 гр,
подставляем полученные результаты и перепрошиваем (через EEPROM эти параметры не изменяются). Profit.

Информацию взял отсюда, сделал небольшие доработки и поправки на версию прошивки, там же есть калибровочная деталь для грубой настройки углов и тонкой настройки diagonal rod для каждой "башни".
Надеюсь это кому-нибудь пригодится, спасибо за внимание и всем удачи!
Подписаться на 3Dtoday
21
Комментарии к статье

Комментарии

05.05.17 в 00:17
0
А присобачить микрик и не заниматься этой фигнёй при каждом чихе, уже не катит?
05.05.17 в 21:20
2
Я бы сказал еще не катит, по крайней мере я думаю, что для начала стоит научиться делать руками, потом можно доверить все автоматике, наверное я слишком недолго владею 3д-принтером:) А с другой стороны, раз речь о Марлине, то никакой автокалибровщик на нем не исправит геометрию углов башен, для этого в прошивке просто нет переменной для углов, которую можно эджастить при итерациях. Поэтому, чтобы получить нормальный результат, все же лучше откалибровать углы вручную один раз, а все остальное оставить автокалибровке, все таки конструкция достаточно жесткая, чтобы так уж легко сбить углы, я свой таскаю туда-сюда каждый день, ничего не сбивается.
05.05.17 в 09:21
0
А у меня в Прошивке Вот этот кусок кода с синусами и косинусами не активен. Боюсь что то менять изза этого. (prism mini)
05.05.17 в 22:46
0
Возможно какая-то кастомизированная прошивка, в источнике про "чистый" марлин, причем довольно старой версии, в последней и так многое уже сделано, гораздо проще настраивать. Попробуйте поискать по ключевому слову delta_radius, если в прошивке расчет делается как в обычном марлине, где-то этот параметр должен участвовать. В Репетире все сложнее, я с ним пока так и не разобрался, где что считается, хотя наверное это и не нужно, раз все параметры можно задавать в явном виде.
29.05.17 в 08:46
0
Автор спасибо за такую статью. Тоже купил эникубик ПЛЮС. Но наверное так досконально буду настраивать как доработаю по уму весь принтер, тяги на магнитах, усиление конструкции и плата 32битная. Вот несколько вопросов:
1. "Дальше дело техники и терпения - по калькуляторам получаем углы/корректировки" а как получить то эти данные и как вводить в калькулятор?
2. как вышеописаные десйтвия влияют на печать в итоге? Печатаю рамки размером почти от края до края стола, вроде все ровно получается(само собой задаю поправку по размерам так как АБС усаживается).

Кстати почему-то в прошивке которая последняя на гугл диске, параметр род ленч очень сильно отличается от реальной длины тяг.
29.05.17 в 20:35
1
1. В калькуляторах все достаточно понятно интуитивно - нужно измерять высоту сопла над столом в определенных точках и вносить в калькулятор с обратным знаком (т.е. если координата Z уходит в минус, для того чтобы коснуться стола, то в калькуляторе это значение будет в плюсе), или, если измерять штангенциркулем, то с тем же знаком. Чем долго объяснять, лучше посмотреть видео, их достаточно на ютубе. Например это Видео.
2. Все эти действия нужны чтобы принтер печатал на плоскости и корректно рассчитывал перемещения кареток вверх-вниз для перемещения сопла в перпендикулярной направляющим плоскости XY. В отличие от конструкций с другой кинематикой, где перемещение по осям X и Y напрямую связано с поворотом шаговых двигателей соответствующих осей, в дельте для расчета используется более сложная формула, где участвуют все три двигателя.

У меня из "коробки" тоже неплохо печатал небольшие детали, но на краях стола сопло упиралось в стол. По началу печатал с софтовой калибровкой в маттер-контрол, потом все же решил нормально откалибровать - времени потратил немало конечно, зато теперь без проблем печатает на всем столе и без подключения к компу. В прошивке да, стоит 271.5мм, у меня по факту 267мм, в итоге с этим значением и печатает нормально.

А вообще, не очень понятно, для чего покупать такой принтер, чтобы в итоге заменить большую часть:) детали для соединения профилей в общем-то тоже качеством не отличаются, тоже можно заменить, да и профиль можно потолще взять, в итоге получится новый принтер, а в этот обратно все детали засунуть, вот и два принтера готовых. Не лучше ли сразу собирать новый по собственному проекту?
30.05.17 в 01:18
0
1,2 понял, спасибо за развернутые ответы.

Насчет сразу самому собрать "нормальный", в том то и дело что сейчас поработав с этим "заводским" я смогу собрать и самодельный, но до этого сколько не читал в голове была каша и полностью не понимал что да как, пока в живую все енто не попробовал. Да апгрейды про которые написал не так дорого стоят нынче....

uotani если есть время посмотрите пожалуйста фаил конфигурации к 32битной плате, там тоже можно будет по вашей методе все выставить, или все по другому?
https://github.com/Smoothieware/Smoothieware/tree/edge/ConfigSamples/AzteegX5Mini.delta/Version3
30.05.17 в 08:25
0
Я не настолько хорошо знаю программирование:) поэтому боюсь что вряд ли сильно помогу с 32-битной прошивкой. На первый взгляд, нашел только корректировку высоты концевиков ну и стандартные дельта радиус_и дельта_диагонал_род, больше ничего не нашел.
30.05.17 в 09:33
0
Ааа, понял, лады, будем думать...
24.06.17 в 10:29
0
Здравствуйте еще раз. Получается если в АШЕРЕ, New tower position angle corrections: пишет для X 0.64 Y0.84
То углы для синусов косиносов получаются 59,36 для А и 60,84 для В соответственно?
24.06.17 в 12:48
0
Да, все верно. Можно, конечно все формулы переделать на углы 210 и 330 гр, чтобы не путаться, но я уже забил на это дело, поставил Z-probe и прошил Марлином 1.1.3 с нормальной автокалибровкой - с драйверами DRV8825 дает отклонение по всем точкам +-0,02мм
24.06.17 в 13:26
0
А можете кинуть прошивку с нормальной авто калибровкой, под AnyCubic? Просто через G29 ее запускаем?
И в прошивке меняем расположение щупа относительно сопла?
24.06.17 в 14:05
2
Прошивка стандартная марлиновская, переточил под свой эникубик с микрошагом 32, но она все равно достаточно тяжелая, можно наверное и получше оптимизировать https://drive.google.com/open?id=0B1lYjDY1wpe1OGdJdFRRWEZMYzA
На вкладке конфигурации только нужно почистить мои настройки (лень было сейчас все чистить:)), нужно обнулить значения, чтобы было так:
DELTA_ENDSTOP_ADJ { 0, 0, 0 }
DELTA_TOWER_ANGLE_TRIM { 0, 0, 0 }
DELTA_RADIUS_TRIM_TOWER { 0, 0, 0 }
Если не установлен хотбед, то нужно еще отключить термистор стола
TEMP_SENSOR_BED 0
Если стоят стоковые драйвера, установить микрошаг
XYZ_MICROSTEPS 16
и для экструдера поправить
DEFAULT_AXIS_STEPS_PER_UNIT { XYZ_STEPS, XYZ_STEPS, XYZ_STEPS, 96 }
Еще уменьшил ускорение до 2000, чтобы снизить вероятность пропуска шагов, но это можно потом через EEPROM все изменить, кстати высоту теперь тоже можно через M665 устанавливать, а не перепрошивать постоянно. Также устанавливается расстояние от щупа до сопла (я особо не заморачиваюсь с этим, поставил кажется 3,85, потом просто после автокалибровки убираю щуп и устанавливаю высоту сопла вручную)
Автокалибровка запускается командой G33, подробнее тут http://marlinfw.org/docs/gcode/G033.html
24.06.17 в 15:33
0
Ок, понял, спасибо за подробности. Кстати по ваше методе победил настроил, получилось, почти идеально стол в 0. Аж душа радуется, еще раз спасибо).
Еще вопрос вам как человеку "глубоко капнувшему", если не ошибаюсь то дельта из-за своей кинематики всегда по краям печатает медленнее чем в центре, так? Если так, то учитывается ли в прошивке это в плане подачи пластика, получается по краям его надо медленнее подавать, а чем сопло ближе к центру тем скорее.
24.06.17 в 16:08
1
Честно говоря не задавался таким вопросом, т.к. не сталкивался с какой-либо проблемой с печатью на краях стола. Мне кажется что в любом случае количество выдавливаемого пластика связано с длиной перемещения и синхронизировано по скорости, ведь в G-коде напрямую прописано в какую координату должно переместиться сопло и сколько мм пластика должно быть выдавлено, т.е. по сути с точки зрения машинного кода, строго задается количество шагов для каждого двигателя и они двигаются синхронно в заданном направлении и с заданной скоростью. Скорее всего "замедление" движения на краях это только визуальный эффект, потому что сами перемещения становятся больше, а с точки зрения механики, скорости вращения шаговых двигателей остаются одинаковыми что в центре, что на краях стола.
24.06.17 в 16:46
0
Да вот в том то и дело что по звуку медленнее и визульно тоже, особенно когда заполнение производится. А медленнее именно за счет кинетики, рычаги в таком положении по краям что рычаг короче, передаточное число другое. Такие ощущения, когда печатаешь делать проходящую через всю. площадь стола. ИМХО...
24.06.17 в 20:27
0
Возможно, спорить не буду. С другой стороны, замечал, что скорость каретки с коротким рычагом выше, чем у других, а когда каретка в самом низу, то значительно медленнее движется. По звуку-то как раз все понятнее - при печати в центре происходит очень частое изменение направлений, движения короче, соответственно и режимы работы двигателей и звук часто меняется. На краях перемещения длинные и двигатели работают более продолжительное время в одном режиме, поэтому и кажется что звук другой.
03.07.17 в 12:34
0
Здравствуйте, проблема с кубиком - при печати принтер замирает на секунду, потом снова печатает. Пока стоит вытекает филамент и образуется капля. Прошивка репитер. Не подскажите что делать?
07.07.17 в 18:53
0
Это одна из причин, по которой я не стал прошивать репетиром, а пытаюсь все сделать на марлине. Думаю это связано с предупреждением, которое выдает ардуино при прошивке - в репетировской прошивке слишком большой объем памяти занимают глобальные переменные и остается мало места для локальных переменных, поэтому в момент обработки g-кода возникают ситуации, когда 8-битная мега не справляется с расчетами, отсюда кратковременные остановки для обработки данных. Попробуйте уменьшить размер буфера (где искать в репетире не подскажу, не копался в нем) и снизить скорость печати, может быть и поможет.
12.07.17 в 22:37
0
спасибо за ответ.
03.10.17 в 09:13
0
Благодарю. Статья очень помогла.
25.08.18 в 21:27
0
ребята! у меня дельта! и возникла идея как колибровать микрошаги каждой башни.
из меню принтера можно двигать соплом по координатным осям, и при движение по оси Z будут работать все 3 двигателя,можно ведь по линейке отмерять на какую длину сдвинулась каретка башни при движении по оси Z, и перерасчитывать микрошаги для каждого двигателя

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

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

Фестиваль 3Д-Печати. Новосибирск. Анонс анонса

Литье полиуретана. Когда 3д-печати мало. Часть 3

Печатные пряники и Mathematica

Думаю, что теперь можно выложить мои модели Центробежных компрессоров

Опыт приобретения и использования принтера Alekmaker

Делаем фигурку свинки.