硬件选择与设计

不管是直流电机还是步进电机,如果想要让其进行正常的转动,必须需要驱动器进行驱动,所以我们在这里选择的步进电机和驱动板型号分别为28BYJ-48-5V和UL2003芯片的五线四相步进电机驱动板。

步进电机驱动原理

要想驱动步进电机进行正常的正反转,就必须要先了解步进电机的驱动时序,此次选择28BYJ-48-5V是四相的电机,按照通电顺序不同可分为以下三种:单四拍,双四拍,八拍三种工作方式,本次实验采取的是八拍的工作方式。下面将列出三种工作方式下的正反转时序:

单四拍:

正转:A - B - C - D 反转:D - C - B - A

双四拍:

正转:AB - BC - CD - DA 反转:DA - DC - BC - AB

八拍:

正转:A - AB - B - BC - C - CD - D - DA

反转:DA - D - CD - C - BC - B - AB - A

GPIO口选择与硬件连线

因为涉及到按键控制步进电机的正反转,所以需要提前准备好八个杜邦线,驱动控制板上有六个引脚,需要连接到Pi的GPIO口上,另外对于按键可以自行设计,我这里是利用杜邦线一段连到Pi上的GPIO口上,另一端接地,进行模拟按键低电平触发。下边将列出具体的连接引脚:

IN1 (GPIO17)

IN2 (GPIO18)

IN3 (GPIO21)

IN4 (GPIO22)

5 V (Pin02)

Ground (Pin39)

key1 (GPIO23) #正转

key2 (GPIO24) #反转

引脚分布与功能图:

程序源码

创建python脚本stepmotor.py

#!/usr/bin/env python

#调用所需要的库

import time

import RPi.GPIO as gpio

#设置为BCM模式

gpio.setmode(gpio.BCM)

#设置所选择的io口

stepPins = [17,18,21,22]

key1 = 23

key2 = 24

#设置所有的io口为输出模式

for pin in stepPins: print ("Setup Pins") gpio.setup(pin,gpio.OUT) gpio.output(pin, False) #低电平触发

gpio.setup(key1, gpio.IN, gpio.PUD_UP)

gpio.setup(key2, gpio.IN, gpio.PUD_UP)

#定义变量

step1 = 0

step2 = 0

waittime = 0.005

#定义正转的序列

stepcount1 = 8

seq1 = []

seq1 = list(range(0, stepcount1))

seq1[0] = [1,0,0,0]

seq1[1] = [1,1,0,0]

seq1[2] = [0,1,0,0]

seq1[3] = [0,1,1,0]

seq1[4] = [0,0,1,0]

seq1[5] = [0,0,1,1]

seq1[6] = [0,0,0,1]

seq1[7] = [1,0,0,1]

#定义反转序列

stepcount2 = 8

seq2 = []

seq2 = list(range(0, stepcount2))

seq2[0] = [1,0,0,1]

seq2[1] = [0,0,0,1]

seq2[2] = [0,0,1,1]

seq2[3] = [1,0,1,0]

seq2[4] = [0,1,1,0]

seq2[5] = [0,1,0,0]

seq2[6] = [1,1,0,0]

seq2[7] = [1,0,0,0]

#开始进行循环转动

while True: if gpio.input(key1) == 0: for pin in range(0, 4): xpin = stepPins[pin] if seq1[step1][pin]!=0: print ("step %i enable %i" %(step1,xpin)) gpio.output(xpin, True) else: gpio.output(xpin, False) step1 += 1 #当序列要结束时,再一次循环序列 if (step1 == stepcount1): step1 = 0 if (step1 < 0): step1 = stepcount1 #延时等待时间 time.sleep(waittime) if gpio.input(key2) == 0: for pin in range(0, 4): xpin = stepPins[pin] if seq2[step2][pin]!=0: print ("step %i enable %i" %(step2,xpin)) gpio.output(xpin, True) else: gpio.output(xpin, False) step2 += 1 #当序列要结束时,再一次循环序列 if (step2 == stepcount2): step2 = 0 if (step2 < 0): step2 = stepcount2 #延时等待时间 time.sleep(waittime)1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

终端运行:

sudo python3 stepmotor.py1

crtl + r 退出

waittime是默认等待时长,可以通过调节其数值,进行调整步进电机的转速。如果脚本运行得太快,电机控制器就跟不上了,可能会导致电机在运转,但是不会转动。这种性能可能取决于你的电机和它的控制器。

代码运行成功后,通过杜邦线一端接地,另一端去接GPIO23口进行模拟按键作用下的正转模式。同上GPIO24口可以进行模拟按键作用下的反转模式。

文章来源: blog.csdn.net,作者:Blue night,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_51072745/article/details/112547814

