def exit(self): self.running = False self.printer.path_planner.force_exit() for name, stepper in self.printer.steppers.iteritems(): stepper.set_disabled() # Commit changes for the Steppers Stepper.commit()
def exit(self): self.running = False self.printer.path_planner.force_exit() for name, stepper in self.printer.steppers.iteritems(): stepper.set_disabled() # Commit changes for the Steppers Stepper.commit()
def execute(self, g): self.printer.path_planner.wait_until_done() for i in range(g.num_tokens()): axis = g.token_letter(i) stepper = self.printer.steppers[axis] stepper.set_microstepping(int(g.token_value(i))) self.printer.path_planner.update_steps_pr_meter() Stepper.commit()
def execute(self, g): self.printer.path_planner.wait_until_done() for i in range(g.num_tokens()): axis = g.token_letter(i) stepper = self.printer.steppers[axis] stepper.set_microstepping(int(g.token_value(i))) self.printer.path_planner.update_steps_pr_meter() Stepper.commit()
def execute(self, g): for i in range(g.num_tokens()): # Run through all tokens axis = g.token_letter(i) # Get the axis, X, Y, Z or E value = float(g.token_value(i)) if value > 0: self.printer.steppers[axis].set_steps_pr_mm(value) else: logging.error('Steps per milimeter must be grater than zero.') Stepper.commit()
def execute(self, g): for i in range(g.num_tokens()): # Run through all tokens axis = g.token_letter(i) # Get the axis, X, Y, Z or E value = float(g.token_value(i)) if value > 0: self.printer.steppers[axis].set_steps_pr_mm(value) else: logging.error('Steps per milimeter must be grater than zero.') Stepper.commit()
def execute(self, g): self.printer.path_planner.wait_until_done() for i in range(g.num_tokens()): axis = g.token_letter(i) logging.debug("M350 on "+axis) stepper = self.printer.steppers[axis] stepper.set_microstepping(int(g.token_value(i))) Stepper.commit() logging.debug("acceleration tables recreated")
def execute(self, g): self.printer.path_planner.wait_until_done() for i in range(g.num_tokens()): axis = g.token_letter(i) logging.debug("M350 on " + axis) stepper = self.printer.steppers[axis] stepper.set_microstepping(int(g.token_value(i))) Stepper.commit() self.printer.path_planner.make_acceleration_tables() logging.debug("acceleration tables recreated")
def execute(self, g): self.printer.path_planner.wait_until_done() if g.num_tokens() == 0: g.set_tokens(["X", "Y", "Z", "E", "H"]) # If no token is present, do this for all # All steppers for i in range(g.num_tokens()): # Run through all tokens axis = g.token_letter(i) # Get the axis, X, Y, Z or E self.printer.steppers[axis].set_disabled() Stepper.commit()
def execute(self, g): self.printer.path_planner.wait_until_done() self.printer.steppers["E"].set_disabled() self.printer.steppers["H"].set_disabled() Stepper.commit() self.printer.plugins[__PLUGIN_NAME__].head_servo.set_angle(self.printer.plugins[__PLUGIN_NAME__].t1_angle, asynchronous=False) self.printer.path_planner.set_extruder(1) self.printer.current_tool = "H" self.printer.steppers["E"].set_enabled() self.printer.steppers["H"].set_enabled() Stepper.commit()
def execute(self, g): self.printer.path_planner.wait_until_done() if g.num_tokens() == 0: # If no token is present, do this for all steppers g.set_tokens(["X", "Y", "Z", "E", "H"]) for i in range(g.num_tokens()): # Run through all tokens axis = g.token_letter(i) # Get the axis, X, Y, Z or E self.printer.steppers[axis].set_disabled() Stepper.commit()
def execute(self, g): self.printer.path_planner.wait_until_done() self.printer.steppers["E"].set_disabled() self.printer.steppers["H"].set_disabled() Stepper.commit() self.printer.plugins[__PLUGIN_NAME__].head_servo.set_angle( self.printer.plugins[__PLUGIN_NAME__].t1_angle, asynchronous=False) self.printer.path_planner.set_extruder(1) self.printer.current_tool = "H" self.printer.steppers["E"].set_enabled() self.printer.steppers["H"].set_enabled() Stepper.commit()
def exit(self): logging.info("Redeem starting exit") self.running = False self.printer.path_planner.wait_until_done() self.printer.path_planner.force_exit() # Stops plugins self.printer.plugins.exit() for name, stepper in self.printer.steppers.iteritems(): stepper.set_disabled() Stepper.commit() for name, heater in self.printer.heaters.iteritems(): logging.debug("closing "+name) heater.disable() for name, comm in self.printer.comms.iteritems(): logging.debug("closing "+name) comm.close() self.printer.enable.set_disabled() logging.info("Redeem exited")
def exit(self): logging.info("Redeem starting exit") self.running = False self.printer.path_planner.wait_until_done() self.printer.path_planner.force_exit() # Stops plugins self.printer.plugins.exit() for name, stepper in self.printer.steppers.iteritems(): stepper.set_disabled() Stepper.commit() for name, heater in self.printer.heaters.iteritems(): logging.debug("closing "+name) heater.disable() for name, comm in self.printer.comms.iteritems(): logging.debug("closing "+name) comm.close() self.printer.enable.set_disabled() logging.info("Redeem exited")
def __init__(self): logging.info("Redeem initializing " + version) self.printer = Printer() # Parse the config self.printer.config = CascadingConfigParser( ['/etc/redeem/default.cfg', '/etc/redeem/local.cfg']) # Get the revision from the Config file self.revision = self.printer.config.get('System', 'revision', "A4") logging.info("Replicape revision " + self.revision) # Init the end stops EndStop.callback = self.end_stop_hit EndStop.inputdev = self.printer.config.get("Endstops", "inputdev") if self.revision == "A4": self.printer.end_stops["X1"] = EndStop( "GPIO3_21", 112, "X1", self.printer.config.getboolean("Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop( "GPIO0_30", 113, "X2", self.printer.config.getboolean("Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop( "GPIO1_17", 114, "Y1", self.printer.config.getboolean("Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop( "GPIO1_19", 115, "Y2", self.printer.config.getboolean("Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop( "GPIO0_31", 116, "Z1", self.printer.config.getboolean("Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop( "GPIO0_4", 117, "Z2", self.printer.config.getboolean("Endstops", "invert_Z2")) else: self.printer.end_stops["X1"] = EndStop( "GPIO0_14", 112, "X1", self.printer.config.getboolean("Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop( "GPIO3_21", 113, "X2", self.printer.config.getboolean("Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop( "GPIO2_2", 114, "Y1", self.printer.config.getboolean("Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop( "GPIO0_31", 115, "Y2", self.printer.config.getboolean("Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop( "GPIO0_30", 116, "Z1", self.printer.config.getboolean("Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop( "GPIO0_4", 117, "Z2", self.printer.config.getboolean("Endstops", "invert_Z2")) if self.revision == "A3": Stepper.revision = "A3" Stepper.ENABLED = 6 Stepper.SLEEP = 5 Stepper.RESET = 4 Stepper.DECAY = 0 # Init the 5 Stepper motors (step, dir, fault, DAC channel, name) self.printer.steppers["X"] = Stepper("GPIO0_27", "GPIO1_29", "GPIO2_4", 0, "X", self.printer.end_stops["X1"], 0, 0) self.printer.steppers["Y"] = Stepper("GPIO1_12", "GPIO0_22", "GPIO2_5", 1, "Y", self.printer.end_stops["Y1"], 1, 1) self.printer.steppers["Z"] = Stepper("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z", self.printer.end_stops["Z1"], 2, 2) self.printer.steppers["E"] = Stepper("GPIO1_28", "GPIO1_15", "GPIO2_1", 3, "Ext1", None, 3, 3) self.printer.steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "Ext2", None, 4, 4) # Enable the steppers and set the current, steps pr mm and microstepping for name, stepper in self.printer.steppers.iteritems(): stepper.set_current_value( self.printer.config.getfloat('Steppers', 'current_' + name)) if self.printer.config.getboolean('Steppers', 'enabled_' + name): stepper.set_enabled() else: stepper.set_disabled() stepper.set_steps_pr_mm( self.printer.config.getfloat('Steppers', 'steps_pr_mm_' + name)) stepper.set_microstepping( self.printer.config.getint('Steppers', 'microstepping_' + name)) stepper.direction = self.printer.config.getint( 'Steppers', 'direction_' + name) stepper.set_decay( self.printer.config.getboolean("Steppers", "slow_decay_" + name)) # Commit changes for the Steppers Stepper.commit() # Find the path of the thermistors path = "/sys/bus/iio/devices/iio:device0/in_voltage" # init the 3 thermistors therm_ext1 = Thermistor( path + "4_raw", "MOSFET Ext 1", self.printer.config.get('Heaters', "ext1_temp_chart")) therm_hbp = Thermistor( path + "6_raw", "MOSFET HBP", self.printer.config.get('Heaters', "hbp_temp_chart")) therm_ext2 = Thermistor( path + "5_raw", "MOSFET Ext 2", self.printer.config.get('Heaters', "ext2_temp_chart")) path = self.printer.config.get('Cold-ends', 'path', 0) if os.path.exists(path): self.printer.cold_ends.append(ColdEnd(path, "Cold End 1")) logging.info("Found Cold end on " + path) else: logging.info("No cold end present in path: " + path) # Init the 3 heaters. Argument is channel number if self.revision == "A3": mosfet_ext1 = Mosfet(3) mosfet_ext2 = Mosfet(4) mosfet_hbp = Mosfet(5) else: mosfet_ext1 = Mosfet(5) mosfet_ext2 = Mosfet(3) mosfet_hbp = Mosfet(4) # Make extruder 1 self.printer.heaters['E'] = Extruder( self.printer.steppers["E"], therm_ext1, mosfet_ext1, "Ext1", self.printer.config.getboolean('Heaters', 'ext1_onoff_control')) self.printer.heaters['E'].set_p_value( self.printer.config.getfloat('Heaters', "ext1_pid_p")) self.printer.heaters['E'].set_d_value( self.printer.config.getfloat('Heaters', "ext1_pid_d")) self.printer.heaters['E'].set_i_value( self.printer.config.getfloat('Heaters', "ext1_pid_i")) self.printer.heaters['E'].ok_range = self.printer.config.getfloat( 'Heaters', "ext1_ok_range") # Make Heated Build platform self.printer.heaters['HBP'] = HBP( therm_hbp, mosfet_hbp, self.printer.config.getboolean('Heaters', 'hbp_onoff_control')) self.printer.heaters['HBP'].set_p_value( self.printer.config.getfloat('Heaters', "hbp_pid_p")) self.printer.heaters['HBP'].set_d_value( self.printer.config.getfloat('Heaters', "hbp_pid_i")) self.printer.heaters['HBP'].set_i_value( self.printer.config.getfloat('Heaters', "hbp_pid_d")) self.printer.heaters['HBP'].ok_range = self.printer.config.getfloat( 'Heaters', "hbp_ok_range") # Make extruder 2. self.printer.heaters['H'] = Extruder( self.printer.steppers["H"], therm_ext2, mosfet_ext2, "Ext2", self.printer.config.getboolean('Heaters', 'ext2_onoff_control')) self.printer.heaters['H'].set_p_value( self.printer.config.getfloat('Heaters', "ext2_pid_p")) self.printer.heaters['H'].set_d_value( self.printer.config.getfloat('Heaters', "ext2_pid_i")) self.printer.heaters['H'].set_i_value( self.printer.config.getfloat('Heaters', "ext2_pid_d")) self.printer.heaters['H'].ok_range = self.printer.config.getfloat( 'Heaters', "ext2_ok_range") # Init the three fans. Argument is PWM channel number self.printer.fans = [] if self.revision == "A3": self.printer.fans.append(Fan(1)) self.printer.fans.append(Fan(2)) self.printer.fans.append(Fan(0)) else: self.printer.fans.append(Fan(8)) self.printer.fans.append(Fan(9)) self.printer.fans.append(Fan(10)) Fan.set_PWM_frequency(100) for f in self.printer.fans: f.set_value(0) # Make a queue of commands self.commands = Queue.Queue(10) # Set up USB, this receives messages and pushes them on the queue self.usb = USB(self.commands) # Virtual TTY self.pipe = Pipe(self.commands) #self.pipe.set_send_reponse(False) self.ethernet = Ethernet(self.commands) # Init the path planner Path.axis_config = int( self.printer.config.get('Geometry', 'axis_config')) Path.max_speed_x = float( self.printer.config.get('Steppers', 'max_speed_x')) Path.max_speed_y = float( self.printer.config.get('Steppers', 'max_speed_y')) Path.max_speed_z = float( self.printer.config.get('Steppers', 'max_speed_z')) Path.max_speed_e = float( self.printer.config.get('Steppers', 'max_speed_e')) Path.max_speed_h = float( self.printer.config.get('Steppers', 'max_speed_h')) Path.home_speed_x = float( self.printer.config.get('Steppers', 'home_speed_x')) Path.home_speed_y = float( self.printer.config.get('Steppers', 'home_speed_y')) Path.home_speed_z = float( self.printer.config.get('Steppers', 'home_speed_z')) Path.home_speed_e = float( self.printer.config.get('Steppers', 'home_speed_e')) Path.home_speed_h = float( self.printer.config.get('Steppers', 'home_speed_h')) dirname = os.path.dirname(os.path.realpath(__file__)) # Create the firmware compiler pru_firmware = PruFirmware( dirname + "/../firmware/firmware_runtime.p", dirname + "/../firmware/firmware_runtime.bin", dirname + "/../firmware/firmware_endstops.p", dirname + "/../firmware/firmware_endstops.bin", self.revision, self.printer.config, "/usr/bin/pasm") self.printer.path_planner = PathPlanner(self.printer.steppers, pru_firmware) self.printer.path_planner.set_acceleration( float(self.printer.config.get('Steppers', 'acceleration'))) travel = {} offset = {} for axis in ['X', 'Y', 'Z']: travel[axis] = self.printer.config.getfloat( 'Geometry', 'travel_' + axis.lower()) offset[axis] = self.printer.config.getfloat( 'Geometry', 'offset_' + axis.lower()) self.printer.path_planner.set_travel_length(travel) self.printer.path_planner.set_center_offset(offset) self.printer.processor = GCodeProcessor(self.printer) # After the firmwares are loaded, the endstop states can be updated. for k, endstop in self.printer.end_stops.iteritems(): logging.debug("Endstop " + endstop.name + " hit? : " + str(endstop.read_value())) self.running = True # Signal everything ready logging.info("Redeem ready")
def execute(self, g): self.printer.path_planner.wait_until_done() for name, stepper in self.printer.steppers.iteritems(): if self.printer.config.getboolean('Steppers', 'in_use_' + name): stepper.set_enabled() Stepper.commit()
def __init__(self): """ Init """ logging.info("Redeem initializing " + version) self.printer = Printer() # Parse the config files. self.printer.config = CascadingConfigParser([ '/etc/redeem/default.cfg', '/etc/redeem/printer.cfg', '/etc/redeem/local.cfg' ]) # Get the revision and loglevel from the Config file self.revision = self.printer.config.get('System', 'revision', "A4") level = self.printer.config.getint('System', 'loglevel') if level > 0: logging.getLogger().setLevel(level) logging.info("Replicape revision " + self.revision) # Init the end stops EndStop.callback = self.end_stop_hit EndStop.inputdev = self.printer.config.get("Endstops", "inputdev") if self.revision == "A4" or self.revision == "A4A": self.printer.end_stops["X1"] = EndStop( "GPIO3_21", 112, "X1", self.printer.config.getboolean("Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop( "GPIO0_30", 113, "X2", self.printer.config.getboolean("Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop( "GPIO1_17", 114, "Y1", self.printer.config.getboolean("Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop( "GPIO1_19", 115, "Y2", self.printer.config.getboolean("Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop( "GPIO0_31", 123, "Z1", self.printer.config.getboolean("Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop( "GPIO0_4", 117, "Z2", self.printer.config.getboolean("Endstops", "invert_Z2")) else: self.printer.end_stops["X1"] = EndStop( "GPIO0_14", 112, "X1", self.printer.config.getboolean("Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop( "GPIO3_21", 113, "X2", self.printer.config.getboolean("Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop( "GPIO2_2", 114, "Y1", self.printer.config.getboolean("Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop( "GPIO0_31", 115, "Y2", self.printer.config.getboolean("Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop( "GPIO0_30", 123, "Z1", self.printer.config.getboolean("Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop( "GPIO0_4", 117, "Z2", self.printer.config.getboolean("Endstops", "invert_Z2")) if self.revision == "A3": Stepper.revision = "A3" Stepper.ENABLED = 6 Stepper.SLEEP = 5 Stepper.RESET = 4 Stepper.DECAY = 0 # Init the 5 Stepper motors (step, dir, fault, DAC channel, name) self.printer.steppers["X"] = Stepper("GPIO0_27", "GPIO1_29", "GPIO2_4", 0, "X", self.printer.end_stops["X1"], 0, 0) self.printer.steppers["Y"] = Stepper("GPIO1_12", "GPIO0_22", "GPIO2_5", 1, "Y", self.printer.end_stops["Y1"], 1, 1) self.printer.steppers["Z"] = Stepper("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z", self.printer.end_stops["Z1"], 2, 2) self.printer.steppers["E"] = Stepper("GPIO1_28", "GPIO1_15", "GPIO2_1", 3, "E", None, 3, 3) self.printer.steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "H", None, 4, 4) # Enable the steppers and set the current, steps pr mm and # microstepping for name, stepper in self.printer.steppers.iteritems(): stepper.set_current_value( self.printer.config.getfloat('Steppers', 'current_' + name)) stepper.in_use = self.printer.config.getboolean( 'Steppers', 'in_use_' + name) stepper.set_steps_pr_mm( self.printer.config.getfloat('Steppers', 'steps_pr_mm_' + name)) stepper.set_microstepping( self.printer.config.getint('Steppers', 'microstepping_' + name)) stepper.direction = self.printer.config.getint( 'Steppers', 'direction_' + name) stepper.set_decay( self.printer.config.getboolean("Steppers", "slow_decay_" + name)) stepper.has_endstop = self.printer.config.getboolean( 'Endstops', 'has_' + name) # Commit changes for the Steppers Stepper.commit() # Find the path of the thermistors path = "/sys/bus/iio/devices/iio:device0/in_voltage" # init the 3 thermistors therm_ext1 = Thermistor( path + "4_raw", "MOSFET Ext 1", self.printer.config.get('Heaters', "ext1_temp_chart")) therm_hbp = Thermistor( path + "6_raw", "MOSFET HBP", self.printer.config.get('Heaters', "hbp_temp_chart")) therm_ext2 = Thermistor( path + "5_raw", "MOSFET Ext 2", self.printer.config.get('Heaters', "ext2_temp_chart")) path = self.printer.config.get('Cold-ends', 'path', 0) if os.path.exists(path): self.printer.cold_ends.append(ColdEnd(path, "Cold End 0")) logging.info("Found Cold end on " + path) else: logging.info("No cold end present in path: " + path) # Init the 3 heaters. Argument is channel number if self.revision == "A3": mosfet_ext1 = Mosfet(3) mosfet_ext2 = Mosfet(5) mosfet_hbp = Mosfet(4) else: mosfet_ext1 = Mosfet(5) mosfet_ext2 = Mosfet(3) mosfet_hbp = Mosfet(4) # Make extruder 1 self.printer.heaters['E'] = Extruder( self.printer.steppers["E"], therm_ext1, mosfet_ext1, "Ext1", self.printer.config.getboolean('Heaters', 'ext1_onoff_control')) self.printer.heaters['E'].P = self.printer.config.getfloat( 'Heaters', "ext1_pid_p") self.printer.heaters['E'].I = self.printer.config.getfloat( 'Heaters', "ext1_pid_i") self.printer.heaters['E'].D = self.printer.config.getfloat( 'Heaters', "ext1_pid_d") self.printer.heaters['E'].ok_range = self.printer.config.getfloat( 'Heaters', "ext1_ok_range") # Make Heated Build platform self.printer.heaters['HBP'] = HBP( therm_hbp, mosfet_hbp, self.printer.config.getboolean('Heaters', 'hbp_onoff_control')) self.printer.heaters['HBP'].P = self.printer.config.getfloat( 'Heaters', "hbp_pid_p") self.printer.heaters['HBP'].I = self.printer.config.getfloat( 'Heaters', "hbp_pid_i") self.printer.heaters['HBP'].D = self.printer.config.getfloat( 'Heaters', "hbp_pid_d") self.printer.heaters['HBP'].ok_range = self.printer.config.getfloat( 'Heaters', "hbp_ok_range") # Make extruder 2. self.printer.heaters['H'] = Extruder( self.printer.steppers["H"], therm_ext2, mosfet_ext2, "Ext2", self.printer.config.getboolean('Heaters', 'ext2_onoff_control')) self.printer.heaters['H'].P = self.printer.config.getfloat( 'Heaters', "ext2_pid_p") self.printer.heaters['H'].I = self.printer.config.getfloat( 'Heaters', "ext2_pid_i") self.printer.heaters['H'].D = self.printer.config.getfloat( 'Heaters', "ext2_pid_d") self.printer.heaters['H'].ok_range = self.printer.config.getfloat( 'Heaters', "ext2_ok_range") # Init the three fans. Argument is PWM channel number self.printer.fans = [] if self.revision == "A3": self.printer.fans.append(Fan(0)) self.printer.fans.append(Fan(1)) self.printer.fans.append(Fan(2)) else: self.printer.fans.append(Fan(8)) self.printer.fans.append(Fan(9)) self.printer.fans.append(Fan(10)) Fan.set_PWM_frequency(100) for f in self.printer.fans: f.set_value(0) # Connect the cold end 0 to fan 2 # This is very "Thing" specific, should be configurable somehow. if len(self.printer.cold_ends): self.printer.coolers.append( Cooler(self.printer.cold_ends[0], self.printer.fans[2], "Cooler0", False)) self.printer.coolers[0].ok_range = 4 self.printer.coolers[0].set_target_temperature(60) self.printer.coolers[0].enable() # Make a queue of commands self.printer.commands = JoinableQueue(10) # Make a queue of commands that should not be buffered self.printer.unbuffered_commands = JoinableQueue(10) # Init the path planner Path.axis_config = int( self.printer.config.get('Geometry', 'axis_config')) Path.max_speeds[0] = float( self.printer.config.get('Steppers', 'max_speed_x')) Path.max_speeds[1] = float( self.printer.config.get('Steppers', 'max_speed_y')) Path.max_speeds[2] = float( self.printer.config.get('Steppers', 'max_speed_z')) Path.max_speeds[3] = float( self.printer.config.get('Steppers', 'max_speed_e')) Path.max_speeds[4] = float( self.printer.config.get('Steppers', 'max_speed_h')) Path.home_speed[0] = float( self.printer.config.get('Steppers', 'home_speed_x')) Path.home_speed[1] = float( self.printer.config.get('Steppers', 'home_speed_y')) Path.home_speed[2] = float( self.printer.config.get('Steppers', 'home_speed_z')) Path.home_speed[3] = float( self.printer.config.get('Steppers', 'home_speed_e')) Path.home_speed[4] = float( self.printer.config.get('Steppers', 'home_speed_h')) Path.steps_pr_meter[0] = self.printer.steppers["X"].get_steps_pr_meter( ) Path.steps_pr_meter[1] = self.printer.steppers["Y"].get_steps_pr_meter( ) Path.steps_pr_meter[2] = self.printer.steppers["Z"].get_steps_pr_meter( ) Path.steps_pr_meter[3] = self.printer.steppers["E"].get_steps_pr_meter( ) Path.steps_pr_meter[4] = self.printer.steppers["H"].get_steps_pr_meter( ) dirname = os.path.dirname(os.path.realpath(__file__)) # Create the firmware compiler pru_firmware = PruFirmware( dirname + "/../firmware/firmware_runtime.p", dirname + "/../firmware/firmware_runtime.bin", dirname + "/../firmware/firmware_endstops.p", dirname + "/../firmware/firmware_endstops.bin", self.revision, self.printer.config, "/usr/bin/pasm") self.printer.maxJerkXY = float( self.printer.config.get('Steppers', 'maxJerk_xy')) self.printer.maxJerkZ = float( self.printer.config.get('Steppers', 'maxJerk_z')) self.printer.maxJerkEH = float( self.printer.config.get('Steppers', 'maxJerk_eh')) self.printer.path_planner = PathPlanner(self.printer, pru_firmware) travel = {} offset = {} i = 0 for axis in ['X', 'Y', 'Z', 'E', 'H']: travel[axis] = self.printer.config.getfloat( 'Geometry', 'travel_' + axis.lower()) offset[axis] = self.printer.config.getfloat( 'Geometry', 'offset_' + axis.lower()) self.printer.acceleration[i] = self.printer.config.getfloat( 'Steppers', 'acceleration_' + axis.lower()) i += 1 self.printer.path_planner.travel_length = travel self.printer.path_planner.center_offset = offset self.printer.processor = GCodeProcessor(self.printer) # Set up communication channels self.printer.comms["USB"] = USB(self.printer) self.printer.comms["Eth"] = Ethernet(self.printer) self.printer.comms["octoprint"] = Pipe( self.printer, "octoprint") # Pipe for Octoprint self.printer.comms["toggle"] = Pipe(self.printer, "toggle") # Pipe for Toggle self.printer.comms["testing"] = Pipe(self.printer, "testing") # Pipe for testing self.printer.comms["testing_noret"] = Pipe( self.printer, "testing_noret") # Pipe for testing self.printer.comms["testing_noret"].send_response = False self.running = True # Start the two processes p0 = Thread(target=self.loop, args=(self.printer.commands, "buffered")) p1 = Thread(target=self.loop, args=(self.printer.unbuffered_commands, "unbuffered")) p0.daemon = True p1.daemon = True p0.start() p1.start() # Signal everything ready logging.info("Redeem ready") # Wait for exit signal p0.join() p1.join()
def execute(self, g): for i in range(g.num_tokens()): self.printer.steppers[g.token_letter(i)].set_microstepping(int(g.token_value(i))) Stepper.commit()
steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "Ext2", -1, None, 4, 4) config = ConfigParser.ConfigParser() config.readfp(open('config/default.cfg')) for name, stepper in steppers.iteritems(): stepper.setCurrentValue(config.getfloat('Steppers', 'current_' + name)) stepper.setEnabled(config.getboolean('Steppers', 'enabled_' + name)) stepper.set_steps_pr_mm( config.getfloat('Steppers', 'steps_pr_mm_' + name)) stepper.set_microstepping( config.getint('Steppers', 'microstepping_' + name)) stepper.set_decay(1) # Commit changes for the Steppers Stepper.commit() Path.axis_config = int(config.get('Geometry', 'axis_config')) Path.max_speed_x = float(config.get('Steppers', 'max_speed_x')) Path.max_speed_y = float(config.get('Steppers', 'max_speed_y')) Path.max_speed_z = float(config.get('Steppers', 'max_speed_z')) Path.max_speed_e = float(config.get('Steppers', 'max_speed_e')) Path.max_speed_h = float(config.get('Steppers', 'max_speed_h')) current_pos = {"X": 0.0, "Y": 0.0, "Z": 0.0, "E": 0.0} pp = Path_planner(steppers, current_pos) pp.set_acceleration(0.3) nb = 10 print "Making paths"
def _execute(self, g): if g.code() == "G1": # Move (G1 X0.1 Y40.2 F3000) if g.hasLetter("F"): # Get the feed rate self.feed_rate = float(g.getValueByLetter("F"))/60000.0 # Convert from mm/min to SI unit m/s g.removeTokenByLetter("F") smds = {} # All steppers for i in range(g.numTokens()): # Run through all tokens axis = g.tokenLetter(i) # Get the axis, X, Y, Z or E smds[axis] = float(g.tokenValue(i))/1000.0 # Get the value, new position or vector if g.hasLetter("E") and self.current_tool != "E": # We are using a different tool, switch.. smds[self.current_tool] = smds["E"] del smds["E"] path = Path(smds, self.feed_rate, self.movement, g.is_crc())# Make a path segment from the axes self.path_planner.add_path(path) # Add the path. This blocks until the path planner has capacity #logging.debug("Moving to: "+' '.join('%s:%s' % i for i in smds.iteritems())) elif g.code() == "G21": # Set units to mm self.factor = 1.0 elif g.code() == "G28": # Home the steppers if g.numTokens() == 0: # If no token is given, home all g.setTokens(["X0", "Y0", "Z0"]) smds = {} # All steppers for i in range(g.numTokens()): # Run through all tokens axis = g.tokenLetter(i) # Get the axis, X, Y, Z or E smds[axis] = float(g.tokenValue(i)) # Get tha value, new position or vector path = Path(smds, self.feed_rate, "ABSOLUTE", False) # Make a path segment from the axes #logging.debug("moving to "+str(smds)) self.path_planner.add_path(path) # Add the path. This blocks until the path planner has capacity elif g.code() == "G90": # Absolute positioning self.movement = "ABSOLUTE" elif g.code() == "G91": # Relative positioning self.movement = "RELATIVE" elif g.code() == "G92": # Set the current position of the following steppers #self.path_planner.wait_until_done() if g.numTokens() == 0: logging.debug("Adding all to G92") g.setTokens(["X0", "Y0", "Z0", "E0", "H0"]) # If no token is present, do this for all #for i in range(g.numTokens()): # axis = g.tokenLetter(i) # val = float(g.tokenValue(i)) # self.path_planner.set_pos(axis, val) pos = {} # All steppers for i in range(g.numTokens()): # Run through all tokens axis = g.tokenLetter(i) # Get the axis, X, Y, Z or E pos[axis] = float(g.tokenValue(i))/1000.0 # Get the value, new position or vector logging.debug(pos) path = Path(pos, self.feed_rate, "G92") # Make a path segment from the axes self.path_planner.add_path(path) elif g.code() == "M17": # Enable all steppers self.path_planner.wait_until_done() for name, stepper in self.steppers.iteritems(): stepper.setEnabled() Stepper.commit() elif g.code() == "M19": # Reset all steppers self.path_planner.wait_until_done() for name, stepper in self.steppers.iteritems(): stepper.reset() elif g.code() == "M30": # Set microstepping (Propietary to Replicape) for i in range(g.numTokens()): self.steppers[g.tokenLetter(i)].set_microstepping(int(g.tokenValue(i))) Stepper.commit() elif g.code() == "M31": # Set stepper current limit (Propietery to Replicape) for i in range(g.numTokens()): self.steppers[g.tokenLetter(i)].setCurrentValue(float(g.tokenValue(i))) Stepper.commit() elif g.code() == "M84": # Disable all steppers self.path_planner.wait_until_done() for name, stepper in self.steppers.iteritems(): stepper.setDisabled() Stepper.commit() elif g.code() == "M92": # M92: Set axis_steps_per_unit for i in range(g.numTokens()): # Run through all tokens axis = g.tokenLetter(i) # Get the axis, X, Y, Z or E self.steppers[axis].set_steps_pr_mm(float(g.tokenValue(i))) Stepper.commit() elif g.code() == "M101": # Deprecated pass elif g.code() == "M103": # Deprecated pass elif g.code() == "M104": # Set extruder temperature if g.hasLetter("P"): if int(g.getValueByLetter("P")) == 0: self.ext1.setTargetTemperature(float(g.getValueByLetter("S"))) elif int(g.getValueByLetter("P")) == 1: logging.debug("setting ext 2 temp to "+str(g.getValueByLetter("S"))) self.ext2.setTargetTemperature(float(g.getValueByLetter("S"))) else: logging.debug("setting ext 1 temp to "+str(g.tokenValue(0))) self.ext1.setTargetTemperature(float(g.tokenValue(0))) elif g.code() == "M105": # Get Temperature answer = "ok T:"+str(self.ext1.getTemperature()) if hasattr(self, "hbp"): answer += " B:"+str(int(self.hbp.getTemperature())) if hasattr(self, "ext2"): answer += " T1:"+str(int(self.ext2.getTemperature())) if hasattr(self, "cold_end_1"): answer += " T2:"+str(int(self.cold_end_1.getTemperature())) g.setAnswer(answer) elif g.code() == "M106": # Fan on if g.hasLetter("P"): fan = self.fans[int(g.getValueByLetter("P"))] fan.set_value(float(g.getValueByLetter("S"))/255.0) # According to reprap wiki, the number is 0..255 else: # if there is no fan-number present, do it for the first fan self.fan_1.set_value(float(g.tokenValue(0))/255.0) elif g.code() == "M108": # Deprecated pass elif g.code() == "M109": self.hbp.setTargetTemperature(float(g.getValueByLetter("S"))) elif g.code() == "M110": # Reset the line number counter Gcode.line_number = 0 elif g.code() == "M114": g.setAnswer("ok C: "+' '.join('%s:%s' % i for i in self.current_pos.iteritems())) elif g.code() == "M130": # Set PID P-value, Format (M130 P0 S8.0) pass #if int(self.tokens[0][1]) == 0: # self.ext1.setPvalue(float(self.tokens[1][1::])) elif g.code() == "M131": # Set PID I-value, Format (M131 P0 S8.0) pass #if int(self.tokens[0][1]) == 0: # self.p.ext1.setPvalue(float(self.tokens[1][1::])) elif g.code() == "M132": # Set PID D-value, Format (M132 P0 S8.0) pass #if int(self.tokens[0][1]) == 0: # self.p.ext1.setPvalue(float(self.tokens[1][1::])) elif g.code() == "M140": # Set bed temperature self.hbp.setTargetTemperature(float(g.tokenValue(0))) elif g.code() == "M141": fan = self.fans[int(g.getValueByLetter("P"))] fan.setPWMFrequency(int(g.getValueByLetter("F"))) fan.set_value(float(g.getValueByLetter("S"))) elif g.code() == "M190": self.hbp.setTargetTemperature(float(g.getValueByLetter("S"))) elif g.code() == "T0": # Select tool 0 self.current_tool = "E" elif g.code() == "T1": # select tool 1 self.current_tool = "H" else: logging.warning("Unknown command: "+g.message)
def __init__(self): """ Init """ logging.info("Redeem initializing " + version) self.printer = Printer() # Parse the config files. self.printer.config = CascadingConfigParser( ['/etc/redeem/default.cfg', '/etc/redeem/printer.cfg', '/etc/redeem/local.cfg']) # Get the revision and loglevel from the Config file self.revision = self.printer.config.get('System', 'revision', "A4") level = self.printer.config.getint('System', 'loglevel') if level > 0: logging.getLogger().setLevel(level) logging.info("Replicape revision " + self.revision) # Init the end stops EndStop.callback = self.end_stop_hit EndStop.inputdev = self.printer.config.get("Endstops", "inputdev"); if self.revision == "A4" or self.revision == "A4A": self.printer.end_stops["X1"] = EndStop("GPIO3_21", 112, "X1", self.printer.config.getboolean( "Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop("GPIO0_30", 113, "X2", self.printer.config.getboolean( "Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop("GPIO1_17", 114, "Y1", self.printer.config.getboolean( "Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop("GPIO1_19", 115, "Y2", self.printer.config.getboolean( "Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop("GPIO0_31", 123, "Z1", self.printer.config.getboolean( "Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop("GPIO0_4", 117, "Z2", self.printer.config.getboolean( "Endstops", "invert_Z2")) else: self.printer.end_stops["X1"] = EndStop("GPIO0_14", 112, "X1", self.printer.config.getboolean( "Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop("GPIO3_21", 113, "X2", self.printer.config.getboolean( "Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop("GPIO2_2", 114, "Y1", self.printer.config.getboolean( "Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop("GPIO0_31", 115, "Y2", self.printer.config.getboolean( "Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop("GPIO0_30", 123, "Z1", self.printer.config.getboolean( "Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop("GPIO0_4", 117, "Z2", self.printer.config.getboolean( "Endstops", "invert_Z2")) if self.revision == "A3": Stepper.revision = "A3" Stepper.ENABLED = 6 Stepper.SLEEP = 5 Stepper.RESET = 4 Stepper.DECAY = 0 # Init the 5 Stepper motors (step, dir, fault, DAC channel, name) self.printer.steppers["X"] = Stepper("GPIO0_27", "GPIO1_29", "GPIO2_4", 0, "X", self.printer.end_stops["X1"], 0, 0) self.printer.steppers["Y"] = Stepper("GPIO1_12", "GPIO0_22", "GPIO2_5", 1, "Y", self.printer.end_stops["Y1"], 1, 1) self.printer.steppers["Z"] = Stepper("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z", self.printer.end_stops["Z1"], 2, 2) self.printer.steppers["E"] = Stepper("GPIO1_28", "GPIO1_15", "GPIO2_1", 3, "E", None, 3, 3) self.printer.steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "H", None, 4, 4) # Enable the steppers and set the current, steps pr mm and # microstepping for name, stepper in self.printer.steppers.iteritems(): stepper.set_current_value( self.printer.config.getfloat('Steppers', 'current_' + name)) stepper.in_use = self.printer.config.getboolean('Steppers', 'in_use_' + name) stepper.set_steps_pr_mm(self.printer.config.getfloat('Steppers', 'steps_pr_mm_' + name)) stepper.set_microstepping(self.printer.config.getint('Steppers', 'microstepping_' + name)) stepper.direction = self.printer.config.getint('Steppers', 'direction_' + name) stepper.set_decay(self.printer.config.getboolean("Steppers", "slow_decay_" + name)) stepper.has_endstop = self.printer.config.getboolean('Endstops', 'has_' + name) # Commit changes for the Steppers Stepper.commit() # Find the path of the thermistors path = "/sys/bus/iio/devices/iio:device0/in_voltage" # init the 3 thermistors therm_ext1 = Thermistor(path + "4_raw", "MOSFET Ext 1", self.printer.config.get('Heaters', "ext1_temp_chart")) therm_hbp = Thermistor(path + "6_raw", "MOSFET HBP", self.printer.config.get('Heaters', "hbp_temp_chart")) therm_ext2 = Thermistor(path + "5_raw", "MOSFET Ext 2", self.printer.config.get('Heaters', "ext2_temp_chart")) path = self.printer.config.get('Cold-ends', 'path', 0) if os.path.exists(path): self.printer.cold_ends.append(ColdEnd(path, "Cold End 0")) logging.info("Found Cold end on " + path) else: logging.info("No cold end present in path: " + path) # Init the 3 heaters. Argument is channel number if self.revision == "A3": mosfet_ext1 = Mosfet(3) mosfet_ext2 = Mosfet(5) mosfet_hbp = Mosfet(4) else: mosfet_ext1 = Mosfet(5) mosfet_ext2 = Mosfet(3) mosfet_hbp = Mosfet(4) # Make extruder 1 self.printer.heaters['E'] = Extruder(self.printer.steppers["E"], therm_ext1, mosfet_ext1, "Ext1", self.printer.config.getboolean( 'Heaters', 'ext1_onoff_control')) self.printer.heaters['E'].P = self.printer.config.getfloat('Heaters', "ext1_pid_p") self.printer.heaters['E'].I = self.printer.config.getfloat('Heaters', "ext1_pid_i") self.printer.heaters['E'].D = self.printer.config.getfloat('Heaters', "ext1_pid_d") self.printer.heaters['E'].ok_range = self.printer.config.getfloat( 'Heaters', "ext1_ok_range") # Make Heated Build platform self.printer.heaters['HBP'] = HBP(therm_hbp, mosfet_hbp, self.printer.config.getboolean( 'Heaters', 'hbp_onoff_control')) self.printer.heaters['HBP'].P = self.printer.config.getfloat('Heaters', "hbp_pid_p") self.printer.heaters['HBP'].I = self.printer.config.getfloat('Heaters', "hbp_pid_i") self.printer.heaters['HBP'].D = self.printer.config.getfloat('Heaters', "hbp_pid_d") self.printer.heaters['HBP'].ok_range = self.printer.config.getfloat( 'Heaters', "hbp_ok_range") # Make extruder 2. self.printer.heaters['H'] = Extruder(self.printer.steppers["H"], therm_ext2, mosfet_ext2, "Ext2", self.printer.config.getboolean( 'Heaters', 'ext2_onoff_control')) self.printer.heaters['H'].P = self.printer.config.getfloat('Heaters', "ext2_pid_p") self.printer.heaters['H'].I = self.printer.config.getfloat('Heaters', "ext2_pid_i") self.printer.heaters['H'].D = self.printer.config.getfloat('Heaters', "ext2_pid_d") self.printer.heaters['H'].ok_range = self.printer.config.getfloat( 'Heaters', "ext2_ok_range") # Init the three fans. Argument is PWM channel number self.printer.fans = [] if self.revision == "A3": self.printer.fans.append(Fan(0)) self.printer.fans.append(Fan(1)) self.printer.fans.append(Fan(2)) else: self.printer.fans.append(Fan(8)) self.printer.fans.append(Fan(9)) self.printer.fans.append(Fan(10)) Fan.set_PWM_frequency(100) for f in self.printer.fans: f.set_value(0) # Connect the cold end 0 to fan 2 # This is very "Thing" specific, should be configurable somehow. if len(self.printer.cold_ends): self.printer.coolers.append( Cooler(self.printer.cold_ends[0], self.printer.fans[2], "Cooler0", False)) self.printer.coolers[0].ok_range = 4 self.printer.coolers[0].set_target_temperature(60) self.printer.coolers[0].enable() # Make a queue of commands self.printer.commands = JoinableQueue(10) # Make a queue of commands that should not be buffered self.printer.unbuffered_commands = JoinableQueue(10) # Init the path planner Path.axis_config = int( self.printer.config.get('Geometry', 'axis_config')) Path.max_speeds[0] = float( self.printer.config.get('Steppers', 'max_speed_x')) Path.max_speeds[1] = float( self.printer.config.get('Steppers', 'max_speed_y')) Path.max_speeds[2] = float( self.printer.config.get('Steppers', 'max_speed_z')) Path.max_speeds[3] = float( self.printer.config.get('Steppers', 'max_speed_e')) Path.max_speeds[4] = float( self.printer.config.get('Steppers', 'max_speed_h')) Path.home_speed[0] = float( self.printer.config.get('Steppers', 'home_speed_x')) Path.home_speed[1] = float( self.printer.config.get('Steppers', 'home_speed_y')) Path.home_speed[2] = float( self.printer.config.get('Steppers', 'home_speed_z')) Path.home_speed[3] = float( self.printer.config.get('Steppers', 'home_speed_e')) Path.home_speed[4] = float( self.printer.config.get('Steppers', 'home_speed_h')) Path.steps_pr_meter[0] = self.printer.steppers[ "X"].get_steps_pr_meter() Path.steps_pr_meter[1] = self.printer.steppers[ "Y"].get_steps_pr_meter() Path.steps_pr_meter[2] = self.printer.steppers[ "Z"].get_steps_pr_meter() Path.steps_pr_meter[3] = self.printer.steppers[ "E"].get_steps_pr_meter() Path.steps_pr_meter[4] = self.printer.steppers[ "H"].get_steps_pr_meter() dirname = os.path.dirname(os.path.realpath(__file__)) # Create the firmware compiler pru_firmware = PruFirmware( dirname + "/../firmware/firmware_runtime.p", dirname + "/../firmware/firmware_runtime.bin", dirname + "/../firmware/firmware_endstops.p", dirname + "/../firmware/firmware_endstops.bin", self.revision, self.printer.config, "/usr/bin/pasm") self.printer.maxJerkXY = float( self.printer.config.get('Steppers', 'maxJerk_xy')); self.printer.maxJerkZ = float( self.printer.config.get('Steppers', 'maxJerk_z')); self.printer.maxJerkEH = float( self.printer.config.get('Steppers', 'maxJerk_eh')); self.printer.path_planner = PathPlanner(self.printer, pru_firmware) travel = {} offset = {} i = 0 for axis in ['X', 'Y', 'Z', 'E', 'H']: travel[axis] = self.printer.config.getfloat('Geometry', 'travel_' + axis.lower()) offset[axis] = self.printer.config.getfloat('Geometry', 'offset_' + axis.lower()) self.printer.acceleration[i] = self.printer.config.getfloat('Steppers', 'acceleration_' + axis.lower()) i += 1 self.printer.path_planner.travel_length = travel self.printer.path_planner.center_offset = offset self.printer.processor = GCodeProcessor(self.printer) # Set up communication channels self.printer.comms["USB"] = USB(self.printer) self.printer.comms["Eth"] = Ethernet(self.printer) self.printer.comms["octoprint"] = Pipe(self.printer, "octoprint") # Pipe for Octoprint self.printer.comms["toggle"] = Pipe(self.printer, "toggle") # Pipe for Toggle self.printer.comms["testing"] = Pipe(self.printer, "testing") # Pipe for testing self.printer.comms["testing_noret"] = Pipe(self.printer, "testing_noret") # Pipe for testing self.printer.comms["testing_noret"].send_response = False self.running = True # Start the two processes p0 = Thread(target=self.loop, args=(self.printer.commands, "buffered")) p1 = Thread(target=self.loop, args=(self.printer.unbuffered_commands, "unbuffered")) p0.daemon = True p1.daemon = True p0.start() p1.start() # Signal everything ready logging.info("Redeem ready") # Wait for exit signal p0.join() p1.join()
def __init__(self): logging.info("Redeem initializing "+version) self.printer = Printer() # Parse the config self.printer.config = CascadingConfigParser(['/etc/redeem/default.cfg', '/etc/redeem/local.cfg']) # Get the revision from the Config file self.revision = self.printer.config.get('System', 'revision', "A4") logging.info("Replicape revision "+self.revision) # Init the end stops EndStop.callback = self.end_stop_hit EndStop.inputdev = self.printer.config.get("Endstops","inputdev"); if self.revision == "A4": self.printer.end_stops["X1"] = EndStop("GPIO3_21", 112, "X1", self.printer.config.getboolean("Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop("GPIO0_30", 113, "X2", self.printer.config.getboolean("Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop("GPIO1_17", 114, "Y1", self.printer.config.getboolean("Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop("GPIO1_19", 115, "Y2", self.printer.config.getboolean("Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop("GPIO0_31", 116, "Z1", self.printer.config.getboolean("Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop("GPIO0_4" , 117, "Z2", self.printer.config.getboolean("Endstops", "invert_Z2")) else: self.printer.end_stops["X1"] = EndStop("GPIO0_14", 112, "X1", self.printer.config.getboolean("Endstops", "invert_X1")) self.printer.end_stops["X2"] = EndStop("GPIO3_21", 113, "X2", self.printer.config.getboolean("Endstops", "invert_X2")) self.printer.end_stops["Y1"] = EndStop("GPIO2_2", 114, "Y1", self.printer.config.getboolean("Endstops", "invert_Y1")) self.printer.end_stops["Y2"] = EndStop("GPIO0_31", 115, "Y2", self.printer.config.getboolean("Endstops", "invert_Y2")) self.printer.end_stops["Z1"] = EndStop("GPIO0_30", 116, "Z1", self.printer.config.getboolean("Endstops", "invert_Z1")) self.printer.end_stops["Z2"] = EndStop("GPIO0_4", 117, "Z2", self.printer.config.getboolean("Endstops", "invert_Z2")) if self.revision == "A3": Stepper.revision = "A3" Stepper.ENABLED = 6 Stepper.SLEEP = 5 Stepper.RESET = 4 Stepper.DECAY = 0 # Init the 5 Stepper motors (step, dir, fault, DAC channel, name) self.printer.steppers["X"] = Stepper("GPIO0_27", "GPIO1_29", "GPIO2_4", 0, "X", self.printer.end_stops["X1"], 0,0) self.printer.steppers["Y"] = Stepper("GPIO1_12", "GPIO0_22", "GPIO2_5", 1, "Y", self.printer.end_stops["Y1"], 1,1) self.printer.steppers["Z"] = Stepper("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z", self.printer.end_stops["Z1"], 2,2) self.printer.steppers["E"] = Stepper("GPIO1_28", "GPIO1_15", "GPIO2_1", 3, "Ext1", None,3,3) self.printer.steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "Ext2", None,4,4) # Enable the steppers and set the current, steps pr mm and microstepping for name, stepper in self.printer.steppers.iteritems(): stepper.set_current_value(self.printer.config.getfloat('Steppers', 'current_'+name)) if self.printer.config.getboolean('Steppers', 'enabled_'+name): stepper.set_enabled() else: stepper.set_disabled() stepper.set_steps_pr_mm(self.printer.config.getfloat('Steppers', 'steps_pr_mm_'+name)) stepper.set_microstepping(self.printer.config.getint('Steppers', 'microstepping_'+name)) stepper.direction = self.printer.config.getint('Steppers', 'direction_'+name) stepper.set_decay(self.printer.config.getboolean("Steppers", "slow_decay_"+name)) # Commit changes for the Steppers Stepper.commit() # Find the path of the thermistors path = "/sys/bus/iio/devices/iio:device0/in_voltage" # init the 3 thermistors therm_ext1 = Thermistor(path+"4_raw", "MOSFET Ext 1", self.printer.config.get('Heaters', "ext1_temp_chart")) therm_hbp = Thermistor(path+"6_raw", "MOSFET HBP", self.printer.config.get('Heaters', "hbp_temp_chart")) therm_ext2 = Thermistor(path+"5_raw", "MOSFET Ext 2", self.printer.config.get('Heaters', "ext2_temp_chart")) path = self.printer.config.get('Cold-ends', 'path', 0) if os.path.exists(path): self.printer.cold_ends.append(ColdEnd(path, "Cold End 1")) logging.info("Found Cold end on "+path) else: logging.info("No cold end present in path: "+path) # Init the 3 heaters. Argument is channel number if self.revision == "A3": mosfet_ext1 = Mosfet(3) mosfet_ext2 = Mosfet(4) mosfet_hbp = Mosfet(5) else: mosfet_ext1 = Mosfet(5) mosfet_ext2 = Mosfet(3) mosfet_hbp = Mosfet(4) # Make extruder 1 self.printer.heaters['E'] = Extruder(self.printer.steppers["E"], therm_ext1, mosfet_ext1, "Ext1", self.printer.config.getboolean('Heaters', 'ext1_onoff_control')) self.printer.heaters['E'].set_p_value(self.printer.config.getfloat('Heaters', "ext1_pid_p")) self.printer.heaters['E'].set_d_value(self.printer.config.getfloat('Heaters', "ext1_pid_d")) self.printer.heaters['E'].set_i_value(self.printer.config.getfloat('Heaters', "ext1_pid_i")) self.printer.heaters['E'].ok_range = self.printer.config.getfloat('Heaters', "ext1_ok_range") # Make Heated Build platform self.printer.heaters['HBP'] = HBP( therm_hbp, mosfet_hbp, self.printer.config.getboolean('Heaters', 'hbp_onoff_control')) self.printer.heaters['HBP'].set_p_value(self.printer.config.getfloat('Heaters', "hbp_pid_p")) self.printer.heaters['HBP'].set_d_value(self.printer.config.getfloat('Heaters', "hbp_pid_i")) self.printer.heaters['HBP'].set_i_value(self.printer.config.getfloat('Heaters', "hbp_pid_d")) self.printer.heaters['HBP'].ok_range = self.printer.config.getfloat('Heaters', "hbp_ok_range") # Make extruder 2. self.printer.heaters['H'] = Extruder(self.printer.steppers["H"], therm_ext2, mosfet_ext2, "Ext2", self.printer.config.getboolean('Heaters', 'ext2_onoff_control')) self.printer.heaters['H'].set_p_value(self.printer.config.getfloat('Heaters', "ext2_pid_p")) self.printer.heaters['H'].set_d_value(self.printer.config.getfloat('Heaters', "ext2_pid_i")) self.printer.heaters['H'].set_i_value(self.printer.config.getfloat('Heaters', "ext2_pid_d")) self.printer.heaters['H'].ok_range = self.printer.config.getfloat('Heaters', "ext2_ok_range") # Init the three fans. Argument is PWM channel number self.printer.fans=[] if self.revision == "A3": self.printer.fans.append(Fan(1)) self.printer.fans.append(Fan(2)) self.printer.fans.append(Fan(0)) else: self.printer.fans.append(Fan(8)) self.printer.fans.append(Fan(9)) self.printer.fans.append(Fan(10)) Fan.set_PWM_frequency(100) for f in self.printer.fans: f.set_value(0) # Make a queue of commands self.commands = Queue.Queue(10) # Set up USB, this receives messages and pushes them on the queue self.usb = USB(self.commands) # Virtual TTY self.pipe = Pipe(self.commands) #self.pipe.set_send_reponse(False) self.ethernet = Ethernet(self.commands) # Init the path planner Path.axis_config = int(self.printer.config.get('Geometry', 'axis_config')) Path.max_speed_x = float(self.printer.config.get('Steppers', 'max_speed_x')) Path.max_speed_y = float(self.printer.config.get('Steppers', 'max_speed_y')) Path.max_speed_z = float(self.printer.config.get('Steppers', 'max_speed_z')) Path.max_speed_e = float(self.printer.config.get('Steppers', 'max_speed_e')) Path.max_speed_h = float(self.printer.config.get('Steppers', 'max_speed_h')) Path.home_speed_x = float(self.printer.config.get('Steppers', 'home_speed_x')) Path.home_speed_y = float(self.printer.config.get('Steppers', 'home_speed_y')) Path.home_speed_z = float(self.printer.config.get('Steppers', 'home_speed_z')) Path.home_speed_e = float(self.printer.config.get('Steppers', 'home_speed_e')) Path.home_speed_h = float(self.printer.config.get('Steppers', 'home_speed_h')) dirname = os.path.dirname(os.path.realpath(__file__)) # Create the firmware compiler pru_firmware = PruFirmware(dirname+"/../firmware/firmware_runtime.p",dirname+"/../firmware/firmware_runtime.bin",dirname+"/../firmware/firmware_endstops.p",dirname+"/../firmware/firmware_endstops.bin",self.revision,self.printer.config,"/usr/bin/pasm") self.printer.path_planner = PathPlanner(self.printer.steppers, pru_firmware) self.printer.path_planner.set_acceleration(float(self.printer.config.get('Steppers', 'acceleration'))) travel={} offset={} for axis in ['X','Y','Z']: travel[axis] = self.printer.config.getfloat('Geometry', 'travel_'+axis.lower()) offset[axis] = self.printer.config.getfloat('Geometry', 'offset_'+axis.lower()) self.printer.path_planner.set_travel_length(travel) self.printer.path_planner.set_center_offset(offset) self.printer.processor = GCodeProcessor(self.printer); # After the firmwares are loaded, the endstop states can be updated. for k, endstop in self.printer.end_stops.iteritems(): logging.debug("Endstop "+endstop.name+" hit? : "+ str(endstop.read_value())) self.running = True # Signal everything ready logging.info("Redeem ready")
def execute(self,g): self.printer.path_planner.wait_until_done() for name, stepper in self.printer.steppers.iteritems(): if self.printer.config.getboolean('Steppers', 'enabled_'+name): stepper.set_enabled() Stepper.commit()
def __init__(self): logging.info("Replicape initializing "+version) self.config = ConfigParser.ConfigParser() self.config.readfp(open('config/default.cfg')) # Make a list of steppers self.steppers = {} # Init the 5 Stepper motors (step, dir, fault, DAC channel, name) self.steppers["X"] = Stepper("GPIO0_27", "GPIO1_29", "GPIO2_4", 0, "X") self.steppers["Y"] = Stepper("GPIO1_12", "GPIO0_22", "GPIO2_5", 1, "Y") self.steppers["Z"] = Stepper("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z") self.steppers["E"] = Stepper("GPIO1_28", "GPIO1_15", "GPIO2_1", 3, "Ext1") self.steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "Ext2") # Enable the steppers and set the current, steps pr mm and microstepping for name, stepper in self.steppers.iteritems(): stepper.setCurrentValue(self.config.getfloat('Steppers', 'current_'+name)) stepper.setEnabled(self.config.getboolean('Steppers', 'enabled_'+name)) stepper.set_steps_pr_mm(self.config.getfloat('Steppers', 'steps_pr_mm_'+name)) stepper.set_microstepping(self.config.getint('Steppers', 'microstepping_'+name)) stepper.set_decay(0) # Commit changes for the Steppers Stepper.commit() # Find the path of the thermostors path = "/sys/bus/iio/devices/iio:device0/in_voltage" # init the 3 thermistors self.therm_ext1 = Thermistor(path+"4_raw", "MOSFET Ext 1", "B57561G0103F000") # Epcos 10K self.therm_hbp = Thermistor(path+"6_raw", "MOSFET HBP", "B57560G104F") # Epcos 100K self.therm_ext2 = Thermistor(path+"5_raw", "MOSFET Ext 2", "B57561G0103F000") # Epcos 10K if os.path.exists("/sys/bus/w1/devices/28-000002e34b73/w1_slave"): self.cold_end_1 = W1("/sys/bus/w1/devices/28-000002e34b73/w1_slave", "Cold End 1") # init the 3 heaters self.mosfet_ext1 = Mosfet(5) # Argument is channel number self.mosfet_ext2 = Mosfet(3) self.mosfet_hbp = Mosfet(4) # Make extruder 1 self.ext1 = Extruder(self.steppers["E"], self.therm_ext1, self.mosfet_ext1, "Ext1") self.ext1.setPvalue(0.1) self.ext1.setDvalue(0.3) self.ext1.setIvalue(0.0) # Make Heated Build platform self.hbp = HBP( self.therm_hbp, self.mosfet_hbp) # Make extruder 2. self.ext2 = Extruder(self.steppers["H"], self.therm_ext2, self.mosfet_ext2, "Ext2") self.ext1.setPvalue(0.1) self.ext1.setDvalue(0.3) self.ext1.setIvalue(0.0) self.current_tool = "E" # Init the three fans self.fan_1 = Fan(8) self.fan_2 = Fan(9) self.fan_3 = Fan(10) self.fans = {0: self.fan_1, 1:self.fan_2, 2:self.fan_3 } self.fan_1.setPWMFrequency(100) # Init the end stops self.end_stops = {} self.end_stops["X1"] = EndStop("GPIO3_21", self.steppers, 112, "X1") self.end_stops["X2"] = EndStop("GPIO0_30", self.steppers, 113, "X2") self.end_stops["Y1"] = EndStop("GPIO1_17", self.steppers, 114, "Y1") self.end_stops["Y2"] = EndStop("GPIO1_19", self.steppers, 115, "Y2") self.end_stops["Z1"] = EndStop("GPIO0_31", self.steppers, 116, "Z1") self.end_stops["Z2"] = EndStop("GPIO0_4", self.steppers, 117, "Z2") # Make a queue of commands self.commands = Queue.Queue(10) # Set up USB, this receives messages and pushes them on the queue #self.usb = USB(self.commands) self.pipe = Pipe(self.commands) self.ethernet = Ethernet(self.commands) # Init the path planner self.movement = "RELATIVE" self.feed_rate = 3000.0 self.current_pos = {"X":0.0, "Y":0.0, "Z":0.0, "E":0.0,"H":0.0} self.acceleration = 0.3 Path.axis_config = int(self.config.get('Geometry', 'axis_config')) Path.max_speed_x = float(self.config.get('Steppers', 'max_speed_x')) Path.max_speed_y = float(self.config.get('Steppers', 'max_speed_y')) Path.max_speed_z = float(self.config.get('Steppers', 'max_speed_z')) Path.max_speed_e = float(self.config.get('Steppers', 'max_speed_e')) Path.max_speed_h = float(self.config.get('Steppers', 'max_speed_h')) self.path_planner = Path_planner(self.steppers, self.current_pos) self.path_planner.set_acceleration(self.acceleration) # Signal everything ready logging.info("Replicape ready") print "Replicape ready"
def execute(self, g): for i in range(g.num_tokens()): self.printer.steppers[g.token_letter(i)].\ set_current_value(float(g.token_value(i))) Stepper.commit()
def execute(self,g): for i in range(g.num_tokens()): # Run through all tokens axis = g.tokenLetter(i) # Get the axis, X, Y, Z or E self.printer.steppers[axis].set_steps_pr_mm(float(g.token_value(i))) Stepper.commit()
def execute(self, g): for i in range(g.num_tokens()): # Run through all tokens axis = g.tokenLetter(i) # Get the axis, X, Y, Z or E self.printer.steppers[axis].set_steps_pr_mm(float( g.token_value(i))) Stepper.commit()
def execute(self, g): for i in range(g.num_tokens()): self.printer.steppers[g.token_letter(i)].\ set_current_value(float(g.token_value(i))) Stepper.commit()
steppers["Y"] = Stepper("GPIO1_12", "GPIO0_22", "GPIO2_5", 1, "Y",1,None,1,1) steppers["Z"] = Stepper("GPIO0_23", "GPIO0_26", "GPIO0_15", 2, "Z",1,None,2,2) steppers["E"] = Stepper("GPIO1_28", "GPIO1_15", "GPIO2_1", 3, "Ext1",-1,None,3,3) steppers["H"] = Stepper("GPIO1_13", "GPIO1_14", "GPIO2_3", 4, "Ext2",-1,None,4,4) config = ConfigParser.ConfigParser() config.readfp(open('config/default.cfg')) for name, stepper in steppers.iteritems(): stepper.setCurrentValue(config.getfloat('Steppers', 'current_'+name)) stepper.setEnabled(config.getboolean('Steppers', 'enabled_'+name)) stepper.set_steps_pr_mm(config.getfloat('Steppers', 'steps_pr_mm_'+name)) stepper.set_microstepping(config.getint('Steppers', 'microstepping_'+name)) stepper.set_decay(1) # Commit changes for the Steppers Stepper.commit() Path.axis_config = int(config.get('Geometry', 'axis_config')) Path.max_speed_x = float(config.get('Steppers', 'max_speed_x')) Path.max_speed_y = float(config.get('Steppers', 'max_speed_y')) Path.max_speed_z = float(config.get('Steppers', 'max_speed_z')) Path.max_speed_e = float(config.get('Steppers', 'max_speed_e')) Path.max_speed_h = float(config.get('Steppers', 'max_speed_h')) current_pos = {"X":0.0, "Y":0.0, "Z":0.0, "E":0.0} pp = Path_planner(steppers, current_pos) pp.set_acceleration(0.3) nb = 10