diff options
author | Dmitry Butyugin <dmbutyugin@google.com> | 2023-04-16 00:31:45 +0200 |
---|---|---|
committer | KevinOConnor <kevin@koconnor.net> | 2023-06-06 20:17:49 -0400 |
commit | e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6 (patch) | |
tree | 5e98e88c832312d483bf29c723c008a98e33041f /klippy | |
parent | 345934bd681caf11a52810291d9255d6987c6e7a (diff) | |
download | kutter-e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6.tar.gz kutter-e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6.tar.xz kutter-e15bad484403b1ef8a9b0ffc2abe6b092fd3c3f6.zip |
input_shaper: Fixed tracking of step_generation_scan_time
Signed-off-by: Dmitry Butyugin <dmbutyugin@google.com>
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/chelper/__init__.py | 4 | ||||
-rw-r--r-- | klippy/chelper/kin_shaper.c | 13 | ||||
-rw-r--r-- | klippy/extras/input_shaper.py | 15 |
3 files changed, 12 insertions, 20 deletions
diff --git a/klippy/chelper/__init__.py b/klippy/chelper/__init__.py index 6166363e..8183fd62 100644 --- a/klippy/chelper/__init__.py +++ b/klippy/chelper/__init__.py @@ -144,8 +144,8 @@ defs_kin_extruder = """ """ defs_kin_shaper = """ - double input_shaper_get_step_generation_window(int n, double a[] - , double t[]); + double input_shaper_get_step_generation_window( + struct stepper_kinematics *sk); int input_shaper_set_shaper_params(struct stepper_kinematics *sk, char axis , int n, double a[], double t[]); int input_shaper_set_sk(struct stepper_kinematics *sk diff --git a/klippy/chelper/kin_shaper.c b/klippy/chelper/kin_shaper.c index 133f46a9..dd9cf619 100644 --- a/klippy/chelper/kin_shaper.c +++ b/klippy/chelper/kin_shaper.c @@ -210,16 +210,11 @@ input_shaper_set_shaper_params(struct stepper_kinematics *sk, char axis } double __visible -input_shaper_get_step_generation_window(int n, double a[], double t[]) +input_shaper_get_step_generation_window(struct stepper_kinematics *sk) { - struct shaper_pulses sp; - init_shaper(n, a, t, &sp); - if (!sp.num_pulses) - return 0.; - double window = -sp.pulses[0].t; - if (sp.pulses[sp.num_pulses-1].t > window) - window = sp.pulses[sp.num_pulses-1].t; - return window; + struct input_shaper *is = container_of(sk, struct input_shaper, sk); + return is->sk.gen_steps_pre_active > is->sk.gen_steps_post_active + ? is->sk.gen_steps_pre_active : is->sk.gen_steps_post_active; } struct stepper_kinematics * __visible diff --git a/klippy/extras/input_shaper.py b/klippy/extras/input_shaper.py index fdfdf546..7f37d302 100644 --- a/klippy/extras/input_shaper.py +++ b/klippy/extras/input_shaper.py @@ -70,10 +70,6 @@ class AxisInputShaper: ffi_lib.input_shaper_set_shaper_params( sk, self.axis.encode(), self.n, self.A, self.T) return success - def get_step_generation_window(self): - ffi_main, ffi_lib = chelper.get_ffi() - return ffi_lib.input_shaper_get_step_generation_window(self.n, - self.A, self.T) def disable_shaping(self): if self.saved is None and self.n: self.saved = (self.n, self.A, self.T) @@ -109,7 +105,6 @@ class InputShaper: def connect(self): self.toolhead = self.printer.lookup_object("toolhead") # Configure initial values - self.old_delay = 0. self._update_input_shaping(error=self.printer.config_error) def _get_input_shaper_stepper_kinematics(self, stepper): # Lookup stepper kinematics @@ -131,10 +126,7 @@ class InputShaper: return is_sk def _update_input_shaping(self, error=None): self.toolhead.flush_step_generation() - new_delay = max([s.get_step_generation_window() for s in self.shapers]) - self.toolhead.note_step_generation_scan_time(new_delay, - old_delay=self.old_delay) - self.old_delay = new_delay + ffi_main, ffi_lib = chelper.get_ffi() kin = self.toolhead.get_kinematics() failed_shapers = [] for s in kin.get_steppers(): @@ -143,11 +135,16 @@ class InputShaper: is_sk = self._get_input_shaper_stepper_kinematics(s) if is_sk is None: continue + old_delay = ffi_lib.input_shaper_get_step_generation_window(is_sk) for shaper in self.shapers: if shaper in failed_shapers: continue if not shaper.set_shaper_kinematics(is_sk): failed_shapers.append(shaper) + new_delay = ffi_lib.input_shaper_get_step_generation_window(is_sk) + if old_delay != new_delay: + self.toolhead.note_step_generation_scan_time(new_delay, + old_delay) if failed_shapers: error = error or self.printer.command_error raise error("Failed to configure shaper(s) %s with given parameters" |