Разработка электроники,

Систем автоматики,

Программного обеспечения

ООО "Антех ПСБ",
Санкт-Петербург

+79811865082

anteh@bk.ru

ООО Антех ПСБ примеры

Калибровка дельта принтера, настройка прошивки Marlin-1.1.0-RC7 + AtMega2560 дельта принтера

05.12.2016 Сайт https://anteh.ru

Рассматриваются основные настройки исходника прошивки Marlin-1.1.0-RC7 для AtMega2560 платы.

Автоматическая калибровка PID регуляторов хотэнда и стола

Ручная калибровка плоскости, высоты сопла 3D FDM дельта принтера

Использовавшиеся инструменты для перепроверки и калибровки 3D FDM принтера:

стальные линейки Металлические линейки 1метр и 30 сантиметров
щупы толщины набор №3 Щупы толщины набор №2 75мм.
микрометр на штативе Микрометр 0-10мм 0.01мм со штативом, для проверки реального разрешения и точности принтера
внешний микрометр Микрометр внешний, для измерения диаметра шара диагональной направляющей и вычисления её длины
стальной угольник Стальной слесарный угольник 160x250мм

Из обязательных только металлическая линейка и щупы толщины.

С Github скачиваем официальную последнюю стабильную версию прошивки Marlin. Скачиваем IDE Arduino 1.6.13.

1. Из …\Marlin-xxxxx\Marlin\example_configurations\delta\ копируем 2 файла с заменой в …\Marlin-xxxxx\Marlin
2. Из IDE ARDUINO открываемм файл …\Marlin-xxxxx\Marlin \Marlin.ino
3. Редактируем файлы Configuration.h и Configuration_adv.h. Ниже приводятся основные параметры, остальные хорошо описаны и их меняем по смыслу:

#define MOTHERBOARD BOARD_RAMPS_14_EFB

Описание типов плат boards.h

#define TEMP_SENSOR_0 5
#define TEMP_SENSOR_1 0
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_BED 5

5 это термистор Semitec 104GT-2; 0 - не установлено. Термистор:

Thermistor - Semitec 104GT-2

#define PIDTEMPBED

#define DELTA

#define DELTA_DIAGONAL_ROD 468.5 // mm

DELTA_DIAGONAL_ROD -Это длина от середины одного шарика до середины другого. На изображении ниже слева 2 из 6 таких штанг с пружиной посредине. Штанги крепятся между кареткой рельса и держателем хотенда(эффектором) при помощи магнитных оснований с прокладкой. Как раз для измерения длины этой штанги понадобился стальной угольник, а лучше 2 угольника, и внешний микрометр. На металлическую линейку 1метр длиной кладём диагональную направляющую и с двух сторон подпираем угольниками и смотрим полную длину от одного шара до другого. Далее внешним микрометром меряем диаметр шара и вычитаем его из ранее измеренной величины, так делаем для всех 6ти диагональных направляющих, вычисляем среднюю длину, это и будет DELTA_DIAGONAL_ROD.

delta diagonal rod carbon diagonal rod

#define DELTA_SMOOTH_ROD_OFFSET 305.8 // mm

DELTA_SMOOTH_ROD_OFFSET:
Это расстояние между центром круглого стола(центр горизонтальной плоскости принтера) и передней плоскостью рельсовой направляющей. Центр стола определяем, например так: рисуем треугольник, последовательно опирая линейку на каждые две рядом стоящие опоры, далее в получившимся равностороннем треугольнике рисуем медианы они должны пересечься в одной точке -это и будет центр стола. Чем точнее выставлены 3 вертикальные опоры дельта принтера, тем точнее будет совпадение медиан в одной точке:

DELTA_SMOOTH_ROD_OFFSET DELTA_SMOOTH_ROD_OFFSET
DELTA_SMOOTH_ROD_OFFSET DELTA_SMOOTH_ROD_OFFSET

Совпадение медиан идеальное, точность возможно десятая миллиметра.
Теперь от точки в центре меряем расстояние до передней ближайшей плоскости одного из рельс 3х вертикальных осей, это и будет DELTA_SMOOTH_ROD_OFFSET

#define DELTA_EFFECTOR_OFFSET 33.0 // mm

DELTA_EFFECTOR_OFFSET -расстояние от центра эффектора до центра шара диагональной направляющей. На глаз + линейка выходят дефолтные 33мм.

#define DELTA_CARRIAGE_OFFSET 27.6 // mm

DELTA_CARRIAGE_OFFSET -расстояние от передней плоскости рельсовой направляющей до центра шара диагональной направляющей. На глаз + линейка 27.6мм

#define DELTA_PRINTABLE_RADIUS 201.0

DELTA_PRINTABLE_RADIUS -радиус стола.

//#define USE_XMIN_PLUG
//#define USE_YMIN_PLUG
//#define USE_ZMIN_PLUG // a Z probe
#define USE_XMAX_PLUG
#define USE_YMAX_PLUG
#define USE_ZMAX_PLUG

