树莓派4B控制步进电机 进阶教程(一)

树莓派4B控制步进电机 进阶教程(一)

  • 步进电机
  • 树莓派与步进电机连接
  • 电机驱动代码
  • 参考资料

步进电机

本次树莓派与驱动电机连接采用的是28BYJ-48步进电机。电机相关介绍可以看28BYJ步进电机原理。还需要配套的电机驱动模块一起使用来放大驱动信号。可以采用UNL2003驱动模块,简单便宜。

树莓派4B控制步进电机 进阶教程(一)_第1张图片

树莓派4B控制步进电机 进阶教程(一)_第2张图片


树莓派与步进电机连接

树莓派4B控制步进电机 进阶教程(一)_第3张图片
电机直接接驱动模块ABCD端,驱动模块上的”+、-“接树莓上一个5V电源引脚和一个GND引脚。树莓派引脚图如下图所示:树莓派与驱动板的连接可以选择四个空引脚连接。需要注意的是,树莓派引脚有两种方式编号。选择哪一种都可以,只是在后面编码的时候要强制指定命名规则。
第一种方式是使用 BOARD 编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。使用该方式的优点是无需考虑主板的修订版本,硬件始终都是可用的状态。无需重新连接线路和更改代码。
第二种方式是使用BCM编号。这是一种较底层的工作方式—该方式参考Broadcom SOC的通道编号。使用过程中,始终要保证主板上的针脚与图表上标注的通道编号相对应。脚本可能在Raspberry Pi 主板上进行修订版本更新时无法工作。

树莓派4B控制步进电机 进阶教程(一)_第4张图片


电机驱动代码

这部分代码是结合Picamera的一个录像,我已经注释掉了无关的。目前就是实现转一圈,自己也可以根据需求,控制它转固定角度,正反转,循环。代码很多博主都有写出来,可以参考一下其他博主的代码,代码其实很好写,最重要的是要理解电机的原理。可以查看电机的使用手册。了解它驱动方法和基本参数(减速比、步距角度),在不同的驱动模式下,算出1个脉冲电机旋转多少角度,旋转一圈需要多少个脉冲,就可以达到上述一些功能。如果之前有用单片机玩过的同学那就更好理解了。

树莓派4B控制步进电机 进阶教程(一)_第5张图片

import RPi.GPIO as GPIO
import time
import picamera
 
IN1 = 29
IN2 = 31   #树莓派的物理引脚与驱动模块连接
IN3 = 33
IN4 = 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()

 


参考资料

1、RPi.GPIO 模块使用基础
2、28BYJ步进电机原理
3、28BYJ-48步进电机使用手册

你可能感兴趣的:(树莓派,Raspberry,Linux,Raspberry,Pi,步进电机,电机,自动化,python,单片机)