Итак, принтер собран, подключение к сети настроено и переходим к настройке самого Duet 3. Повествование о настроке буду вести по блокам — так будет и нагляднее и удобнее.
К сожалению, Code Snippet через одно место форматирует комментарии, поэтому буду давать пояснения после каждого блока.
Геометрия и кинематика
M550 P"Voron3D"
G21 ; millimeter units
M669 K1 ; corexy mode
M208 X0 Y0 Z-1.20 S1 ; S1 = set axes minima
M208 X340 Y350 Z300 S0 ; S0 = set axes maxima
;-- Endstops --------------------------------------------------------------------------------------
M574 X2 S1 P"!io0.in" ; configure active-low endstop for high end on X via pin io0.in
M574 Y2 S1 P"!io1.in" ; configure active-low endstop for high end on Y via pin io1.in
M574 Z1 S1 P"!io2.in" ; configure active-low endstop for low end on Z via pin io2.in
;-- Z drive positions -----------------------------------------------------------------------------
M671 X-72.0:-72.0:400.0:400.0 Y-10.0:410.0:411.0:-10.0 S10
M557 X30:310 Y50:310 S50 ; configure z probing grid for mesh compensation
Начнём, конечно же, с задания имени принтера — команда M505. Можно оставить заданное по умолчанию — «Duet3», но я так не люблю. Для того, чтобы можно было подключиться по сети, введя в адресную строку «voron3d.local» необходимо также задать имя хоста. Для этого через SSH подклоючаемся к «Малине», вызываем меню настроек (sudo raspi-config).
Итак, команды:
- G21 задаёт метрическую систему измерений. Мы тут дюймами не пользуемся, так что лучше так.
- M669 K1 задаёт тип кинематики CoreXY
- M208 X0 Y0 Z-1.05 S1 задаёт минимальное значение осей XYZ. Т.к. срабатывание концевика оси Z происходит при положении кончика сопла ниже поверхности стола, то значение отличается от нуля (значение, конечно же, было найдено эмпирическим путём).
- M208 X340 Y350 Z320 S0 задаёт максимальное значение осей XYZ.
- M574 задаёт тип концевиков осей и присваивает их портам контроллера. Цифра после буквенного обозначения оси определяет местонахождение концевика: 1 — в начале оси (значение, заданное командой M208 S1), 2 — в конце оси (значение, заданное командой M208 S0), 0 — концевик отсутствует. Параметр S задаёт тип концевика, 1 — обычный выключатель, нормально замкнутый. Параметр P задаёт порт микроконтроллера, символ «!» отвечает за инвертирование сигнала.
- M671 задаёт координаты ремней оси Z относительно начала координат стола, которые нужны для автоматического выравнивания портала. Отступы необходимо измерить самостоятельно. И важная деталь — координаты должны идти в том же порядке, что и моторы оси Z. Т.е. в левом переднем углу у меня первый мотор, второй в левом дальнем углу, третий в правом дальнем углу и четвёртый в правом переднем. И координаты идут соответственно: по Х -75, -75, 405, 405, по Y -5, 415, 415, -5. Параметр S задаёт максимальный допуск отклонения. Значение отклонения должно быть не менее 5 мм, т.к. портал может быть сильно перекошен.
- M557 задаёт координатную сетку для функции построения разницы высот стола. Параметры X и Y задают минимальную и максимальную координату по осям, а параметр S — шаг в мм.
Моторы
M569 P0.0 S0 ; physical drive XA goes backwards
M569 P0.1 S1 ; physical drive YB goes forwards
M569 P0.2 S1 ; physical drive Z0 goes forwards
M569 P0.3 S0 ; physical drive Z1 goes backwards
M569 P0.4 S1 ; physical drive Z2 goes forwards
M569 P0.5 S0 ; physical drive Z3 goes backwards
M569 P121.0 S1 ; physical drive TBE0 goes forwards
M584 X0.0 Y0.1 ; assign XA motor to Duet3 MB Driver_0, assign YB motor to Duet 3 MB Driver_1
M584 Z0.2:0.3:0.4:0.5 ; assign Z0, Z1, Z2 & Z3 motors to Duet3 MB Driver_2, _3, _4 & _5
M584 E121.0 ; assign extruder to Duet 3 Tool board
M84 S60 ; motor idle timeout
M906 I50 ; motor idle current percentage
M350 X16 Y16 E16 I1 ; set microstepping for XY-axis and extruder, interpolation enabled
M350 Z16 I0 ; set microstepping for Z-axis, interpolation disabled
M92 X160.00 Y160.00 Z400 E416.00 ; set steps per mm; set microsteps per mm for 1.8-degree steppers
; Velocity, acceleration, and current settings are in these macros
M98 P"/macros/Drive/xy_fullcurrent.g"
M98 P"/macros/Drive/z_fullcurrent.g"
M98 P"/macros/Drive/e_fullcurrent.g"
Далее идёт раздел, посвящённый моторам:
M569 задаёт режим работы шагового мотора. С помощью параметра P идёт выбор физического мотора, первое число перед точкой — это адрес платы, в моём случае 0 — это Duet 3, а 121 — TLC1 (я не менял адрес по умолчанию). Параметр D3 устанавливает режим StealthChop2, S — направление вращения.
M584 присваивает осям моторы. Как и для предыдущей команды, первое число — адрес платы. Если необходимо назначить несколько моторов на одну ось, то они перечисляются через двоеточие, в моём случае моторы 2, 3, 4 и 5 двигают портал вдоль оси Z.
М84 задаёт таймаут перевода моторов в режим ожидания (idle), чтобы не жрали попусту ток и не грелись.
M906 задаёт силу тока, протекающего через моторы в режиме ожидания, в процентном отношении. В моём случае — 50%.
M350 задаёт деление шага (микрошаг), X, Y, Z и т.п. — оси, числовое значение, собственно, одна эннадцатая шага. В моём случае это 1/16. Параметр I включает и отключает интерполяцию — в случае с драйверами TMC это 1/256.
M92 задаёт количество шагов на мм, т.е. сколько импульсов должен подать контроллер на мотор оси, чтобы эта ось переместилась на 1 мм. Для расчёта можно использовать калькулятор.
Настройки скоростей, ускорений и рывков (jerk) находятся в отдельных макросах, для запуска которых используется команда M98. О макросах чуть позднее напишу.
Скорость, ускорение и рывки
M913 X100 Y100 ; restore motor current percentage to 100%
M906 X1600 Y1600 ; motor drive current
M203 X18000 Y18000 ; maximum speed (mm/min)
M201 X3000 Y3000 ; maximum acceleration (mm/min/s)
M566 X900 Y900 ; instantaneous speed change (mm/min)
Это код моего макроса, задающего полную скорость осей XY, под названием «xy_fullcurrent». Команды:
M913 задаёт ток моторов осей, указываемый числом в процентах. Изначально, по умолчанию, и так установлено 100%, но т.к. в других макросах я управляю этими значениями, тут приходится выставлять 100%.
M906 задаёт максимальный ток моторов осей в миллиамперах.
M203 задаёт максимальную скорость осей в мм/мин. Для пересчёта в мм/с надо делить на 60. :)
M201 задаёт максимальное ускорение моторов осей в мм/мин/сек.
M566 задаёт так называемые рывки (jerks) — минимальное изменение скорости для которой используется ускорение. Если разница меньше — то изменение скорости производится моментально. Важный параметр, влияющий как на общую скорость печати, так и на качество. Рассчитывается также опытным путём.
В принципе, приведённые выше команды можно (и нужно) сразу вписать в конфиг, но т.к. я в процессе подготовки принтера к печати использую разные скорости и токи моторов, то у меня вот так вот. Об этом тоже расскажу позднее.
Стол
M308 S0 P"temp0" Y"thermistor" T100000 B4267 ; configure sensor 0 as thermistor on pin temp0
M950 H0 C"out0" T0 ; create bed heater output on out0 and map it to sensor 0
M307 H0 A180.3 C257.4 D6.9 S0.95 V24.2 B0 ; disable bang-bang mode for the bed heater and set PWM limit
M140 H0 ; map heated bed to heater 0
M143 H0 S120 ; set temperature limit for heater 0 to 120C
M570 H0 T10 S180 ; heater fault timeout
Переходим в раздел настройки температурных контроллеров. Первый из них — стол. Итак, команды:
M308 задаёт датчик (сенсор). Параметр S определяет индекс сенсора. Индексы задаются по порядку (честно говоря, не знаю, можно ли назначить 1 если не был назначен 0) в моём случае — 0. Параметр P задаёт имя пина платы (со списком имён можно ознакомиться тут). Параметр Y отвечает за тип термодатчика и задаётся он словом в кавычках. У моей грелки в качестве термодатчика используется обычный терморезистор NTC на 100 кОм и задаётся он словом «thermistor». Далее идут необязательные, но желательныйе параметры: T — это сопротивление термистера при 25 градусах Цельсия, B — так называемый коэффициент уравнения Стейнхарта-Харта. Обычно указывается в характеристиках термистора.
M950 создаёт управляемый элемент (нагреватель H, вентилятор F, шпиндель ЧПУ-станка R, сервопривод P/S и т.п.) и присваивает ему пин платы. В моём случае создаю нагреватель с индексом 0 — H0. Парамет С определяет имя пина (список тут). Параметр T присваивает датчик нагревателю, который создан уже командой M308. В моём случае — это датчик с индексом 0.
M307 задаёт параметры нагревателя, такие как усиление, доминантное время и т.п. Задаётся не вручную, а после калибровки нагревателя командой M303.
M140 в данном случае используется для присвоения нагревателя H0 нагревательному столу.
M143 задаёт максимально допустимую температуру нагревателя.
M570 задаёт параметры обнаружения сбоя нагревателя. Параметр T задаёт максимальное отклонение температуры от заданной. S задаёт задержку остановки печати от обнаружения сбоя в секундах.
недавние комментарии