python控制步进电机转动_python-树莓派通过按键控制步进电机正反转相关推荐

  1. 【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务

    学习目标: 学习普中51单片机的按键控制led灯. 电路图:                      学习内容:         LED灯的十六进制怎么算???         在这给大家算一下:首 ...

  2. c51按键控制灯亮汇编语言,用一个按键控制LED灯亮/暗的汇编程序

    今天又搞了一个小汇编,是用一个按键控制LED灯亮/暗的汇编程序.程序编好后,开始编译,发现又是通不过,找了好几遍也没找到原因,后来找枫雪大哥看了,才找出原因,原来编写程序时不能在中文环境下编写,不然就 ...

  3. python控制步进电机驱动器_树莓派通过GPIO控制步进电机(python)

    步进电机的驱动程序一样是让我费了好大力气才使他正常工作,在代码上走了不少弯路 树莓派不建议直接使用舵机,虽然舵机方便,而且仅需要一根信号线,不过需要舒服pwm信号,而新版的b+板子已经没有了物理的pw ...

  4. 用python实现流程自动化_Python自动化开发 - 流程控制

    一.拾遗主题 1.变量 理解变量在计算机内存中的表示 >>> a = "ABC" Python解释器干了两件事情: 在内存中创建了一个'ABC'的字符串: 在内存 ...

  5. python while语法结构_python语法之流程控制(if while for)

    一.python语法之流程控制 1.1什么是流程控制? 流程控制即控制流程,具体指控制程序的执行流程,而程序的执行流程分为三种结构:顺序结构(之前我们写的代码都是顺序结构).分支结构(判断).循环结构 ...

  6. python控制led屏_python轮询机制控制led实例

    我就废话不多说了,大家还是直接看代码吧! # -*- coding:utf-8 -*- # File: ceshitianqi import urllib2 import json import ti ...

  7. 通过按键控制二极管c语言,单片机一个按键控制一个发光二极管

    满意答案 vs2026 2013.08.31 采纳率:58%    等级:12 已帮助:13269人 以下是用C语言实现的: #include sbit KEY=P1^0; sbit LED=P1^1 ...

  8. 51单片机实现独立按键控制LED灯

    本节博客主要实现以下效果: 3-1独立按键控制LED亮灭 本段代码主要使用了if...else...语句实现按下按下灯亮,松开按键时灯灭 #include <REGX51.H>void m ...

  9. 单片机C51(STC89C52RC)独立按键控制LED亮灭、状态、显示二进制、位移

    目录 1.独立按键控制LED灯亮灭 2.独立按键控制LED灯状态 3.独立按键控制LED灯显示二进制 4.独立按键控制LED灯位移 5.附录 1.独立按键控制LED灯亮灭 独立按键控制LED灯状态,在 ...

  10. Chapter002-FPGA学习之按键控制LED灯和蜂鸣器

    硬件原理 在正点原子开发板中,LED模块高电平驱动,蜂鸣器也是高电平驱动,按键按下,对应引脚为低电平: 原理图如下: 以上设备与FPGA引脚的对照表如下: 设备 引脚名称 对应FPGA引脚 按键 PL ...

最新文章

  1. DNS及DNS有什么作用
  2. 二十四,Arrays和比较器
  3. python就业方向及工资-【行情分享】python就业方向与薪资大揭秘
  4. 【Android基础】点击Back键退出应用程序
  5. 字符设备驱动初体验(hello驱动)
  6. 云原生时代下,容器安全的“四个挑战”和“两个关键”
  7. C#中获取当前时间:System.DateTime.Now.ToString()用法
  8. JavaScript定义类的几种方式
  9. Bootstrap4代码模板
  10. nohttp网络框架
  11. 谨防 ActiveSupport::Cache::Store 缓存 nil 值
  12. 安装报错_MySQL8.0安装后,报错ERROR 1045 (28000)
  13. 自适应布局 的 解决方案
  14. python二级基础题,计算机二级python部分基础操作题
  15. 深度学习《InfoGAN模型》
  16. NAS与SAN的区别
  17. 基于yoloV7-pose添加任意关键点 + 多类别分类网络修改
  18. 杂篇-01-Unity中创建Mesh时遇到的问题
  19. 针对文件流转Base64的操作
  20. c语言 return0作用

热门文章

  1. 千锋人工智能python培训班
  2. 谷粒商城P72根据接口文档编写获取分类的属性分组
  3. 量子笔记:量子计算 toy python implementation from scratch
  4. 管理经验(一)——如何当好一个管理者
  5. Integrating Caching Techniques in CDNs using a Classification Approach
  6. ​【原创】基于SSM的学院排课管理系统(排课管理系统毕业设计源代码)
  7. Leo-IM,开源好用的IM(基于Netty开发)
  8. lua 5.3开发调试环境搭建
  9. MT4.0版下载及相关说明
  10. 申请163邮箱——春节前,申请163邮箱回家过年