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

硬件选择与设计

不管是直流电机还是步进电机,如果想要让其进行正常的转动,必须需要驱动器进行驱动,所以我们在这里选择的步进电机和驱动板型号分别为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控制步进电机转动_python-树莓派通过按键控制步进电机正反转_第1张图片

程序源码

创建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控制步进电机转动)