#define X_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING true // set to true to invert the logic of the endstop.

#define INVERT_E0_DIR true

#define BED_CENTER_AT_0_0

#define MANUAL_Z_HOME_POS 811.75 // Distance between the nozzle to printbed after homing

MANUAL_Z_HOME_POS высота после калибровки от конца сопла до плоскости стола.

DEFAULT_AXIS_STEPS_PER_UNIT -важные параметры, настройка количества импульсов на миллиметр для осей и экструдера:
#define DEFAULT_AXIS_STEPS_PER_UNIT {80, 80, 80, 155}
4ре коэффициента вычисляются так:
Для дельта принтера первые 3 XYZ коэффициента будут одинаковыми.
360/1.8 = 200 шагов на оборот. 1.8 -угол шага.
(200*16)/(2*20) = 80 = (шагов на оборот * количество микро шагов устанавливается джамперами на RAMPS 1.4) /(приводной ремень GT2 с шагом 2 мм * 20-ти зубчатые шкивы на роторе шаговых двигателей каждой из XYZ осей)
Последний коэффициент рассчитывается так:
((200*16) / (d шкива подачи прутка * 3.14))*1.1 = (3200/(7.2мм*3.14))*1.1=~155
d шкива подачи прутка -это наименьший его диаметр в центе. Внешний 9мм, внутренний в месте пропила 7.2мм. Измерялся штанген циркулем.

#define SDSUPPORT

#define REPRAP_DISCOUNT_SMART_CONTROLLER

В Configuratiom_adv.h задаём разрешение по вертикали 50мкм

const unsigned int dropsegments = 3;

Разрешение = (1мм / [количество импульсов на миллиметр])*(dropsegments+1)= 1/80 * 4 = 50мкм.

Автоматическая калибровка PID регуляторов хотэнда и стола

Через pronterface даём команду M303 с параметрами. Если внесли изменения в конструкцию нагревателя, например обклеили его каптоном, калибровку PID нужно делать заново.
Запускаем авто калибровку командой M303 для экструдера E0. С8 -количество циклов 8, удерживаемая температура S240 градусов, калибровка длится около 5 минут:

>>> M303 E0 C8 S240
SENDING:M303 E0 C8 S240
PID Autotune start
 bias: 127 d: 127 min: 237.50 max: 243.33
 bias: 127 d: 127 min: 237.50 max: 243.33
 bias: 122 d: 122 min: 237.50 max: 243.33 Ku: 53.26 Tu: 18.87 Classic PID
 Kp: 31.95 Ki: 3.39 Kd: 75.39
 bias: 128 d: 126 min: 237.50 max: 243.33 Ku: 55.00 Tu: 19.86 Classic PID
 Kp: 33.00 Ki: 3.32 Kd: 81.93
 bias: 122 d: 122 min: 237.50 max: 243.33 Ku: 53.26 Tu: 19.07 Classic PID
 Kp: 31.95 Ki: 3.35 Kd: 76.16
 bias: 122 d: 122 min: 237.50 max: 243.33 Ku: 53.26 Tu: 19.66 Classic PID
 Kp: 31.95 Ki: 3.25 Kd: 78.53
 bias: 125 d: 125 min: 237.50 max: 243.33 Ku: 54.57 Tu: 19.46 Classic PID
 Kp: 32.74 Ki: 3.36 Kd: 79.66
 bias: 123 d: 123 min: 237.42 max: 243.33 Ku: 52.98 Tu: 19.27 Classic PID
 Kp: 31.79 Ki: 3.30 Kd: 76.57PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
#define  DEFAULT_1Kp 31.79#define  DEFAULT_1Ki 3.30#define  DEFAULT_1Kd 76.57ok
echo:busy: paused for user
....
echo:busy: paused for user

Полученные коэффициенты вносим в Configuration.h:

#define DEFAULT_Kp 31.79
#define DEFAULT_Ki 3.30
#define DEFAULT_Kd 78.51

Запускаем авто калибровку PID регулятора стола: M303 E-1 C8 S110
E-1 это стол, остальные параметры те же:

>>> M303 E-1 C8 S110
SENDING:M303 E-1 C8 S110
PID Autotune start
PID Autotune failed! timeout
echo:busy: paused for user

Если видим такую ошибку, то авто калибровку запускаем снова:

