110 lines
4.6 KiB
INI
110 lines
4.6 KiB
INI
###############################################################################
|
|
# Source https://github.com/strayr/strayr-k-macros/blob/e0807570a66d28735cf05143b105ab4ea6d9798f/mechanical_level_tmc2209.cfg
|
|
#
|
|
# Mechanical Gantry Calibration
|
|
#
|
|
# Requires TMC2209 drivers with UART control, some tuning and perhaps
|
|
# some printed endstops.
|
|
#
|
|
# Based on on (depricated) M915 and now alternate G34 from Marlin
|
|
# I beleive Prusa use this, certainly there's older videos advising to just
|
|
# ram the gantry at full current into the the z-max stops.
|
|
#
|
|
# It moves the gantry to the top of the travel, drops the current and then
|
|
# does a force move to force the steppers to stall against the physical end
|
|
# stops, transfering the level of the frame to the gantry.
|
|
#
|
|
# This is the only way to programatically level a multi-stepper single-driver
|
|
# gantry. It may also help with a dual-driver gantry on a bed-slinger design
|
|
# or where the plane of the bed is less trustworthy than the frame.
|
|
#
|
|
# It's particularly risky doing Z_TILT_ADJUST and SCREWS_TILT_CALCULATE
|
|
# without a mechanical reference as if one side of the gantry or bed is prone
|
|
# to droop, over time both bed and gantry will skew excessively but still read
|
|
# as level, so this can help transfer "level" from the frame to the gantry and
|
|
# then to the bed.
|
|
#
|
|
# I don't recommend doing this in a START_PRINT, I call this if a
|
|
# SCREWS_TILT_CALCULATE shows some drift, althoughon an Ender 3 type printer
|
|
# it's prudent to check the v-slot rollers for correct adjustment if drift is
|
|
# observed.
|
|
#
|
|
# It's probably best to run this and then do SCREWS_TILT_CALCULATE
|
|
# until the bed is really level. IF you have dual Z steppers you can then
|
|
# use Z_TILT_ADJUST for subsequent leveling of the gantry but make sure you
|
|
# use the same points for gantry level as you use in SCREWS_TILT_CALCULATE
|
|
#
|
|
# It may damage your printer if you do this at too high a current, or don't
|
|
# have proper endstops.
|
|
#
|
|
# HERE BE DRAGONS!
|
|
# YOU WERE WARNED!
|
|
#
|
|
# Here's a video of this in action
|
|
# https://www.youtube.com/watch?v=aVdIeIIpUAk
|
|
# and the endstops for 2020 v-slot
|
|
# https://www.thingiverse.com/thing:4848479
|
|
|
|
[gcode_macro MECHANICAL_GANTRY_CALIBRATION]
|
|
gcode:
|
|
### SET THIS DEFAULT CARFULLY - start really low
|
|
{% set my_current = params.CURRENT|default(0.20)|float %} ; adjust crash current on the fly :D
|
|
###
|
|
{% set oldcurrent = printer.configfile.settings["tmc2209 stepper_z"].run_current %}
|
|
{% set oldhold = printer.configfile.settings["tmc2209 stepper_z"].hold_current %}
|
|
{% set x_max = printer.toolhead.axis_maximum.x %}
|
|
{% set y_max = printer.toolhead.axis_maximum.y %}
|
|
{% set z_max = printer.toolhead.axis_maximum.z %}
|
|
{% set fast_move_z = printer.configfile.settings["printer"].max_z_velocity %}
|
|
{% set fast_move = printer.configfile.settings["printer"].max_velocity %}
|
|
M117 {printer.homed_axes}
|
|
{% if printer.homed_axes != 'xyz' %}
|
|
G28 ; Home All Axes
|
|
{% endif %}
|
|
G90 ; absolute
|
|
G0 X{x_max / 2} Y{y_max / 2} F{fast_move * 30 } ;put toolhead in the center of the gantry
|
|
|
|
G0 Z{z_max -5} F{fast_move_z * 60 } ; go to the Z-max - 5 at speed max z speed ; CHANGED
|
|
|
|
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={my_current} ; drop current on Z stepper
|
|
|
|
{% if printer.configfile.settings["stepper_z1"] %} ; test for dual Z
|
|
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={my_current} ; drop current
|
|
{% endif %}
|
|
|
|
CONDITIONAL_BEEP I=1
|
|
G4 P200 ; Probably not necessary, it is here just for sure
|
|
|
|
SET_KINEMATIC_POSITION Z={z_max - 25} ; Trick printer into beleiving the gantry is 25mm lower than it is ; CHANGED
|
|
|
|
G1 Z{z_max} F{6 * 60} ; based on above figures, there will be 20mm worth of grinding ; CHANGED
|
|
CONDITIONAL_BEEP I=2
|
|
G4 P10000 ; wait 10 seconds
|
|
G1 Z{z_max -6} F{6 * 60} ; move 4mm down
|
|
CONDITIONAL_BEEP I=3
|
|
G4 P200 ; same as the first one
|
|
|
|
SET_TMC_CURRENT STEPPER=stepper_z CURRENT={oldcurrent} HOLDCURRENT={oldhold}
|
|
|
|
{% if printer.configfile.settings["stepper_z1"] %} ; test for dual Z
|
|
SET_TMC_CURRENT STEPPER=stepper_z1 CURRENT={oldcurrent} HOLDCURRENT={oldhold} ; reset current
|
|
{% endif %}
|
|
|
|
G1 Z{z_max -30} F{6 * 60} ; move to 30mm below z-max to allow homing movement
|
|
|
|
G4 P200 ; same as the first one
|
|
G28 Z ; we MUST home again as the ganty is really in the wrong place.
|
|
|
|
[gcode_macro G34]
|
|
gcode:
|
|
MECHANICAL_GANTRY_CALIBRATION
|
|
|
|
[menu __main __setup __calib __mech_gantry_calibrate]
|
|
type: command
|
|
enable: {not printer.idle_timeout.state == "Printing"}
|
|
name: G34 Gantry Level
|
|
gcode:
|
|
G34
|
|
|
|
[force_move]
|
|
enable_force_move: true ; enable FORCE_MOVE and SET_KINEMATIC_POSITION |