树莓派4B-细分驱动步进电机

项目介绍

舵机的精度为1度,无法实现超高精度控制。

硬件需求

  1. 树莓派
  2. CDKU- S100-24开关电源
  3. DM542驱动器
  4. 42bygh34步进电机
  5. 220V插头

硬件介绍

DM542驱动器

树莓派4B-细分驱动步进电机-LMLPHP

概述:

应用领域:

电气指标:
树莓派4B-细分驱动步进电机-LMLPHP

控制信号接口:
树莓派4B-细分驱动步进电机-LMLPHP

强电接口:
树莓派4B-细分驱动步进电机-LMLPHP

控制信号时序图:
树莓派4B-细分驱动步进电机-LMLPHP

每转脉冲设定:
树莓派4B-细分驱动步进电机-LMLPHP

工作电流设定:
树莓派4B-细分驱动步进电机-LMLPHP

开关电源

采用 90-264VAC 全范围输入电压,(200W、350W 有拨动开关选择)。可任选一组 5V、12V、24V、36V、48V 单组输出
树莓派4B-细分驱动步进电机-LMLPHP

步进电机

树莓派4B-细分驱动步进电机-LMLPHP

电气指标:
树莓派4B-细分驱动步进电机-LMLPHP

电机接口:
树莓派4B-细分驱动步进电机-LMLPHP

控制信号时序图:
树莓派4B-细分驱动步进电机-LMLPHP

接线方法

共阳极接法

树莓派4B-细分驱动步进电机-LMLPHP

共阴极接法

树莓派4B-细分驱动步进电机-LMLPHP

差分方式接法

树莓派4B-细分驱动步进电机-LMLPHP

接线方式

树莓派GPIO接口和驱动器的接线方式:

步进电机和驱动器的接线方式:

开关电源和220V插头接线方式:

驱动器细分按键调节:

代码展示:

import RPi.GPIO as GPIO
import time

 # 规定GPIO引脚
IN1 = 18      # 接PUL-
IN2 = 16      # 接PUL+
IN3 = 15      # 接DIR-
IN4 = 13      # 接DIR+
 
def setStep(w1, w2, w3, w4):
    GPIO.output(IN1, w1)
    GPIO.output(IN2, w2)
    GPIO.output(IN3, w3)
    GPIO.output(IN4, w4)
 
def stop():
    setStep(0, 0, 0, 0)
 
def backward(delay, steps):  
    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 setup():
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
    GPIO.setup(IN1, GPIO.OUT)      # Set pin's mode is output
    GPIO.setup(IN2, GPIO.OUT)
    GPIO.setup(IN3, GPIO.OUT)
    GPIO.setup(IN4, GPIO.OUT)
 
def loop(angle):
    print ("backward...")
    backward(0.0001, int(angle/0.036))   # 发射脉冲时间间隔0.0001(单位秒)   脉冲个数angle/0.036
        
    print ("stop...")
    stop()                 # stop
    time.sleep(1)          # sleep 3s
 
def destroy():
    GPIO.cleanup()             # 释放数据
 
if __name__ == '__main__':     # Program start from here
    setup()
    while True:
        try:
            a = input("please input angle:")
            loop(float(a))
        except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child function destroy() will be  executed.
            destroy()

此代码的精度为:0.036度

如果希望精度更高,自行调整代码和驱动器细分按键。

结果展示

树莓派4B-细分驱动步进电机-LMLPHP

最后,祝大家学习进步,工作顺心!

07-08 11:32