• 树莓派4B-高精度驱动步进电机


    树莓派4B-高精度驱动步进电机

    项目介绍

    利用4B树莓派控制步进电机转动,精度可达:0.0144度 (即360度/25000)

    适用于非常精密的角度转动。

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

    硬件需求

    硬件型号不同,只要功能相同,代码即可兼用。

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

    硬件介绍

    DM542驱动器

    概述:

    用户使用该驱动器可以设置常用的 8 档电流以及 16 档细分,能够满足大多数场合的应用需要。低中高速运 行都很平稳,噪音小。多种功能可通过外部拨码选择,极大地方便了客户的应用。

    应用领域:

    适合各种中小型自动化设备和仪器,例如:雕刻机、打标机、切割机、激光照排、绘图
    仪、数控机床、自动装配设备等。

    电气指标:

    控制信号接口:

    强电接口:

    控制信号时序图:

    每转脉冲设定:

    工作电流设定:

    开关电源

    采用 90-264VAC 全范围输入电压,(200W、350W 有拨动开关选择)。可任选一组 5V、12V、24V、36V、48V 单组输出

    步进电机

    电气指标:

    电机接口:

    控制信号时序图:

    接线方法

    共阳极接法

    共阴极接法

    差分方式接法

    接线方式

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

    IN1 = 18 # 接PUL-
    IN2 = 16 # 接PUL+
    IN3 = 15 # 接DIR-
    IN4 = 13 # 接DIR+

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

    按照步进电机上的A+、A-等连到驱动器对应位置即可(驱动器上有电机接口标签)

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

    220V插头接开关电源的220V输入电压位置,开关电源的V-和V+接驱动器的输入电源位置

    驱动器细分按键调节:

    SW1、SW2、SW3、SW6开关设置为on

    代码展示:

    python
    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度

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

    结果展示

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


    __EOF__

  • 本文作者: 九院不知名高手-猫吃耗子
  • 本文链接: https://www.cnblogs.com/itduan/p/17536954.html
  • 关于博主: I am a Code Talker
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    ArcGIS10.1软件安装教程
    NVMe SSD 学习总结:04 为什么NVME的SSD越来越受欢迎?
    kettle连接达梦资源库-达梦资源库初始化SQL
    真·Redis缓存优化—97%的优化率你见过嘛? | 京东云技术团队
    C++ 图片完整性校验
    Python学习 -- 正则表达式(re模块)
    汽车电子行业入门指南「知识体系」
    HTML制作一个介绍自己家乡的网站——贵阳,排版整洁,内容丰富,主题鲜明
    JAVA8时间处理学习笔记
    JSR303和拦截器
  • 原文地址:https://www.cnblogs.com/itduan/p/17536954.html