В данной статье расмотрим первоначальную проверку файла конфигурации printer.cfg, а так же исправность оборудования перед первой тестовой печатью.
Для удобства навигации каждый шаг будет выделен в отдельный раздел.
Само програмное обеспечение Klipper заранее не знает ни какая плата MCU используется, ни как ее правильно конфигурировать. Поэтому чтобы все работало правильно, необходимо использовать правильно настроенный printer.cfg. Именно из этого файла Klipper узнает сколько у него управляемых MCU, какие пины за что отвечают, допустимые температурные режимы, настройку кинематики, перечень периферии и многое другое.
Перед настройкой рекомендуется взять основу конфигурационного файла из примеров файлов конфигурации или из папки ~/klipper/config/.
Лучше один раз проверить
printer.cfg, чем постоянно спотыкаться на настройкеKlipper.
Конфигурационный файл достаточно часто содержит спец. символы в качестве параметров к Пинам:
Конфигурационный файл также может состоять из нескольких других файлов, для этого идет следующий конструкт: [include (путь к файлу)]
[include ./macros.cfg]
На начальных этапах их лучше удалить из файла printer.cfg, либо проверять каждый из них по отдельности. Так как в конфигурационном файле допускается переопределение параметров, в зависимости от своего расположения - include может менять параметры.
Так же, include могут ссылаться на конфигурационные файлы, которых у вас нет (забыли скопировать или изменить имя из примера).
Чаще всего он переопределяет путь к [mcu] и расположение каталога [virtual_sdcard], так как конфигурации Fluidd или Mainsall любят это делать. Потом начинается поиски почему вы поправили путь к MCU, а по лог файлу видно что нет.
Первое что следует проверить, это работоспобность аварийной остановки, которую вызывают команды M112 или нажатие кнопки Аварийной Остановки в web интерфейсе. В дальнейшей настройке важно иметь возможность аварийно остановить принтер, чтобы избежать повреждения или выхода его из строя. После аварийной остановки он должен нормально приходить в рабоспособное состояние по команде FIRMWARE_RESTART.
Возможно на первом этапе настройки аварийная остановка не будет работать, потому что у вас неправильно прописаны mcu, и прошивка не стартует. Однако проверка защитных механизмов - это первое, что следует делать при начале эксплуатации.
Полный перечень доступных параметров для раздела [printer] описан в документации.
Данный раздел служит для описания кинематики вашего принтера, а так же для установления возможных скоростей, ускорений и тп.
В большинстве случаев выглядит следующим образом:
[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
В данном случае применяется кинематика cartesian, она же "Прюша", "дрыгостол" и тп. Основными представителями этой кинематики можно назвать принтера Prusa i3 MK3, Creality Ender3, Kingroon KP5L и другие. Платили бы нам за рекламу, мы еще и ссылки с промокодами бы сделали, но увы .
Прошивка Klipper поддерживает также и другие популярные кинематики:
corexy, а так же производную corexz;hybrid_corexy - она же markforge, а так же производную hybrid_corexz;rotary_delta, ее производную delta, и ее производную deltesian;none - служит для ситуации когда отсутствуют шаговые моторы или для отладки.В зависимоти от выбранной кинематики, прошивка Klipper по разному рассчитывает перемещения, а так же по разному управляет шаговыми моторами. Именно поэтому это основополагающий момент, который необходимо проверить и указать верный, в вашем случае, в начале настроек.
Параметры max_velocity и max_accel задают максимально возможные скорость перемещения (любых перемещений) и ускорение, которые доступны принтеру в целом. В случае если запрашиваемая скорость будет превышать максимально допустимую, значение будет снижено до указанного в параметре max_velocity.
Полный перечень доступных параметров для раздела [mcu] описан в документации.
Подключение mcu детально расмотренно в статье Подключение MCU.
В большинстве случаев выглядит следующим образом:
[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command
Основой параметр который важен в данном блоке - serial, если же используются MCU на CAN шине то - canbus_uuid.
Кроме того, если вы используете несколько MCU, убедитесь, что для всех них существуют блоки [mcu KrayKray] в printer.cfg
Полный перечень доступных параметров для раздела [stepper] описан в документации.
Каждый принтер может иметь разное количество шаговых моторов, которое зависит в том числе от кинематики. Некоторые принтеры имеют несколько шаговых моторов на ось.
Основное правило которому необходимо следовать: первый шаговый мотор на оси не имеет цифры в своем названии, второй и последующие - имеют. Например для принтера Voron 2.4, который имеет 4 шаговых мотора по Z наименования моторов будут: stepper_z stepper_z1 stepper_z2 stepper_z3.
В большинстве случаев он выглядит следующим образом:
[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA5
position_endstop: 0
position_min: 0
position_max: 235
homing_speed: 50
В данном разделе расмотрим только управляющие пины, из примера выше:
[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
...
endstop_pin: ^PA5
В данном случае для нас важно чтобы step_pin, dir_pin - были уникальны для каждого шагового двигателя, потому что именно через эти управляющие пины определяется момент выполнения им поворота (шага) и направление этого поворота.
В случае если шаговый мотор движется в противоположном направлении, то для кинематики castesian неоходимо просто инвертировать направление (или отменить инверсию). Делается это добавлением ! перед именем пина:
dir_pin: !PB9
В случае если используется кинематика CoreXY, то для настройки направлений XY наглядно проилюстрированы параметры:

Данное изображение взято из официальной документации VoronDesign.
Параметр enable_pin может быть общим для несколькольких шаговых моторов, так как он активирует/деактивирует мотор.
Проверить правильность подключения шагового мотора и его работосопобность позволяет команда STEPPER_BUZZ
STEPPER_BUZZ STEPPER=stepper_x
В части концевика для шагового мотора должен быть прописан pin:
endstop_pin: ^PA5
В данном случае ^ указывает что используется подтяжка вверх.
В случае если используется Sensorless парковка, на примере драйвера tmc2130 для шагового мотора по оси Х, то параметр может выглядеть следующим образом: tmc2130_stepper_x:virtual_endstop.
В случае если используется Probe (BLTouch, Klicky, Beacon и тд.) вместо концевика по оси Z, то параметр будет выглядеть следующим образом endstop_pin: probe:z_virtual_endstop, а параметр position_endstop в секции [stepper_z] должен быть удален.
В данном разделе рассмотрим только те параметры, которые определяют допустимые координаты по осям принтера.
Прошивка Klipper оперирует допустимым интервалом координат, поэтому интервалы координат 0..200 и -200..0 будут одинаково допустимы и работоспособны.
Учтите, что при выходе из допустимых интервалов координат - Klipper аварийно остановит выполнение всех дальнейше запланированных задач, и выдаст ошибку.
position_endstop: 0
position_min: 0
position_max: 235
position_endstop - домашняя координата оси, ось примит эту координату при срабатывании концевика. position_endstop ВСЕГДА лежит в интервале допустимых коордиат от position_min до position_max, чаще всего position_endstop равен position_min, и в данном случае равен 0.. Иногда концевик стоит не в минимальном, а в максимальном положении. Тогда его значение должно близиться к максимальной допустимой координате оси, но не превышать его. Если брать данный пример то - 235;position_min - минимально допустимая координата на оси, может быть отрицательной;position_max - максимально допустимая координата на оси. Неочевидно, но она также может быть отрицательной;В данном разделе рассмотрим только те параметры, которые определяют само перемещение, а так же те, которые влияют на расчеты перемещений. Все перемещения в FDM 3D принтерах - это вращение шагового мотора, поэтому чтобы переместить что-то в конкретное место, нужно знать на сколько шаговый мотор должен повернуться. Гаррус Вакариан будет рад, если вы откалибруетесь.
Подробно про Rotation Distance расмотренно в статье Калибровка перемещений.
microsteps: 16
rotation_distance: 40
full_steps_per_rotation: 200
full_steps_per_rotation - Физическая характеристика мотора, сколько полных шагов он делает на полный оборот в 360 градусов. Распространены два типа шаговых моторов: у которых полный шаг составляет 1.8 градуса (200 шагов на полный оборот) и шаговые моторы с полным шагом в 0.9 градуса (400 шагов на полный оборот).microsteps - на сколько микрошагов делится каждый шаг. Сегодняшние технологии позволяют разбивать полный шаг на 2, 4, 8, 16, 32, 64, 128 и 256 микрошагов. По умолчанию микрошаг составляет - 16. Другое количество микрошагов можно задать при использовании соответствующих драйверов и соответствующих настоек, опираясь на их возможности. Например, для драйверов TMC должен быть настроен UART/SPI режим работы драйвера;rotation_distance - это расстояние в миллиметрах на которое переместится ось за один полный оборот шаговика, а именно - 360 градусов. Это основной параметр, который корректируется/уточняется при калибровках перемещений.Проверка состояния и исправности работы концевиков. Выполняется командой:
QUERY_ENDSTOPS
Результатом работы команды будет строка:
x:open y:open z:TRIGGERED
Что расшифровывается как: концевики на осях X,Y не нажаты, концевик по оси Z сработал. В нормальном состоянии все концевики должны быть в состоянии open. А при нажатии на них и одновременном опросе их состояния, концевик должен находиться в состоянии TRIGGERED.
Если концевик при нажатиии на него с одновременным опросом не меняет своего статуса - он вышел из строя, оборван провод или он настроен некорректно.
Кроме опроса концевиков по команде, можно посмотреть их статус через web интерфейс в разделе Tune:

В части концевика для шагового мотора должен быть прописан pin:
[stepper_x]
...
endstop_pin: ^PA5
В данном случае ^ указывает что используется подтяжка вверх.
В случае если используется Sensorless парковка, на примере драйвера tmc2130 для шагового мотора по оси Х, то параметр может выглядеть следующим образом: tmc2130_stepper_x:virtual_endstop.
В случае если используется Probe (BLTouch, Klicky, Beacon и тд.) вместо концевика по оси Z, то параметр будет выглядеть следующим образом endstop_pin: probe:z_virtual_endstop, а параметр position_endstop в секции [stepper_z] должен быть удален.
В случае если концевик работает нормально и меняет свое состояние при замыкании/размыкании, но его состояние необходимо инвертировать используя ! (или удалить существующее инвертирование).
Параметры нагревателей и датчиков температур расположены в секциях [extruder] и [heater_bed]. Полный перечень доступных параметров для данных разделов описан в документации.
Необходимо проверить чтобы были корректно указаны:
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
min_temp: 0
max_temp: 250
heater_pin - Пин нагревателя, отвечает за включение и отключение нагревательного элемента;sensor_type - Название датчика температуры. Существуют два основных типа датчика температуры: NTC термисторы работают таким образом, что при увеличении температуры их сопротивление уменьшается. PTC термисторы – термисторы работают таким образом, что увеличивается электрическое сопротивление с ростом температуры. Поэтому ошибка в указании термистора ведет к аварийной остановке Klipper, а так же может привести к печальным последствиям. Полный перечень доступных термисторов и усилителей, поддерживаемых Klipper, указан в документации;sensor_pin - Пин термистора, отвечающий за измерение температуры;min_temp - Минимально допустимая температура, выход за которую приводит к аварийной остановке Klipper;max_temp - Максимально допустимая температура, выход за которую приводит к аварийной остановке Klipper.В мире нет ни одного одинакового в своих характеристиках датчика температуры и нагревательного элемента, да их значений минимальны, но они есть. Кроме того вы могли заменить нагревательный элемент. Поэтому необходимо выполнить калибровку и подбор управляющих коэффициентов, для вашего принтера.
PID - это пропорционально-интегрально-дифференцирующий регулятор, или управление в контуре с обратной связью. Таким образом он управляет нагревательным элементом так, чтобы поддерживать равномерную температуру, регулируя мощность нагревательного элемента. То есть для достижения целевой температуры он включит нагревательный элемент на максимальную мощность, а по мере достижения целевой температуры начнет плавно ее снижать, переходя в режим поддержания температуры.
В секциях [extruder] и [heater_bed] присутствуют коэффициенты PID:
control: pid
pid_Kp: 54.027
pid_Ki: 0.770
pid_Kd: 948.182
В случае, если в параметре control используется режим watermark - то коэффициенты PID можно удалить из секции нагревателя. В режиме watermark нагревательный элемент всегда работает с максимальной мощностью. По достижению целевой температуры - нагревательный элемент отключается, и в дальнейшем включится в случае если температура выйдет за рамки отклонения указанные в параметре max_delta, который по умолчанию равен 2.
Для этих целей служит команда PID_CALIBRATE.
PID_CALIBRATE HEATER=<config_name> TARGET=<temperature>
Помните,
PIDкалибруется для условий в которых предполагается работа нагревателей, поэтому коэффициентыPIDс обдувом иPIDбез обдува будут разными, так же как и для разных температур.
В случае если для контроля температуры вы используете режим
watermarkпропустите калибровкуPIDдля данного нагревателя.
Для калибровки PID экструдера на темпретаруре 240 выполним команду:
PID_CALIBRATE HEATER=extruder TARGET=240
Для калибровки PID стола на темпретаруре 80 выполним команду:
PID_CALIBRATE HEATER=heater_bed TARGET=80
Сохраним полученные значения PID в конфиг.
SAVE_CONFIG