def __init__(self, config): printer = config.get_printer() pins.get_printer_pins(printer).register_chip('replicape', self) revisions = {'B3': 'B3'} config.getchoice('revision', revisions) self.host_mcu = mcu.get_printer_mcu(printer, config.get('host_mcu')) # Setup enable pin self.mcu_pwm_enable = pins.setup_pin( printer, 'digital_out', config.get('enable_pin', '!P9_41')) self.mcu_pwm_enable.setup_max_duration(0.) self.mcu_pwm_start_value = self.mcu_pwm_shutdown_value = False # Setup power pins self.pins = { "power_e": (pca9685_pwm, 5), "power_h": (pca9685_pwm, 3), "power_hotbed": (pca9685_pwm, 4), "power_fan0": (pca9685_pwm, 7), "power_fan1": (pca9685_pwm, 8), "power_fan2": (pca9685_pwm, 9), "power_fan3": (pca9685_pwm, 10) } # Setup stepper config self.stepper_dacs = {} shift_registers = [1, 0, 0, 1, 1] for port, name in enumerate('xyzeh'): prefix = 'stepper_%s_' % (name,) sc = config.getchoice( prefix + 'microstep_mode', ReplicapeStepConfig, 'disable') if sc is None: continue sc |= shift_registers[port] if config.getboolean(prefix + 'chopper_off_time_high', False): sc |= 1<<3 if config.getboolean(prefix + 'chopper_hysteresis_high', False): sc |= 1<<2 if config.getboolean(prefix + 'chopper_blank_time_high', True): sc |= 1<<1 shift_registers[port] = sc channel = port + 11 cur = config.getfloat( prefix + 'current', above=0., maxval=REPLICAPE_MAX_CURRENT) self.stepper_dacs[channel] = cur / REPLICAPE_MAX_CURRENT self.pins[prefix + 'enable'] = (ReplicapeDACEnable, channel) self.enabled_channels = {ch: False for cl, ch in self.pins.values()} self.disable_stepper_cmd = "send_spi bus=%d dev=%d msg=%s" % ( REPLICAPE_SHIFT_REGISTER_BUS, REPLICAPE_SHIFT_REGISTER_DEVICE, "".join(["%02x" % (x,) for x in reversed(shift_registers)])) if [i for i in [0, 1, 2] if 11+i in self.stepper_dacs]: # Enable xyz steppers shift_registers[0] &= ~1 if [i for i in [3, 4] if 11+i in self.stepper_dacs]: # Enable eh steppers shift_registers[3] &= ~1 if (config.getboolean('standstill_power_down', False) and self.stepper_dacs): shift_registers[4] &= ~1 self.enable_stepper_cmd = "send_spi bus=%d dev=%d msg=%s" % ( REPLICAPE_SHIFT_REGISTER_BUS, REPLICAPE_SHIFT_REGISTER_DEVICE, "".join(["%02x" % (x,) for x in reversed(shift_registers)])) self.host_mcu.add_config_cmd(self.disable_stepper_cmd) self.last_stepper_time = 0.
def __init__(self, printer, config): self.printer = printer try: pins.get_printer_pins(printer).register_chip('multi_pin', self) except pins.error: pass self.pin_type = None self.pin_list = [pin.strip() for pin in config.get('pins').split(',')] self.mcu_pins = []
def __init__(self, printer, config, clocksync): self._printer = printer self._clocksync = clocksync self._reactor = printer.get_reactor() self._name = config.get_name() if self._name.startswith('mcu '): self._name = self._name[4:] # Serial port self._serialport = config.get('serial', '/dev/ttyS0') baud = 0 if not (self._serialport.startswith("/dev/rpmsg_") or self._serialport.startswith("/tmp/klipper_host_")): baud = config.getint('baud', 250000, minval=2400) self._serial = serialhdl.SerialReader(self._reactor, self._serialport, baud) # Restarts self._restart_method = 'command' if baud: rmethods = {m: m for m in [None, 'arduino', 'command', 'rpi_usb']} self._restart_method = config.getchoice('restart_method', rmethods, None) self._reset_cmd = self._config_reset_cmd = None self._emergency_stop_cmd = None self._is_shutdown = self._is_timeout = False self._shutdown_msg = "" printer.set_rollover_info(self._name, None) # Config building pins.get_printer_pins(printer).register_chip(self._name, self) self._oid_count = 0 self._config_objects = [] self._init_cmds = [] self._config_cmds = [] self._config_crc = None self._pin_map = config.get('pin_map', None) self._custom = config.get('custom', '') self._mcu_freq = 0. # Move command queuing ffi_main, self._ffi_lib = chelper.get_ffi() self._max_stepper_error = config.getfloat('max_stepper_error', 0.000025, minval=0.) self._stepqueues = [] self._steppersync = None # Stats self._stats_sumsq_base = 0. self._mcu_tick_avg = 0. self._mcu_tick_stddev = 0. self._mcu_tick_awake = 0.
def __init__(self, printer, config): self._printer = printer # Serial port self._serialport = config.get('serial', '/dev/ttyS0') if self._serialport.startswith("/dev/rpmsg_"): # Beaglbone PRU baud = 0 else: baud = config.getint('baud', 250000, minval=2400) self.serial = serialhdl.SerialReader(printer.reactor, self._serialport, baud) self.is_shutdown = False self._shutdown_msg = "" self._timeout_timer = printer.reactor.register_timer( self.timeout_handler) self._restart_method = 'command' if baud: rmethods = {m: m for m in ['arduino', 'command', 'rpi_usb']} self._restart_method = config.getchoice('restart_method', rmethods, 'arduino') # Config building if printer.bglogger is not None: printer.bglogger.set_rollover_info("mcu", None) pins.get_printer_pins(printer).register_chip("mcu", self) self._emergency_stop_cmd = None self._reset_cmd = self._config_reset_cmd = None self._oid_count = 0 self._config_objects = [] self._init_cmds = [] self._config_cmds = [] self._config_crc = None self._pin_map = config.get('pin_map', None) self._custom = config.get('custom', '') # Move command queuing ffi_main, self._ffi_lib = chelper.get_ffi() self._max_stepper_error = config.getfloat('max_stepper_error', 0.000025, minval=0.) self._stepqueues = [] self._steppersync = None # Print time to clock epoch calculations self._print_start_time = 0. self._mcu_freq = 0. # Stats self._stats_sumsq_base = 0. self._mcu_tick_avg = 0. self._mcu_tick_stddev = 0. self._mcu_tick_awake = 0.
def __init__(self, printer, config): pins.get_printer_pins(printer).register_chip('replicape', self) revisions = {'B3': 'B3'} config.getchoice('revision', revisions) self.host_mcu = mcu.get_printer_mcu(printer, config.get('host_mcu')) # Setup enable pin self.mcu_enable = pins.setup_pin(printer, 'digital_out', config.get('enable_pin', '!P9_41')) self.mcu_enable.setup_max_duration(0.) self.enabled_channels = {} # Setup power pins self.pins = { "power_e": (pca9685_pwm, 5), "power_h": (pca9685_pwm, 3), "power_hotbed": (pca9685_pwm, 4), "power_fan0": (pca9685_pwm, 7), "power_fan1": (pca9685_pwm, 8), "power_fan2": (pca9685_pwm, 9), "power_fan3": (pca9685_pwm, 10) } # Setup stepper config self.stepper_dacs = {} shift_registers = [1] * 5 for port, name in enumerate('xyzeh'): prefix = 'stepper_%s_' % (name, ) sc = config.getchoice(prefix + 'microstep_mode', ReplicapeStepConfig, 'disable') if sc is None: continue if config.getboolean(prefix + 'chopper_off_time_high', False): sc |= 1 << 3 if config.getboolean(prefix + 'chopper_hysteresis_high', False): sc |= 1 << 2 if config.getboolean(prefix + 'chopper_blank_time_high', True): sc |= 1 << 1 shift_registers[port] = sc channel = port + 11 cur = config.getfloat(prefix + 'current', above=0., maxval=REPLICAPE_MAX_CURRENT) self.stepper_dacs[channel] = cur / REPLICAPE_MAX_CURRENT self.pins[prefix + 'enable'] = (ReplicapeDACEnable, channel) shift_registers.reverse() self.host_mcu.add_config_cmd( "send_spi bus=%d dev=%d msg=%s" % (REPLICAPE_SHIFT_REGISTER_BUS, REPLICAPE_SHIFT_REGISTER_DEVICE, "".join(["%02x" % (x, ) for x in shift_registers])))
def lookup_enable_pin(printer, pin): if pin is None: return StepperEnablePin(None, 9999) pin_params = pins.get_printer_pins(printer).lookup_pin( 'digital_out', pin, 'stepper_enable') enable = pin_params.get('class') if enable is None: mcu_enable = pin_params['chip'].setup_pin(pin_params) mcu_enable.setup_max_duration(0.) pin_params['class'] = enable = StepperEnablePin(mcu_enable) return enable
def __init__(self, printer, config): enable_pin_params = pins.get_printer_pins(printer).parse_pin_desc( config.get('enable_pin')) self.mcu = enable_pin_params['chip'] self.pin = enable_pin_params['pin'] self.mcu.add_config_object(self) scale = config.getfloat('scale', 1., above=0.) self.channels = [None] * 6 for i in range(len(self.channels)): val = config.getfloat('channel_%d' % (i+1,), None, minval=0., maxval=scale) if val is not None: self.channels[i] = int(val * 256. / scale + .5)
def __init__(self, config): printer = config.get_printer() enable_pin_params = pins.get_printer_pins(printer).lookup_pin( 'digital_out', config.get('enable_pin')) if enable_pin_params['invert']: raise pins.error("ad5206 can not invert pin") self.mcu = enable_pin_params['chip'] self.pin = enable_pin_params['pin'] self.mcu.add_config_object(self) scale = config.getfloat('scale', 1., above=0.) self.channels = [None] * 6 for i in range(len(self.channels)): val = config.getfloat('channel_%d' % (i+1,), None, minval=0., maxval=scale) if val is not None: self.channels[i] = int(val * 256. / scale + .5)
def __init__(self, printer, config): self.name = config.section if self.name.startswith('stepper_'): self.name = self.name[8:] self.need_motor_enable = True # Stepper definition self.mcu_stepper = pins.setup_pin( printer, 'stepper', config.get('step_pin')) dir_pin_params = pins.get_printer_pins(printer).lookup_pin( 'digital_out', config.get('dir_pin')) self.mcu_stepper.setup_dir_pin(dir_pin_params) self.step_dist = config.getfloat('step_distance', above=0.) self.mcu_stepper.setup_step_distance(self.step_dist) self.step_const = self.mcu_stepper.step_const self.step_delta = self.mcu_stepper.step_delta self.enable = lookup_enable_pin(printer, config.get('enable_pin', None))
def __init__(self, printer, config, name): self.name = name self.step_dist = config.getfloat('step_distance', above=0.) self.inv_step_dist = 1. / self.step_dist self.min_stop_interval = 0. self.mcu_stepper = pins.setup_pin(printer, 'stepper', config.get('step_pin')) dir_pin_params = pins.get_printer_pins(printer).parse_pin_desc( config.get('dir_pin'), can_invert=True) self.mcu_stepper.setup_dir_pin(dir_pin_params) self.mcu_stepper.setup_step_distance(self.step_dist) enable_pin = config.get('enable_pin', None) if enable_pin is not None: self.mcu_enable = pins.setup_pin(printer, 'digital_out', enable_pin) self.mcu_enable.setup_max_duration(0.) self.need_motor_enable = True
def __init__(self, printer, config): self.name = config.section if self.name.startswith('stepper_'): self.name = self.name[8:] self.need_motor_enable = True # Stepper definition self.mcu_stepper = pins.setup_pin(printer, 'stepper', config.get('step_pin')) dir_pin_params = pins.get_printer_pins(printer).parse_pin_desc( config.get('dir_pin'), can_invert=True) self.mcu_stepper.setup_dir_pin(dir_pin_params) self.step_dist = config.getfloat('step_distance', above=0.) self.mcu_stepper.setup_step_distance(self.step_dist) self.step_const = self.mcu_stepper.step_const self.step_delta = self.mcu_stepper.step_delta # Enable pin enable_pin = config.get('enable_pin', None) self.mcu_enable = None if enable_pin is not None: self.mcu_enable = pins.setup_pin(printer, 'digital_out', enable_pin) self.mcu_enable.setup_max_duration(0.)