From 323268ea02700b2fd3b6accda310845ba29c894e Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Sun, 28 Nov 2021 22:01:26 -0500 Subject: [PATCH] docs: Note systemic error introduced by interpolate setting in TMC_Drivers.md Signed-off-by: Kevin O'Connor --- docs/Config_Reference.md | 12 +++++++++--- docs/TMC_Drivers.md | 27 +++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/Config_Reference.md b/docs/Config_Reference.md index 75a9de52..589deb83 100644 --- a/docs/Config_Reference.md +++ b/docs/Config_Reference.md @@ -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. @@ -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. @@ -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. diff --git a/docs/TMC_Drivers.md b/docs/TMC_Drivers.md index 2f456d4a..581fe2b2 100644 --- a/docs/TMC_Drivers.md +++ b/docs/TMC_Drivers.md @@ -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