【树莓派】树莓派控制步进电机
树莓派控制树莓派控制步进电机
学校实验室有个步进电机 想着用树莓派控制一下
硬件原理 接线
接好线 确定好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()
演示视频
树莓派驱动步进电机