import pyb class Motor: def __init__(self, channel): if channel == 1: self.pin1 = pyb.Pin("P3", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) self.pin2 = pyb.Pin("P2", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) tim = pyb.Timer(4, freq=1000) self.power = tim.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7"), pulse_width_percent=0) elif channel == 2: self.pin1 = pyb.Pin("P1", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) self.pin2 = pyb.Pin("P0", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) tim = pyb.Timer(4, freq=1000) self.power = tim.channel(2, pyb.Timer.PWM, pin=pyb.Pin("P8"), pulse_width_percent=0) def set_speed(self, pwm): if pwm < 0: self.pin1.low() self.pin2.high() else: self.pin1.high() self.pin2.low() self.power.pulse_width_percent(abs(pwm)) class Stepper: def __init__(self, stepnumber=200, rpms=2, power=50): self.stepnumber = stepnumber self.pin1 = pyb.Pin("P3", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) self.pin2 = pyb.Pin("P2", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) self.pin3 = pyb.Pin("P1", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) self.pin4 = pyb.Pin("P0", pyb.Pin.OUT_PP, pyb.Pin.PULL_NONE) tim = pyb.Timer(4, freq=1000) self.power1 = tim.channel(1, pyb.Timer.PWM, pin=pyb.Pin("P7"), pulse_width_percent=0) self.power2 = tim.channel(2, pyb.Timer.PWM, pin=pyb.Pin("P8"), pulse_width_percent=0) self.set_speed(rpms) self.set_power(power) self.phase = self.phase_list() def phase_list(self): phase_list = [(1, 0, 0, 0), (0, 0, 1, 0), (0, 1, 0, 0), (0, 0, 0, 1)] while True: for p in phase_list: yield p def set_speed(self, rpms): self.delay_time = int(1000000 / (rpms * self.stepnumber) / 2) def set_power(self, power): self.power1.pulse_width_percent(power) self.power2.pulse_width_percent(power) def step(self, num): for i in range(num): phase = self.phase.__next__() self.pin1.value(phase[0]) self.pin2.value(phase[1]) self.pin3.value(phase[2]) self.pin4.value(phase[3]) pyb.udelay(self.delay_time)