mirror of https://github.com/Desuuuu/klipper.git
docs: Add a Rotation_Distance.md document
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
96eba9f2df
commit
5b31080e77
|
@ -116,6 +116,9 @@ the "kinematics" option in the [printer] config section) require
|
||||||
different names for the stepper (eg, `stepper_x` vs `stepper_a`).
|
different names for the stepper (eg, `stepper_x` vs `stepper_a`).
|
||||||
Below are common stepper definitions.
|
Below are common stepper definitions.
|
||||||
|
|
||||||
|
See the [rotation distance document](Rotation_Distance.md) for
|
||||||
|
information on calculating the `rotation_distance` parameter.
|
||||||
|
|
||||||
```
|
```
|
||||||
[stepper_x]
|
[stepper_x]
|
||||||
step_pin:
|
step_pin:
|
||||||
|
|
22
docs/FAQ.md
22
docs/FAQ.md
|
@ -2,7 +2,7 @@ Frequently asked questions
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
1. [How can I donate to the project?](#how-can-i-donate-to-the-project)
|
1. [How can I donate to the project?](#how-can-i-donate-to-the-project)
|
||||||
2. [How do I calculate the step_distance parameter in the printer config file?](#how-do-i-calculate-the-step_distance-parameter-in-the-printer-config-file)
|
2. [How do I calculate the rotation_distance config parameter?](#how-do-i-calculate-the-rotation_distance-config-parameter)
|
||||||
3. [Where's my serial port?](#wheres-my-serial-port)
|
3. [Where's my serial port?](#wheres-my-serial-port)
|
||||||
4. [When the micro-controller restarts the device changes to /dev/ttyUSB1](#when-the-micro-controller-restarts-the-device-changes-to-devttyusb1)
|
4. [When the micro-controller restarts the device changes to /dev/ttyUSB1](#when-the-micro-controller-restarts-the-device-changes-to-devttyusb1)
|
||||||
5. [The "make flash" command doesn't work](#the-make-flash-command-doesnt-work)
|
5. [The "make flash" command doesn't work](#the-make-flash-command-doesnt-work)
|
||||||
|
@ -31,25 +31,9 @@ Frequently asked questions
|
||||||
Thanks. Kevin has a Patreon page at:
|
Thanks. Kevin has a Patreon page at:
|
||||||
[https://www.patreon.com/koconnor](https://www.patreon.com/koconnor)
|
[https://www.patreon.com/koconnor](https://www.patreon.com/koconnor)
|
||||||
|
|
||||||
### How do I calculate the step_distance parameter in the printer config file?
|
### How do I calculate the rotation_distance config parameter?
|
||||||
|
|
||||||
If you know the steps per millimeter for the axis then use a
|
See the [rotation distance document](Rotation_Distance.md).
|
||||||
calculator to divide 1.0 by steps_per_mm. Then round this number to
|
|
||||||
six decimal places and place it in the config (six decimal places is
|
|
||||||
nano-meter precision).
|
|
||||||
|
|
||||||
The step_distance defines the distance that the axis will travel on
|
|
||||||
each motor driver pulse. It can also be calculated from the axis
|
|
||||||
pitch, motor step angle, and driver microstepping. If unsure, do a web
|
|
||||||
search for "calculate steps per mm" to find an online calculator.
|
|
||||||
|
|
||||||
Klipper uses step_distance instead of steps_per_mm in order to use
|
|
||||||
consistent units of measurement in the config file. (The config uses
|
|
||||||
millimeters for all distance measurements.) It is believed that
|
|
||||||
steps_per_mm originated as an optimization on old 8-bit
|
|
||||||
micro-controllers (the desire to use a multiply instead of a divide in
|
|
||||||
some low-level code). Continuing to configure this one distance in
|
|
||||||
units of "inverse millimeters" is felt to be quirky and unnecessary.
|
|
||||||
|
|
||||||
### Where's my serial port?
|
### Where's my serial port?
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,8 @@ communication with the Klipper developers.
|
||||||
- [Installation](Installation.md): Guide to installing Klipper.
|
- [Installation](Installation.md): Guide to installing Klipper.
|
||||||
- [Config Reference](Config_Reference.md): Description of config
|
- [Config Reference](Config_Reference.md): Description of config
|
||||||
parameters.
|
parameters.
|
||||||
|
- [Rotation Distance](Rotation_Distance.md): Calculating the
|
||||||
|
rotation_distance stepper parameter.
|
||||||
- [Config checks](Config_checks.md): Verify basic pin settings in the
|
- [Config checks](Config_checks.md): Verify basic pin settings in the
|
||||||
config file.
|
config file.
|
||||||
- [Bed level](Bed_Level.md): Information on "bed leveling" in Klipper.
|
- [Bed level](Bed_Level.md): Information on "bed leveling" in Klipper.
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
Stepper motor drivers on Klipper require a `rotation_distance`
|
||||||
|
parameter in each
|
||||||
|
[stepper config section](Config_Reference.md#stepper). The
|
||||||
|
`rotation_distance` is the amount of distance that the axis moves with
|
||||||
|
one full revolution of the stepper motor. This document describes how
|
||||||
|
one can configure this value.
|
||||||
|
|
||||||
|
# Obtaining rotation_distance from steps_per_mm (or step_distance)
|
||||||
|
|
||||||
|
The designers of your 3d printer originally calculated `steps_per_mm`
|
||||||
|
from a rotation distance. If you know the steps_per_mm then it is
|
||||||
|
possible to use this general formula to obtain that original rotation
|
||||||
|
distance:
|
||||||
|
```
|
||||||
|
rotation_distance = <full_steps_per_rotation> * <microsteps> / <steps_per_mm>
|
||||||
|
```
|
||||||
|
|
||||||
|
Or, if you have an older Klipper configuration and know the
|
||||||
|
`step_distance` parameter you can use this formula:
|
||||||
|
```
|
||||||
|
rotation_distance = <full_steps_per_rotation> * <microsteps> * <step_distance>
|
||||||
|
```
|
||||||
|
|
||||||
|
The `<full_steps_per_rotation>` setting is determined from the type of
|
||||||
|
stepper motor. Most stepper motors are "1.8 degree steppers" and
|
||||||
|
therefore have 200 full steps per rotation (360 divided by 1.8 is
|
||||||
|
200). Some stepper motors are "0.9 degree steppers" and thus have 400
|
||||||
|
full steps per rotation. Other stepper motors are rare. If unsure, do
|
||||||
|
not set full_steps_per_rotation in the config file and use 200 in the
|
||||||
|
formula above.
|
||||||
|
|
||||||
|
The `<microsteps>` setting is determined by the stepper motor driver.
|
||||||
|
Most drivers use 16 microsteps. If unsure, set `microsteps: 16` in the
|
||||||
|
config and use 16 in the formula above.
|
||||||
|
|
||||||
|
Almost all printers should have a whole number for `rotation_distance`
|
||||||
|
on x, y, and z type axes. If the above formula results in a
|
||||||
|
rotation_distance that is within .01 of a whole number then round the
|
||||||
|
final value to that whole_number.
|
||||||
|
|
||||||
|
# Calibrating rotation_distance on extruders
|
||||||
|
|
||||||
|
On an extruder, the `rotation_distance` is the amount of distance the
|
||||||
|
filament travels for one full rotation of the stepper motor. The best
|
||||||
|
way to get an accurate value for this setting is to use a "measure and
|
||||||
|
trim" procedure.
|
||||||
|
|
||||||
|
First start with an initial guess for the rotation distance. This may
|
||||||
|
be obtained from
|
||||||
|
[steps_per_mm](#obtaining-rotation_distance-from-steps_per_mm-or-step_distance)
|
||||||
|
or by [inspecting the hardware](#extruder).
|
||||||
|
|
||||||
|
Then use the following procedure to "measure and trim":
|
||||||
|
1. Make sure the extruder has filament in it, the hotend is heated to
|
||||||
|
an appropriate temperature, and the printer is ready to extrude.
|
||||||
|
2. Use a marker to place a mark on the filament around 70mm from the
|
||||||
|
intake of the extruder body. Then use a digital calipers to measure
|
||||||
|
the actual distance of that mark as precisely as one can. Note this
|
||||||
|
as `<initial_mark_distance>`.
|
||||||
|
3. Extrude 50mm of filament with the following command sequence: `G91`
|
||||||
|
followed by `G1 E50 F60`. Note 50mm as
|
||||||
|
`<requested_extrude_distance>`. Wait for the extruder to finish the
|
||||||
|
move (it will take about 50 seconds).
|
||||||
|
4. Use the digital calipers to measure the new distance between the
|
||||||
|
extruder body and the mark on the filament. Note this as
|
||||||
|
`<subsequent_mark_distance>`. Then calculate
|
||||||
|
`actual_extrude_distance = <initial_mark_distance> -
|
||||||
|
<subsequent_mark_distance>`.
|
||||||
|
5. Calculate rotation_distance as `rotation_distance =
|
||||||
|
<previous_rotation_distance> * <actual_extrude_distance> /
|
||||||
|
<requested_extrude_distance>`. Round the new rotation_distance to
|
||||||
|
three decimal places.
|
||||||
|
|
||||||
|
If the actual_extrude_distance differs from requested_extrude_distance
|
||||||
|
by more than about 2mm then it is a good idea to perform the steps
|
||||||
|
above a second time.
|
||||||
|
|
||||||
|
Note: Do *not* use a "measure and trim" type of method to calibrate x,
|
||||||
|
y, or z type axes. The "measure and trim" method is not accurate
|
||||||
|
enough for those axes and will likely lead to a worse configuration.
|
||||||
|
Instead, if needed, those axes can be determined by
|
||||||
|
[measuring the belts, pulleys, and lead screw hardware](#obtaining-rotation_distance-by-inspecting-the-hardware).
|
||||||
|
|
||||||
|
# Obtaining rotation_distance by inspecting the hardware
|
||||||
|
|
||||||
|
It's possible to calculate rotation_distance with knowledge of the
|
||||||
|
stepper motors and printer kinematics. This may be useful if the
|
||||||
|
steps_per_mm is not known or if designing a new printer.
|
||||||
|
|
||||||
|
## Belt driven axes
|
||||||
|
|
||||||
|
It is easy to calculate rotation_distance for a linear axis that uses
|
||||||
|
a belt and pulley.
|
||||||
|
|
||||||
|
First determine the type of belt. Most printers use a 2mm belt pitch
|
||||||
|
(that is, each tooth on the belt is 2mm apart). Then count the number
|
||||||
|
of teeth on the stepper motor pulley. The rotation_distance is then
|
||||||
|
calculated as:
|
||||||
|
```
|
||||||
|
rotation_distance = <belt_pitch> * <number_of_teeth_on_pulley>
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, if a printer has a 2mm belt and uses a pulley with 20
|
||||||
|
teeth, then the rotation distance is 40.
|
||||||
|
|
||||||
|
## Axes with a lead screw
|
||||||
|
|
||||||
|
It is easy to calculate the rotation_distance for common lead screws
|
||||||
|
using the following formula:
|
||||||
|
```
|
||||||
|
rotation_distance = <screw_pitch> * <number_of_separate_threads>
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, the common "T8 leadscrew" has a rotation distance of 8
|
||||||
|
(it has a pitch of 2mm and has 4 separate threads).
|
||||||
|
|
||||||
|
Older printers with "threaded rods" have only one "thread" on the lead
|
||||||
|
screw and thus the rotation distance is the pitch of the screw. (The
|
||||||
|
screw pitch is the distance between each groove on the screw.) So, for
|
||||||
|
example, an M6 metric rod has a rotation distance of 1 and an M8 rod
|
||||||
|
has a rotation distance of 1.25.
|
||||||
|
|
||||||
|
## Extruder
|
||||||
|
|
||||||
|
It's possible to obtain an initial rotation distance for extruders by
|
||||||
|
measuring the diameter of the "hobbed bolt" that pushes the filament
|
||||||
|
and using the following formula: `rotation_distance =
|
||||||
|
<diameter> * 3.14`
|
||||||
|
|
||||||
|
If the extruder uses gears then it will also be necessary to
|
||||||
|
[determine and set the gear_ratio](#using-a-gear_ratio) for the
|
||||||
|
extruder.
|
||||||
|
|
||||||
|
The actual rotation distance on an extruder will vary from printer to
|
||||||
|
printer, because the grip of the "hobbed bolt" that engages the
|
||||||
|
filament can vary. It can even vary between filament spools. After
|
||||||
|
obtaining an initial rotation_distance, use the
|
||||||
|
[measure and trim procedure](#calibrating-rotation_distance-on-extruders)
|
||||||
|
to obtain a more accurate setting.
|
||||||
|
|
||||||
|
# Using a gear_ratio
|
||||||
|
|
||||||
|
Setting a `gear_ratio` can make it easier to configure the
|
||||||
|
`rotation_distance` on steppers that have a gear box (or similar)
|
||||||
|
attached to it. Most steppers do not have a gear box - if unsure then
|
||||||
|
do not set `gear_ratio` in the config.
|
||||||
|
|
||||||
|
When `gear_ratio` is set, the `rotation_distance` represents the
|
||||||
|
distance the axis moves with one full rotation of the final gear on
|
||||||
|
the gear box. If, for example, one is using a gearbox with a "5:1"
|
||||||
|
ratio, then one could calculate the rotation_distance with
|
||||||
|
[knowledge of the hardware](#obtaining-rotation_distance-by-inspecting-the-hardware)
|
||||||
|
and then add `gear_ratio: 5:1` to the config.
|
||||||
|
|
||||||
|
For gearing implemented with belts and pulleys, it is possible to
|
||||||
|
determine the gear_ratio by counting the teeth on the pulleys. For
|
||||||
|
example, if a stepper with a 16 toothed pulley drives the next pulley
|
||||||
|
with 80 teeth then one would use `gear_ratio: 80:16`. Indeed, one
|
||||||
|
could open a common off the shelf "gear box" and count the teeth in it
|
||||||
|
to confirm its gear ratio. Note that the common "5.18:1 planetary
|
||||||
|
gearbox" is more accurately configured with `gear_ratio: 57:11`.
|
||||||
|
|
||||||
|
If several gears are used on an axis then it is possible to provide a
|
||||||
|
comma separated list to gear_ratio. For example, a "5:1" gear box
|
||||||
|
driving a 16 toothed to 80 toothed pulley could use `gear_ratio: 5:1,
|
||||||
|
80:16`.
|
||||||
|
|
||||||
|
In most cases, gear_ratio should be defined with whole numbers as
|
||||||
|
common gears and pulleys have a whole number of teeth on them.
|
||||||
|
However, in cases where a belt drives a pulley using friction instead
|
||||||
|
of teeth, it may make sense to use a floating point number in the gear
|
||||||
|
ratio (eg, `gear_ratio: 107.237:16`).
|
Loading…
Reference in New Issue