>>> M303 E-1 C8 S110
SENDING:M303 E-1 C8 S110
PID Autotune start
 bias: 160 d: 94 min: 106.67 max: 110.14
 bias: 177 d: 77 min: 107.96 max: 110.14 Ku: 90.01 Tu: 10.21 Classic PID
 Kp: 54.01 Ki: 10.58 Kd: 68.94
 bias: 177 d: 77 min: 108.71 max: 110.54 Ku: 107.11 Tu: 10.22 Classic PID
 Kp: 64.27 Ki: 12.57 Kd: 82.13
 bias: 177 d: 77 min: 109.00 max: 110.95 Ku: 100.68 Tu: 10.22 Classic PID
 Kp: 60.41 Ki: 11.82 Kd: 77.20
 bias: 177 d: 77 min: 109.36 max: 111.34 Ku: 98.83 Tu: 10.22 Classic PID
 Kp: 59.30 Ki: 11.60 Kd: 75.78
 bias: 173 d: 81 min: 109.74 max: 111.62 Ku: 109.83 Tu: 10.81 Classic PID
 Kp: 65.90 Ki: 12.19 Kd: 89.08
 bias: 163 d: 91 min: 109.87 max: 111.89 Ku: 114.71 Tu: 11.80 Classic PID
 Kp: 68.83 Ki: 11.67 Kd: 101.49PID Autotune finished! Put the last Kp, Ki and Kd constants from below into Configuration.h
#define  DEFAULT_1Kp 68.83#define  DEFAULT_1Ki 11.67#define  DEFAULT_1Kd 101.49ok
echo:busy: paused for user
....
echo:busy: paused for user

Коэффициенты вносим в Configuration.h:

#define DEFAULT_bedKp 68.83
#define DEFAULT_bedKi 11.67
#define DEFAULT_bedKd 101.49

Компилируем и загружаем прошивку.

Ручная калибровка плоскости, высоты сопла 3D FDM дельта принтера

Ключом к высокой точности печати является точная геометрическая сборка механических деталей дэльта принтера.
M114 -текущая позиция сопла
M105 -текущие температуры
G28 -установить каретки в Home
G1Zx -Установка высоты хотэнда над плоскостью стола
M500 -сохранение заданных параметров в EEPROM памяти
M501 -чтение данных EEPROM памяти
M503 -чтение текущих настроек
M665 - Установка конфигурации дельта механики. L -diagonal rod, R -delta radius, S -segments/s, A -Alpha (Tower 1) diagonal rod trim, B -Beta (Tower 2) diagonal rod trim, C -Gamma (Tower 3) diagonal rod trim
M666 - Установка смещения XYZ после Home. Для выравнивания плоскости

Кратко алгоритм калибровки плоскости и высоты стола можно описать так:
1. Настраиваем pronterface. Калибровку производим на рабочих температурах сопла и стола, задаём 200 градусов соплу и 90 столу
2. Получаем слегка выпуклую линзу, уменьшив DELTA_RADIUS на 1.
3. Через M666 добиваемся, одинаковой высоты точек CA CB CC. Значения можно корректировать только в минус, поэтому из CA CB CC выбираем наиболее близко расположенную с столу и опускаем остальные до её уровня
4. Устраняем линзу. Вогнутую линзу устраняем уменьшением R, выпуклую увеличением R.
5. Корректируем высоту, чтобы касание стола соплом соответствовало высоте 0.0мм
6. Для корректировки ABC и IJK -погрешности длины диагональных направляющих для каждой "башни" и углы взаимного расположения "башен". Башня -она же вертикальная ось. Корректировку, при необходимости, можно сделать согласно http://www.thingiverse.com/thing:745523

1. Настройка Pronterface:

Запускаем pronterface и создаём 4ре кнопки для стола диаметром 400мм. Кнопки выводят сопло в A(X) B(Y) C(Z) O(центр) точки. Частота COM порта 250000. Создаём кнопки, CA: "G1 X-155.9 Y-90", CB: "G1 X155.9 Y-90", CC: "G1 X0 Y180", O: "G1 X0 Y0". CA -левая ближняя рельсовая направляющая, CB -правая ближняя направляющая, CC -центральная дальняя направляющая, O -Центр

pronterface ca pronterface cb
pronterface cc pronterface co
pronterface pic

Проверяем длины диагональных направляющих, для достижения наибольшей точности нужно, чтобы диагональные направляющие были одинаковой длины. Используя металлическую метровую линейку, 2 угольника и внешний микрометр измеряем длины всех диагональных направляющих, на металлическую линейку ставится 2 угольника и между ними помещается диагональная направляющая, получилось 480.8 у всех 6ти, глазом разницы увидеть не удалось. Удалось увидеть, что одна диагональная направляющая слегка кривовата, при вращении её на ровной плоскости заметно менялся световой просвет между плоскостью и центром направляющей. Возможно шар стоял неровно. Внешним микрометром проверяем диаметры шаров: 12.318мм причём у всех и L=468.5. Т.е. диагональные направляющие идеально одинаковые, также вспоминая идеальный равносторонний треугольник с точно пересёкшимися медианами в центре можно сказать, что корректировка ABC и IJK пункт 8 не потребуется, но всё равно проверим что получилось.

2. Получаем слегка выпуклую линзу, чтобы центр был выше краёв

