mirror of
				https://github.com/Klipper3d/klipper.git
				synced 2025-10-31 10:25:57 +01:00 
			
		
		
		
	mcu: Delay setting of mcu_stepper.min_stop_interval
Create a separate callback for setting the min_stop_interval. Also, move the setting of the stepper max_error from the stepper configs to the mcu config and rename it to max_stepper_error. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
		| @@ -22,26 +22,29 @@ def parse_pin_extras(pin, can_pullup=False): | |||||||
| STEPCOMPRESS_ERROR_RET = -989898989 | STEPCOMPRESS_ERROR_RET = -989898989 | ||||||
|  |  | ||||||
| class MCU_stepper: | class MCU_stepper: | ||||||
|     def __init__(self, mcu, step_pin, dir_pin, min_stop_interval, max_error): |     def __init__(self, mcu, step_pin, dir_pin): | ||||||
|         self._mcu = mcu |         self._mcu = mcu | ||||||
|         self._oid = mcu.create_oid(self) |         self._oid = mcu.create_oid(self) | ||||||
|         self._max_error = max_error |         self._step_pin, pullup, self._invert_step = parse_pin_extras(step_pin) | ||||||
|         step_pin, pullup, invert_step = parse_pin_extras(step_pin) |         self._dir_pin, pullup, self._invert_dir = parse_pin_extras(dir_pin) | ||||||
|         dir_pin, pullup, self._invert_dir = parse_pin_extras(dir_pin) |  | ||||||
|         self.commanded_position = 0 |         self.commanded_position = 0 | ||||||
|         self._mcu_position_offset = 0 |         self._mcu_position_offset = 0 | ||||||
|         self._mcu_freq = 0. |         self._mcu_freq = self._min_stop_interval = 0. | ||||||
|         mcu.add_config_cmd( |  | ||||||
|             "config_stepper oid=%d step_pin=%s dir_pin=%s" |  | ||||||
|             " min_stop_interval=TICKS(%.9f) invert_step=%d" % ( |  | ||||||
|                 self._oid, step_pin, dir_pin, min_stop_interval, invert_step)) |  | ||||||
|         mcu.register_stepper(self) |  | ||||||
|         self._reset_cmd = self._get_position_cmd = None |         self._reset_cmd = self._get_position_cmd = None | ||||||
|         self.ffi_lib = self._stepqueue = None |         self.ffi_lib = self._stepqueue = None | ||||||
|         self.print_to_mcu_time = mcu.print_to_mcu_time |         self.print_to_mcu_time = mcu.print_to_mcu_time | ||||||
|  |     def set_min_stop_interval(self, min_stop_interval): | ||||||
|  |         self._min_stop_interval = min_stop_interval | ||||||
|     def build_config(self): |     def build_config(self): | ||||||
|         self._mcu_freq = self._mcu.get_mcu_freq() |         self._mcu_freq = self._mcu.get_mcu_freq() | ||||||
|         max_error = int(self._max_error * self._mcu_freq) |         max_error = self._mcu.get_max_stepper_error() | ||||||
|  |         min_stop_interval = max(0., self._min_stop_interval - max_error) | ||||||
|  |         self._mcu.add_config_cmd( | ||||||
|  |             "config_stepper oid=%d step_pin=%s dir_pin=%s" | ||||||
|  |             " min_stop_interval=TICKS(%.9f) invert_step=%d" % ( | ||||||
|  |                 self._oid, self._step_pin, self._dir_pin, | ||||||
|  |                 min_stop_interval, self._invert_step)) | ||||||
|  |         self._mcu.register_stepper(self) | ||||||
|         step_cmd = self._mcu.lookup_command( |         step_cmd = self._mcu.lookup_command( | ||||||
|             "queue_step oid=%c interval=%u count=%hu add=%hi") |             "queue_step oid=%c interval=%u count=%hu add=%hi") | ||||||
|         dir_cmd = self._mcu.lookup_command( |         dir_cmd = self._mcu.lookup_command( | ||||||
| @@ -51,6 +54,7 @@ class MCU_stepper: | |||||||
|         self._get_position_cmd = self._mcu.lookup_command( |         self._get_position_cmd = self._mcu.lookup_command( | ||||||
|             "stepper_get_position oid=%c") |             "stepper_get_position oid=%c") | ||||||
|         ffi_main, self.ffi_lib = chelper.get_ffi() |         ffi_main, self.ffi_lib = chelper.get_ffi() | ||||||
|  |         max_error = int(max_error * self._mcu_freq) | ||||||
|         self._stepqueue = ffi_main.gc(self.ffi_lib.stepcompress_alloc( |         self._stepqueue = ffi_main.gc(self.ffi_lib.stepcompress_alloc( | ||||||
|             max_error, step_cmd.msgid, dir_cmd.msgid, |             max_error, step_cmd.msgid, dir_cmd.msgid, | ||||||
|             self._invert_dir, self._oid), |             self._invert_dir, self._oid), | ||||||
| @@ -151,12 +155,9 @@ class MCU_endstop: | |||||||
|         self._mcu = mcu |         self._mcu = mcu | ||||||
|         self._oid = mcu.create_oid(self) |         self._oid = mcu.create_oid(self) | ||||||
|         self._stepper = stepper |         self._stepper = stepper | ||||||
|         stepper_oid = stepper.get_oid() |         self._pin, self._pullup, self._invert = parse_pin_extras( | ||||||
|         pin, pullup, self._invert = parse_pin_extras(pin, can_pullup=True) |             pin, can_pullup=True) | ||||||
|         self._cmd_queue = mcu.alloc_command_queue() |         self._cmd_queue = mcu.alloc_command_queue() | ||||||
|         mcu.add_config_cmd( |  | ||||||
|             "config_end_stop oid=%d pin=%s pull_up=%d stepper_oid=%d" % ( |  | ||||||
|                 self._oid, pin, pullup, stepper_oid)) |  | ||||||
|         self._home_cmd = self._query_cmd = None |         self._home_cmd = self._query_cmd = None | ||||||
|         self._homing = False |         self._homing = False | ||||||
|         self._min_query_time = self._mcu_freq = 0. |         self._min_query_time = self._mcu_freq = 0. | ||||||
| @@ -166,6 +167,9 @@ class MCU_endstop: | |||||||
|         self.print_to_mcu_time = mcu.print_to_mcu_time |         self.print_to_mcu_time = mcu.print_to_mcu_time | ||||||
|     def build_config(self): |     def build_config(self): | ||||||
|         self._mcu_freq = self._mcu.get_mcu_freq() |         self._mcu_freq = self._mcu.get_mcu_freq() | ||||||
|  |         self._mcu.add_config_cmd( | ||||||
|  |             "config_end_stop oid=%d pin=%s pull_up=%d stepper_oid=%d" % ( | ||||||
|  |                 self._oid, self._pin, self._pullup, self._stepper.get_oid())) | ||||||
|         self._retry_query_ticks = int(self._mcu_freq * self.RETRY_QUERY) |         self._retry_query_ticks = int(self._mcu_freq * self.RETRY_QUERY) | ||||||
|         self._home_cmd = self._mcu.lookup_command( |         self._home_cmd = self._mcu.lookup_command( | ||||||
|             "end_stop_home oid=%c clock=%u rest_ticks=%u pin_value=%c") |             "end_stop_home oid=%c clock=%u rest_ticks=%u pin_value=%c") | ||||||
| @@ -383,6 +387,7 @@ class MCU: | |||||||
|         self._pin_map = config.get('pin_map', None) |         self._pin_map = config.get('pin_map', None) | ||||||
|         # Move command queuing |         # Move command queuing | ||||||
|         ffi_main, self.ffi_lib = chelper.get_ffi() |         ffi_main, self.ffi_lib = chelper.get_ffi() | ||||||
|  |         self._max_stepper_error = config.getfloat('max_stepper_error', 0.000025) | ||||||
|         self._steppers = [] |         self._steppers = [] | ||||||
|         self._steppersync = None |         self._steppersync = None | ||||||
|         # Print time to clock epoch calculations |         # Print time to clock epoch calculations | ||||||
| @@ -551,8 +556,8 @@ class MCU: | |||||||
|     def create_command(self, msg): |     def create_command(self, msg): | ||||||
|         return self.serial.msgparser.create_command(msg) |         return self.serial.msgparser.create_command(msg) | ||||||
|     # Wrappers for mcu object creation |     # Wrappers for mcu object creation | ||||||
|     def create_stepper(self, step_pin, dir_pin, min_stop_interval, max_error): |     def create_stepper(self, step_pin, dir_pin): | ||||||
|         return MCU_stepper(self, step_pin, dir_pin, min_stop_interval, max_error) |         return MCU_stepper(self, step_pin, dir_pin) | ||||||
|     def create_endstop(self, pin, stepper): |     def create_endstop(self, pin, stepper): | ||||||
|         return MCU_endstop(self, pin, stepper) |         return MCU_endstop(self, pin, stepper) | ||||||
|     def create_digital_out(self, pin, max_duration=2.): |     def create_digital_out(self, pin, max_duration=2.): | ||||||
| @@ -579,6 +584,8 @@ class MCU: | |||||||
|         return self._mcu_freq |         return self._mcu_freq | ||||||
|     def get_last_clock(self): |     def get_last_clock(self): | ||||||
|         return self.serial.get_last_clock() |         return self.serial.get_last_clock() | ||||||
|  |     def get_max_stepper_error(self): | ||||||
|  |         return self._max_stepper_error | ||||||
|     # Move command queuing |     # Move command queuing | ||||||
|     def send(self, cmd, minclock=0, reqclock=0, cq=None): |     def send(self, cmd, minclock=0, reqclock=0, cq=None): | ||||||
|         self.serial.send(cmd, minclock, reqclock, cq=cq) |         self.serial.send(cmd, minclock, reqclock, cq=cq) | ||||||
|   | |||||||
| @@ -51,13 +51,11 @@ class PrinterStepper: | |||||||
|         self.min_stop_interval = (math.sqrt(3.*inv_max_step_accel + jc**2) |         self.min_stop_interval = (math.sqrt(3.*inv_max_step_accel + jc**2) | ||||||
|                                   - math.sqrt(inv_max_step_accel + jc**2)) |                                   - math.sqrt(inv_max_step_accel + jc**2)) | ||||||
|     def build_config(self): |     def build_config(self): | ||||||
|         max_error = self.config.getfloat('max_error', 0.000025) |  | ||||||
|         step_pin = self.config.get('step_pin') |         step_pin = self.config.get('step_pin') | ||||||
|         dir_pin = self.config.get('dir_pin') |         dir_pin = self.config.get('dir_pin') | ||||||
|         min_stop_interval = max(0., self.min_stop_interval - max_error) |  | ||||||
|         mcu = self.printer.mcu |         mcu = self.printer.mcu | ||||||
|         self.mcu_stepper = mcu.create_stepper( |         self.mcu_stepper = mcu.create_stepper(step_pin, dir_pin) | ||||||
|             step_pin, dir_pin, min_stop_interval, max_error) |         self.mcu_stepper.set_min_stop_interval(self.min_stop_interval) | ||||||
|         enable_pin = self.config.get('enable_pin', None) |         enable_pin = self.config.get('enable_pin', None) | ||||||
|         if enable_pin is not None: |         if enable_pin is not None: | ||||||
|             self.mcu_enable = mcu.create_digital_out(enable_pin, 0) |             self.mcu_enable = mcu.create_digital_out(enable_pin, 0) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user