Exemple #1
0
 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
Exemple #2
0
 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)
Exemple #3
0
 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
Exemple #4
0
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
Exemple #5
0
 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
Exemple #6
0
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