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, config): self.printer = config.get_printer() self.name = config.get_name() shared_heater = config.get('shared_heater', None) pheater = self.printer.lookup_object('heater') if shared_heater is None: self.heater = pheater.setup_heater(config) else: self.heater = pheater.lookup_heater(shared_heater) self.stepper = stepper.PrinterStepper(config) self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat('filament_diameter', minval=self.nozzle_diameter) self.filament_area = math.pi * (filament_diameter * .5)**2 max_cross_section = config.getfloat('max_extrude_cross_section', 4. * self.nozzle_diameter**2, above=0.) self.max_extrude_ratio = max_cross_section / self.filament_area logging.info("Extruder max_extrude_ratio=%.6f", self.max_extrude_ratio) toolhead = self.printer.lookup_object('toolhead') max_velocity, max_accel = toolhead.get_max_velocity() self.max_e_velocity = config.getfloat('max_extrude_only_velocity', max_velocity * self.max_extrude_ratio, above=0.) self.max_e_accel = config.getfloat('max_extrude_only_accel', max_accel * self.max_extrude_ratio, above=0.) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.max_e_dist = config.getfloat('max_extrude_only_distance', 50., minval=0.) self.activate_gcode = config.get('activate_gcode', '') self.deactivate_gcode = config.get('deactivate_gcode', '') self.pressure_advance = config.getfloat('pressure_advance', 0., minval=0.) self.pressure_advance_lookahead_time = config.getfloat( 'pressure_advance_lookahead_time', 0.010, minval=0.) self.need_motor_enable = True self.extrude_pos = 0. # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.cmove = ffi_main.gc(ffi_lib.move_alloc(), ffi_lib.free) self.extruder_move_fill = ffi_lib.extruder_move_fill sk = ffi_main.gc(ffi_lib.extruder_stepper_alloc(), ffi_lib.free) self.stepper.setup_itersolve(sk) # Setup SET_PRESSURE_ADVANCE command gcode = self.printer.lookup_object('gcode') if self.name in ('extruder', 'extruder0'): gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", None, self.cmd_default_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", self.name, self.cmd_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help)
def __init__(self, printer, config): self.heater = heater.PrinterHeater(printer, config) self.stepper = stepper.PrinterStepper(printer, config) self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat('filament_diameter', minval=self.nozzle_diameter) self.filament_area = math.pi * (filament_diameter * .5)**2 max_cross_section = config.getfloat('max_extrude_cross_section', 4. * self.nozzle_diameter**2, above=0.) self.max_extrude_ratio = max_cross_section / self.filament_area toolhead = printer.objects['toolhead'] max_velocity, max_accel = toolhead.get_max_velocity() self.max_e_velocity = config.getfloat('max_extrude_only_velocity', max_velocity * self.max_extrude_ratio, above=0.) self.max_e_accel = config.getfloat('max_extrude_only_accel', max_accel * self.max_extrude_ratio, above=0.) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.max_e_dist = config.getfloat('max_extrude_only_distance', 50., minval=0.) self.activate_gcode = config.get('activate_gcode', '') self.deactivate_gcode = config.get('deactivate_gcode', '') self.pressure_advance = config.getfloat('pressure_advance', 0., minval=0.) self.pressure_advance_lookahead_time = 0. if self.pressure_advance: self.pressure_advance_lookahead_time = config.getfloat( 'pressure_advance_lookahead_time', 0.010, minval=0.) self.need_motor_enable = True self.extrude_pos = 0.
def __init__(self, printer, config): self.config = config self.heater = heater.PrinterHeater(printer, config) self.stepper = stepper.PrinterStepper(printer, config, 'extruder') self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat('filament_diameter', minval=self.nozzle_diameter) filament_area = math.pi * (filament_diameter * .5)**2 max_cross_section = config.getfloat('max_extrude_cross_section', 4. * self.nozzle_diameter**2, above=0.) self.max_extrude_ratio = max_cross_section / filament_area self.max_e_dist = config.getfloat('max_extrude_only_distance', 50., minval=0.) self.max_e_velocity = self.max_e_accel = None self.activate_gcode = config.get('activate_gcode', '') self.deactivate_gcode = config.get('deactivate_gcode', '') self.pressure_advance = config.getfloat('pressure_advance', 0., minval=0.) self.pressure_advance_lookahead_time = 0. if self.pressure_advance: self.pressure_advance_lookahead_time = config.getfloat( 'pressure_advance_lookahead_time', 0.010, minval=0.) self.need_motor_enable = True self.extrude_pos = 0.
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 steppers at each anchor self.steppers = [] self.anchors = [] for i in range(26): name = 'stepper_' + chr(ord('a') + i) if i >= 3 and not config.has_section(name): break stepper_config = config.getsection(name) s = stepper.PrinterStepper(stepper_config) self.steppers.append(s) a = tuple([stepper_config.getfloat('anchor_' + n) for n in 'xyz']) self.anchors.append(a) s.setup_itersolve('winch_stepper_alloc', *a) s.set_trapq(toolhead.get_trapq()) toolhead.register_step_generator(s.generate_steps) # Setup stepper max halt velocity max_velocity, max_accel = toolhead.get_max_velocity() max_halt_velocity = toolhead.get_max_axis_halt() for s in self.steppers: s.set_max_jerk(max_halt_velocity, max_accel) # Setup boundary checks acoords = list(zip(*self.anchors)) self.axes_min = toolhead.Coord(*[min(a) for a in acoords], e=0.) self.axes_max = toolhead.Coord(*[max(a) for a in acoords], e=0.) self.set_position([0., 0., 0.], ())
def __init__(self, config): self.printer = config.get_printer() if config.get('endstop_pin', None) is not None: self.can_home = True self.rail = stepper.PrinterRail(config, need_position_minmax=False, default_position_endstop=0.) self.steppers = self.rail.get_steppers() else: self.can_home = False self.rail = stepper.PrinterStepper(config) self.steppers = [self.rail] self.velocity = config.getfloat('velocity', 5., above=0.) self.accel = config.getfloat('accel', 0., minval=0.) self.next_cmd_time = 0. # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.trapq = ffi_main.gc(ffi_lib.trapq_alloc(), ffi_lib.trapq_free) self.trapq_append = ffi_lib.trapq_append self.trapq_free_moves = ffi_lib.trapq_free_moves self.rail.setup_itersolve('cartesian_stepper_alloc', 'x') self.rail.set_trapq(self.trapq) self.rail.set_max_jerk(9999999.9, 9999999.9) # Register commands stepper_name = config.get_name().split()[1] self.gcode = self.printer.lookup_object('gcode') self.gcode.register_mux_command('MANUAL_STEPPER', "STEPPER", stepper_name, self.cmd_MANUAL_STEPPER, desc=self.cmd_MANUAL_STEPPER_help)
def __init__(self, config): self.printer = config.get_printer() self.name = config.get_name().split()[-1] self.pressure_advance = self.pressure_advance_smooth_time = 0. # Setup stepper self.stepper = stepper.PrinterStepper(config) ffi_main, ffi_lib = chelper.get_ffi() self.sk_extruder = ffi_main.gc(ffi_lib.extruder_stepper_alloc(), ffi_lib.free) self.stepper.set_stepper_kinematics(self.sk_extruder) # Register commands self.printer.register_event_handler("klippy:connect", self._handle_connect) gcode = self.printer.lookup_object('gcode') if self.name == 'extruder': gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", None, self.cmd_default_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", self.name, self.cmd_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) gcode.register_mux_command("SET_EXTRUDER_STEP_DISTANCE", "EXTRUDER", self.name, self.cmd_SET_E_STEP_DISTANCE, desc=self.cmd_SET_E_STEP_DISTANCE_help) gcode.register_mux_command("SYNC_STEPPER_TO_EXTRUDER", "STEPPER", self.name, self.cmd_SYNC_STEPPER_TO_EXTRUDER, desc=self.cmd_SYNC_STEPPER_TO_EXTRUDER_help)
def __init__(self, config, extruder_num): self.printer = config.get_printer() self.name = config.get_name() shared_heater = config.get('shared_heater', None) pheater = self.printer.lookup_object('heater') gcode_id = 'T%d' % (extruder_num,) if shared_heater is None: self.heater = pheater.setup_heater(config, gcode_id) else: self.heater = pheater.lookup_heater(shared_heater) self.stepper = stepper.PrinterStepper(config) self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat( 'filament_diameter', minval=self.nozzle_diameter) self.filament_area = math.pi * (filament_diameter * .5)**2 def_max_cross_section = 4. * self.nozzle_diameter**2 def_max_extrude_ratio = def_max_cross_section / self.filament_area max_cross_section = config.getfloat( 'max_extrude_cross_section', def_max_cross_section, above=0.) self.max_extrude_ratio = max_cross_section / self.filament_area logging.info("Extruder max_extrude_ratio=%.6f", self.max_extrude_ratio) toolhead = self.printer.lookup_object('toolhead') max_velocity, max_accel = toolhead.get_max_velocity() self.max_e_velocity = config.getfloat( 'max_extrude_only_velocity', max_velocity * def_max_extrude_ratio , above=0.) self.max_e_accel = config.getfloat( 'max_extrude_only_accel', max_accel * def_max_extrude_ratio , above=0.) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.max_e_dist = config.getfloat( 'max_extrude_only_distance', 50., minval=0.) gcode_macro = self.printer.try_load_module(config, 'gcode_macro') self.activate_gcode = gcode_macro.load_template( config, 'activate_gcode', '') self.deactivate_gcode = gcode_macro.load_template( config, 'deactivate_gcode', '') self.pressure_advance = config.getfloat( 'pressure_advance', 0., minval=0.) self.pressure_advance_lookahead_time = config.getfloat( 'pressure_advance_lookahead_time', 0.010, minval=0.) self.extrude_pos = 0. # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.extruder_add_move = ffi_lib.extruder_add_move self.trapq = ffi_main.gc(ffi_lib.trapq_alloc(), ffi_lib.trapq_free) self.trapq_free_moves = ffi_lib.trapq_free_moves self.stepper.setup_itersolve('extruder_stepper_alloc') self.stepper.set_trapq(self.trapq) toolhead.register_step_generator(self.stepper.generate_steps) toolhead.register_step_generator(self._free_moves) # Setup SET_PRESSURE_ADVANCE command gcode = self.printer.lookup_object('gcode') if self.name == 'extruder': gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", None, self.cmd_default_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", self.name, self.cmd_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help)
def __init__(self, config): self.printer = config.get_printer() if config.get('endstop_pin', None) is not None: self.can_home = True self.stepper = stepper.PrinterRail(config, need_position_minmax=False, default_position_endstop=0.) else: self.can_home = False self.stepper = stepper.PrinterStepper(config) self.next_cmd_time = 0. # 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.stepper.setup_itersolve('cartesian_stepper_alloc', 'x') self.stepper.set_max_jerk(9999999.9, 9999999.9) # Register commands stepper_name = config.get_name().split()[1] self.gcode = self.printer.lookup_object('gcode') self.gcode.register_mux_command('MANUAL_STEPPER', "STEPPER", stepper_name, self.cmd_MANUAL_STEPPER, desc=self.cmd_MANUAL_STEPPER_help) self.printer.register_event_handler("toolhead:motor_off", self.handle_motor_off)
def __init__(self, config): self.printer = printer = config.get_printer() self.name = config.get_name() self.logger = printer.logger.getChild(self.name) self.config = config self.index = int(self.name[8:]) self.heater = printer.lookup_object(config.get('heater')) self.heater.set_min_extrude_temp(config.getfloat('min_extrude_temp', 170.0)) self.stepper = stepper.PrinterStepper(config, self.logger) self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat( 'filament_diameter', minval=self.nozzle_diameter) self.filament_area = math.pi * (filament_diameter * .5)**2 max_cross_section = config.getfloat( 'max_extrude_cross_section', 4. * self.nozzle_diameter**2 , above=0.) self.max_extrude_ratio = max_cross_section / self.filament_area self.logger.info("Extruder max_extrude_ratio=%.6f", self.max_extrude_ratio) self.toolhead = toolhead = printer.lookup_object('toolhead') max_velocity, max_accel = toolhead.get_max_velocity() self.max_e_velocity = config.getfloat( 'max_extrude_only_velocity', max_velocity * self.max_extrude_ratio , above=0.) self.max_e_accel = config.getfloat( 'max_extrude_only_accel', max_accel * self.max_extrude_ratio , above=0.) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.max_e_dist = config.getfloat( 'max_extrude_only_distance', 50., minval=0.) self.activate_gcode = config.get('activate_gcode', '') self.deactivate_gcode = config.get('deactivate_gcode', '') self.pressure_advance = config.getfloat( 'pressure_advance', 0., minval=0.) self.pressure_advance_lookahead_time = config.getfloat( 'pressure_advance_lookahead_time', 0.010, minval=0.) self.need_motor_enable = True self.extrude_pos = 0. self.raw_filament = 0. self.extrude_factor = config.getfloat( 'extrusion_factor', 1.0, minval=0.1) # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.cmove = ffi_main.gc(ffi_lib.move_alloc(), ffi_lib.free) self.extruder_move_fill = ffi_lib.extruder_move_fill sk = ffi_main.gc(ffi_lib.extruder_stepper_alloc(), ffi_lib.free) self.stepper.setup_itersolve(sk) # Setup SET_PRESSURE_ADVANCE command gcode = self.printer.lookup_object('gcode') if self.name in ('extruder', 'extruder0'): gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", None, self.cmd_default_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) for key in [self.name.upper(), str(self.index)]: gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", key, self.cmd_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) self.logger.debug("index={}, heater={}". format(self.index, self.heater.name))
def __init__(self, config): self.printer = config.get_printer() self.extruder_name = config.get('extruder', 'extruder') self.stepper = stepper.PrinterStepper(config) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.stepper.setup_itersolve('extruder_stepper_alloc') self.printer.register_event_handler("klippy:connect", self.handle_connect)
def __init__(self, printer, config): self.steppers = [ stepper.PrinterStepper(printer, config.getsection('stepper_' + n), n) for n in ['x', 'y', 'z'] ] self.max_z_velocity = config.getfloat('max_z_velocity', 9999999.9) self.max_z_accel = config.getfloat('max_z_accel', 9999999.9) self.need_motor_enable = True self.limits = [(1.0, -1.0)] * 3
def __init__(self, config): self.printer = config.get_printer() stepper_name = config.get_name().split()[1] self.extruder_name = config.get('extruder', 'extruder') self.stepper = stepper.PrinterStepper(config) self.stepper.setup_itersolve('extruder_stepper_alloc') self.printer.register_event_handler("klippy:connect", self.handle_connect) gcode = self.printer.lookup_object('gcode') gcode.register_mux_command("SYNC_STEPPER_TO_EXTRUDER", "STEPPER", stepper_name, self.cmd_SYNC_STEPPER_TO_EXTRUDER, desc=self.cmd_SYNC_STEPPER_TO_EXTRUDER_help)
def __init__(self, printer, config): self.config = config self.heater = heater.PrinterHeater(printer, config) self.stepper = stepper.PrinterStepper(printer, config, 'extruder') nozzle_diameter = config.getfloat('nozzle_diameter') filament_diameter = config.getfloat('filament_diameter') filament_area = math.pi * (filament_diameter * .5)**2 max_cross_section = config.getfloat( 'max_extrude_cross_section', 4. * nozzle_diameter**2) self.max_extrude_ratio = max_cross_section / filament_area self.max_e_dist = config.getfloat('max_extrude_only_distance', 50.) self.max_e_velocity = self.max_e_accel = None self.pressure_advance = config.getfloat('pressure_advance', 0.) self.need_motor_enable = True self.extrude_pos = 0.
def __init__(self, printer, config): self.config = config self.steppers = [ stepper.PrinterStepper(printer, config.getsection('stepper_' + n), n) for n in ['a', 'b', 'c'] ] self.need_motor_enable = self.need_home = True self.max_velocity = self.max_z_velocity = self.max_accel = 0. radius = config.getfloat('delta_radius', above=0.) arm_length = config.getfloat('delta_arm_length', above=radius) self.arm_length2 = arm_length**2 self.limit_xy2 = -1. tower_height_at_zeros = math.sqrt(self.arm_length2 - radius**2) self.max_z = min([s.position_endstop for s in self.steppers]) self.limit_z = self.max_z - (arm_length - tower_height_at_zeros) logging.info( "Delta max build height %.2fmm (radius tapered above %.2fmm)" % (self.max_z, self.limit_z)) # Determine tower locations in cartesian space angles = [ config.getsection('stepper_a').getfloat('angle', 210.), config.getsection('stepper_b').getfloat('angle', 330.), config.getsection('stepper_c').getfloat('angle', 90.) ] self.towers = [(math.cos(math.radians(angle)) * radius, math.sin(math.radians(angle)) * radius) for angle in angles] # Find the point where an XY move could result in excessive # tower movement half_min_step_dist = min([s.step_dist for s in self.steppers]) * .5 def ratio_to_dist(ratio): return ( ratio * math.sqrt(self.arm_length2 / (ratio**2 + 1.) - half_min_step_dist**2) + half_min_step_dist) self.slow_xy2 = (ratio_to_dist(SLOW_RATIO) - radius)**2 self.very_slow_xy2 = (ratio_to_dist(2. * SLOW_RATIO) - radius)**2 self.max_xy2 = min(radius, arm_length - radius, ratio_to_dist(4. * SLOW_RATIO) - radius)**2 logging.info( "Delta max build radius %.2fmm (moves slowed past %.2fmm and %.2fmm)" % (math.sqrt(self.max_xy2), math.sqrt( self.slow_xy2), math.sqrt(self.very_slow_xy2))) self.set_position([0., 0., 0.])
def __init__(self, printer, config): self.printer = printer self.name = config.get_name() shared_heater = config.get('shared_heater', None) pheater = printer.lookup_object('heater') if shared_heater is None: self.heater = pheater.setup_heater(config) else: self.heater = pheater.lookup_heater(shared_heater) self.stepper = stepper.PrinterStepper(printer, config) self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat('filament_diameter', minval=self.nozzle_diameter) self.filament_area = math.pi * (filament_diameter * .5)**2 max_cross_section = config.getfloat('max_extrude_cross_section', 4. * self.nozzle_diameter**2, above=0.) self.max_extrude_ratio = max_cross_section / self.filament_area toolhead = printer.lookup_object('toolhead') max_velocity, max_accel = toolhead.get_max_velocity() self.max_e_velocity = config.getfloat('max_extrude_only_velocity', max_velocity * self.max_extrude_ratio, above=0.) self.max_e_accel = config.getfloat('max_extrude_only_accel', max_accel * self.max_extrude_ratio, above=0.) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.max_e_dist = config.getfloat('max_extrude_only_distance', 50., minval=0.) self.activate_gcode = config.get('activate_gcode', '') self.deactivate_gcode = config.get('deactivate_gcode', '') self.pressure_advance = config.getfloat('pressure_advance', 0., minval=0.) self.pressure_advance_lookahead_time = config.getfloat( 'pressure_advance_lookahead_time', 0.010, minval=0.) self.need_motor_enable = True self.extrude_pos = 0. self.printer.lookup_object('gcode').register_command( "SET_PRESSURE_ADVANCE", self.cmd_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help)
def __init__(self, printer, config): self.steppers = [ stepper.PrinterStepper(printer, config.getsection('stepper_' + n), n) for n in ['a', 'b', 'c'] ] self.need_motor_enable = True self.max_z_velocity = config.getfloat('max_z_velocity', 9999999.9) radius = config.getfloat('delta_radius') arm_length = config.getfloat('delta_arm_length') self.arm_length2 = arm_length**2 self.max_xy2 = min(radius, arm_length - radius)**2 self.limit_xy2 = -1. tower_height_at_zeros = math.sqrt(self.arm_length2 - radius**2) self.max_z = self.steppers[0].position_max self.limit_z = self.max_z - (arm_length - tower_height_at_zeros) sin = lambda angle: math.sin(math.radians(angle)) cos = lambda angle: math.cos(math.radians(angle)) self.towers = [(cos(210.) * radius, sin(210.) * radius), (cos(330.) * radius, sin(330.) * radius), (cos(90.) * radius, sin(90.) * radius)]
def __init__(self, toolhead, config): # Setup steppers at each anchor self.steppers = [] self.anchors = [] for i in range(26): name = 'stepper_' + chr(ord('a') + i) if i >= 3 and not config.has_section(name): break stepper_config = config.getsection(name) s = stepper.PrinterStepper(stepper_config) self.steppers.append(s) a = tuple([stepper_config.getfloat('anchor_' + n) for n in 'xyz']) self.anchors.append(a) s.setup_itersolve('winch_stepper_alloc', *a) # Setup stepper max halt velocity max_velocity, max_accel = toolhead.get_max_velocity() max_halt_velocity = toolhead.get_max_axis_halt() for s in self.steppers: s.set_max_jerk(max_halt_velocity, max_accel) # Setup boundary checks self.need_motor_enable = True self.set_position([0., 0., 0.], ())
def __init__(self, config, extruder_num): self.printer = config.get_printer() self.name = config.get_name() shared_heater = config.get('shared_heater', None) pheater = self.printer.lookup_object('heater') gcode_id = 'T%d' % (extruder_num, ) if shared_heater is None: self.heater = pheater.setup_heater(config, gcode_id) else: self.heater = pheater.lookup_heater(shared_heater) self.stepper = stepper.PrinterStepper(config) self.nozzle_diameter = config.getfloat('nozzle_diameter', above=0.) filament_diameter = config.getfloat('filament_diameter', minval=self.nozzle_diameter) self.filament_area = math.pi * (filament_diameter * .5)**2 def_max_cross_section = 4. * self.nozzle_diameter**2 def_max_extrude_ratio = def_max_cross_section / self.filament_area max_cross_section = config.getfloat('max_extrude_cross_section', def_max_cross_section, above=0.) self.max_extrude_ratio = max_cross_section / self.filament_area logging.info("Extruder max_extrude_ratio=%.6f", self.max_extrude_ratio) toolhead = self.printer.lookup_object('toolhead') max_velocity, max_accel = toolhead.get_max_velocity() self.max_e_velocity = config.getfloat('max_extrude_only_velocity', max_velocity * def_max_extrude_ratio, above=0.) self.max_e_accel = config.getfloat('max_extrude_only_accel', max_accel * def_max_extrude_ratio, above=0.) self.stepper.set_max_jerk(9999999.9, 9999999.9) self.max_e_dist = config.getfloat('max_extrude_only_distance', 50., minval=0.) self.instant_corner_v = config.getfloat( 'instantaneous_corner_velocity', 1., minval=0.) self.pressure_advance = self.pressure_advance_smooth_time = 0. pressure_advance = config.getfloat('pressure_advance', 0., minval=0.) smooth_time = config.getfloat('pressure_advance_smooth_time', 0.040, above=0., maxval=.200) # Setup iterative solver ffi_main, ffi_lib = chelper.get_ffi() self.trapq = ffi_main.gc(ffi_lib.trapq_alloc(), ffi_lib.trapq_free) self.trapq_append = ffi_lib.trapq_append self.trapq_free_moves = ffi_lib.trapq_free_moves self.sk_extruder = ffi_main.gc(ffi_lib.extruder_stepper_alloc(), ffi_lib.free) self.stepper.set_stepper_kinematics(self.sk_extruder) self.stepper.set_trapq(self.trapq) toolhead.register_step_generator(self.stepper.generate_steps) self.extruder_set_smooth_time = ffi_lib.extruder_set_smooth_time self._set_pressure_advance(pressure_advance, smooth_time) # Register commands gcode = self.printer.lookup_object('gcode') if self.name == 'extruder': toolhead.set_extruder(self, 0.) gcode.register_command("M104", self.cmd_M104) gcode.register_command("M109", self.cmd_M109) gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", None, self.cmd_default_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", self.name, self.cmd_SET_PRESSURE_ADVANCE, desc=self.cmd_SET_PRESSURE_ADVANCE_help) gcode.register_mux_command("ACTIVATE_EXTRUDER", "EXTRUDER", self.name, self.cmd_ACTIVATE_EXTRUDER, desc=self.cmd_ACTIVATE_EXTRUDER_help)