78 lines
2.9 KiB
INI
78 lines
2.9 KiB
INI
[gcode_macro SET_PA]
|
|
description: Set Pressure Advance with fully dynamic scaling based on nozzle and flow
|
|
variable_pa: 0.04
|
|
|
|
# === OVERVIEW ===
|
|
# Fully dynamic Pressure Advance tuning:
|
|
# - Uses nozzle diameter from printer.cfg
|
|
# - Scales PA by nozzle and flow ratio
|
|
# - Automatically sets EXP (flow exponent) as 2x nozzle diameter
|
|
# - Supports optional flow exponent factor for fine-tuning
|
|
# - Dynamically sets SMOOTH_TIME unless overridden
|
|
#
|
|
# === HOW TO USE ===
|
|
# SET_PA PA=<base_value> [FLOW=<actual_mm³/s>] [MAX_FLOW=<max_mm³/s>] [SMOOTH=<value>] [EXP=<value>] [FLOW_FACTOR=<value>]
|
|
#
|
|
# Example:
|
|
# SET_PA PA=0.05 FLOW=25 MAX_FLOW=35 FLOW_FACTOR=1.2
|
|
# SET_PA PA=0.05 ; uses defaults with FLOW_FACTOR=1.0
|
|
|
|
gcode:
|
|
{% set base_pa = params.PA|float %}
|
|
{% set flow = params.FLOW|default(25.0)|float %}
|
|
{% set max_flow = params.MAX_FLOW|default(35.0)|float %}
|
|
{% set nozzle = printer.configfile.settings.extruder.nozzle_diameter|float %}
|
|
{% set flow_factor = params.FLOW_FACTOR|default(1.7)|float %}
|
|
|
|
# === Scale PA based on nozzle diameter ===
|
|
{% if nozzle <= 0.2 %}
|
|
{% set nozzle_scale = 1.8 %}
|
|
{% elif nozzle <= 0.3 %}
|
|
{% set nozzle_scale = 1.4 %}
|
|
{% elif nozzle <= 0.4 %}
|
|
{% set nozzle_scale = 1.0 %}
|
|
{% elif nozzle <= 0.6 %}
|
|
{% set nozzle_scale = 0.75 %}
|
|
{% elif nozzle <= 0.8 %}
|
|
{% set nozzle_scale = 0.5 %}
|
|
{% else %}
|
|
{% set nozzle_scale = 0.4 %}
|
|
{% endif %}
|
|
{% set scaled_pa = base_pa * nozzle_scale %}
|
|
|
|
# === Base exponent from nozzle size unless overridden ===
|
|
{% set base_exp = params.EXP|default(2.0 * nozzle)|float %}
|
|
{% set exp = base_exp * flow_factor %}
|
|
|
|
# === Flow ratio and flow scale ===
|
|
{% set flow_ratio = flow / max_flow %}
|
|
{% set flow_scale = flow_ratio ** exp %}
|
|
{% set adjusted_pa = scaled_pa * flow_scale %}
|
|
|
|
# === Dynamic smoothing time unless overridden ===
|
|
{% if 'SMOOTH' in params %}
|
|
{% set smooth = params.SMOOTH|float %}
|
|
{% set smooth_source = "manual" %}
|
|
{% else %}
|
|
{% if nozzle <= 0.3 %}
|
|
{% set smooth = 0.03 %}
|
|
{% elif nozzle <= 0.4 %}
|
|
{% set smooth = 0.04 %}
|
|
{% elif nozzle <= 0.6 %}
|
|
{% set smooth = 0.045 %}
|
|
{% elif nozzle <= 0.8 %}
|
|
{% set smooth = 0.055 %}
|
|
{% else %}
|
|
{% set smooth = 0.065 %}
|
|
{% endif %}
|
|
{% set smooth_source = "dynamic" %}
|
|
{% endif %}
|
|
|
|
# === Apply values ===
|
|
SET_PRESSURE_ADVANCE ADVANCE={adjusted_pa} SMOOTH_TIME={smooth}
|
|
SET_GCODE_VARIABLE MACRO=SET_PA VARIABLE=pa VALUE={adjusted_pa}
|
|
|
|
# === Logging ===
|
|
{% set msg = "📐 PA scaled | Nozzle: " ~ nozzle|string ~ "mm | Base PA: " ~ base_pa|string ~ " x" ~ nozzle_scale|string ~ " x" ~ flow_scale|string ~ " (exp=" ~ exp|string ~ ") = " ~ adjusted_pa|string ~ " | Smooth: " ~ smooth|string ~ " (" ~ smooth_source ~ ")" %}
|
|
RESPOND MSG="{msg}"
|