1、理论
28BYJ 步进电机,5V,淘宝买5元左右一个;
驱动使用ULN2003;
减速步进电机
直径:28mm
电压:5V
步进角度:5.625 x 1/64
减速比:1/64
5线4相 可以用普通uln2003芯片驱动,也可以接成2相使用 可以配套开发板使用,直接插接,方便使用 步进电机在开发板上使用。
下面代码中
4096个脉冲,走360度
x----------------------1
1---------------------y
x=4093/360=11…xxxx
y=360/4096=0.088度/脉冲
一个脉冲,走0.088度。
所以写一个函数
moveDeg(方向,延时时间ms,角度)
{
将角度转为脉冲数量
判断正方向:走脉冲;
反方向:走反脉冲
}
*******************我是分割线
2、接线:
OPENMV的:(‘E7’,‘E8’,‘E9’,‘E10’)–ULN2003的IN1,IN2,IN3,IN4
OPENMV的(‘C4’,‘C5’,‘B0’,‘B1’)****–ULN2003的IN1,IN2,IN3,IN4
BY1=stepper28BY(‘E7’,‘E8’,‘E9’,‘E10’)
BY2=stepper28BY(‘C4’,‘C5’,‘B0’,‘B1’)
3、steps28BY .py的函数说明
函数1、引脚初始化__init__(self,p1,p2,p3,p4):
def __init__(self,p1,p2,p3,p4):
Step28BYJ_pin1 = Pin(p1, Pin.OUT_PP, Pin.OUT_PP)
Step28BYJ_pin2 = Pin(p2, Pin.OUT_PP, Pin.OUT_PP)
Step28BYJ_pin3 = Pin(p3, Pin.OUT_PP, Pin.OUT_PP)
Step28BYJ_pin4 = Pin(p4, Pin.OUT_PP, Pin.OUT_PP)
self.i1=Step28BYJ_pin1
self.i2=Step28BYJ_pin2
self.i3=Step28BYJ_pin3
self.i4=Step28BYJ_pin4
主函数中这么使用:stepper28BY是steps28BY文件的一个类。
from steps28BY import stepper28BY
BY1=stepper28BY(‘E7’,‘E8’,‘E9’,‘E10’)
BY2=stepper28BY(‘C4’,‘C5’,‘B0’,‘B1’)
**
2、 def __setStep(self,w1,w2,w3,w4):
**
函数说明:4个管脚的高低电平设置,0–低电平,1–高电平
def __setStep(self,w1,w2,w3,w4):
if w10:
self.i1.low()
else:
self.i1.high()
if w20:
self.i2.low()
else:
self.i2.high()
if w30:
self.i3.low()
else:
self.i3.high()
if w40:
self.i4.low()
else:
self.i4.high()
3. def __stop(self):
停止函数,4个管脚都是低电平。
def __stop(self):
self.__setStep(0,0,0,0)
4 def forward(self,delay,steps):
函数,正转(延时毫秒,总的节拍数(1-4096))
5、 def backward(self,delay,steps):
函数,反转(延时毫秒,总的节拍数(1-4096))
6、 def Move_Degree(self,dirtemp,delay,degtemp):
函数,转动角度(方向(1,正转,-1反转),延时,度数)
steps28BY.py
from pyb import Pin
import time
class stepper28BY:
def __init__(self,p1,p2,p3,p4):
Step28BYJ_pin1 = Pin(p1, Pin.OUT_PP, Pin.OUT_PP)
Step28BYJ_pin2 = Pin(p2, Pin.OUT_PP, Pin.OUT_PP)
Step28BYJ_pin3 = Pin(p3, Pin.OUT_PP, Pin.OUT_PP)
Step28BYJ_pin4 = Pin(p4, Pin.OUT_PP, Pin.OUT_PP)
self.i1=Step28BYJ_pin1
self.i2=Step28BYJ_pin2
self.i3=Step28BYJ_pin3
self.i4=Step28BYJ_pin4
def __setStep(self,w1,w2,w3,w4):
if w1==0:
self.i1.low()
else:
self.i1.high()
if w2==0:
self.i2.low()
else:
self.i2.high()
if w3==0:
self.i3.low()
else:
self.i3.high()
if w4==0:
self.i4.low()
else:
self.i4.high()
def __stop(self):
self.__setStep(0,0,0,0)
def forward(self,delay,steps):
step8n=steps/8
step8L=steps%8
print("step8n=")
print(step8n)
print("step8L=")
print(step8L)
for i in range(0,step8n,1):
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(1,0,0,1)
time.sleep(delay)
if step8L==0:
self.__stop()
return
if step8L==7:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__stop()
return
elif step8L==6:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__stop()
return
elif step8L==5:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__stop()
return
elif step8L==4:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__stop()
return
elif step8L==3:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__stop()
return
elif step8L==2:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__stop()
return
else:
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__stop()
return
def backward(self,delay,steps):
step8n=steps/8
step8L=steps%8
print("step8n=")
print(step8n)
print("step8L=")
print(step8L)
for i in range(0,step8n,1):
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__setStep(1,0,0,1)
time.sleep(delay)
if step8L==0:
self.__stop()
return
if step8L==7:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__setStep(1,0,0,0)
time.sleep(delay)
self.__stop()
return
if step8L==6:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__setStep(1,1,0,0)
time.sleep(delay)
self.__stop()
return
if step8L==5:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__setStep(0,1,0,0)
time.sleep(delay)
self.__stop()
return
if step8L==4:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__setStep(0,1,1,0)
time.sleep(delay)
self.__stop()
return
if step8L==3:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__setStep(0,0,1,0)
time.sleep(delay)
self.__stop()
return
if step8L==2:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__setStep(0,0,1,1)
time.sleep(delay)
self.__stop()
return
else:
self.__setStep(0,0,0,1)
time.sleep(delay)
self.__stop()
return
def Move_Degree(self,dirtemp,delay,degtemp):
painum=degtemp/0.088
if dirtemp==1:
self.forward(delay,painum)
else:
self.backward(delay,painum)
4 main.py
import sensor, image, time,utime
from steps28BY import stepper28BY #导入库
clock = time.clock()
BY1=stepper28BY('E7','E8','E9','E10') #电机1初始化
BY2=stepper28BY('C4','C5','B0','B1')#电机2初始化
BY1.Move_Degree(1,1,180) #电机1转动,正方向,延时毫秒,180度
time.sleep(1000)
BY1.Move_Degree(-1,1,180) #电机1转动,反方向,延时毫秒,180度
time.sleep(1000)
BY2.Move_Degree(1,1,180) #电机2转动,正方向,延时毫秒,180度
time.sleep(1000)
BY2.Move_Degree(-1,1,180)#电机2转动,反方向,延时毫秒,180度
time.sleep(1000)
while(True):
clock.tick()