Шаговый двигатель с Raspberry Pi работает только с некоторыми временами задержки с GPIOZero - PullRequest
0 голосов
/ 22 февраля 2019

Я экспериментирую с подключением шагового двигателя 28BYJ-48 с платой драйвера ULN2003 к Raspberry Pi Model 3 B с использованием Python и GPIOZero.Я взломал некоторый код, который работает, используя несколько разных примеров, которые я нашел, и теперь я могу заставить двигатель вращаться в любом направлении.Однако существует проблема с задержкой.При повороте против часовой стрелки код работает с использованием любого времени задержки от 2 миллисекунд до 50. Однако по часовой стрелке он работает ТОЛЬКО с задержкой в ​​2 и 3 миллисекунды, но не для других.Очень странно.

Код выглядит так (очень грубо - просто пытаюсь доказать концепцию):

import time
import sys
from gpiozero import OutputDevice as stepper

def moveBackward(stepCounter):

  while True:
      stepDir = -1
      for pin in range(0,4):
         xPin=stepPins[pin]          # Get GPIO
         if seq[stepCounter][pin]!=0:
            xPin.on()
         else:
            xPin.off()

      stepCounter += stepDir
      print(stepCounter) 
      if (stepCounter < 0):
          stepCounter = stepCount+stepDir 

      time.sleep(waitTime)     # Wait before moving onimport time 

def moveForward(stepCounter):
  while True:
      stepDir = 1
      for pin in range(0,4):
          xPin=stepPins[pin]          # Get GPIO
          if seq[stepCounter][pin]!=0:
             xPin.on()
          else:
             xPin.off()

      stepCounter += stepDir
      if (stepCounter >= stepCount):
          stepCounter = 0   

      time.sleep(waitTime) 


IN1 = stepper(17)
IN2 = stepper(22)
IN3 = stepper(23)
IN4 = stepper(24)

stepPins = [IN1,IN2,IN3,IN4] # Motor GPIO pins</p><p>
stepDir = 1        # Set to 1 for clockwise
                       # Set to -1 for anti-clockwise
mode = 0            # mode = 1: Low Speed ==> Higher Power
                       # mode = 0: High Speed ==> Lower Power

if mode:              # Low Speed ==> High Power
  seq = [[1,0,0,1], # Define step sequence as shown in manufacturers datasheet
         [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]]
else:                    # High Speed ==> Low Power 
  seq = [[1,0,0,0], # Define step sequence as shown in manufacturers datasheet
         [0,1,0,0],
         [0,0,1,0],
         [0,0,0,1]]
stepCount = len(seq)


if len(sys.argv)>1: # Read wait time from command line
   waitTime = int(sys.argv[1])/float(1000)
   print(waitTime)
else:
   waitTime = 0.004    # 2 miliseconds was the maximun speed got on my tests
stepCounter = 0



while True:                          # Start main loop

  moveBackward(stepCounter)  # counterclockwise
  #moveForward(stepCounter)  # clockwise

1 Ответ

0 голосов
/ 24 февраля 2019

Итак, я нашел этот код, который прекрасно работает - не уверен, чем вызвана вышеуказанная проблема.https://github.com/custom-build-robots/Stepper-motor-28BYJ-48-Raspberry-Pi/commit/d8f6b5f3ee4d6b22d3fe40d81d0be09287c97c89

...