mirror of https://github.com/Desuuuu/klipper.git
stepper: Calculate step_distance from rotation_distance
Add support for automatically calculating the internal step_distance from new config parameters - rotation_distance, microsteps, full_steps_per_rotation, and gear_ratio. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
4a41d228eb
commit
7dcc778b6c
|
@ -10,7 +10,8 @@
|
||||||
step_pin: ar54
|
step_pin: ar54
|
||||||
dir_pin: ar55
|
dir_pin: ar55
|
||||||
enable_pin: !ar38
|
enable_pin: !ar38
|
||||||
step_distance: 0.001963495
|
microsteps: 16
|
||||||
|
gear_ratio: 80:16
|
||||||
|
|
||||||
[stepper_arm]
|
[stepper_arm]
|
||||||
step_pin: ar60
|
step_pin: ar60
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
step_pin: ar54
|
step_pin: ar54
|
||||||
dir_pin: ar55
|
dir_pin: ar55
|
||||||
enable_pin: !ar38
|
enable_pin: !ar38
|
||||||
step_distance: 0.001963495
|
microsteps: 16
|
||||||
|
gear_ratio: 107.000:16, 60:16
|
||||||
endstop_pin: ^ar2
|
endstop_pin: ^ar2
|
||||||
homing_speed: 50
|
homing_speed: 50
|
||||||
position_endstop: 252
|
position_endstop: 252
|
||||||
|
@ -21,14 +22,16 @@ lower_arm_length: 320.000
|
||||||
step_pin: ar60
|
step_pin: ar60
|
||||||
dir_pin: ar61
|
dir_pin: ar61
|
||||||
enable_pin: !ar56
|
enable_pin: !ar56
|
||||||
step_distance: 0.001963495
|
microsteps: 16
|
||||||
|
gear_ratio: 107.000:16, 60:16
|
||||||
endstop_pin: ^ar15
|
endstop_pin: ^ar15
|
||||||
|
|
||||||
[stepper_c]
|
[stepper_c]
|
||||||
step_pin: ar46
|
step_pin: ar46
|
||||||
dir_pin: ar48
|
dir_pin: ar48
|
||||||
enable_pin: !ar62
|
enable_pin: !ar62
|
||||||
step_distance: 0.001963495
|
microsteps: 16
|
||||||
|
gear_ratio: 107.000:16, 60:16
|
||||||
endstop_pin: ^ar19
|
endstop_pin: ^ar19
|
||||||
|
|
||||||
[extruder]
|
[extruder]
|
||||||
|
|
|
@ -6,6 +6,12 @@ All dates in this document are approximate.
|
||||||
|
|
||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
|
20201218: Rotary delta and polar printers must now specify a
|
||||||
|
`gear_ratio` for their rotary steppers, and they may no longer specify
|
||||||
|
a `step_distance` parameter. See the
|
||||||
|
[config reference](Config_Reference.md#stepper) for the format of the
|
||||||
|
new gear_ratio paramter.
|
||||||
|
|
||||||
20201213: It is not valid to specify a Z "position_endstop" when using
|
20201213: It is not valid to specify a Z "position_endstop" when using
|
||||||
"probe:z_virtual_endstop". An error will now be raised if a Z
|
"probe:z_virtual_endstop". An error will now be raised if a Z
|
||||||
"position_endstop" is specified with "probe:z_virtual_endstop".
|
"position_endstop" is specified with "probe:z_virtual_endstop".
|
||||||
|
|
|
@ -127,9 +127,24 @@ enable_pin:
|
||||||
# Enable pin (default is enable high; use ! to indicate enable
|
# Enable pin (default is enable high; use ! to indicate enable
|
||||||
# low). If this parameter is not provided then the stepper motor
|
# low). If this parameter is not provided then the stepper motor
|
||||||
# driver must always be enabled.
|
# driver must always be enabled.
|
||||||
step_distance:
|
rotation_distance:
|
||||||
# Distance in mm that each step causes the axis to travel. This
|
# Distance (in mm) that the axis travels with one full rotation of
|
||||||
|
# the stepper motor. This parameter must be provided.
|
||||||
|
microsteps:
|
||||||
|
# The number of microsteps the stepper motor driver uses. This
|
||||||
# parameter must be provided.
|
# parameter must be provided.
|
||||||
|
#full_steps_per_rotation: 200
|
||||||
|
# The number of full steps for one rotation of the stepper motor.
|
||||||
|
# Set this to 200 for a 1.8 degree stepper motor or set to 400 for a
|
||||||
|
# 0.9 degree motor. The default is 200.
|
||||||
|
#gear_ratio:
|
||||||
|
# The gear ratio if the stepper motor is connected to the axis via a
|
||||||
|
# gearbox. For example, one may specify "5:1" if a 5 to 1 gearbox is
|
||||||
|
# in use. If the axis has multiple gearboxes one may specify a comma
|
||||||
|
# separated list of gear ratios (for example, "57:11, 2:1"). If a
|
||||||
|
# gear_ratio is specified then rotation_distance specifies the
|
||||||
|
# distance the axis travels for one full rotation of the final gear.
|
||||||
|
# The default is to not use a gear ratio.
|
||||||
endstop_pin:
|
endstop_pin:
|
||||||
# Endstop switch detection pin. This parameter must be provided for
|
# Endstop switch detection pin. This parameter must be provided for
|
||||||
# the X, Y, and Z steppers on cartesian style printers.
|
# the X, Y, and Z steppers on cartesian style printers.
|
||||||
|
@ -367,11 +382,11 @@ kinematics: polar
|
||||||
# The stepper_bed section is used to describe the stepper controlling
|
# The stepper_bed section is used to describe the stepper controlling
|
||||||
# the bed.
|
# the bed.
|
||||||
[stepper_bed]
|
[stepper_bed]
|
||||||
step_distance:
|
gear_ratio:
|
||||||
# On a polar printer the step_distance is the amount each step pulse
|
# A gear_ratio must be specified and rotation_distance may not be
|
||||||
# moves the bed in radians (for example, a 1.8 degree stepper with
|
# specified. For example, if the bed has an 80 toothed pulley driven
|
||||||
# 16 micro-steps would be 2 * pi * (1.8 / 360) / 16 == 0.001963495).
|
# by a stepper with a 16 toothed pulley then one would specify a
|
||||||
# This parameter must be provided.
|
# gear ratio of "80:16". This parameter must be provided.
|
||||||
max_z_velocity:
|
max_z_velocity:
|
||||||
# This sets the maximum velocity (in mm/s) of movement along the z
|
# This sets the maximum velocity (in mm/s) of movement along the z
|
||||||
# axis. This setting can be used to restrict the maximum speed of
|
# axis. This setting can be used to restrict the maximum speed of
|
||||||
|
@ -429,11 +444,13 @@ shoulder_height:
|
||||||
# right arm (at 30 degrees). This section also controls the homing
|
# right arm (at 30 degrees). This section also controls the homing
|
||||||
# parameters (homing_speed, homing_retract_dist) for all arms.
|
# parameters (homing_speed, homing_retract_dist) for all arms.
|
||||||
[stepper_a]
|
[stepper_a]
|
||||||
step_distance:
|
gear_ratio:
|
||||||
# On a rotary delta printer the step_distance is the amount each
|
# A gear_ratio must be specified and rotation_distance may not be
|
||||||
# step pulse moves the upper arm in radians (for example, a directly
|
# specified. For example, if the arm has an 80 toothed pulley driven
|
||||||
# connected 1.8 degree stepper with 16 micro-steps would be 2 * pi *
|
# by a pulley with 16 teeth, which is in turn connected to a 60
|
||||||
# (1.8 / 360) / 16 == 0.001963495). This parameter must be provided.
|
# toothed pulley driven by a stepper with a 16 toothed pulley, then
|
||||||
|
# one would specify a gear ratio of "80:16, 60:16". This parameter
|
||||||
|
# must be provided.
|
||||||
position_endstop:
|
position_endstop:
|
||||||
# Distance (in mm) between the nozzle and the bed when the nozzle is
|
# Distance (in mm) between the nozzle and the bed when the nozzle is
|
||||||
# in the center of the build area and the endstop triggers. This
|
# in the center of the build area and the endstop triggers. This
|
||||||
|
@ -501,10 +518,10 @@ kinematics: winch
|
||||||
# cable winch. A minimum of 3 and a maximum of 26 cable winches may be
|
# cable winch. A minimum of 3 and a maximum of 26 cable winches may be
|
||||||
# defined (stepper_a to stepper_z) though it is common to define 4.
|
# defined (stepper_a to stepper_z) though it is common to define 4.
|
||||||
[stepper_a]
|
[stepper_a]
|
||||||
step_distance:
|
rotation_distance:
|
||||||
# The step_distance is the nominal distance (in mm) the toolhead
|
# The rotation_distance is the nominal distance (in mm) the toolhead
|
||||||
# moves towards the cable winch on each step pulse. This parameter
|
# moves towards the cable winch for each full rotation of the
|
||||||
# must be provided.
|
# stepper motor. This parameter must be provided.
|
||||||
anchor_x:
|
anchor_x:
|
||||||
anchor_y:
|
anchor_y:
|
||||||
anchor_z:
|
anchor_z:
|
||||||
|
@ -541,7 +558,8 @@ tuning pressure advance.
|
||||||
step_pin:
|
step_pin:
|
||||||
dir_pin:
|
dir_pin:
|
||||||
enable_pin:
|
enable_pin:
|
||||||
step_distance:
|
microsteps:
|
||||||
|
rotation_distance:
|
||||||
# See the "stepper" section for a description of the above parameters.
|
# See the "stepper" section for a description of the above parameters.
|
||||||
nozzle_diameter:
|
nozzle_diameter:
|
||||||
# Diameter of the nozzle orifice (in mm). This parameter must be
|
# Diameter of the nozzle orifice (in mm). This parameter must be
|
||||||
|
@ -1613,7 +1631,8 @@ at 1 (for example, "stepper_z1", "stepper_z2", etc.).
|
||||||
#step_pin:
|
#step_pin:
|
||||||
#dir_pin:
|
#dir_pin:
|
||||||
#enable_pin:
|
#enable_pin:
|
||||||
#step_distance:
|
#microsteps:
|
||||||
|
#rotation_distance:
|
||||||
# See the "stepper" section for the definition of the above parameters.
|
# See the "stepper" section for the definition of the above parameters.
|
||||||
#endstop_pin:
|
#endstop_pin:
|
||||||
# If an endstop_pin is defined for the additional stepper then the
|
# If an endstop_pin is defined for the additional stepper then the
|
||||||
|
@ -1670,7 +1689,8 @@ axis:
|
||||||
#step_pin:
|
#step_pin:
|
||||||
#dir_pin:
|
#dir_pin:
|
||||||
#enable_pin:
|
#enable_pin:
|
||||||
#step_distance:
|
#microsteps:
|
||||||
|
#rotation_distance:
|
||||||
#endstop_pin:
|
#endstop_pin:
|
||||||
#position_endstop:
|
#position_endstop:
|
||||||
#position_min:
|
#position_min:
|
||||||
|
@ -1695,7 +1715,8 @@ more information.
|
||||||
#step_pin:
|
#step_pin:
|
||||||
#dir_pin:
|
#dir_pin:
|
||||||
#enable_pin:
|
#enable_pin:
|
||||||
#step_distance:
|
#microsteps:
|
||||||
|
#rotation_distance:
|
||||||
# See the "stepper" section for the definition of the above
|
# See the "stepper" section for the definition of the above
|
||||||
# parameters.
|
# parameters.
|
||||||
```
|
```
|
||||||
|
@ -1715,7 +1736,8 @@ normal printer kinematics.
|
||||||
#step_pin:
|
#step_pin:
|
||||||
#dir_pin:
|
#dir_pin:
|
||||||
#enable_pin:
|
#enable_pin:
|
||||||
#step_distance:
|
#microsteps:
|
||||||
|
#rotation_distance:
|
||||||
# See the "stepper" section for a description of these parameters.
|
# See the "stepper" section for a description of these parameters.
|
||||||
#velocity:
|
#velocity:
|
||||||
# Set the default velocity (in mm/s) for the stepper. This value
|
# Set the default velocity (in mm/s) for the stepper. This value
|
||||||
|
@ -2531,10 +2553,6 @@ cs_pin:
|
||||||
#spi_software_miso_pin:
|
#spi_software_miso_pin:
|
||||||
# See the "common SPI settings" section for a description of the
|
# See the "common SPI settings" section for a description of the
|
||||||
# above parameters.
|
# above parameters.
|
||||||
microsteps:
|
|
||||||
# The number of microsteps to configure the driver to use. Valid
|
|
||||||
# values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
|
|
||||||
# be provided.
|
|
||||||
#interpolate: True
|
#interpolate: True
|
||||||
# If true, enable step interpolation (the driver will internally
|
# 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). The default is True.
|
||||||
|
@ -2601,10 +2619,6 @@ uart_pin:
|
||||||
# A comma separated list of pins to set prior to accessing the
|
# A comma separated list of pins to set prior to accessing the
|
||||||
# tmc2208 UART. This may be useful for configuring an analog mux for
|
# tmc2208 UART. This may be useful for configuring an analog mux for
|
||||||
# UART communication. The default is to not configure any pins.
|
# UART communication. The default is to not configure any pins.
|
||||||
microsteps:
|
|
||||||
# The number of microsteps to configure the driver to use. Valid
|
|
||||||
# values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
|
|
||||||
# be provided.
|
|
||||||
#interpolate: True
|
#interpolate: True
|
||||||
# If true, enable step interpolation (the driver will internally
|
# 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). The default is True.
|
||||||
|
@ -2654,7 +2668,6 @@ by the name of the corresponding stepper config section (for example,
|
||||||
uart_pin:
|
uart_pin:
|
||||||
#tx_pin:
|
#tx_pin:
|
||||||
#select_pins:
|
#select_pins:
|
||||||
#microsteps:
|
|
||||||
#interpolate: True
|
#interpolate: True
|
||||||
run_current:
|
run_current:
|
||||||
#hold_current:
|
#hold_current:
|
||||||
|
@ -2715,10 +2728,6 @@ cs_pin:
|
||||||
#spi_software_miso_pin:
|
#spi_software_miso_pin:
|
||||||
# See the "common SPI settings" section for a description of the
|
# See the "common SPI settings" section for a description of the
|
||||||
# above parameters.
|
# above parameters.
|
||||||
microsteps:
|
|
||||||
# The number of microsteps to configure the driver to use. Valid
|
|
||||||
# values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
|
|
||||||
# be provided.
|
|
||||||
#interpolate: True
|
#interpolate: True
|
||||||
# If true, enable step interpolation (the driver will internally
|
# If true, enable step interpolation (the driver will internally
|
||||||
# step at a rate of 256 micro-steps). This only works if microsteps
|
# step at a rate of 256 micro-steps). This only works if microsteps
|
||||||
|
@ -2786,10 +2795,6 @@ cs_pin:
|
||||||
#spi_software_miso_pin:
|
#spi_software_miso_pin:
|
||||||
# See the "common SPI settings" section for a description of the
|
# See the "common SPI settings" section for a description of the
|
||||||
# above parameters.
|
# above parameters.
|
||||||
microsteps:
|
|
||||||
# The number of microsteps to configure the driver to use. Valid
|
|
||||||
# values are 1, 2, 4, 8, 16, 32, 64, 128, 256. This parameter must
|
|
||||||
# be provided.
|
|
||||||
#interpolate: True
|
#interpolate: True
|
||||||
# If true, enable step interpolation (the driver will internally
|
# 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). The default is True.
|
||||||
|
|
|
@ -100,7 +100,7 @@ then it generally indicates that the "dir_pin" for the axis needs to
|
||||||
be inverted. This is done by adding a '!' to the "dir_pin" in the
|
be inverted. This is done by adding a '!' to the "dir_pin" in the
|
||||||
printer config file (or removing it if one is already there). If the
|
printer config file (or removing it if one is already there). If the
|
||||||
motor moves significantly more or significantly less than one
|
motor moves significantly more or significantly less than one
|
||||||
millimeter then verify the "step_distance" setting.
|
millimeter then verify the "rotation_distance" setting.
|
||||||
|
|
||||||
Run the above test for each stepper motor defined in the config
|
Run the above test for each stepper motor defined in the config
|
||||||
file. (Set the STEPPER parameter of the STEPPER_BUZZ command to the
|
file. (Set the STEPPER parameter of the STEPPER_BUZZ command to the
|
||||||
|
|
|
@ -262,9 +262,9 @@ around 10000 steps per second. If it is requested to move at a speed
|
||||||
that would require a higher step rate then Marlin will generally just
|
that would require a higher step rate then Marlin will generally just
|
||||||
step as fast as it can. Klipper is able to achieve much higher step
|
step as fast as it can. Klipper is able to achieve much higher step
|
||||||
rates, but the stepper motor may not have sufficient torque to move at
|
rates, but the stepper motor may not have sufficient torque to move at
|
||||||
a higher speed. So, for a Z axis with a very precise step_distance the
|
a higher speed. So, for a Z axis with a high gearing ratio or high
|
||||||
actual obtainable max_z_velocity may be smaller than what is
|
microsteps setting the actual obtainable max_z_velocity may be smaller
|
||||||
configured in Marlin.
|
than what is configured in Marlin.
|
||||||
|
|
||||||
### My TMC motor driver turns off in the middle of a print
|
### My TMC motor driver turns off in the middle of a print
|
||||||
|
|
||||||
|
|
|
@ -172,8 +172,10 @@ The following standard commands are supported:
|
||||||
[SMOOTH_TIME=<pressure_advance_smooth_time>]`: Set pressure advance
|
[SMOOTH_TIME=<pressure_advance_smooth_time>]`: Set pressure advance
|
||||||
parameters. If EXTRUDER is not specified, it defaults to the active
|
parameters. If EXTRUDER is not specified, it defaults to the active
|
||||||
extruder.
|
extruder.
|
||||||
- `SET_EXTRUDER_STEP_DISTANCE [EXTRUDER=<config_name>] [DISTANCE=<distance>]`:
|
- `SET_EXTRUDER_STEP_DISTANCE [EXTRUDER=<config_name>]
|
||||||
Set a new value for the provided extruder's step_distance. Value is
|
[DISTANCE=<distance>]`: Set a new value for the provided extruder's
|
||||||
|
"step distance". The "step distance" is
|
||||||
|
`rotation_distance/(full_steps_per_rotation*microsteps)`. Value is
|
||||||
not retained on Klipper reset. Use with caution, small changes can
|
not retained on Klipper reset. Use with caution, small changes can
|
||||||
result in excessive pressure between extruder and hot end. Do proper
|
result in excessive pressure between extruder and hot end. Do proper
|
||||||
calibration steps with filament before use. If 'DISTANCE' value is
|
calibration steps with filament before use. If 'DISTANCE' value is
|
||||||
|
|
|
@ -114,11 +114,12 @@ Recv: // probe accuracy results: maximum 2.519448, minimum 2.506948, range 0.012
|
||||||
Ideally the tool will report an identical maximum and minimum value.
|
Ideally the tool will report an identical maximum and minimum value.
|
||||||
(That is, ideally the probe obtains an identical result on all ten
|
(That is, ideally the probe obtains an identical result on all ten
|
||||||
probes.) However, it's normal for the minimum and maximum values to
|
probes.) However, it's normal for the minimum and maximum values to
|
||||||
differ by one Z step_distance or up to 5 microns (.005mm). The
|
differ by one Z "step distance" or up to 5 microns (.005mm). A "step
|
||||||
distance between the minimum and the maximum value is called the
|
distance" is
|
||||||
range. So, in the above example, since the printer uses a Z
|
`rotation_distance/(full_steps_per_rotation*microsteps)`. The distance
|
||||||
step_distance of .0125, a range of 0.012500 would be considered
|
between the minimum and the maximum value is called the range. So, in
|
||||||
normal.
|
the above example, since the printer uses a Z step distance of .0125,
|
||||||
|
a range of 0.012500 would be considered normal.
|
||||||
|
|
||||||
If the results of the test show a range value that is greater than 25
|
If the results of the test show a range value that is greater than 25
|
||||||
microns (.025mm) then the probe does not have sufficient accuracy for
|
microns (.025mm) then the probe does not have sufficient accuracy for
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
# Common helper code for TMC stepper drivers
|
# Common helper code for TMC stepper drivers
|
||||||
#
|
#
|
||||||
# Copyright (C) 2018-2019 Kevin O'Connor <kevin@koconnor.net>
|
# Copyright (C) 2018-2020 Kevin O'Connor <kevin@koconnor.net>
|
||||||
#
|
#
|
||||||
# This file may be distributed under the terms of the GNU GPLv3 license.
|
# This file may be distributed under the terms of the GNU GPLv3 license.
|
||||||
import logging, collections
|
import logging, collections
|
||||||
|
import stepper
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
@ -263,9 +264,14 @@ class TMCMicrostepHelper:
|
||||||
def __init__(self, config, mcu_tmc):
|
def __init__(self, config, mcu_tmc):
|
||||||
self.mcu_tmc = mcu_tmc
|
self.mcu_tmc = mcu_tmc
|
||||||
self.fields = mcu_tmc.get_fields()
|
self.fields = mcu_tmc.get_fields()
|
||||||
|
stepper_name = " ".join(config.get_name().split()[1:])
|
||||||
|
stepper_config = ms_config = config.getsection(stepper_name)
|
||||||
|
if stepper_config.get('microsteps', None, note_valid=False) is None:
|
||||||
|
# Older config format with microsteps in tmc config section
|
||||||
|
ms_config = config
|
||||||
steps = {'256': 0, '128': 1, '64': 2, '32': 3, '16': 4,
|
steps = {'256': 0, '128': 1, '64': 2, '32': 3, '16': 4,
|
||||||
'8': 5, '4': 6, '2': 7, '1': 8}
|
'8': 5, '4': 6, '2': 7, '1': 8}
|
||||||
mres = config.getchoice('microsteps', steps)
|
mres = ms_config.getchoice('microsteps', steps)
|
||||||
self.fields.set_field("MRES", mres)
|
self.fields.set_field("MRES", mres)
|
||||||
self.fields.set_field("intpol", config.getboolean("interpolate", True))
|
self.fields.set_field("intpol", config.getboolean("interpolate", True))
|
||||||
def get_microsteps(self):
|
def get_microsteps(self):
|
||||||
|
@ -287,7 +293,7 @@ def TMCStealthchopHelper(config, mcu_tmc, tmc_freq):
|
||||||
if velocity:
|
if velocity:
|
||||||
stepper_name = " ".join(config.get_name().split()[1:])
|
stepper_name = " ".join(config.get_name().split()[1:])
|
||||||
stepper_config = config.getsection(stepper_name)
|
stepper_config = config.getsection(stepper_name)
|
||||||
step_dist = stepper_config.getfloat('step_distance', note_valid=False)
|
step_dist = stepper.parse_step_distance(stepper_config)
|
||||||
step_dist_256 = step_dist / (1 << fields.get_field("MRES"))
|
step_dist_256 = step_dist / (1 << fields.get_field("MRES"))
|
||||||
threshold = int(tmc_freq * step_dist_256 / velocity + .5)
|
threshold = int(tmc_freq * step_dist_256 / velocity + .5)
|
||||||
fields.set_field("TPWMTHRS", max(0, min(0xfffff, threshold)))
|
fields.set_field("TPWMTHRS", max(0, min(0xfffff, threshold)))
|
||||||
|
|
|
@ -183,7 +183,7 @@ def PrinterStepper(config, units_in_radians=False):
|
||||||
step_pin_params = ppins.lookup_pin(step_pin, can_invert=True)
|
step_pin_params = ppins.lookup_pin(step_pin, can_invert=True)
|
||||||
dir_pin = config.get('dir_pin')
|
dir_pin = config.get('dir_pin')
|
||||||
dir_pin_params = ppins.lookup_pin(dir_pin, can_invert=True)
|
dir_pin_params = ppins.lookup_pin(dir_pin, can_invert=True)
|
||||||
step_dist = config.getfloat('step_distance', above=0.)
|
step_dist = parse_step_distance(config, units_in_radians, True)
|
||||||
mcu_stepper = MCU_stepper(name, step_pin_params, dir_pin_params, step_dist,
|
mcu_stepper = MCU_stepper(name, step_pin_params, dir_pin_params, step_dist,
|
||||||
units_in_radians)
|
units_in_radians)
|
||||||
# Support for stepper enable pin handling
|
# Support for stepper enable pin handling
|
||||||
|
@ -194,6 +194,47 @@ def PrinterStepper(config, units_in_radians=False):
|
||||||
force_move.register_stepper(mcu_stepper)
|
force_move.register_stepper(mcu_stepper)
|
||||||
return mcu_stepper
|
return mcu_stepper
|
||||||
|
|
||||||
|
# Parse stepper gear_ratio config parameter
|
||||||
|
def parse_gear_ratio(config, note_valid):
|
||||||
|
gear_ratio = config.get('gear_ratio', None, note_valid=note_valid)
|
||||||
|
if gear_ratio is None:
|
||||||
|
return 1.
|
||||||
|
result = 1.
|
||||||
|
try:
|
||||||
|
gears = gear_ratio.split(',')
|
||||||
|
for gear in gears:
|
||||||
|
g1, g2 = [float(v.strip()) for v in gear.split(':')]
|
||||||
|
result *= g1 / g2
|
||||||
|
except:
|
||||||
|
raise config.error("Unable to parse gear_ratio: %s" % (gear_ratio,))
|
||||||
|
return result
|
||||||
|
|
||||||
|
# Obtain "step distance" information from a config section
|
||||||
|
def parse_step_distance(config, units_in_radians=None, note_valid=False):
|
||||||
|
if units_in_radians is None:
|
||||||
|
# Caller doesn't know if units are in radians - infer it
|
||||||
|
rd = config.get('rotation_distance', None, note_valid=False)
|
||||||
|
gr = config.get('gear_ratio', None, note_valid=False)
|
||||||
|
units_in_radians = rd is None and gr is not None
|
||||||
|
if units_in_radians:
|
||||||
|
rotation_dist = 2. * math.pi
|
||||||
|
config.get('gear_ratio', note_valid=note_valid)
|
||||||
|
else:
|
||||||
|
rotation_dist = config.getfloat('rotation_distance', None,
|
||||||
|
above=0., note_valid=note_valid)
|
||||||
|
if rotation_dist is None:
|
||||||
|
# Older config format with step_distance
|
||||||
|
return config.getfloat('step_distance', above=0., note_valid=note_valid)
|
||||||
|
# Newer config format with rotation_distance
|
||||||
|
microsteps = config.getint('microsteps', minval=1, note_valid=note_valid)
|
||||||
|
full_steps = config.getint('full_steps_per_rotation', 200, minval=1,
|
||||||
|
note_valid=note_valid)
|
||||||
|
if full_steps % 4:
|
||||||
|
raise config.error("full_steps_per_rotation invalid in section '%s'"
|
||||||
|
% (config.get_name(),))
|
||||||
|
gearing = parse_gear_ratio(config, note_valid)
|
||||||
|
return rotation_dist / (full_steps * microsteps * gearing)
|
||||||
|
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
# Stepper controlled rails
|
# Stepper controlled rails
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
step_pin: ar54
|
step_pin: ar54
|
||||||
dir_pin: ar55
|
dir_pin: ar55
|
||||||
enable_pin: !ar38
|
enable_pin: !ar38
|
||||||
step_distance: 0.000010
|
microsteps: 16
|
||||||
|
gear_ratio: 107.000:16, 60:16
|
||||||
endstop_pin: ^ar2
|
endstop_pin: ^ar2
|
||||||
homing_speed: 50
|
homing_speed: 50
|
||||||
#position_endstop: 252
|
#position_endstop: 252
|
||||||
|
@ -14,14 +15,16 @@ lower_arm_length: 320.000
|
||||||
step_pin: ar60
|
step_pin: ar60
|
||||||
dir_pin: ar61
|
dir_pin: ar61
|
||||||
enable_pin: !ar56
|
enable_pin: !ar56
|
||||||
step_distance: 0.000010
|
microsteps: 16
|
||||||
|
gear_ratio: 107.000:16, 60:16
|
||||||
endstop_pin: ^ar15
|
endstop_pin: ^ar15
|
||||||
|
|
||||||
[stepper_c]
|
[stepper_c]
|
||||||
step_pin: ar46
|
step_pin: ar46
|
||||||
dir_pin: ar48
|
dir_pin: ar48
|
||||||
enable_pin: !ar62
|
enable_pin: !ar62
|
||||||
step_distance: 0.000010
|
microsteps: 16
|
||||||
|
gear_ratio: 107.000:16, 60:16
|
||||||
endstop_pin: ^ar19
|
endstop_pin: ^ar19
|
||||||
|
|
||||||
[mcu]
|
[mcu]
|
||||||
|
|
Loading…
Reference in New Issue