树莓派控制步进电机

【树莓派】树莓派控制步进电机


学校实验室有个步进电机 想着用树莓派控制一下

硬件原理 接线

接好线 确定好AB相 我用的这个步进电机驱动器是学校薅的破烂 有点老、
对应接线
pulse_pin = 16 # PUL+ cp+ 脉冲
direction_pin = 13 # DIR+ cw+ 方向 1为正 0为反

就是说 驱动器上
DIR+ 或cw+ 接板载编码 13口 即 GPIO27控制方向 1 时正传 0时反转
PUL+ cp+ 接板载编码16口 即 GPIO23 发脉冲 一个脉冲转动1.2度

PUL- cp- 接树莓派gnd
DIR- cw- 接树莓派gnd

这样 两个gpio就可以控制步进电机

供电 应该是24 v
也是没有 用的12v也能动

请添加图片描述

在这里插入图片描述
在这里插入图片描述
板载编码图
在这里插入图片描述

按键

用到了 7 个按键

分别
右1 步进电机正转
右2 步进电机加速转动 正转
右3 步进电机减速 正转
右4 步进电机停车

左1 步进电机反转
左2 步进电机加速转动 反转
左3 步进电机减速转动 反转
请添加图片描述

软件原理 代码

先setup()初始化
for key_pin in key_pins:
GPIO.setup(key_pin, GPIO.IN ,pull_up_down=GPIO.PUD_UP)
对按键初始化

import RPi.GPIO as GPIO
import time
drive_stepper_motor 函数快速改变pulse_pin 实现发送脉冲

pulse_pin = 16         #    PUL+  cp+ 脉冲
direction_pin = 13     #    DIR+  cw+ 方向  1为正   0为反
key_pins = [23, 21, 29,31,33,35,37]  # 7个按键开关的GPIO引脚
speed = 1
state = 0

def setup_stepper_motor():
    GPIO.setwarnings(False)  # 防止警告信息干扰程序运行。
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(pulse_pin, GPIO.OUT)
    GPIO.setup(direction_pin, GPIO.OUT)
    for key_pin in key_pins:
        GPIO.setup(key_pin, GPIO.IN ,pull_up_down=GPIO.PUD_UP)


def drive_stepper_motor(direction,delay,steps):
    GPIO.output(direction_pin, direction)  # 设置方向(1为正转,0为反转)
    for _ in range(steps):
        if GPIO.input(key_pins[3]) == GPIO.HIGH:  # 按键4没有按下
            GPIO.output(pulse_pin, GPIO.HIGH)
            time.sleep(delay/speed)
            GPIO.output(pulse_pin, GPIO.LOW)
            time.sleep(delay/speed)

def cleanup():
    GPIO.cleanup()

if __name__ == "__main__":

    try:
        while True:
            setup_stepper_motor()
            if GPIO.input(key_pins[0]) == GPIO.LOW:    #按键1按下   正转
                drive_stepper_motor(1, 0.005, 200)
            elif GPIO.input(key_pins[1]) == GPIO.LOW:  # 按键2按下
                speed += 1
                drive_stepper_motor(1, 0.005, 200)
            elif GPIO.input(key_pins[2]) == GPIO.LOW:  # 按键3按下
                speed -= 1
                drive_stepper_motor(1, 0.005, 200)

            elif GPIO.input(key_pins[4]) == GPIO.LOW:  # 按键5按下
                drive_stepper_motor(0, 0.005, 200)
            elif GPIO.input(key_pins[5]) == GPIO.LOW:  # 按键6按下
                speed += 1
                drive_stepper_motor(0, 0.005, 200)
            elif GPIO.input(key_pins[6]) == GPIO.LOW:  # 按键7按下
                speed -= 1
                drive_stepper_motor(0, 0.005, 400)



    except KeyboardInterrupt:
        pass
    finally:
        cleanup()


演示视频

树莓派驱动步进电机

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值