-
-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Stepstick Lookup Table and Config Options #340
Open
lraithel15133
wants to merge
1
commit into
main
Choose a base branch
from
tmclookuprebase
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+216
−100
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# Stepstick Type Definitions | ||
|
||
This page contains information to assist in defining the `stepstick_type` config entry. | ||
|
||
In stock Klipper behavior, selecting a driver automatically uses the TMC definitions' default sense resistor. While this is usually fine, it can cause issues with driver boards that have unconventional sense resistor sizes, leading to incorrect current values being set. | ||
|
||
The goal of these changes to DangerKlipper is to allow you to set custom sense resistor and max current values for your stepper drivers. This results in more accurate configurations for your setup and enhances safety. | ||
|
||
|
||
## Use | ||
In practice, you should set your driver using `stepstick_type`. If you need to override the default value, you can then use `sense_resistor`. Additionally, `stepstick_type` is not required to use `sense_resistor`. If neither `stepstick_type` or `sense_resistor` is set, the default | ||
Klipper behavior of using the TMC default value will be used (i.e. 0.075 for 5160). | ||
|
||
> [!NOTE] | ||
> Drivers with variable sense resistors (such as the FYSETC EXT2160) have not been defined and have been left out of the table intentionally. You must set sense resistor for them manually. | ||
|
||
|
||
| Stepstick Type | Config Name | Sense Resistor | Max Current | | ||
|-----------------------------------------|-------------------------|----------------|-------------| | ||
| BTT Kraken S1-4 | KRAKEN_2160_8A | 0.022 | 8 | | ||
| BTT Kraken S5-8 | KRAKEN_2160_3A | 0.022 | 3 | | ||
| LDO Leviathan HV0,HV1 | REFERENCE_5160 | 0.075 | 3 | | ||
| LDO Leviathan S0-4 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT TMC2208 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT TMC2209 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT TMC2240 | BTT_2240 | 0.11 | 2 | | ||
| BTT TMC5160T Pro | REFERENCE_5160 | 0.075 | 3 | | ||
| BTT EZ2130 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT EZ2208 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT EZ2209 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT EZ2225 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT EZ2226 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT EZ5160 Pro | BTT_EZ_5160_PRO | 0.075 | 2.5 | | ||
| BTT EZ5160 RGB | BTT_EZ_5160_RGB | 0.05 | 4.7 | | ||
| BTT EZ6609 | REFERENCE_2209 | 0.11 | 2 | | ||
| BTT TMC5160T Plus | BTT_EXT_5160 | 0.022 | 10.6 | | ||
| COREVUS TMC2209 | COREVUS_2209 | 0.1 | 3 | | ||
| COREVUS TMC2160 OLD | COREVUS_2160_OLD | 0.03 | 3 | | ||
| COREVUS TMC2160 5A | COREVUS_2160_5A | 0.03 | 5 | | ||
| COREVUS TMC2160 | COREVUS_2160 | 0.05 | 3 | | ||
| Watterott SilentStepStick TMC2100 | REFERENCE_WOTT | 0.11 | 1.2 | | ||
| Watterott SilentStepStick TMC2130 | REFERENCE_WOTT | 0.11 | 1.2 | | ||
| Watterott SilentStepStick TMC2208 | REFERENCE_WOTT | 0.11 | 1.2 | | ||
| Watterott SilentStepStick TMC2209 | WOTT_2209 | 0.11 | 1.7 | | ||
| Watterott SilentStepStick TMC5160 | REFERENCE_5160 | 0.075 | 3 | | ||
| Watterott SilentStepStick TMC5160HV | REFERENCE_5160 | 0.075 | 3 | | ||
| FYSETC TMC2100 | REFERENCE_WOTT | 0.11 | 1.2 | | ||
| FYSETC TMC2130 | REFERENCE_WOTT | 0.11 | 1.2 | | ||
| FYSETC TMC2208 | REFERENCE_WOTT | 0.11 | 1.2 | | ||
| FYSETC TMC2209 | WOTT_2209 | 0.11 | 1.7 | | ||
| FYSETC TMC2225 | FYSETC_2225 | 0.11 | 1.4 | | ||
| FYSETC TMC2226 | REFERENCE_2209 | 0.11 | 2 | | ||
| FYSETC HV5160 | REFERENCE_5160 | 0.075 | 3 | | ||
| FYSETC QHV5160 | REFERENCE_5160 | 0.075 | 3 | | ||
| FYSETC Silent5161 | FYSETC_5161 | 0.06 | 3.5 | | ||
| MKS 2130 | REFERENCE_2209 | 0.11 | 2 | | ||
| MKS 2208 | REFERENCE_2209 | 0.11 | 2 | | ||
| MKS 2209 | REFERENCE_2209 | 0.11 | 2 | | ||
| MKS 2225 | REFERENCE_2209 | 0.11 | 2 | | ||
| MKS 2226 | MKS_2226 | 0.17 | 2.5 | | ||
| MKS 2240 | REFERENCE_2209 | 0.11 | 2 | | ||
| Mellow Fly 2209 | REFERENCE_2209 | 0.11 | 2 | | ||
| Mellow Fly 5160 | MELLOW_FLY_5160 | 0.11 | 3 | | ||
| Mellow Fly HV-TMC5160 Pro | MELLOW_FLY_HV_5160_Pro | 0.033 | 6 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
STEPSTICK_DEFS = { | ||
"REFERENCE_WOTT": (0.11, 1.2), | ||
"REFERENCE_2209": (0.11, 2), | ||
"REFERENCE_5160": (0.075, 3), | ||
"KRAKEN_2160_8A": (0.022, 8), | ||
"KRAKEN_2160_3A": (0.022, 3), | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. should be 0.075 |
||
"BTT_2240": (0.11, 2.1), | ||
"BTT_EZ_5160_PRO": (0.075, 2.5), | ||
"BTT_EZ_5160_RGB": (0.05, 4.7), | ||
"BTT_EZ_6609": (0.11, 2), | ||
"BTT_5160T": (0.022, 10.6), | ||
"WOTT_2209": (0.11, 1.7), | ||
"COREVUS_2209": (0.1, 3), | ||
"COREVUS_2160_OLD": (0.03, 3), | ||
"COREVUS_2160_5A": (0.03, 5), | ||
"COREVUS_2160": (0.05, 3), | ||
"FYSETC_2225": (0.11, 1.4), | ||
"FYSETC_5161": (0.06, 3.5), | ||
"MKS_2226": (0.17, 2.5), | ||
"MELLOW_FLY_5160": (0.11, 3), | ||
"MELLOW_FLY_HV_5160_Pro": (0.033, 6), | ||
} | ||
lraithel15133 marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,6 +5,7 @@ | |
# This file may be distributed under the terms of the GNU GPLv3 license. | ||
import logging, collections | ||
import stepper | ||
from . import stepstick_defs | ||
|
||
|
||
###################################################################### | ||
|
@@ -349,57 +350,44 @@ def cmd_SET_TMC_FIELD(self, gcmd): | |
def cmd_SET_TMC_CURRENT(self, gcmd): | ||
ch = self.current_helper | ||
( | ||
prev_cur, | ||
prev_hold_cur, | ||
req_hold_cur, | ||
max_cur, | ||
prev_home_cur, | ||
run_current, | ||
hold_current, | ||
req_hold_current, | ||
home_current, | ||
) = ch.get_current() | ||
run_current = gcmd.get_float( | ||
"CURRENT", None, minval=0.0, maxval=max_cur | ||
max_current = ch.get_max_current() | ||
cmd_run_current = gcmd.get_float( | ||
"CURRENT", None, minval=0.0, maxval=max_current | ||
) | ||
hold_current = gcmd.get_float( | ||
"HOLDCURRENT", None, above=0.0, maxval=max_cur | ||
cmd_hold_current = gcmd.get_float( | ||
"HOLDCURRENT", None, above=0.0, maxval=max_current | ||
) | ||
home_current = gcmd.get_float( | ||
"HOMECURRENT", None, above=0.0, maxval=max_cur | ||
cmd_home_current = gcmd.get_float( | ||
"HOMECURRENT", None, above=0.0, maxval=max_current | ||
) | ||
if ( | ||
run_current is not None | ||
or hold_current is not None | ||
or home_current is not None | ||
): | ||
if run_current is not None: | ||
ch.set_run_current(run_current) | ||
else: | ||
run_current = prev_cur | ||
|
||
if hold_current is None: | ||
hold_current = req_hold_cur | ||
|
||
if home_current is not None: | ||
ch.set_home_current(home_current) | ||
|
||
toolhead = self.printer.lookup_object("toolhead") | ||
print_time = toolhead.get_last_move_time() | ||
ch.set_current(run_current, hold_current, print_time) | ||
( | ||
prev_cur, | ||
prev_hold_cur, | ||
req_hold_cur, | ||
max_cur, | ||
prev_home_cur, | ||
) = ch.get_current() | ||
if cmd_run_current: | ||
run_current = cmd_run_current | ||
ch.set_run_current(run_current) | ||
if cmd_hold_current: | ||
hold_current = cmd_hold_current | ||
ch.set_hold_current(hold_current) | ||
if cmd_home_current: | ||
home_current = cmd_home_current | ||
ch.set_home_current(home_current) | ||
|
||
toolhead = self.printer.lookup_object("toolhead") | ||
print_time = toolhead.get_last_move_time() | ||
ch.apply_run_current(print_time) | ||
# Report values | ||
if prev_hold_cur is None: | ||
if hold_current is None: | ||
gcmd.respond_info( | ||
"Run Current: %0.2fA Home Current: %0.2fA" | ||
% (prev_cur, prev_home_cur) | ||
% (run_current, home_current) | ||
) | ||
else: | ||
gcmd.respond_info( | ||
"Run Current: %0.2fA Hold Current: %0.2fA Home Current: %0.2fA" | ||
% (prev_cur, prev_hold_cur, prev_home_cur) | ||
% (run_current, hold_current, home_current) | ||
) | ||
|
||
# Stepper phase tracking | ||
|
@@ -771,12 +759,43 @@ def TMCStealthchopHelper(config, mcu_tmc, tmc_freq): | |
|
||
|
||
class BaseTMCCurrentHelper: | ||
def __init__(self, config, mcu_tmc, max_current): | ||
def __init__(self, config, mcu_tmc): | ||
self.printer = config.get_printer() | ||
self.config_file = self.printer.lookup_object("configfile") | ||
self.name = config.get_name().split()[-1] | ||
self.mcu_tmc = mcu_tmc | ||
self.fields = mcu_tmc.get_fields() | ||
|
||
stepper_driver_type = config.get("stepstick_type", None) | ||
sense_resistor_from_driver, step_driver_max_current = ( | ||
stepstick_defs.STEPSTICK_DEFS.get(stepper_driver_type, (None, None)) | ||
) | ||
|
||
override_sense_resistor = config.getfloat( | ||
"sense_resistor", | ||
None, | ||
minval=0.0, | ||
) | ||
if ( | ||
override_sense_resistor is None | ||
and sense_resistor_from_driver is None | ||
): | ||
self.sense_resistor = self.DEFAULT_SENSE_RESISTOR | ||
self.config_file.warn( | ||
"config", | ||
f"""Neither 'stepper_driver_type' or 'sense_resistor' is defined for [{self.name}]. | ||
Using default value of {self.sense_resistor} ohm sense resistor. | ||
If this is incorrect, your drivers or board may be damaged.""", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. drivers, steppers or board. |
||
"sense_resistor", | ||
) | ||
|
||
else: | ||
self.sense_resistor = ( | ||
override_sense_resistor or sense_resistor_from_driver | ||
) | ||
|
||
max_current = step_driver_max_current or self.DEFAULT_MAX_CURRENT | ||
|
||
# config_{run|hold|home}_current | ||
# represents an initial value set via config file | ||
self.config_run_current = config.getfloat( | ||
|
@@ -807,9 +826,11 @@ def __init__(self, config, mcu_tmc, max_current): | |
# It fluctuates between req_run_current and req_home_current | ||
# during homing | ||
self.actual_current = self.req_run_current | ||
|
||
self.max_current = max_current | ||
|
||
def get_max_current(self): | ||
return self.max_current | ||
|
||
def needs_home_current_change(self): | ||
needs = self.actual_current != self.req_home_current | ||
logging.info(f"tmc {self.name}: needs_home_current_change {needs}") | ||
|
@@ -825,6 +846,13 @@ def needs_hold_current_change(self, hold_current): | |
logging.info(f"tmc {self.name}: needs_hold_current_change {needs}") | ||
return needs | ||
|
||
def apply_run_current(self, print_time): | ||
if self.needs_current_changes( | ||
self.req_run_current, self.req_hold_current | ||
): | ||
self.set_actual_current(self.req_run_current) | ||
self.apply_current(print_time) | ||
|
||
def set_home_current(self, new_home_current): | ||
self.req_home_current = min(self.max_current, new_home_current) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These (5-8) use the default 0.075 ohm sense resistor.