Первоначальный R или дельта радиус вычисляется автоматически как DELTA_RADIUS = DELTA_SMOOTH_ROD_OFFSET - DELTA_EFFECTOR_OFFSET - DELTA_CARRIAGE_OFFSET = 305.8 - 33.0 - 27.6 = 245.2 и эту цифру можно увидеть через M503 команду. Соответственно отталкиваясь от этой цифры создаём немного выпуклую линзу, уменьшаем DELTA_RADIUS на 1. Полагаю, что стол установлен максимально перпендикулярно осям. M665 R 244.2, M666 X-0 Y-0 Z-0, M500, G28.

3. Из CA CB CC выбираем точку наиболее близко расположенную к столу. И корректируем остальные к такой же высоте

Поскольку реальная высота стола пока не известна, через G1Zx потихоньку приближаем сопло к столу. Например G1Z50.3 -50.3мм. Включаем подогрев стола до 90градусов, сопла до 200. Выбраны средние рабочие температуры. Для корректировки высоты также используем MANUAL_Z_HOME_POS прошивки marlin, устанавливаем чуть больше реальной. Постепенно приближая сопло к столу контролируем расстояние в CA CB CC точках и выбираем точку наиболее близкую к столу, устанавливаем расстояние в ней до стола 0.2мм. Высота стола пока 850мм. При g1Z8.5 O= в районе 1мм, CA=около 0.6мм, CB=в районе 2.2мм, СС=около 0.85мм. CA ближайшая к столу. Разрешение по вертикали 0.05мм. Теперь есть ясность, что куда корректировать. Используем M666 для корректировки X Y Z Endstop Adj. Коэффициенты задаются только с минусом. Добьёмся, чтобы в CA CB CZ расстояние до стола стало равным 0.2мм.
M666 Y-1.6 Z-0.25
M500
G28
G1Z8.5
O=0.35 CA=0.65 CB=0.8 CC=0.6 производим ещё поправки. Ровняем CA CB CC на 0.2мм. Линза получилась вогнутая
M666 X-0.45 Y-2.2 Z-0.65
M500
G28
G1Z8.5 упёрлись в стол
G1Z9
O=0.35 CA=0.7 CB=0.7 CC=0.7
пробуем скорректировать вогнутую линзу. Для этого увеличиваем R(Ошибка, нужно уменьшать)
M665 R 245.5
M500
G28
G1Z9
O=0.4 CA=1 CB=1 CC=1
Тогда наоборот уменьшаем R
M665 R 243.5
M500
G28
G1Z9
O=0.45 CA=0.5 CB=0.5 CC=0.5
Ещё уменьшаем
M665 R 243.2
M500
G28
G1Z9
O=0.45 CA=0.45 CB=0.4 CC=0.45
M666 Y-2.15
M500
G28
G1Z9
O=0.45 CA=0.45 CB=0.45 CC=0.45

5. Корректируем высоту, чтобы касание стола соплом соответствовало высоте 0.0мм

Итог выравнивания плоскости echo: M666 X-0.45 Y-2.15 Z-0.65

Сейчас MANUAL_Z_HOME_POS = 850 и при G1Z9 O=0.45 т.е. задаём MANUAL_Z_HOME_POS = 841.45 и заливаем прошивку.

G1Z0.4

O=0.35 CA=0.35 CB=0.35 CC=0.35

Ещё раз MANUAL_Z_HOME_POS = 841.5 и заливаем прошивку.

G1Z0.3

O=0.3 CA=0.3 CB=0.3 CC=0.3

Теперь плоскость стола, высота, линза выставлены "правильно". Пробная печать:

Результат получился совсем не очень, будем считать вышеприведённую калибровку предварительной.

Перемерены геометрические параметры принтера, и обнаружены неточности DELTA_CARRIAGE_OFFSET вместо 27.6 равен 31мм и DELTA_SMOOTH_ROD_OFFSET вместо 305.8 равен 300мм.

Зая, что угол между DELTA_DIAGONAL_ROD и его противолежащей стороной должен быть равен = 30.77 градусов, по т.синусов [delta radius]/sin(30.77) = DELTA_DIAGONAL_ROD/1 или delta radius = 468.5*0.512= 239.7мм.

Измеренный delta radius = DELTA_SMOOTH_ROD_OFFSET - DELTA_EFFECTOR_OFFSET - DELTA_CARRIAGE_OFFSET = 300-33-31 = 236мм. Почти совпадает с расчётным. Будем использовать измеренный. Ко всему был переделан стол, из за "оригинальной" конструкции стола от производителя, были проблемы, стол шёл волнами, с выпуклостью в центре. Такое получилось из-за использования производителем металлической пластины с приклеенной снизу нагревательной плёнкой, на эту пластину сверху устанавливалось обыкновенное круглое стеклянное зеркало. Соответственно довольно тонкое зеркало повторяло все неровности металлической пластины. Проблема была в неровной металлической пластине стола. От пластины отклеена нагревательная плёнка и переклеена на ранее заказанное круглое стекло толщиной 10мм. Для крепления стола использовались мебельные забивные гайки М8. Под столом также находится термоизолятор, фольгированная сторона прижата к стеклу. Стол получился очень ровный и жёсткий:

