完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
硬件选择与设计
不管是直流电机还是步进电机,如果想要让其进行正常的转动,必须需要驱动器进行驱动,所以我们在这里选择的步进电机和驱动板型号分别为28BYJ-48-5V和UL2003芯片的五线四相步进电机驱动板。 步进电机驱动原理 要想驱动步进电机进行正常的正反转,就必须要先了解步进电机的驱动时序,此次选择28BYJ-48-5V是四相的电机,按照通电顺序不同可分为以下三种:单四拍,双四拍,八拍三种工作方式,本次实验采取的是八拍的工作方式。下面将列出三种工作方式下的正反转时序: 单四拍: 正转:A - B - C - D 反转:D - C - B - A 双四拍: 正转:AB - BC - CD - DA 反转:DA - DC - BC - AB 八拍: 正转:A - AB - B - BC - C - CD - D - DA 反转:DA - D - CD - C - BC - B - AB - A GPIO口选择与硬件连线 因为涉及到按键控制步进电机的正反转,所以需要提前准备好八个杜邦线,驱动控制板上有六个引脚,需要连接到Pi的GPIO口上,另外对于按键可以自行设计,我这里是利用杜邦线一段连到Pi上的GPIO口上,另一端接地,进行模拟按键低电平触发。下边将列出具体的连接引脚: IN1 (GPIO17) IN2 (GPIO18) IN3 (GPIO21) IN4 (GPIO22) 5 V (Pin02) Ground (Pin39) key1 (GPIO23) #正转 key2 (GPIO24) #反转 引脚分布与功能图: 程序源码 创建python脚本stepmotor.py #!/usr/bin/env python #调用所需要的库 import time import RPi.GPIO as gpio #设置为BCM模式 gpio.setmode(gpio.BCM) #设置所选择的io口 stepPins = [17,18,21,22] key1 = 23 key2 = 24 #设置所有的io口为输出模式 for pin in stepPins: print ("Setup Pins") gpio.setup(pin,gpio.OUT) gpio.output(pin, False) #低电平触发 gpio.setup(key1, gpio.IN, gpio.PUD_UP) gpio.setup(key2, gpio.IN, gpio.PUD_UP) #定义变量 step1 = 0 step2 = 0 waittime = 0.005 #定义正转的序列 stepcount1 = 8 seq1 = [] seq1 = list(range(0, stepcount1)) seq1[0] = [1,0,0,0] seq1[1] = [1,1,0,0] seq1[2] = [0,1,0,0] seq1[3] = [0,1,1,0] seq1[4] = [0,0,1,0] seq1[5] = [0,0,1,1] seq1[6] = [0,0,0,1] seq1[7] = [1,0,0,1] #定义反转序列 stepcount2 = 8 seq2 = [] seq2 = list(range(0, stepcount2)) seq2[0] = [1,0,0,1] seq2[1] = [0,0,0,1] seq2[2] = [0,0,1,1] seq2[3] = [1,0,1,0] seq2[4] = [0,1,1,0] seq2[5] = [0,1,0,0] seq2[6] = [1,1,0,0] seq2[7] = [1,0,0,0] #开始进行循环转动 while True: if gpio.input(key1) == 0: for pin in range(0, 4): xpin = stepPins[pin] if seq1[step1][pin]!=0: print ("step %i enable %i" %(step1,xpin)) gpio.output(xpin, True) else: gpio.output(xpin, False) step1 += 1 #当序列要结束时,再一次循环序列 if (step1 == stepcount1): step1 = 0 if (step1 < 0): step1 = stepcount1 #延时等待时间 time.sleep(waittime) if gpio.input(key2) == 0: for pin in range(0, 4): xpin = stepPins[pin] if seq2[step2][pin]!=0: print ("step %i enable %i" %(step2,xpin)) gpio.output(xpin, True) else: gpio.output(xpin, False) step2 += 1 #当序列要结束时,再一次循环序列 if (step2 == stepcount2): step2 = 0 if (step2 < 0): step2 = stepcount2 #延时等待时间 time.sleep(waittime) 终端运行: sudo python3 stepmotor.py crtl + r 退出 waittime是默认等待时长,可以通过调节其数值,进行调整步进电机的转速。如果脚本运行得太快,电机控制器就跟不上了,可能会导致电机在运转,但是不会转动。这种性能可能取决于你的电机和它的控制器。 代码运行成功后,通过杜邦线一端接地,另一端去接GPIO23口进行模拟按键作用下的正转模式。同上GPIO24口可以进行模拟按键作用下的反转模式。 |
|
|
|
只有小组成员才能发言,加入小组>>
2386 浏览 0 评论
8910 浏览 4 评论
36486 浏览 19 评论
4981 浏览 0 评论
24307 浏览 34 评论
1375浏览 2评论
1627浏览 1评论
2017浏览 1评论
1441浏览 0评论
386浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:14 , Processed in 1.210982 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号