树莓派实用教程 > 树莓派GPIO教学
树莓派通过GPIO控制步进电机

材料:  

  步进电机 , 步进电机驱动板 ,树莓派 ,排线 (这里我采用的是ULN2003控制板和28BJY-48电机)


连接电路:

驱动板子原理图:


可见,驱动板上有4个输入口:IN1~IN4,这4个口用来接树莓派的4个GPIO口。同时,我们需要为驱动板提供5V的供电,这从哪里来?当然是从树莓派引出来。从下面的GPIO口分布图可以得知,“2”口就是+5V,正好就利用它。



这里我选用 树莓派的第11 ,15 ,16,18 管脚 分别连接 驱动板的 IN1~IN4 . 管脚2 连接驱动板 vcc , 管脚6接GND.

 驱动模块和树莓派连接示意图


编写代码:

#!/usr/bin/python
# Import required libraries
import sys
import time
import RPi.GPIO as GPIO

# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define GPIO signals to use
# Physical pins 11,15,16,18
# GPIO17,GPIO22,GPIO23,GPIO24
StepPins = [17,22,23,24]

# Set all pins as output
for pin in StepPins:
 print "Setup pins"
 GPIO.setup(pin,GPIO.OUT)
 GPIO.output(pin, False)

# Define advanced sequence
# as shown in manufacturers datasheet
Seq = [[1,0,0,1],
      [1,0,0,0],
      [1,1,0,0],
      [0,1,0,0],
      [0,1,1,0],
      [0,0,1,0],
      [0,0,1,1],
      [0,0,0,1]]
       
StepCount = len(Seq)
StepDir = 1 # Set to 1 or 2 for clockwise
           # Set to -1 or -2 for anti-clockwise

# Read wait time from command line
if len(sys.argv)>1:
 WaitTime = int(sys.argv[1])/float(1000)
else:
 WaitTime = 10/float(1000)

# Initialise variables
StepCounter = 0

# Start main loop
while True:

 print StepCounter,
 print Seq[StepCounter]

 for pin in range(0, 4):
   xpin = StepPins[pin]
   if Seq[StepCounter][pin]!=0:
     print " Enable GPIO %i" %(xpin)
     GPIO.output(xpin, True)
   else:
     GPIO.output(xpin, False)

 StepCounter += StepDir

 # If we reach the end of the sequence
 # start again
 if (StepCounter>=StepCount):
   StepCounter = 0
 if (StepCounter<0):
   StepCounter = StepCount+StepDir

 # Wait before moving on
 time.sleep(WaitTime)

树莓派系统默认环境已经包含python2.7 和 RPI.GPIO 模块.

代码保存为 pi.py 直接在命令行上  输入 python  pi.py 即可看到步进电机在缓慢的旋转.

按Ctrl-C退出。

step等待时间

在本例中,默认等待时间设置为0.01秒(10毫秒)。要改变旋转速度,你可以改变这个值。我发现我可以在电机停止工作之前将它减少到4ms。如果脚本运行得太快,电机控制器就跟不上了。这种性能可能取决于你的电机和它的控制器。要指定不同的等待时间,可以使用以下方法:

sudo python stepper.py 20

其中20是毫秒数。

步幅

完整的步幅由8个步幅组成。如果将StepDir设置为-2或2,则步幅数会减少到4。4步步幅速度更快,但扭矩更低。8步步幅速度更慢,但扭矩更高。

现在我们可以使用树莓派和Python脚本来控制步进电机了。如果再加上一个小马达,一个小型机器人的雏形就出现了!