def __init__(self, config): self.printer = config.get_printer() self.name = config.get_name().split()[-1] self.printer.register_event_handler("klippy:connect", self.handle_connect) # pin setup ppins = self.printer.lookup_object("pins") rx_pin_params = ppins.lookup_pin( config.get('uart_pin'), can_pullup=True) tx_pin_desc = config.get('tx_pin', None) if tx_pin_desc is None: tx_pin_params = rx_pin_params else: tx_pin_params = ppins.lookup_pin(tx_pin_desc) if rx_pin_params['chip'] is not tx_pin_params['chip']: raise ppins.error("TMC2208 rx and tx pins must be on the same mcu") self.mcu = rx_pin_params['chip'] self.pullup = rx_pin_params['pullup'] self.rx_pin = rx_pin_params['pin'] self.tx_pin = tx_pin_params['pin'] self.oid = self.mcu.create_oid() self.tmcuart_send_cmd = None self.mcu.register_config_callback(self.build_config) # Add DUMP_TMC command gcode = self.printer.lookup_object("gcode") gcode.register_mux_command( "DUMP_TMC", "STEPPER", self.name, self.cmd_DUMP_TMC, desc=self.cmd_DUMP_TMC_help) # Setup basic register values self.ifcnt = None self.regs = collections.OrderedDict() self.fields = tmc2130.FieldHelper(Fields, FieldFormatters, self.regs) self.fields.set_field("pdn_disable", True) self.fields.set_field("mstep_reg_select", True) self.fields.set_field("multistep_filt", True) vsense, irun, ihold = tmc2130.get_config_current(config) self.fields.set_field("vsense", vsense) self.fields.set_field("IHOLD", ihold) self.fields.set_field("IRUN", irun) mres, en, thresh = tmc2130.get_config_stealthchop(config, TMC_FREQUENCY) self.fields.set_field("MRES", mres) self.fields.set_field("en_spreadCycle", not en) self.fields.set_field("TPWMTHRS", thresh) # Allow other registers to be set from the config set_config_field = self.fields.set_config_field set_config_field(config, "toff", 3) set_config_field(config, "hstrt", 5) set_config_field(config, "hend", 0) set_config_field(config, "TBL", 2, "driver_BLANK_TIME_SELECT") set_config_field(config, "intpol", True, "interpolate") set_config_field(config, "IHOLDDELAY", 8) set_config_field(config, "TPOWERDOWN", 20) set_config_field(config, "PWM_OFS", 36) set_config_field(config, "PWM_GRAD", 14) set_config_field(config, "pwm_freq", 1) set_config_field(config, "pwm_autoscale", True) set_config_field(config, "pwm_autograd", True) set_config_field(config, "PWM_REG", 8) set_config_field(config, "PWM_LIM", 12)
def __init__(self, config): self.printer = config.get_printer() self.name = config.get_name().split()[-1] self.spi = bus.MCU_SPI_from_config(config, 3, default_speed=4000000) self.gcode = self.printer.lookup_object("gcode") # self.gcode.register_mux_command("DUMP_TMC", "STEPPER", self.name, self.cmd_DUMP_TMC, desc=self.cmd_DUMP_TMC_help) # # Setup basic register values self.regs = collections.OrderedDict() self.fields = tmc2130.FieldHelper(fields, FieldFormatters, self.regs) vsense, irun, ihold, self.sense_resistor = tmc2130.get_config_current( config) #self.fields.set_field("vsense", vsense) self.fields.set_field("IHOLD", ihold) self.fields.set_field("IRUN", irun) mres, en_pwm, thresh = tmc2130.get_config_stealthchop( config, TMC_FREQUENCY) self.fields.set_field("MRES", mres) self.fields.set_field("en_pwm_mode", en_pwm) self.fields.set_field("TPWMTHRS", thresh) # # # Allow other registers to be set from the config set_config_field = self.fields.set_config_field set_config_field(config, "toff", 3) set_config_field(config, "hstrt", 4) set_config_field(config, "hend", 1) set_config_field(config, "TBL", 2) set_config_field(config, "intpol", True, "interpolate") set_config_field(config, "IHOLDDELAY", 6) set_config_field(config, "TPOWERDOWN", 10) set_config_field(config, "PWM_OFS", 128) # set_config_field(config, "PWM_GRAD", 4) # set_config_field(config, "pwm_freq", 1) set_config_field(config, "pwm_autoscale", True) sgt = config.getint('driver_SGT', 0, minval=-64, maxval=63) & 0x7f self.fields.set_field("sgt", sgt) set_config_field(config, "test_mode", 0) set_config_field(config, "direct_mode", 0) # set_config_field(config, "multistep_filt", 1) set_config_field(config, "chm", 0) # self._init_registers()
def __init__(self, config): self.printer = config.get_printer() self.name = config.get_name().split()[-1] self.spi = bus.MCU_SPI_from_config(config, 3, default_speed=100000) # Allow virtual endstop to be created self.diag1_pin = config.get('diag1_pin', None) ppins = self.printer.lookup_object("pins") ppins.register_chip("tmc5160_" + self.name, self) # Add DUMP_TMC, INIT_TMC command gcode = self.printer.lookup_object("gcode") gcode.register_mux_command("SET_TMC_CURRENT", "STEPPER", self.name, self.cmd_SET_TMC_CURRENT, desc=self.cmd_SET_TMC_CURRENT_help) gcode.register_mux_command("DUMP_TMC", "STEPPER", self.name, self.cmd_DUMP_TMC, desc=self.cmd_DUMP_TMC_help) gcode.register_mux_command("SET_TMC_FIELD", "STEPPER", self.name, self.cmd_SET_TMC_FIELD, desc=self.cmd_SET_TMC_FIELD_help) gcode.register_mux_command("INIT_TMC", "STEPPER", self.name, self.cmd_INIT_TMC, desc=self.cmd_INIT_TMC_help) # Setup basic register values self.regs = collections.OrderedDict() self.fields = tmc2130.FieldHelper(fields, SignedFields, FieldFormatters, self.regs) irun, ihold, self.sense_resistor = get_config_current(config) msteps, en_pwm, thresh = \ tmc2130.get_config_stealthchop(config, TMC_FREQUENCY) set_config_field = self.fields.set_config_field # CHOPCONF set_config_field(config, "toff", 3) set_config_field(config, "hstrt", 5) set_config_field(config, "hend", 2) set_config_field(config, "fd3", 0) set_config_field(config, "disfdcc", 0) set_config_field(config, "chm", 0) set_config_field(config, "tbl", 2) set_config_field(config, "vhighfs", 0) set_config_field(config, "vhighchm", 0) set_config_field(config, "tpfd", 4) self.fields.set_field("mres", msteps) # microsteps set_config_field(config, "intpol", True, "interpolate") set_config_field(config, "dedge", 0) set_config_field(config, "diss2g", 0) set_config_field(config, "diss2vs", 0) # COOLCONF set_config_field(config, "semin", 0) # page 52 set_config_field(config, "seup", 0) set_config_field(config, "semax", 0) set_config_field(config, "sedn", 0) set_config_field(config, "seimin", 0) set_config_field(config, "sgt", 0) set_config_field(config, "sfilt", 0) # GCONF self.fields.set_field("en_pwm_mode", en_pwm) # IHOLDIRUN self.fields.set_field("IHOLD", ihold) self.fields.set_field("IRUN", irun) set_config_field(config, "IHOLDDELAY", 6) # PWMCONF set_config_field(config, "PWM_OFS", 30) set_config_field(config, "PWM_GRAD", 0) set_config_field(config, "pwm_freq", 1) set_config_field(config, "pwm_autoscale", True) set_config_field(config, "pwm_autograd", True) set_config_field(config, "freewheel", 0) set_config_field(config, "PWM_REG", 4) set_config_field(config, "PWM_LIM", 12) # TPWMTHRS self.fields.set_field("TPWMTHRS", thresh) # TPOWERDOWN set_config_field(config, "TPOWERDOWN", 10) self._init_registers()
def __init__(self, config): self.printer = config.get_printer() self.name = config.get_name().split()[-1] self.printer.register_event_handler("klippy:connect", self._init_registers) # pin setup ppins = self.printer.lookup_object("pins") rx_pin_params = ppins.lookup_pin( config.get('uart_pin'), can_pullup=True) tx_pin_desc = config.get('tx_pin', None) if tx_pin_desc is None: tx_pin_params = rx_pin_params else: tx_pin_params = ppins.lookup_pin(tx_pin_desc) if rx_pin_params['chip'] is not tx_pin_params['chip']: raise ppins.error("TMC2208 rx and tx pins must be on the same mcu") self.mcu = rx_pin_params['chip'] self.pullup = rx_pin_params['pullup'] self.rx_pin = rx_pin_params['pin'] self.tx_pin = tx_pin_params['pin'] self.oid = self.mcu.create_oid() self.tmcuart_send_cmd = None self.mcu.register_config_callback(self.build_config) # Add DUMP_TMC, INIT_TMC command gcode = self.printer.lookup_object("gcode") gcode.register_mux_command( "SET_TMC_CURRENT", "STEPPER", self.name, self.cmd_SET_TMC_CURRENT, desc=self.cmd_SET_TMC_CURRENT_help) gcode.register_mux_command( "DUMP_TMC", "STEPPER", self.name, self.cmd_DUMP_TMC, desc=self.cmd_DUMP_TMC_help) gcode.register_mux_command( "SET_TMC_FIELD", "STEPPER", self.name, self.cmd_SET_TMC_FIELD, desc=self.cmd_SET_TMC_FIELD_help) gcode.register_mux_command( "INIT_TMC", "STEPPER", self.name, self.cmd_INIT_TMC, desc=self.cmd_INIT_TMC_help) # Setup basic register values self.ifcnt = None self.regs = collections.OrderedDict() self.fields = tmc2130.FieldHelper(Fields, FieldFormatters, self.regs) self.fields.set_field("pdn_disable", True) self.fields.set_field("mstep_reg_select", True) self.fields.set_field("multistep_filt", True) vsense, irun, ihold, self.sense_resistor = \ tmc2130.get_config_current(config) self.fields.set_field("vsense", vsense) self.fields.set_field("IHOLD", ihold) self.fields.set_field("IRUN", irun) mres, en, thresh = tmc2130.get_config_stealthchop(config, TMC_FREQUENCY) self.fields.set_field("MRES", mres) self.fields.set_field("en_spreadCycle", not en) self.fields.set_field("TPWMTHRS", thresh) # Allow other registers to be set from the config set_config_field = self.fields.set_config_field set_config_field(config, "toff", 3) set_config_field(config, "hstrt", 5) set_config_field(config, "hend", 0) set_config_field(config, "TBL", 2) set_config_field(config, "intpol", True, "interpolate") set_config_field(config, "IHOLDDELAY", 8) set_config_field(config, "TPOWERDOWN", 20) set_config_field(config, "PWM_OFS", 36) set_config_field(config, "PWM_GRAD", 14) set_config_field(config, "pwm_freq", 1) set_config_field(config, "pwm_autoscale", True) set_config_field(config, "pwm_autograd", True) set_config_field(config, "PWM_REG", 8) set_config_field(config, "PWM_LIM", 12)