From af10ec304d842d95c65f2984e9c952e5274759c1 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:39:55 -0500 Subject: [PATCH 01/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index b773135c2..92d43bcee 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -2,6 +2,8 @@ # # Copyright (C) 2018-2019 Kevin O'Connor # +# Modified by Honest Brothers (C) 2024 +# # This file may be distributed under the terms of the GNU GPLv3 license. import math, logging from . import bus, tmc, tmc2130 @@ -260,7 +262,7 @@ FieldFormatters.update({ ###################################################################### VREF = 0.325 -MAX_CURRENT = 10.000 # Maximum dependent on board, but 10 is safe sanity check +MAX_CURRENT = 10.000 # Maximum dependent on board, but 10 is a safe sanity check class TMC5160CurrentHelper: def __init__(self, config, mcu_tmc): @@ -279,23 +281,24 @@ class TMC5160CurrentHelper: self.fields.set_field("ihold", ihold) self.fields.set_field("irun", irun) def _calc_globalscaler(self, current): - globalscaler = int((current * 256. * math.sqrt(2.) - * self.sense_resistor / VREF) + .5) + cs = self._calc_current_bits(current) + globalscaler = int( + (current * 256.0 * math.sqrt(2.0) * self.sense_resistor * 32 / ( + VREF * (1 + cs))) + + 0.5 + ) globalscaler = max(32, globalscaler) if globalscaler >= 256: globalscaler = 0 return globalscaler - def _calc_current_bits(self, current, globalscaler): - if not globalscaler: - globalscaler = 256 - cs = int((current * 256. * 32. * math.sqrt(2.) * self.sense_resistor) - / (globalscaler * VREF) - - 1. + .5) - return max(0, min(31, cs)) + def _calc_current_bits(self, current): + cs = int(100 * (current * math.sqrt(2)) * self.sense_resistor) - int( + 1 - 2 * (current * math.sqrt(2))) + return max(16, min(31, cs)) def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) - irun = self._calc_current_bits(run_current, gscaler) - ihold = self._calc_current_bits(min(hold_current, run_current), gscaler) + irun = self._calc_current_bits(run_current) + ihold = self._calc_current_bits(min(hold_current, run_current)) return gscaler, irun, ihold def _calc_current_from_field(self, field_name): globalscaler = self.fields.get_field("globalscaler") From b95d2c63527a27c647c6aeaa9a5ffeb630d7ec3d Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:01:46 -0500 Subject: [PATCH 02/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 92d43bcee..e58c2a39f 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -262,7 +262,7 @@ FieldFormatters.update({ ###################################################################### VREF = 0.325 -MAX_CURRENT = 10.000 # Maximum dependent on board, but 10 is a safe sanity check +MAX_CURRENT = 10.000 # Maximum dependent on board, but 10 is safe sanity check class TMC5160CurrentHelper: def __init__(self, config, mcu_tmc): @@ -284,9 +284,7 @@ class TMC5160CurrentHelper: cs = self._calc_current_bits(current) globalscaler = int( (current * 256.0 * math.sqrt(2.0) * self.sense_resistor * 32 / ( - VREF * (1 + cs))) - + 0.5 - ) + VREF * (1 + cs))) + 0.5) globalscaler = max(32, globalscaler) if globalscaler >= 256: globalscaler = 0 From dca4ead41e56c2a67f9d68d47af75f68e8428de6 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Mon, 15 Jul 2024 20:17:31 -0500 Subject: [PATCH 03/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index e58c2a39f..a11ba5df0 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -290,8 +290,7 @@ class TMC5160CurrentHelper: globalscaler = 0 return globalscaler def _calc_current_bits(self, current): - cs = int(100 * (current * math.sqrt(2)) * self.sense_resistor) - int( - 1 - 2 * (current * math.sqrt(2))) + cs = 100 * (current/math.sqrt(2) * self.sense_resistor) - 1 #check math return max(16, min(31, cs)) def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) From aae9e03ca09aa7d2a234ee6d2608d9e5a26339b2 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Mon, 15 Jul 2024 23:19:06 -0500 Subject: [PATCH 04/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index a11ba5df0..e4f0c2d39 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -247,6 +247,9 @@ Fields["TSTEP"] = { Fields["THIGH"] = { "thigh": 0xfffff << 0 } +Fields["TMC_CS"] = { + "tmc_cs": 0x1F << 0 +} SignedFields = ["cur_a", "cur_b", "sgt", "xactual", "vactual", "pwm_scale_auto"] @@ -290,7 +293,8 @@ class TMC5160CurrentHelper: globalscaler = 0 return globalscaler def _calc_current_bits(self, current): - cs = 100 * (current/math.sqrt(2) * self.sense_resistor) - 1 #check math + cs = 32 * ((self.sense_resistor/.32)*(current*math.sqrt(2))) - 1 #check math + #cs = self.fields.get_field("tmc_cs") return max(16, min(31, cs)) def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) @@ -358,6 +362,7 @@ class TMC5160: set_config_field(config, "tpfd", 4) set_config_field(config, "diss2g", 0) set_config_field(config, "diss2vs", 0) + set_config_field(config, "tmc_cs", 31) # COOLCONF set_config_field(config, "semin", 0) # page 52 set_config_field(config, "seup", 0) From d9d32c87fcc7256490f6cba06f3ee8c3e0b2ad2b Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 16 Jul 2024 13:07:01 -0500 Subject: [PATCH 05/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index e4f0c2d39..c5ea88d07 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -247,9 +247,7 @@ Fields["TSTEP"] = { Fields["THIGH"] = { "thigh": 0xfffff << 0 } -Fields["TMC_CS"] = { - "tmc_cs": 0x1F << 0 -} + SignedFields = ["cur_a", "cur_b", "sgt", "xactual", "vactual", "pwm_scale_auto"] @@ -265,7 +263,7 @@ FieldFormatters.update({ ###################################################################### VREF = 0.325 -MAX_CURRENT = 10.000 # Maximum dependent on board, but 10 is safe sanity check +MAX_CURRENT = 10.000 # Maximum dependent on board; 10 is safe sanity check class TMC5160CurrentHelper: def __init__(self, config, mcu_tmc): @@ -277,6 +275,7 @@ class TMC5160CurrentHelper: above=0., maxval=MAX_CURRENT) hold_current = config.getfloat('hold_current', MAX_CURRENT, above=0., maxval=MAX_CURRENT) + self.cs = config.getint('tmc_cs', 31, 0) self.req_hold_current = hold_current self.sense_resistor = config.getfloat('sense_resistor', 0.075, above=0.) gscaler, irun, ihold = self._calc_current(run_current, hold_current) @@ -293,8 +292,7 @@ class TMC5160CurrentHelper: globalscaler = 0 return globalscaler def _calc_current_bits(self, current): - cs = 32 * ((self.sense_resistor/.32)*(current*math.sqrt(2))) - 1 #check math - #cs = self.fields.get_field("tmc_cs") + cs = self.cs return max(16, min(31, cs)) def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) @@ -362,7 +360,6 @@ class TMC5160: set_config_field(config, "tpfd", 4) set_config_field(config, "diss2g", 0) set_config_field(config, "diss2vs", 0) - set_config_field(config, "tmc_cs", 31) # COOLCONF set_config_field(config, "semin", 0) # page 52 set_config_field(config, "seup", 0) From d0429ed82ed17ec5b08cd5f5b60690427f86388a Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:12:34 -0500 Subject: [PATCH 06/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index c5ea88d07..52f0b3c5e 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -292,8 +292,15 @@ class TMC5160CurrentHelper: globalscaler = 0 return globalscaler def _calc_current_bits(self, current): - cs = self.cs - return max(16, min(31, cs)) + if self.cs == 0: + Ipeak = current * math.sqrt(2) + Rsens = self.sense_resistor + cs = int(math.ceil(Rsens * 32 * Ipeak / 0.32) - 1) + elif self.cs < 31: + cs = self.cs + else: + cs = 31 + return max(0, min(31, cs)) def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) irun = self._calc_current_bits(run_current) From 6a81ae8382e5b88876757407d4d116bd061ed0df Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Wed, 28 Aug 2024 21:44:29 -0500 Subject: [PATCH 07/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 52f0b3c5e..8319f64c7 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -275,7 +275,7 @@ class TMC5160CurrentHelper: above=0., maxval=MAX_CURRENT) hold_current = config.getfloat('hold_current', MAX_CURRENT, above=0., maxval=MAX_CURRENT) - self.cs = config.getint('tmc_cs', 31, 0) + self.cs = config.getint('driver_cs', 31, -1) self.req_hold_current = hold_current self.sense_resistor = config.getfloat('sense_resistor', 0.075, above=0.) gscaler, irun, ihold = self._calc_current(run_current, hold_current) @@ -292,7 +292,7 @@ class TMC5160CurrentHelper: globalscaler = 0 return globalscaler def _calc_current_bits(self, current): - if self.cs == 0: + if self.cs == -1: Ipeak = current * math.sqrt(2) Rsens = self.sense_resistor cs = int(math.ceil(Rsens * 32 * Ipeak / 0.32) - 1) From b03886b1f921d4fb071cf3c0eddcfaca6e2d5721 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Thu, 29 Aug 2024 08:14:25 -0500 Subject: [PATCH 08/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 8319f64c7..6747228f9 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -296,8 +296,6 @@ class TMC5160CurrentHelper: Ipeak = current * math.sqrt(2) Rsens = self.sense_resistor cs = int(math.ceil(Rsens * 32 * Ipeak / 0.32) - 1) - elif self.cs < 31: - cs = self.cs else: cs = 31 return max(0, min(31, cs)) From cd851b674875c22526ce7749c39bccbcdad18646 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 26 Nov 2024 12:57:29 -0600 Subject: [PATCH 09/14] Change the way ihold is calculated. --- klippy/extras/tmc5160.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 8319f64c7..f8b3cce1e 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -304,7 +304,7 @@ class TMC5160CurrentHelper: def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) irun = self._calc_current_bits(run_current) - ihold = self._calc_current_bits(min(hold_current, run_current)) + ihold = int((hold_current/run_current)*irun) return gscaler, irun, ihold def _calc_current_from_field(self, field_name): globalscaler = self.fields.get_field("globalscaler") From c509045a3bd1b1b0a41ee9afc3cf028d3e6ae8e1 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 24 Dec 2024 21:21:58 -0600 Subject: [PATCH 10/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index be2434ba3..21ccb7a23 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -296,8 +296,8 @@ class TMC5160CurrentHelper: Ipeak = current * math.sqrt(2) Rsens = self.sense_resistor cs = int(math.ceil(Rsens * 32 * Ipeak / 0.32) - 1) - else: - cs = 31 + elif: + cs = self.cs return max(0, min(31, cs)) def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) From a3d3d776aa848d799c1fe2445407ac13ea488b58 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 24 Dec 2024 21:30:37 -0600 Subject: [PATCH 11/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 21ccb7a23..c1bde0d5c 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -296,7 +296,7 @@ class TMC5160CurrentHelper: Ipeak = current * math.sqrt(2) Rsens = self.sense_resistor cs = int(math.ceil(Rsens * 32 * Ipeak / 0.32) - 1) - elif: + else: cs = self.cs return max(0, min(31, cs)) def _calc_current(self, run_current, hold_current): From f47e369b936e1ee435ccc74d24ee14cec60443ee Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 24 Dec 2024 21:32:23 -0600 Subject: [PATCH 12/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index c1bde0d5c..87c8030fe 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -284,9 +284,9 @@ class TMC5160CurrentHelper: self.fields.set_field("irun", irun) def _calc_globalscaler(self, current): cs = self._calc_current_bits(current) - globalscaler = int( + globalscaler = int(math.ceil( (current * 256.0 * math.sqrt(2.0) * self.sense_resistor * 32 / ( - VREF * (1 + cs))) + 0.5) + VREF * (1 + cs))))) globalscaler = max(32, globalscaler) if globalscaler >= 256: globalscaler = 0 From d429bd05034725716474940e745082b600173925 Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 24 Dec 2024 21:37:10 -0600 Subject: [PATCH 13/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 87c8030fe..866fe53f5 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -302,7 +302,7 @@ class TMC5160CurrentHelper: def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) irun = self._calc_current_bits(run_current) - ihold = int((hold_current/run_current)*irun) + ihold = int(min((hold_current/run_current)*irun), irun) return gscaler, irun, ihold def _calc_current_from_field(self, field_name): globalscaler = self.fields.get_field("globalscaler") From 3c10d9dd72c58c2a7bbaaa8a0382d7f9afc47acb Mon Sep 17 00:00:00 2001 From: HonestBrothers <112437205+HonestBrothers@users.noreply.github.com> Date: Tue, 24 Dec 2024 21:47:10 -0600 Subject: [PATCH 14/14] Update tmc5160.py --- klippy/extras/tmc5160.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index 866fe53f5..45fd84fca 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -302,7 +302,7 @@ class TMC5160CurrentHelper: def _calc_current(self, run_current, hold_current): gscaler = self._calc_globalscaler(run_current) irun = self._calc_current_bits(run_current) - ihold = int(min((hold_current/run_current)*irun), irun) + ihold = int(min((hold_current / run_current) * irun, irun)) return gscaler, irun, ihold def _calc_current_from_field(self, field_name): globalscaler = self.fields.get_field("globalscaler")