mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
Merge pull request #410 from SingTown/master
add tb6612 library, DC motors and stepper example
This commit is contained in:
commit
43c0568267
31
scripts/examples/23-Motor-Shield/motor.py
Normal file
31
scripts/examples/23-Motor-Shield/motor.py
Normal file
@ -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)
|
||||
14
scripts/examples/23-Motor-Shield/stepper.py
Normal file
14
scripts/examples/23-Motor-Shield/stepper.py
Normal file
@ -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)
|
||||
59
scripts/libraries/tb6612.py
Normal file
59
scripts/libraries/tb6612.py
Normal file
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user