Feedrate consistency

This commit is contained in:
Sélène Corbineau 2025-01-14 18:46:57 +01:00
parent ee50a8eb44
commit 30bcc00331

View file

@ -36,25 +36,6 @@ class GCodeToMotors:
self.CONTROLLER = ctrl self.CONTROLLER = ctrl
self.HARDWARE = hw_interface 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_INCH = x_units = 4800
X_STEPS_PER_MM: float = 188.97 X_STEPS_PER_MM: float = 188.97
X_MOTOR_STEPS: float = 200 X_MOTOR_STEPS: float = 200
@ -84,8 +65,7 @@ class GCodeToMotors:
z_direction: int = 1 z_direction: int = 1
z_throttle : int = 0 z_throttle : int = 0
target_feedrate: float = 0 # Target total head speed. For now in mm/s always feedrate: float = 0. # In m/mn
feedrate: float = 0.
abs_mode: bool = False abs_mode: bool = False
@ -141,7 +121,7 @@ class GCodeToMotors:
return self.FAST_Z_FEEDRATE return self.FAST_Z_FEEDRATE
return self.FAST_XY_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: # We honor the following semantics:
# GCodeToMotors translates the GCode to high-level controls/theoretical position and targets # GCodeToMotors translates the GCode to high-level controls/theoretical position and targets
@ -156,13 +136,6 @@ class GCodeToMotors:
self.calculate_deltas() 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]]: def instruction_converter(self, instruction: str) -> Optional[List[float]]:
if instruction[0] == "/": if instruction[0] == "/":
return None return None
@ -201,20 +174,10 @@ class GCodeToMotors:
match code: match code:
case 0, 1: case 0, 1:
self.set_position(fp[0], fp[1], fp[2]) self.set_position(fp[0], fp[1], fp[2])
if has_command('G', instruction): if has_command('G', instruction) and code == 1:
if code == 1:
self.feedrate = search_string('F', instruction) self.feedrate = search_string('F', instruction)
if self.feedrate > 0: if self.feedrate == 0:
self.target_feedrate = self.feedrate self.feedrate = self.get_max_speed()
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()
self.move() self.move()
case 2, 3: case 2, 3:
@ -249,10 +212,8 @@ class GCodeToMotors:
newPoint[1] = center[1] + radius * np.sin(angleA + angle * (step / steps)) newPoint[1] = center[1] + radius * np.sin(angleA + angle * (step / steps))
self.set_target(newPoint[0], newPoint[1], fp[2]) self.set_target(newPoint[0], newPoint[1], fp[2])
if self.feedrate > 0: if self.feedrate == 0:
self.target_feedrate = self.feedrate self.feedrate = self.get_max_speed()
else:
self.target_feedrate = self.get_max_speed()
self.move() self.move()
@ -287,10 +248,8 @@ class GCodeToMotors:
1 - t) * t ** 2 * control_2[1] + t ** 3 * fp[1] 1 - t) * t ** 2 * control_2[1] + t ** 3 * fp[1]
self.set_target(newPoint[0], newPoint[1], fp[2]) self.set_target(newPoint[0], newPoint[1], fp[2])
if self.feedrate > 0: if self.feedrate == 0.:
self.target_feedrate = self.feedrate self.feedrate = self.get_max_speed()
else:
self.target_feedrate = self.get_max_speed()
self.move() self.move()
@ -345,10 +304,10 @@ class GCodeToMotors:
self.set_target(fp[0], fp[1], fp[2]) self.set_target(fp[0], fp[1], fp[2])
else: else:
self.set_target(self.current_units[0] + fp[0], self.current_units[1] + fp[1], self.current_units[2] + fp[2]) 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.move()
self.set_target(0., 0., 0.) self.set_target(0., 0., 0.)
self.target_feedrate = self.get_max_speed() self.feedrate = self.get_max_speed()
self.move() self.move()
case _: case _: