From 30bcc00331f7df8d977f919efa51a5aafef0b3c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9l=C3=A8ne=20Corbineau?= Date: Tue, 14 Jan 2025 18:46:57 +0100 Subject: [PATCH] Feedrate consistency --- GCode_Interpreterdc.py | 65 ++++++++---------------------------------- 1 file changed, 12 insertions(+), 53 deletions(-) diff --git a/GCode_Interpreterdc.py b/GCode_Interpreterdc.py index e6a62bf..1947c10 100644 --- a/GCode_Interpreterdc.py +++ b/GCode_Interpreterdc.py @@ -36,25 +36,6 @@ class GCodeToMotors: self.CONTROLLER = ctrl self.HARDWARE = hw_interface - # Hardcoded Values for Our Machine - X_STEP_PIN = 8 - X_DIR_PIN = 9 - X_MIN_PIN = 4 - X_MAX_PIN = 2 - X_ENABLE_PIN = 15 - - Y_STEP_PIN = 10 - Y_DIR_PIN = 11 - Y_MIN_PIN = 3 - Y_MAX_PIN = 5 - Y_ENABLE_PIN = 15 - - Z_STEP_PIN = 12 - Z_DIR_PIN = 13 - Z_MIN_PIN = 7 - Z_MAX_PIN = 6 - Z_ENABLE_PIN = 15 # All the above should probably go to HARDWARE - X_STEPS_PER_INCH = x_units = 4800 X_STEPS_PER_MM: float = 188.97 X_MOTOR_STEPS: float = 200 @@ -84,8 +65,7 @@ class GCodeToMotors: z_direction: int = 1 z_throttle : int = 0 - target_feedrate: float = 0 # Target total head speed. For now in mm/s always - feedrate: float = 0. + feedrate: float = 0. # In m/mn abs_mode: bool = False @@ -141,7 +121,7 @@ class GCodeToMotors: return self.FAST_Z_FEEDRATE return self.FAST_XY_FEEDRATE - # Try to move to target_units using target_feedrate + # Try to move to target_units at feedrate # We honor the following semantics: # GCodeToMotors translates the GCode to high-level controls/theoretical position and targets @@ -156,13 +136,6 @@ class GCodeToMotors: self.calculate_deltas() - def calculate_feedrate_delay(self, feedrate: float) -> float: - distance: float = np.linalg.norm(self.delta_units) - master_steps: float = max(self.delta_steps) - - # Compute delay between steps in microseconds - return ((distance * 600000000.) / feedrate) / master_steps - def instruction_converter(self, instruction: str) -> Optional[List[float]]: if instruction[0] == "/": return None @@ -201,20 +174,10 @@ class GCodeToMotors: match code: case 0, 1: self.set_position(fp[0], fp[1], fp[2]) - if has_command('G', instruction): - if code == 1: - self.feedrate = search_string('F', instruction) - if self.feedrate > 0: - self.target_feedrate = self.feedrate - else: - self.target_feedrate = self.get_max_speed() - else: - self.target_feedrate = self.get_max_speed() - else: - if self.feedrate > 0: - self.target_feedrate = self.feedrate - else: - self.target_feedrate = self.get_max_speed() + if has_command('G', instruction) and code == 1: + self.feedrate = search_string('F', instruction) + if self.feedrate == 0: + self.feedrate = self.get_max_speed() self.move() case 2, 3: @@ -249,10 +212,8 @@ class GCodeToMotors: newPoint[1] = center[1] + radius * np.sin(angleA + angle * (step / steps)) self.set_target(newPoint[0], newPoint[1], fp[2]) - if self.feedrate > 0: - self.target_feedrate = self.feedrate - else: - self.target_feedrate = self.get_max_speed() + if self.feedrate == 0: + self.feedrate = self.get_max_speed() self.move() @@ -287,10 +248,8 @@ class GCodeToMotors: 1 - t) * t ** 2 * control_2[1] + t ** 3 * fp[1] self.set_target(newPoint[0], newPoint[1], fp[2]) - if self.feedrate > 0: - self.target_feedrate = self.feedrate - else: - self.target_feedrate = self.get_max_speed() + if self.feedrate == 0.: + self.feedrate = self.get_max_speed() self.move() @@ -345,10 +304,10 @@ class GCodeToMotors: self.set_target(fp[0], fp[1], fp[2]) else: self.set_target(self.current_units[0] + fp[0], self.current_units[1] + fp[1], self.current_units[2] + fp[2]) - self.target_feedrate = self.get_max_speed() + self.feedrate = self.get_max_speed() self.move() self.set_target(0., 0., 0.) - self.target_feedrate = self.get_max_speed() + self.feedrate = self.get_max_speed() self.move() case _: