经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » 树莓派 » 查看文章
树莓派4B-高精度驱动步进电机
来源:cnblogs  作者:猫吃耗子  时间:2023/7/10 9:51:46  对本文有异议

树莓派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

代码展示:

  1. import RPi.GPIO as GPIO
  2. import time
  3. # 规定GPIO引脚
  4. IN1 = 18 # 接PUL-
  5. IN2 = 16 # 接PUL+
  6. IN3 = 15 # 接DIR-
  7. IN4 = 13 # 接DIR+
  8. def setStep(w1, w2, w3, w4):
  9. GPIO.output(IN1, w1)
  10. GPIO.output(IN2, w2)
  11. GPIO.output(IN3, w3)
  12. GPIO.output(IN4, w4)
  13. def stop():
  14. setStep(0, 0, 0, 0)
  15. def backward(delay, steps):
  16. for i in range(0, steps):
  17. setStep(1, 0, 0, 0)
  18. time.sleep(delay)
  19. setStep(0, 1, 0, 0)
  20. time.sleep(delay)
  21. setStep(0, 0, 1, 0)
  22. time.sleep(delay)
  23. setStep(0, 0, 0, 1)
  24. time.sleep(delay)
  25. def setup():
  26. GPIO.setwarnings(False)
  27. GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical location
  28. GPIO.setup(IN1, GPIO.OUT) # Set pin's mode is output
  29. GPIO.setup(IN2, GPIO.OUT)
  30. GPIO.setup(IN3, GPIO.OUT)
  31. GPIO.setup(IN4, GPIO.OUT)
  32. def loop(angle):
  33. print ("backward...")
  34. backward(0.0001, int(angle/0.036)) # 发射脉冲时间间隔0.0001(单位秒) 脉冲个数angle/0.036
  35. print ("stop...")
  36. stop() # stop
  37. time.sleep(1) # sleep 3s
  38. def destroy():
  39. GPIO.cleanup() # 释放数据
  40. if __name__ == '__main__': # Program start from here
  41. setup()
  42. while True:
  43. try:
  44. a = input("please input angle:")
  45. loop(float(a))
  46. except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child function destroy() will be executed.
  47. destroy()

此代码的精度为:0.036度

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

结果展示

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

原文链接:https://www.cnblogs.com/itduan/p/17536954.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号