def __init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name, internalStepPin, internalDirPin): Stepper_00B1.__init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name, internalStepPin, internalDirPin) self.dac = PWM_DAC(dac_channel) self.state = 0 # The initial state of shift register
def __init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name): Stepper_00B1.__init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name) self.dac = PWM_DAC(dac_channel) if name in ["X", "E", "H"]: self.state = 0x1 # The initial state of shift register else: self.state = 0x0 self.shift_reg.set_state(self.state)
def __init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name): Stepper.__init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name) self.dac = PWM_DAC(dac_channel) self.state = 0 # The initial state of shift register
class Stepper_00B1(Stepper): def __init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name): Stepper.__init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name) self.dac = PWM_DAC(dac_channel) self.state = 0 # The initial state of shift register def set_microstepping(self, value, force_update=False): """ Todo: Find an elegant way for this """ EN_CFG1 = (1 << 7) DIS_CFG1 = (0 << 7) EN_CFG2 = (1 << 5) DIS_CFG2 = (0 << 5) CFG2_H = (1 << 4) CFG2_L = (0 << 4) CFG1_H = (1 << 6) CFG1_L = (0 << 6) if value == 0: # GND, GND state = EN_CFG2 | CFG2_L | EN_CFG1 | CFG1_L self.microsteps = 1 elif value == 1: # GND, VCC state = EN_CFG2 | CFG2_L | EN_CFG1 | CFG1_H self.microsteps = 2 elif value == 2: # GND, open state = EN_CFG2 | CFG2_L | DIS_CFG1 | CFG1_L self.microsteps = 2 elif value == 3: # VCC, GND state = EN_CFG2 | CFG2_H | EN_CFG1 | CFG1_L self.microsteps = 4 elif value == 4: # VCC, VCC state = EN_CFG2 | CFG2_H | EN_CFG1 | CFG1_H self.microsteps = 16 elif value == 5: # VCC, open state = EN_CFG2 | CFG2_H | DIS_CFG1 | CFG1_L self.microsteps = 4 elif value == 6: # open, GND state = DIS_CFG2 | CFG2_L | EN_CFG1 | CFG1_L self.microsteps = 16 elif value == 7: # open, VCC state = DIS_CFG2 | CFG2_L | EN_CFG1 | CFG1_H self.microsteps = 4 elif value == 8: # open, open state = DIS_CFG2 | CFG2_L | DIS_CFG1 | CFG1_L self.microsteps = 16 self.shift_reg.set_state(state, 0xF0) self.mmPrStep = 1.0 / (self.steps_pr_mm * self.microsteps) # update the Path class with new values stepper_num = Path.axis_to_index(self.name) Path.steps_pr_meter[stepper_num] = self.get_steps_pr_meter() logging.debug("Updated stepper " + self.name + " to microstepping " + str(value) + " = " + str(self.microsteps)) self.microstepping = value def set_current_value(self, i_rms): """ Current chopping limit (This is the value you can change) """ self.current_value = i_rms r_sense = 0.1020 # External resistors + internal sqrt_2 = 1.41421356237 v_iref = 2.5 * (i_rms / 1.92) if (v_iref > 2.5): logging.warning("Current ref for stepper " + self.name + " above limit (2.5 V). Setting to 2.5 V") v_iref = 2.5 logging.debug("Setting votage to " + str(v_iref) + " for " + self.name) self.dac.set_voltage(v_iref) def set_disabled(self, force_update=False): if hasattr(Stepper, "printer"): Stepper.printer.enable.set_disabled() def set_enabled(self, force_update=False): if hasattr(Stepper, "printer"): Stepper.printer.enable.set_enabled() def set_decay(self, value): EN_CFG0 = (1 << 3) DIS_CFG0 = (0 << 3) EN_CFG4 = (1 << 2) DIS_CFG4 = (0 << 2) EN_CFG5 = (1 << 1) DIS_CFG5 = (0 << 1) if value == 0: # GND, GND, GND state = DIS_CFG0 | DIS_CFG4 | DIS_CFG5 elif value == 1: # GND, GND, VCC state = DIS_CFG0 | DIS_CFG4 | EN_CFG5 elif value == 2: # GND, VCC, GND state = DIS_CFG0 | EN_CFG4 | DIS_CFG5 elif value == 3: # GND, VCC, VCC state = DIS_CFG0 | EN_CFG4 | EN_CFG5 elif value == 4: # VCC, GND, GND state = EN_CFG0 | DIS_CFG4 | DIS_CFG5 elif value == 5: # VCC, GND, VCC state = EN_CFG0 | DIS_CFG4 | EN_CFG5 elif value == 6: # VCC, VCC, GND state = EN_CFG0 | EN_CFG4 | DIS_CFG5 elif value == 7: # VCC, VCC, VCC state = EN_CFG0 | EN_CFG4 | EN_CFG5 else: logging.warning("Tried to set illegal value for stepper decay: " + str(value)) return self.shift_reg.set_state(state, 0x0E) self.decay = value # For saving the setting with M500
class Stepper_00B1(Stepper): def __init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name): Stepper.__init__(self, stepPin, dirPin, faultPin, dac_channel, shiftreg_nr, name) self.dac = PWM_DAC(dac_channel) self.state = 0 # The initial state of shift register def set_microstepping(self, value, force_update=False): """ Todo: Find an elegant way for this """ EN_CFG1 = (1<<7) DIS_CFG1 = (0<<7) EN_CFG2 = (1<<5) DIS_CFG2 = (0<<5) CFG2_H = (1<<4) CFG2_L = (0<<4) CFG1_H = (1<<6) CFG1_L = (0<<6) if value == 0: # GND, GND state = EN_CFG2 | CFG2_L | EN_CFG1 | CFG1_L self.microsteps = 1 elif value == 1: # GND, VCC state = EN_CFG2 | CFG2_L | EN_CFG1 | CFG1_H self.microsteps = 2 elif value == 2: # GND, open state = EN_CFG2 | CFG2_L | DIS_CFG1 | CFG1_L self.microsteps = 2 elif value == 3: # VCC, GND state = EN_CFG2 | CFG2_H | EN_CFG1 | CFG1_L self.microsteps = 4 elif value == 4: # VCC, VCC state = EN_CFG2 | CFG2_H | EN_CFG1 | CFG1_H self.microsteps = 16 elif value == 5: # VCC, open state = EN_CFG2 | CFG2_H | DIS_CFG1 | CFG1_L self.microsteps = 4 elif value == 6: # open, GND state = DIS_CFG2 | CFG2_L | EN_CFG1 | CFG1_L self.microsteps = 16 elif value == 7: # open, VCC state = DIS_CFG2 | CFG2_L | EN_CFG1 | CFG1_H self.microsteps = 4 elif value == 8: # open, open state = DIS_CFG2 | CFG2_L | DIS_CFG1 | CFG1_L self.microsteps = 16 self.shift_reg.set_state(state,0xF0) self.mmPrStep = 1.0/(self.steps_pr_mm*self.microsteps) # update the Printer class with new values stepper_num = self.printer.axis_to_index(self.name) self.printer.steps_pr_meter[stepper_num] = self.get_steps_pr_meter() logging.debug("Updated stepper "+self.name+" to microstepping "+str(value)+" = "+str(self.microsteps)) self.microstepping = value def set_current_value(self, i_rms): """ Current chopping limit (This is the value you can change) """ self.current_value = i_rms r_sense = 0.1020 # External resistors + internal sqrt_2 = 1.41421356237 v_iref = 2.5*(i_rms/1.92) if(v_iref > 2.5): logging.warning("Current ref for stepper "+self.name+" above limit (2.5 V). Setting to 2.5 V") v_iref = 2.5 logging.debug("Setting votage to "+str(v_iref)+" for "+self.name) self.dac.set_voltage(v_iref) def set_disabled(self, force_update=False): if hasattr(Stepper, "printer"): Stepper.printer.enable.set_disabled() def set_enabled(self, force_update=False): if hasattr(Stepper, "printer"): Stepper.printer.enable.set_enabled() def set_decay(self, value): EN_CFG0 = (1<<3) DIS_CFG0 = (0<<3) EN_CFG4 = (1<<2) DIS_CFG4 = (0<<2) EN_CFG5 = (1<<1) DIS_CFG5 = (0<<1) if value == 0: # GND, GND, GND state = DIS_CFG0 | DIS_CFG4 | DIS_CFG5 elif value == 1: # GND, GND, VCC state = DIS_CFG0 | DIS_CFG4 | EN_CFG5 elif value == 2: # GND, VCC, GND state = DIS_CFG0 | EN_CFG4 | DIS_CFG5 elif value == 3: # GND, VCC, VCC state = DIS_CFG0 | EN_CFG4 | EN_CFG5 elif value == 4: # VCC, GND, GND state = EN_CFG0 | DIS_CFG4 | DIS_CFG5 elif value == 5: # VCC, GND, VCC state = EN_CFG0 | DIS_CFG4 | EN_CFG5 elif value == 6: # VCC, VCC, GND state = EN_CFG0 | EN_CFG4 | DIS_CFG5 elif value == 7: # VCC, VCC, VCC state = EN_CFG0 | EN_CFG4 | EN_CFG5 else: logging.warning("Tried to set illegal value for stepper decay: "+str(value)) return self.shift_reg.set_state(state, 0x0E) self.decay = value # For saving the setting with M500