电机控制方案
直播中

卢表镜

7年用户 1007经验值
私信 关注
[问答]

请问怎样利用树莓派4B去控制步进电机?

树莓派与步进电机是如何连接的?
电机驱动代码是什么?
怎样利用树莓派4B去控制步进电机?

回帖(1)

王娟

2021-6-30 15:37:51
  树莓派4B控制步进电机 进阶教程(一)
  步进电机
  树莓派与步进电机连接
  电机驱动代码
  参考资料
  步进电机
  本次树莓派与驱动电机连接采用的是28BYJ-48步进电机。电机相关介绍可以看28BYJ步进电机原理。还需要配套的电机驱动模块一起使用来放大驱动信号。可以采用UNL2003驱动模块,简单便宜。
  树莓派与步进电机连接
  电机直接接驱动模块ABCD端,驱动模块上的”+、-“接树莓上一个5V电源引脚和一个GND引脚。树莓派引脚图如下图所示:树莓派与驱动板的连接可以选择四个空引脚连接。需要注意的是,树莓派引脚有两种方式编号。选择哪一种都可以,只是在后面编码的时候要强制指定命名规则。
  第一种方式是使用 BOARD 编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。使用该方式的优点是无需考虑主板的修订版本,硬件始终都是可用的状态。无需重新连接线路和更改代码。
  第二种方式是使用BCM编号。这是一种较底层的工作方式—该方式参考Broadcom SOC的通道编号。使用过程中,始终要保证主板上的针脚与图表上标注的通道编号相对应。脚本可能在Raspberry Pi 主板上进行修订版本更新时无法工作。
  电机驱动代码
  这部分代码是结合Picamera的一个录像,我已经注释掉了无关的。目前就是实现转一圈,自己也可以根据需求,控制它转固定角度,正反转,循环。代码很多博主都有写出来,可以参考一下其他博主的代码,代码其实很好写,最重要的是要理解电机的原理。可以查看电机的使用手册。了解它驱动方法和基本参数(减速比、步距角度),在不同的驱动模式下,算出1个脉冲电机旋转多少角度,旋转一圈需要多少个脉冲,就可以达到上述一些功能。如果之前有用单片机玩过的同学那就更好理解了。
  
  import RPi.GPIO as GPIOimport timeimport picamera IN1 = 29IN2 = 31 #树莓派的物理引脚与驱动模块连接IN3 = 33IN4 = 35 def setStep(h1, h2, h3, h4): GPIO.output(IN1, h1) GPIO.output(IN2, h2) GPIO.output(IN3, h3) GPIO.output(IN4, h4) def setup():GPIO.setwarnings(False)GPIO.setmode(GPIO.BOARD) # 强制定义命名规则GPIO.setup(IN1, GPIO.OUT) # 设置为输出模式GPIO.setup(IN2, GPIO.OUT)GPIO.setup(IN3, GPIO.OUT)GPIO.setup(IN4, GPIO.OUT)def stop(): setStep(0, 0, 0, 0) def forward(delay, steps): #A-B-C-D-A通电方式 for i in range(0, steps): setStep(1, 0, 0, 0) time.sleep(delay) setStep(0, 1, 0, 0) time.sleep(delay) setStep(0, 0, 1, 0) time.sleep(delay) setStep(0, 0, 0, 1) time.sleep(delay) def backward(delay, steps): for i in range(0, steps): setStep(0, 0, 0, 1) time.sleep(delay) setStep(0, 0, 1, 0) time.sleep(delay) setStep(0, 1, 0, 0) time.sleep(delay) setStep(1, 0, 0, 0) time.sleep(delay) def loop(): while True: backward(0.003, 512) # 旋转1圈 循环512次 stop() time.sleep(3) def destroy(): GPIO.cleanup() # 释放 with picamera.PiCamera() as camera: setup() #camera.resolution = (1024,960) #camera.start_recording(‘1.h264’) #camera.wait_recording() backward(0.003, 512) 反向旋转一圈后暂停 #camera.stop_recording() stop()
举报

更多回帖

发帖
×
20
完善资料,
赚取积分