在Python 3中运行代码以使用步进电机

时间:2019-03-13 12:24:40

标签: python raspberry-pi stepper

我们正在尝试使用Raspberry Pi 3b和8825驱动器使步进电机工作。但是,我们使用的代码无法正常工作并产生错误。

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
control_pins = [14,15,18]
for pin in control_pins:
  GPIO.setup(pin,GPIO.OUT)
  GPIO.output(pin,0)
halfstep_seq = [
  [0,0,0],
  [0,0,1],
  [0,1,0],
  [0,1,1],
  [1,0,0],
  [1,0,1]
]
for i in range(512):
  for halfstep in range(8):
    for pin in range(4):
      GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin])
 time.sleep(0.001)
GPIO.cleanup()

这是我们的控制台告诉我们的:

  

test_stepper.py:6:RuntimeWarning:该频道已在使用中,   无论如何继续。使用GPIO.setwarnings(False)禁用警告。
  GPIO.setup(pin,GPIO.OUT)追溯(最近一次通话):文件   第19行中的“ test_stepper.py”       GPIO.output(control_pins [pin],halfstep_seq [halfstep] [pin])IndexError:列表索引超出范围

1 个答案:

答案 0 :(得分:1)

您在halfstep_seq中有6个步骤,它们的索引将是0到5。但是以后,您可以这样做:

for halfstep in range(8):
    .... halfstep_seq[halfstep]...

因此halfstep的值将介于0到7之间,从而导致IndexError

类似地,您有3个引脚,而不是4个。

因此,您的代码应为:

for i in range(512):
    for halfstep in range(6):
        for pin in range(3):
            GPIO.output(control_pins[pin],halfstep_seq[halfstep][pin])

但是在Python中,最好在不显式引用索引的情况下迭代列表:

  for halfstep in halfsteps:
    for pin_num, pin_value in zip(control_pins, halfstep):
      GPIO.output(pin_num, pin_value)