Заново производим предварительную калибровку. Температура сопла 200, стола 90.

Обнуляем настройку плоскости M666 X-0 Y-0 Z-0, M500, G28, и всё как выше описано

G1Z1

O=1, CA=0.5, CB=более миллиметра, СС=более миллиметра. Равняем всё к 0.5

M666 Y-1.5 Z-1

M500

G28

G1Z1.5

O=хх, CA=0.6, CB=0.5, СС=0.7

M666 X-0.1 Y-1.5 Z-1.2

M500

G28

G1Z1.5

O=0.5, CA=0.6, CB=0.5, СС=0.7 Ничего не поменялось, возможно O изменилось

M666 X-0.2 Y-1.5 Z-1.4

M500

G28

G1Z1.5

O=0.5, CA=0.7, CB=0.5, СС=0.4

M666 X-0.4 Y-1.5 Z-1.3

M500

G28

G1Z1.5

O=0.5, CA=0.5, CB=0.5, СС=0.5 Всё относительно ровно. Линзы нет.

Корректируем высоту #define MANUAL_Z_HOME_POS 840.4 было 841.4.

Финальная проверка: G1Z0.5 берём щуп 0.5 даём команду CA и на всём участке движения из O в CA под соплом "трём" щупом, проверяя высоту. Как в кёрлинге перед шаром щёткой трут, так и здесь щупом трём под соплом, ощущая лёгкое трение об сопло. Если трение ослабевает, то сопло удаляется от стола, если увеличивается, то прижимается и так делаем при движении из всех во все точки O CA CB CC, если трение везде одинаково, то всё выставлено идеально. В моём случае был горб между CA и СB точками, нужно это скорректировать при помощи. Калибровки по нескольким точкам, количество точек можно выбирать, чем больше тем лучше. Делаем это при через online сервис http://escher3d.com/pages/wizards/wizarddelta.php выбираем Marlin (standard).

Initial endstop corrections echo: M666 X-0.40 Y-1.50 Z-1.30

Initial DELTA_DIAGONAL_ROD 468.5

Измеренный Initial delta radius = DELTA_SMOOTH_ROD_OFFSET - DELTA_EFFECTOR_OFFSET - DELTA_CARRIAGE_OFFSET = 300-33-31 = 236мм

Printable bed radius 190.3 подбирал, чтобы координаты были кратны 0.05мм

Initial homed height 840.4

Выбрано 10 точек для калибровки, нажимаем на кнопки для получения координат точек и последовательно, выходя соплом в каждую точку, делаем точный замер высоты с точностью до 0.05мм используем те же щупы толщины. Точки в декартовой системе X Y.

Для примера pdf файл online страницы калибровки

Проверяем снова, что получилось, "затирая щупом под соплом". Процесс точной калибровки можно повторять несколько раз. Не получилось, Number of factors to calibrate уменьшаем до 4 жмём calculate вносим параметры и пробуем снова. Опять не вышло, с дельта радиусом серьёзная промашка выходит. Возвращаем всё обратно, к точной калибровке вернёмся позже.

M665 R243.20 L468.50

M666 X-0.40 Y-1.50 Z-1.30

#define MANUAL_Z_HOME_POS 840.4

После ручной предварительной калибровке и замене стола на ровный стало гораздо лучше но не достаточно. Ранее калибровка проводилась по щупу 0.5мм. Произведём очередную ручную калибровку щупом 0.2мм, стол физически немного выравнивался в горизонтальной плоскости ко всему учтём погрешность движения кареток при смене направления движения. Ранее, когда питание драйверов шаговых двигателей составляло 12V, при переходе от движения вниз, к движению вверх наблюдалось дополнительное перемещение сопла. Например двигаем сопло вниз, затем даём команду на перемещение вверх на минимальный шаг 50мкм, но сопло перемещалось на 110мкм и потом каждый последующий шаг был 50 мкм. Тоже и справедливо при обратных перемещениях. Т.е. есть статическая погрешность в 60мкм. Из-за чего она возникает и как бороться пока рассматривать не будем. Калибровку и все замеры производим только при движении сопла вниз.

G1Z0.5

O=0.15 меряем O

G1Z1

двигаемся к CA через подъём и опускание сопла

G1Z0.5

O=0.15, CA=0.5, CB=0.25, СС=0.3

Подгоняем всё к CB

Было M666 X-0.40 Y-1.70 Z-1.30

M666 X-0.65 Y-1.70 Z-1.35

M500

G28

G1Z0.5

O=0.02, CA=0.2, CB=0.2, СС=упёрлось в стол

M666 X-0.65 Y-1.70 Z-1.2

O=0.05, CA=0.25, CB=0.2, СС=упёрлось в стол

