diff --git a/scripts/examples/23-Motor-Shield/motor.py b/scripts/examples/23-Motor-Shield/motor.py new file mode 100644 index 000000000..f5d95f6f0 --- /dev/null +++ b/scripts/examples/23-Motor-Shield/motor.py @@ -0,0 +1,31 @@ +# Motor Shield DC Motor Example +# +# This example shows off how to use your motor shield +# to control 2 DC motor. + +import time +from tb6612 import Motor + +m1 = Motor(1) # motor 1: A0 and A1 +m2 = Motor(2) # motor 2: B0 and B1 + +while (True): + m1.set_speed(100) # Forward + m2.set_speed(100) # Forward + time.sleep(1000) + + m1.set_speed(0) # Stop + m2.set_speed(0) # Stop + time.sleep(1000) + + m1.set_speed(-100) # Reverse + m2.set_speed(-100) # Reverse + time.sleep(1000) + + m1.set_speed(0) # Stop + m2.set_speed(0) # Stop + time.sleep(1000) + + m1.set_speed(-50) # Reverse slow + m2.set_speed(-50) # Reverse slow + time.sleep(1000) diff --git a/scripts/examples/23-Motor-Shield/stepper.py b/scripts/examples/23-Motor-Shield/stepper.py new file mode 100644 index 000000000..a4937168a --- /dev/null +++ b/scripts/examples/23-Motor-Shield/stepper.py @@ -0,0 +1,14 @@ +# Motor Shield Stepper Motor Example +# +# This example shows off how to use your motor shield +# to control 1 stepper motor. + +import time +from tb6612 import Stepper + +stepper = Stepper() # default rpm=2, power=50 +stepper.set_speed(1) # rpm = 1 +stepper.set_power(80) #set pwm +while (True): + stepper.step(200) # motor rotates 1 circle + time.sleep(1000) diff --git a/scripts/libraries/tb6612.py b/scripts/libraries/tb6612.py new file mode 100644 index 000000000..36a591142 --- /dev/null +++ b/scripts/libraries/tb6612.py @@ -0,0 +1,59 @@ +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) +