def __init__(self, toolhead, config): self.printer = config.get_printer() printer_config = config.getsection('printer') # itersolve parameters self.rails = [ stepper.PrinterRail(config.getsection('stepper_x')), stepper.LookupMultiRail(config.getsection('stepper_y')), stepper.LookupMultiRail(config.getsection('stepper_z')) ] self.rails[2].get_endstops()[0][0].add_stepper( self.rails[0].get_steppers()[0]) self.rails[0].setup_itersolve('corexz_stepper_alloc', '-') self.rails[1].setup_itersolve('cartesian_stepper_alloc', 'y') self.rails[2].setup_itersolve('cartesian_stepper_alloc', 'z') ranges = [r.get_range() for r in self.rails] self.axes_min = toolhead.Coord(*[r[0] for r in ranges], e=0.) self.axes_max = toolhead.Coord(*[r[1] for r in ranges], e=0.) for s in self.get_steppers(): s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) self.printer.register_event_handler("stepper_enable:motor_off", self._motor_off) # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.limits = [(1.0, -1.0)] * 3
def __init__(self, toolhead, config): self.printer = config.get_printer() # Setup axis rails self.dual_carriage_axis = None self.dual_carriage_rails = [] self.rails = [ stepper.LookupMultiRail(config.getsection('stepper_' + n)) for n in 'xyz' ] for rail, axis in zip(self.rails, 'xyz'): rail.setup_itersolve('cartesian_stepper_alloc', axis.encode()) for s in self.get_steppers(): s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) self.printer.register_event_handler("stepper_enable:motor_off", self._motor_off) # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.limits = [(1.0, -1.0)] * 3 ranges = [r.get_range() for r in self.rails] self.axes_min = toolhead.Coord(*[r[0] for r in ranges], e=0.) self.axes_max = toolhead.Coord(*[r[1] for r in ranges], e=0.) # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() self.rails[0].set_max_jerk(max_halt_velocity, max_accel) self.rails[1].set_max_jerk(max_halt_velocity, max_accel) self.rails[2].set_max_jerk(min(max_halt_velocity, self.max_z_velocity), max_accel) # Check for dual carriage support if config.has_section('dual_carriage'): dc_config = config.getsection('dual_carriage') dc_axis = dc_config.getchoice('axis', {'x': 'x', 'y': 'y'}) self.dual_carriage_axis = {'x': 0, 'y': 1}[dc_axis] dc_rail = stepper.LookupMultiRail(dc_config) dc_rail.setup_itersolve('cartesian_stepper_alloc', dc_axis.encode()) for s in dc_rail.get_steppers(): toolhead.register_step_generator(s.generate_steps) dc_rail.set_max_jerk(max_halt_velocity, max_accel) self.dual_carriage_rails = [ self.rails[self.dual_carriage_axis], dc_rail ] self.printer.lookup_object('gcode').register_command( 'SET_DUAL_CARRIAGE', self.cmd_SET_DUAL_CARRIAGE, desc=self.cmd_SET_DUAL_CARRIAGE_help)
def __init__(self, toolhead, config): self.toolhead = toolhead self.printer = config.get_printer() self.logger = self.printer.logger.getChild(self.name) self.rails = [ stepper.LookupMultiRail(config.getsection('stepper_' + n)) for n in ['x', 'y', 'z'] ] max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.need_motor_enable = True if toolhead.allow_move_wo_homing is False: self.limits = [(1.0, -1.0)] * 3 else: # Just set min and max values for SW limit self.limits = [rail.get_range() for rail in self.rails] # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.cmove = ffi_main.gc(ffi_lib.move_alloc(), ffi_lib.free) self.move_fill = ffi_lib.move_fill for axis, rail in zip('xyz', self.rails): rail.setup_cartesian_itersolve(axis) # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() self.rails[0].set_max_jerk(max_halt_velocity, max_accel, max_velocity) self.rails[1].set_max_jerk(max_halt_velocity, max_accel, max_velocity) self.rails[2].set_max_jerk(min(max_halt_velocity, self.max_z_velocity), max_accel, self.max_z_velocity) # Check for dual carriage support self.dual_carriage_axis = None self.dual_carriage_rails = [] if config.has_section('dual_carriage'): dc_config = config.getsection('dual_carriage') dc_axis = dc_config.getchoice('axis', {'x': 'x', 'y': 'y'}) self.dual_carriage_axis = {'x': 0, 'y': 1}[dc_axis] dc_rail = stepper.LookupMultiRail(dc_config) dc_rail.setup_cartesian_itersolve(dc_axis) dc_rail.set_max_jerk(max_halt_velocity, max_accel) self.dual_carriage_rails = [ self.rails[self.dual_carriage_axis], dc_rail ] self.printer.lookup_object('gcode').register_command( 'SET_DUAL_CARRIAGE', self.cmd_SET_DUAL_CARRIAGE, desc=self.cmd_SET_DUAL_CARRIAGE_help)
def __init__(self, toolhead, config): # Setup axis steppers stepper_bed = stepper.PrinterStepper(config.getsection('stepper_bed'), units_in_radians=True) rail_arm = stepper.PrinterRail(config.getsection('stepper_arm')) rail_z = stepper.LookupMultiRail(config.getsection('stepper_z')) stepper_bed.setup_itersolve('polar_stepper_alloc', 'a') rail_arm.setup_itersolve('polar_stepper_alloc', 'r') rail_z.setup_itersolve('cartesian_stepper_alloc', 'z') self.rails = [rail_arm, rail_z] self.steppers = [stepper_bed ] + [s for r in self.rails for s in r.get_steppers()] for s in self.get_steppers(): s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) config.get_printer().register_event_handler("stepper_enable:motor_off", self._motor_off) # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.limit_z = (1.0, -1.0) self.limit_xy2 = -1. # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() stepper_bed.set_max_jerk(max_halt_velocity, max_accel) rail_arm.set_max_jerk(max_halt_velocity, max_accel) rail_z.set_max_jerk(max_halt_velocity, max_accel)
def __init__(self, toolhead, config): # Setup axis steppers stepper_bed = stepper.PrinterStepper(config.getsection('stepper_bed')) rail_arm = stepper.PrinterRail(config.getsection('stepper_arm')) rail_z = stepper.LookupMultiRail(config.getsection('stepper_z')) stepper_bed.setup_itersolve('polar_stepper_alloc', 'a') rail_arm.setup_itersolve('polar_stepper_alloc', 'r') rail_z.setup_itersolve('cartesian_stepper_alloc', 'z') self.rails = [rail_arm, rail_z] self.steppers = [stepper_bed ] + [s for r in self.rails for s in r.get_steppers()] # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.need_motor_enable = True self.limit_z = [(1.0, -1.0)] self.limit_xy2 = -1. # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() stepper_bed.set_max_jerk(max_halt_velocity, max_accel) rail_arm.set_max_jerk(max_halt_velocity, max_accel) rail_z.set_max_jerk(max_halt_velocity, max_accel)
def __init__(self, toolhead, config): # Setup axis rails self.rails = [ stepper.PrinterRail(config.getsection('stepper_x')), stepper.PrinterRail(config.getsection('stepper_y')), stepper.LookupMultiRail(config.getsection('stepper_z')) ] self.rails[0].add_to_endstop(self.rails[1].get_endstops()[0][0]) self.rails[1].add_to_endstop(self.rails[0].get_endstops()[0][0]) self.rails[0].setup_itersolve('corexy_stepper_alloc', '+') self.rails[1].setup_itersolve('corexy_stepper_alloc', '-') self.rails[2].setup_itersolve('cartesian_stepper_alloc', 'z') # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.need_motor_enable = True self.limits = [(1.0, -1.0)] * 3 # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() max_xy_halt_velocity = max_halt_velocity * math.sqrt(2.) self.rails[0].set_max_jerk(max_xy_halt_velocity, max_accel) self.rails[1].set_max_jerk(max_xy_halt_velocity, max_accel) self.rails[2].set_max_jerk(min(max_halt_velocity, self.max_z_velocity), self.max_z_accel)
def __init__(self, toolhead, config): # Setup axis rails self.rails = [ stepper.PrinterRail(config.getsection('stepper_x')), stepper.PrinterRail(config.getsection('stepper_y')), stepper.LookupMultiRail(config.getsection('stepper_z')) ] self.rails[0].get_endstops()[0][0].add_stepper( self.rails[1].get_steppers()[0]) self.rails[1].get_endstops()[0][0].add_stepper( self.rails[0].get_steppers()[0]) self.rails[0].setup_itersolve('corexy_stepper_alloc', '+') self.rails[1].setup_itersolve('corexy_stepper_alloc', '-') self.rails[2].setup_itersolve('cartesian_stepper_alloc', 'z') for s in self.get_steppers(): s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) config.get_printer().register_event_handler("stepper_enable:motor_off", self._motor_off) # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat( 'max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat( 'max_z_accel', max_accel, above=0., maxval=max_accel) self.limits = [(1.0, -1.0)] * 3 # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() max_xy_halt_velocity = max_halt_velocity * math.sqrt(2.) max_xy_accel = max_accel * math.sqrt(2.) self.rails[0].set_max_jerk(max_xy_halt_velocity, max_xy_accel) self.rails[1].set_max_jerk(max_xy_halt_velocity, max_xy_accel) self.rails[2].set_max_jerk( min(max_halt_velocity, self.max_z_velocity), self.max_z_accel)
def __init__(self, toolhead, config): self.rails = [ stepper.PrinterRail(config.getsection('stepper_x')), stepper.PrinterRail(config.getsection('stepper_y')), stepper.LookupMultiRail(config.getsection('stepper_z')) ] self.rails[0].add_to_endstop(self.rails[1].get_endstops()[0][0]) self.rails[1].add_to_endstop(self.rails[0].get_endstops()[0][0]) max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.need_motor_enable = True self.limits = [(1.0, -1.0)] * 3 # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.cmove = ffi_main.gc(ffi_lib.move_alloc(), ffi_lib.free) self.move_fill = ffi_lib.move_fill self.rails[0].setup_itersolve( ffi_main.gc(ffi_lib.corexy_stepper_alloc('+'), ffi_lib.free)) self.rails[1].setup_itersolve( ffi_main.gc(ffi_lib.corexy_stepper_alloc('-'), ffi_lib.free)) self.rails[2].setup_cartesian_itersolve('z') # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() max_xy_halt_velocity = max_halt_velocity * math.sqrt(2.) self.rails[0].set_max_jerk(max_xy_halt_velocity, max_accel) self.rails[1].set_max_jerk(max_xy_halt_velocity, max_accel) self.rails[2].set_max_jerk(min(max_halt_velocity, self.max_z_velocity), self.max_z_accel)
def __init__(self, toolhead, config): self.printer = config.get_printer() printer_config = config.getsection('printer') # itersolve parameters self.rails = [ stepper.PrinterRail(config.getsection('stepper_x')), stepper.LookupMultiRail(config.getsection('stepper_y')), stepper.LookupMultiRail(config.getsection('stepper_z'))] self.rails[1].get_endstops()[0][0].add_stepper( self.rails[0].get_steppers()[0]) self.rails[0].setup_itersolve('corexy_stepper_alloc', b'-') self.rails[1].setup_itersolve('cartesian_stepper_alloc', b'y') self.rails[2].setup_itersolve('cartesian_stepper_alloc', b'z') ranges = [r.get_range() for r in self.rails] self.axes_min = toolhead.Coord(*[r[0] for r in ranges], e=0.) self.axes_max = toolhead.Coord(*[r[1] for r in ranges], e=0.) self.dc_module = None if config.has_section('dual_carriage'): dc_config = config.getsection('dual_carriage') # dummy for cartesian config users dc_config.getchoice('axis', {'x': 'x'}, default='x') # setup second dual carriage rail self.rails.append(stepper.PrinterRail(dc_config)) self.rails[1].get_endstops()[0][0].add_stepper( self.rails[3].get_steppers()[0]) self.rails[3].setup_itersolve('cartesian_stepper_alloc', b'y') dc_rail_0 = idex_modes.DualCarriagesRail( self.printer, self.rails[0], axis=0, active=True, stepper_alloc_active=('corexy_stepper_alloc', b'-'), stepper_alloc_inactive=('cartesian_reverse_stepper_alloc',b'y')) dc_rail_1 = idex_modes.DualCarriagesRail( self.printer, self.rails[3], axis=0, active=False, stepper_alloc_active=('corexy_stepper_alloc', b'+'), stepper_alloc_inactive=('cartesian_stepper_alloc', b'y')) self.dc_module = idex_modes.DualCarriages(self.printer, dc_rail_0, dc_rail_1, axis=0) for s in self.get_steppers(): s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) self.printer.register_event_handler("stepper_enable:motor_off", self._motor_off) # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat( 'max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat( 'max_z_accel', max_accel, above=0., maxval=max_accel) self.limits = [(1.0, -1.0)] * 3
def __init__(self, toolhead, config): self.printer = config.get_printer() # Setup axis rails self.rails = [ stepper.LookupMultiRail(config.getsection('stepper_' + n)) for n in ['x', 'y', 'z'] ] for rail, axis in zip(self.rails, 'xyz'): rail.setup_itersolve('cartesian_stepper_alloc', axis) # Setup boundary checks max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat('max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat('max_z_accel', max_accel, above=0., maxval=max_accel) self.need_motor_enable = True self.limits = [(1.0, -1.0)] * 3 # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() self.rails[0].set_max_jerk(max_halt_velocity, max_accel) self.rails[1].set_max_jerk(max_halt_velocity, max_accel) self.rails[2].set_max_jerk(min(max_halt_velocity, self.max_z_velocity), max_accel) # Check for dual carriage support self.dual_carriage_axis = None self.dual_carriage_rails = [] if config.has_section('dual_carriage'): dc_config = config.getsection('dual_carriage') dc_axis = dc_config.getchoice('axis', {'x': 'x', 'y': 'y'}) self.dual_carriage_axis = {'x': 0, 'y': 1}[dc_axis] dc_rail = stepper.LookupMultiRail(dc_config) dc_rail.setup_itersolve('cartesian_stepper_alloc', dc_axis) dc_rail.set_max_jerk(max_halt_velocity, max_accel) self.dual_carriage_rails = [ self.rails[self.dual_carriage_axis], dc_rail ] self.printer.lookup_object('gcode').register_command( 'SET_DUAL_CARRIAGE', self.cmd_SET_DUAL_CARRIAGE, desc=self.cmd_SET_DUAL_CARRIAGE_help)
def __init__(self, toolhead, config, coresign=1.): self.toolhead = toolhead self.logger = config.get_printer().logger.getChild(self.name) self.rails = [ stepper.PrinterRail(config.getsection('stepper_x')), stepper.PrinterRail(config.getsection('stepper_y')), stepper.LookupMultiRail(config.getsection('stepper_z')) ] self.combined_endstops = config.getboolean('combined_endstops', False) if self.combined_endstops: # endstops are always triggered both # => no cross connection necessary pass else: # x/y axes also need to stop on each others endstops # => cross connect endstop and stepper x->y and y->x self.rails[0].add_to_endstop(self.rails[1].get_endstops()[0][0]) self.rails[1].add_to_endstop(self.rails[0].get_endstops()[0][0]) max_velocity, max_accel = toolhead.get_max_velocity() self.max_z_velocity = config.getfloat( 'max_z_velocity', max_velocity, above=0., maxval=max_velocity) self.max_z_accel = config.getfloat( 'max_z_accel', max_accel, above=0., maxval=max_accel) self.need_motor_enable = True if toolhead.allow_move_wo_homing is False: self.limits = [(1.0, -1.0)] * 3 else: # Just set min and max values for SW limit self.limits = [ rail.get_range() for rail in self.rails ] # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.cmove = ffi_main.gc(ffi_lib.move_alloc(), ffi_lib.free) self.move_fill = ffi_lib.move_fill self.rails[0].setup_itersolve(ffi_main.gc( ffi_lib.corexy_stepper_alloc('+'), ffi_lib.free)) self.rails[1].setup_itersolve(ffi_main.gc( ffi_lib.corexy_stepper_alloc('-'), ffi_lib.free)) self.rails[2].setup_cartesian_itersolve('z') # Setup stepper max halt velocity max_halt_velocity = toolhead.get_max_axis_halt() max_xy_halt_velocity = max_halt_velocity * math.sqrt(2.) self.rails[0].set_max_jerk(max_xy_halt_velocity, max_accel, max_velocity) self.rails[1].set_max_jerk(max_xy_halt_velocity, max_accel, max_velocity) self.rails[2].set_max_jerk( min(max_halt_velocity, self.max_z_velocity), self.max_z_accel, self.max_z_velocity) self.coresign = coresign self.experimental = config.getboolean( 'experimental', False)