M666 X-0.65 Y-1.70 Z-1

O=0.2, CA=0.2, CB=0.2, СС=0.2

Вроде всё идеально. Проверяем расстояние от сопла до стола на траектории движения от O до СА "затираем щупом" 0.2 под соплом. В центральной части траектории расстояние до стола уменьшается на 0.1мм.

Движение из O в CB картина похожая, в центральной части уменьшение на 0.05мм

Движение из O в CC в центральной части наоборот увеличение на 0.05мм, и даёт о себе знать погрешность смены направления движения каретки.

Погрешность при смене вертикального направления движения кареток вызывает нелинейные погрешности высоты и погрешности XY перемещений. Сейчас подобное изменение расстояния до стола составляет около 0.05-0.1мм. Это вызывает проблемы при печати на всю ширину стола диаметром 400мм, при печати в центральной или другой части небольших по площади объектов проблемы не возникает.

Ниже подтверждения вышесказанного через измерения. Движение вниз шаг 0.05мм. Башня A или ось X:

G1Z4 0

G1Z3.95 5

G1Z3.9 10

G1Z3.85 13.2

G1Z3.8 18.5

G1Z3.75 23.4

G1Z3.7 28

G1Z3.65 31.8

G1Z3.60 36.2

G1Z3.55 41.2

G1Z3.5 46.7

G1Z3.45 50

G1Z3.4 55

G1Z3.35 60.09

G1Z3.3 65.4

G1Z3.25 69.4

G1Z3.2 74

G1Z3.15 79.2

G1Z3.1 85

G1Z3.05 88.5

G1Z3.0 93.9

G1Z2.95 98.5

G1Z2.9 104.2

G1Z2 195

G1Z1 297

G1Z1 397

Движение вниз шаг 0.1мм

G1Z4 0

G1Z3.9 9

G1Z3.8 18.4

G1Z3.7 28.8

G1Z3.6 37

G1Z3.5 47.8

G1Z3.4 57

G1Z3.3 67.2

G1Z3.2 76

G1Z3.1 88

G1Z3 96.5

Микрометр, на глаз, "убегает" на 5-8мкм.

Измеряем погрешность при смене направления:

G1Z4 -2

G1Z3.95 1.8

G1Z3.9 4.8

G1Z3.85 8.2 меняем направление

G1Z3.9 8.2

G1Z3.85 8.8

G1Z3.9 8.2

G1Z3.85 8.8

G1Z3.9 8.3 при смене направления на 50 микрон изменения составляют 0

Пробуем другую точку

G1Z3 91.8

G1Z2.95 96.5

G1Z3 96

G1Z2.95 96.8

G1Z3 96

G1Z2.95 96.8

G1Z3 96

G1Z2.95 96.8 при смене направления на 50 микрон изменения составляют 0

Пробуем тоже самое, но перемешаемся на разное расстояние:

G1Z4 93.2

G1Z3.95 96.2

G1Z4 95.8

G1Z3.95 96.5

G1Z4.1 91.2

G1Z3.9 101.3

G1Z4.1 90.5

G1Z3.9 101

G1Z4.1 90.2

G1Z3.9 101 при смене направления на 200 микрон изменения составляют 100

G1Z4.2 80.5

G1Z3.8 111.4

G1Z4.2 79.2

G1Z3.8 111.8

G1Z4.2 78.8

G1Z3.8 111.8

G1Z4.2 78.6

G1Z3.8 111.9

G1Z4.2 78.5 при смене направления на 400 микрон изменения составляют 300

G1Z4.4 56

G1Z3.6 128.8

G1Z4.4 55.5

G1Z3.6 128.8 при смене направления на 800 микрон изменения составляют 700

-----------------

G1Z3.9 95

G1Z4 92

G1Z3.9 95

G1Z4 92.2 при смене направления на 100 микрон изменения составляют 0

Другими словами, для оси X, смена направления движения приводит к потере максимум 100 микрон. Обращаем внимание, что при сменен направления движения каретки на 50мкм теряются 50мкм, при смене на 100мкм теряются 100мкм, при смене на 200мкм теряются 100мкм.

Для Z оси:

G1Z10.2 86.8

G1Z9.8 120.2

G1Z10.2 85.8

G1Z9.8 120.2

G1Z10.2 84.9

G1Z9.8 120.1 при смене направления на 400 микрон изменения составляют 350

G1Z9.6 134.1

G1Z10.4 62.5

G1Z9.6 134

G1Z10.4 62

G1Z9.6 133.5

G1Z10.4 61

G1Z9.6 132.8 при смене направления на 800 микрон изменения составляют 720

G1Z10 92.6

G1Z9.9 95.5

G1Z10 93

G1Z9.9 95.4

G1Z10 93

G1Z9.9 95.2 при смене направления на 100 микрон изменения составляют 20

G1Z10.2 71

G1Z9.8 107

G1Z10.2 71

G1Z9.8 106.3

G1Z10.2 71

G1Z9.8 106.3 при смене направления на 400 микрон изменения составляют 350

Для Z оси картина схожая с X. Подобные погрешности, скорее всего, связаны с ремнём, натяжениями ремня и люфтами крепления нижнего шкива ремня. При отключенных двигателях и пошатывании валов нижних ременных шкивов право/лево, чувствуются биения на всех осях сопровождающиеся характерным стуком. На Z биения шкива ощущаются сильнее всего.

Судя по измерениям, погрешности, для каждой из осей будут своими, но большая её часть является статической и вполне могла бы быть учтена в программе.

Калибровку считаем законченной.

Подход к точке калибровке должен быть всегда одинаковый. Например, только сверху, если нужно приподнять сопло, то подымаем его немного выше нужного значения, затем опускаем вниз. Причём в каждую точку выходим одинаково, например вышли в O, приподняли сопло на 1мм и опустили обратно, например на 0.2мм, вышли в CA на той же высоте 0.2мм поднимаем сопло на 1мм и опускаем обратно на 0.2 и так для любой точки. Иначе, из-за выше описываемой погрешности ремня и люфтов крепления подшипников и самих подшипников, погрешность в районе 0.1мм не даст произвести более менее точную калибровку дэльта принтера. В конечном итоге из Home выходил в точку 10мм, затем в 1мм далее в целевую 0.2 потом снова 1мм и обратно 0.2мм. Переход из одной точки калибровки в другую: подъём c 0.2мм до 10мм XY перемещение на новую точку опускаемся на 1мм далее на 0.2 возвращаемся на 1мм опускаемся на 0.2мм.

Ещё один пример калибровки, используется набор щупов толщины N2:

M666 X-0 Y-0 Z-0

G1Z0.2 всё измеряется при выходе на эту высоту

O=0.9, CA=0.6, CB=1.35, СС=0.95

M666 X-0 Y-0.75 Z-0

O=0.75, CA=0.65, CB= 0.9, СС=1

M666 X-0 Y-0.85 Z-0.35

O=0.65, CA=0.6, CB= 0.7, СС=0.7

M666 X-0 Y-0.95 Z-0.45

O=0.52, CA=0.6, CB= 0.65, СС=0.6

M666 X-0 Y-1 Z-0.45

O=0.52, CA=0.6, CB= 0.6, СС=0.53

M666 X-0.05 Y-1.05 Z-0.45

M666 X-0.05 Y-1.05 Z-0.45

O=0.42, CA=0.5, CB= 0.52, СС=0.52 Вогнутая линза(центр ниже чем края). Вогнутую линзу устраняем уменьшением R, выпуклую увеличением R.

M665 L468.50 R243.20 S200.00 A0.00 B0.00 C0.00

M665 R243.3

O=0.47, CA=0.52, CB= 0.52, СС=0.53

M665 R243.4

O=0.5(легкое трение), CA=0.53(лёгкое трение), CB= 0.53(лёгкое трение), СС=0.65(лёгкое трение)

M666 X-0.05 Y-1.05 Z-0.5

O=0.5(среднее трение), CA=0.53(лёгкое трение), CB= 0.53(лёгкое трение), СС=0.53(лёгкое трение)

M665 R243.5

O=0.5(лёгкое трение), CA=0.55(лёгкое трение), CB= 0.55(лёгкое трение), СС=0.55(лёгкое трение)

M665 R243.55

O=0.5(среднее трение), CA=0.52(лёгкое трение), CB= 0.53(лёгкое трение), СС=X

M665 R243.6

O=0.5(среднее трение), CA=0.55(лёгкое трение), CB= 0.65(лёгкое трение), СС=0.55

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

M665 R243.65

O=0.5(среднее трение), CA=0.55(большое трение), CB= 0.65(лёгкое трение), СС=0.65

Возвращаемся к M665 R243.5 и выходим в каждую точку сверху.

O=0.5(среднее трение), CA=0.7(среднее трение), CB= 0.7(лёгкое трение), СС=0.7(среднее трение)

M665 R243.7

O=0.5(сильное трение), CA=0.7(лёгкое трение), CB= 0.7(лёгкое трение), СС=X Не поменялось ничего.

M665 R243.8

O=0.5(лёгкое трение), CA=0.8(лёгкое трение), CB= 0.8(лёгкое трение), СС=0.8(сильное трение). A R то нужно уменьшать, для исправления вогнутой линзы.

M665 R243.2

O=0.5(лёгкое трение), CA=0.6(большое трение), CB= 0.6(лёгкое трение), СС=0.6(сильное трение)

M665 R243

O=0.5(лёгкое трение), CA=0.5(лёгкое трение), CB= 0.5(лёгкое трение), СС=0.5(чють большее, чем лёгкое трение)

Корректируем высоту. Сейчас все измерения делались при G1Z0.2 Т.е. в исходнике прошивки Marlin, в Configuration.h исправляем #define MANUAL_Z_HOME_POS 840.5 на #define MANUAL_Z_HOME_POS 840.8. Всю калибровку делаем на около рабочих температурах стола и сопла. Например 90 и 200 градусов. Ещё момент, при пере прошивке заливается только .hex, .eep не шьётся, все калибровки в .eep(EEPROM) поэтому они не затираются.

И теперь обязательная калибровка на тонком щупе 0.2мм. Сейчас:

O=0.2(среднее трение), CA=0.22(лёгкое трение), CB= 0.3(лёгкое трение), СС=0.22(лёгкое трение)

M666 X-0.05 Y-1.1 Z-0.50

O=0.2(лёгкое трение), CA=0.25(лёгкое трение), CB= 0.3(лёгкое трение), СС=0.22(лёгкое трение)

M666 X-0.05 Y-1.15 Z-0.50

O=0.2(сильное трение), CA=0.3(лёгкое трение), CB= 0.3(лёгкое трение), СС=X

Показания пошли странноватые. Оказалось, при пере прошивке забыл заново температуры выставить и стол с соплом прилично остыли, данные поплыли. Наглядная демонстрация важности калибровки стола на около рабочих температурах. Сейчас стол и сопло снова нагреты:

O=0, CA=X, CB= X, СС=X Возвращаем всё обратно:

M666 X-0.05 Y-1.05 Z-0.50

O=0.15(лёгкое трение), CA=0.2(лёгкое трение), CB= 0.2(лёгкое трение), СС=0.15(сильное трение)

M666 X-0.05 Y-1.05 Z-0.45

O=0.2(среднее трение), CA=0.2(лёгкое трение), CB= 0.2(лёгкое трение), СС=0.2(лёгкое трение)

Всё получилось, пробуем "затирание" щупом 0.15 затираем под движущимся на высоте 0.2мм соплом на траекториях движения между O CA CB CC. Разумеется погрешность даст о себе знать, но защимлений и больших пустот не должно быть.

На этом калибровка окончена. Заново пробовать/проверять сервис online калибровки не будем, итак всё отлично.

Привожу текущие настройки, но они имеют смысл исключительно для рассмативаемого принтера. И то переодически нужно делать перекалибровку, напримр при переносе принтера на новое место или при переходе на печать PLA без подогрева стола и пр.

>>> M503
SENDING:M503
echo:Steps per unit:
echo: M92 X80.00 Y80.00 Z80.00 E155.00
echo:Maximum feedrates (mm/s):
echo: M203 X500.00 Y500.00 Z500.00 E300.00
echo:Maximum Acceleration (mm/s2):
echo: M201 X5000 Y5000 Z5000 E5000
echo:Accelerations: P=printing, R=retract and T=travel
echo: M204 P3000.00 R3000.00 T3000.00
echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s)
echo: M205 S0.00 T0.00 B20000 X20.00 Z20.00 E20.00
echo:Home offset (mm)
echo: M206 X0.00 Y0.00 Z0.00
echo:Endstop adjustment (mm):
echo: M666 X-0.05 Y-1.05 Z-0.45
echo:Delta settings: L=diagonal_rod, R=radius, S=segments_per_second, ABC=diagonal_rod_trim_tower_[123]
echo: M665 L468.50 R243.00 S200.00 A0.00 B0.00 C0.00
echo:Material heatup parameters:
echo: M145 S0 H180 B70 F255
echo: M145 S1 H240 B100 F255
echo:PID settings:
echo: M301 P31.79 I3.30 D78.51
echo: M304 P68.83 I11.67 D101.49
echo:Filament settings: Disabled
echo: M200 D3.00
echo: M200 D0

Проверяем, что с печатью и снова жуть, на всю ширину стола не печатает:

Без калибровки равномерного натяжения трёх ремней не обойтись. Пока рассматривается 2 варианта:

1. Через измерение частоты звуковых колебаний ремня посредством микрофона подключённого к компьютеру и программы Spectrum Lab V2.71 http://ua3vvm.qrz.ru/slab.htm Автор DL4YHF. Здесь https://www.youtube.com/watch?v=HyTl6-itdpY человек использовал этот способ для измерения натяжения автомобильного ремня генератора. Здесь http://www.lkforum.ru/showthread.php?t=35441 ссылка на форум. Зная частоту колебаний ремня, его удельный вес и длину пролёта можно рассчитать его натяжение. Но обычно в рекомендациях указываются рекомендованные частоты колебаний ремня в тех или иных случаях. Проблемой вижу слабый шум вибраций ремня 3d принтера, особенно для пролёта 1.2 метра.

2. Оптический. Здесь нужна разработка прибора. Но точность будет максимально возможной.

Copyright ©Новиков Алексей Александрович,

2023 Санкт-Петербург, 197372, ООО "Антех ПСБ",

anteh собака bk.ru