Pressure Advance

Pressure Advance (PA) компенсирует задержку давления в зоне плавления: при разгоне
экструдер «не додаёт» пластик, при торможении «переливает». PA заранее подкручивает подачу
пропорционально ускорению — от этого зависят чёткость углов, отсутствие набуханий на старте
линии и качество шва. Формула Klipper: pa_position = nominal_position + pressure_advance * nominal_velocity.

Главное: PA — свойство ФИЛАМЕНТА, не принтера

Значение зависит в первую очередь от пластика (PLA ≠ PETG ≠ TPU, и даже разные бренды
одного материала различаются), а также от тракта, температуры и потока. Типичные порядки:

  • direct drive: PA ≈ 0.02–0.08 (короткий тракт, малая задержка);
  • bowden: PA ≈ 0.3–1.0 (длинная трубка сжимается — задержка в разы больше).

Поэтому одно число «на весь принтер» неверно — у каждого материала своё.

Где оно живёт в Klipper

  • В [extruder]: pressure_advance и pressure_advance_smooth_time (дефолт smooth_time в
    Klipper — 0.040). Klipper требует какое-то значение, поэтому оно там есть всегда — но это
    дефолт/фолбэк, который применяется, пока никто не переопределит.
  • Реальное значение ставится на лету: SET_PRESSURE_ADVANCE ADVANCE=<x> SMOOTH_TIME=<y>
    (для многоэкструдерных — с EXTRUDER=<name>; иначе применяется к активному экструдеру).
  • Физический экструдер один. При мультиматериальной печати PA нужно переставлять на
    каждой смене инструмента
    под загруженный пластик — иначе весь принт печатается с PA
    первого филамента.

Проверить, что реально активно:

# дефолт из конфига (фолбэк):
curl -s "http://<printer>:7125/printer/objects/query?configfile" | \
  python3 -c "import sys,json;print(json.load(sys.stdin)['result']['status']['configfile']['settings']['extruder']['pressure_advance'])"
# что слайсер реально вписал в gcode:
grep -n "SET_PRESSURE_ADVANCE" file.gcode

Правильное место — профиль филамента в слайсере

OrcaSlicer/Bambu хранят PA отдельным полем филамента (не в стартовом g-коде):

  • enable_pressure_advance — чекбокс, в JSON ["0"]/["1"] (массив строк);
  • pressure_advance — значение, в JSON ["0.085"] (массив строк).

При enable_pressure_advance = ["1"] и Klipper-флейворе слайсер сам эмитит
SET_PRESSURE_ADVANCE ADVANCE=<val> в стартовом g-коде филамента, перекрывая дефолт из
printer.cfg.

Гоча наследования: enable_pressure_advance часто задан не в твоём профиле, а в базовом
(например у вендора в fdm_filament_common.json стоит ["1"]) и наследуется вниз по
цепочке inherits. Легко решить «PA не задан», глядя только на свой профиль, — проверяй всю
цепочку. Само значение PA без своего override тоже наследуется (вендорский дефолт), а не
берётся из printer.cfg.

Гоча: smooth_time поля в слайсере обычно НЕТ

Поле слайсера шлёт только ADVANCE, без SMOOTH_TIME (проверяется грепом: ни один
filament-профиль не содержит smooth_time). Значит smooth_time не задаётся пофиламентно
и для всех берётся глобальное значение из [extruder]. Меньший smooth_time (0.02–0.03) —
резче реакция, но чувствительнее к шуму; больший (0.04+) — мягче. Если калибровка дала разный
smooth_time по материалам, его дописывают вручную в стартовый g-код филамента
(SET_PRESSURE_ADVANCE ADVANCE=X SMOOTH_TIME=Y). Обычно один smooth_time годится на всё.

Калибровка

Мерить методом «линий» (например, генератор K3D), а НЕ башней/шаблоном — башня и шаблон
занижают PA из-за input shaping (сглаживание гасит те самые
всплески, которые PA должен ловить). 2D-вариант заодно подбирает smooth_time по граням.
Найденное значение вписывать в поле профиля филамента, а не в printer.cfg.

Если в голове принтера есть тензодатчик-зонд (Prusa Nextruder, QIDI Q2), K меряется автоматически по давлению расплава — быстрее и без расхода на тестовые узоры: Авто-калибровка Pressure Advance тензодатчиком. На моём Q2 авто-замер сошёлся с методом линий в третьем знаке (0.0328 против 0.032).

Общий контекст параметров — Настройка параметров печати 3д модели,
мультиматериал — Печать несколькими филаментами на одном экструдере,
механика прошивки — Klipper.

Источники