コード例 #1
0
 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.
コード例 #2
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 = []
コード例 #3
0
 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.
コード例 #4
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.
コード例 #5
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])))
コード例 #6
0
ファイル: stepper.py プロジェクト: Re-D-Bot/klipper
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
コード例 #7
0
 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)
コード例 #8
0
 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)
コード例 #9
0
ファイル: stepper.py プロジェクト: thespacemaker/klipper
 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))
コード例 #10
0
ファイル: stepper.py プロジェクト: gladio145/klipper
    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
コード例 #11
0
 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.)