Skip to content

Commit

Permalink
docs: Note systemic error introduced by interpolate setting in TMC_Dr…
Browse files Browse the repository at this point in the history
…ivers.md

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
  • Loading branch information
KevinOConnor committed Dec 12, 2021
1 parent 437d09b commit 22ab8cc
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 3 deletions.
12 changes: 9 additions & 3 deletions docs/Config_Reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -2767,7 +2767,9 @@ cs_pin:
# The default is to not use an SPI daisy chain.
#interpolate: True
# If true, enable step interpolation (the driver will internally
# step at a rate of 256 micro-steps). The default is True.
# step at a rate of 256 micro-steps). This interpolation does
# introduce a small systemic positional deviation - see
# TMC_Drivers.md for details. The default is True.
run_current:
# The amount of current (in amps RMS) to configure the driver to use
# during stepper movement. This parameter must be provided.
Expand Down Expand Up @@ -2834,7 +2836,9 @@ uart_pin:
# UART communication. The default is to not configure any pins.
#interpolate: True
# If true, enable step interpolation (the driver will internally
# step at a rate of 256 micro-steps). The default is True.
# step at a rate of 256 micro-steps). This interpolation does
# introduce a small systemic positional deviation - see
# TMC_Drivers.md for details. The default is True.
run_current:
# The amount of current (in amps RMS) to configure the driver to use
# during stepper movement. This parameter must be provided.
Expand Down Expand Up @@ -2946,7 +2950,9 @@ cs_pin:
#interpolate: True
# If true, enable step interpolation (the driver will internally
# step at a rate of 256 micro-steps). This only works if microsteps
# is set to 16. The default is True.
# is set to 16. Interpolation does introduce a small systemic
# positional deviation - see TMC_Drivers.md for details. The default
# is True.
run_current:
# The amount of current (in amps RMS) used by the driver during
# stepper movement. This parameter must be provided.
Expand Down
27 changes: 27 additions & 0 deletions docs/TMC_Drivers.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,33 @@ setting `stealthchop_threshold` to 999999). Unfortunately, the drivers
often produce poor and confusing results if the mode changes while the
motor is at a non-zero velocity.

## TMC interpolate setting introduces small position deviation

The TMC driver `interpolate` setting may reduce the audible noise of
printer movement at the cost of introducing a small systemic
positional error. This systemic positional error results from the
driver's delay in executing "steps" that Klipper sends it. During
constant velocity moves, this delay results in a positional error of
nearly half a configured microstep (more precisely, the error is half
a microstep distance minus a 512th of a full step distance). For
example, on an axis with a 40mm rotation_distance, 200
steps_per_rotation, and 16 microsteps, the systemic error introduced
during constant velocity moves is ~0.006mm.

For best positional accuracy consider using spreadCycle mode and
disable interpolation (set `interpolate: False` in the TMC driver
config). When configured this way, one may increase the `microstep`
setting to reduce audible noise during stepper movement. Typically, a
microstep setting of `64` or `128` will have similar audible noise as
interpolation, and do so without introducing a systemic positional
error.

If using stealthChop mode then the positional inaccuracy from
interpolation is small relative to the positional inaccuracy
introduced from stealthChop mode. Therefore tuning interpolation is
not considered useful when in stealthChop mode, and one can leave
interpolation in its default state.

## Sensorless Homing

Sensorless homing allows to home an axis without the need for a
Expand Down

0 comments on commit 22ab8cc

Please sign in to comment.