Как подключить шаговый двигатель?

10

Недавно я купил одну из этих плат шагового двигателя и платы водителя - и я не могу найти никакой документации о том, как подключить ее к Raspberry Pi - я пытаюсь использовать учебник AdaFruit, и в то время как я получил все соединения, сделанные к надлежащему Подключены контакты GPIO (светодиоды на плате водителя загораются правильно, мотор ничего не делает).

Кто-нибудь знает, где я могу найти дополнительную информацию о том, как подключить Raspberry Pi к шаговым двигателем?

Обновление: 15 ноября 2013 г. Код моей программы:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

#enable_pin = 18
coil_A_1_pin = 4
coil_A_2_pin = 17
coil_B_1_pin = 23
coil_B_2_pin = 24

#GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)

#GPIO.output(enable_pin, 1)

def forward(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 1, 0)
    setStep(0, 1, 1, 0)
    setStep(0, 1, 0, 1)
    setStep(1, 0, 0, 1)

def backwards(delay, steps):  
  for i in range(0, steps):
    setStep(1, 0, 0, 1)
    setStep(0, 1, 0, 1)
    setStep(0, 1, 1, 0)
    setStep(1, 0, 1, 0)


def setStep(w1, w2, w3, w4):
  GPIO.output(coil_A_1_pin, w1)
  GPIO.output(coil_A_2_pin, w2)
  GPIO.output(coil_B_1_pin, w3)
  GPIO.output(coil_B_2_pin, w4)

while True:
  delay = raw_input("Delay between steps (milliseconds)?")
  steps = raw_input("How many steps forward? ")
  forward(int(delay) / 1000.0, int(steps))
  steps = raw_input("How many steps backwards? ")
  backwards(int(delay) / 1000.0, int(steps))

Мой макет выглядит так введите описание изображения здесь

Моя доска водителя выглядит так введите описание изображения здесь

у меня есть

IN1 => GPIO 4

IN2 => GPIO 17

IN3 => GPIO 23

IN4 => GPIO 24

Стив Френч
источник
Правильно ли горят светодиоды с задержкой 0,5 с?
Джон Ла Рой
Хотел бы я проголосовать несколько раз.
Локо
Они загораются в правильной последовательности с задержкой.
Стив Френч

Ответы:

6

Вам нужны драйверы от 3,3 до 5 вольт. Моторный комплект, который вы купили, был для Arduino, который использует 5-вольтовый gpio, rpi использует 3,3 вольта, этого достаточно, чтобы отключить светодиоды, но не работает. Вы также можете получить контроллер двигателя, который принимает 3,3 вольт линии управления.

Помните, всегда проверяйте ваш рейтинг вольт!

hildred
источник
[Попахивает головой] Я не думал об этом - есть ли какой-нибудь способ заставить контроллер мотора работать, о котором вы можете подумать - я понимаю, что прошу чего-то чудесного здесь, или мне просто не повезло?
Стив Френч
@ SteveFrench, поэтому они делают драйверы шины с двойным напряжением, которые буферизуют между напряжениями, я купил их на ebay несколько месяцев назад, но не могу вспомнить часть нет. они распространены и легко доступны
hildred
Но красный на фото подключен к контакту 5V, а не 3.3. Разве это не должно быть хорошо ?? Я не использовал это сам, но я думаю, что есть некоторые предостережения ..
Златовласка
1
@goldilocks это зависит от чипа контроллера, но, вероятно, нет. Я не искал таблицы данных для микросхемы контроллера, но большинство микросхем с двойным напряжением используют 3,3 В, когда VCC подключен к 3,3 В. но прежде чем пытаться убедиться, что это чип с двойным напряжением, большинство из них - одно напряжение. Существуют также широкие чипы напряжения, но суть в том, чтобы проверить технические характеристики вашего чипа.
Хильдред
0

В статье Adafruit говорится

Хотя в приведенном ниже коде упоминается контакт 18 разъема GPIO, который используется в качестве контакта включения, это требуется только при использовании L293D.

Если светятся светодиоды, и вы дважды проверили наличие 5 В на красном проводе, пришло время подозревать, что двигатель неисправен.

При отключенном двигателе используйте мультиметр, чтобы проверить сопротивление между каждым проводом и красным проводом. Они все должны быть примерно одинаковыми

Джон Ла Рой
источник
Я закомментировал enable_pin и использовал другой мотор, но все безрезультатно. Сегодня я пробую мутиметрический подход - спасибо за вашу помощь
Стив Френч
Я проверил сопротивление - нет разницы в сопротивлении - очень сбивает с толку.
Стив Френч
Что было бы хорошим способом тестирования 5v на красном проводе? Я пытался просто подключить мультиметр напрямую, но, похоже, пульс не длится достаточно долго, чтобы что-то регистрировать.
Стив Френч
0

Во-первых, какой источник питания вы используете? В конфиге, который я вижу, тот же Vcc используется для управления RPi, двигателем и платой (перемычка замкнута). Я удивлен, что это не сбрасывает Raspberry (обычно слишком много напряжения от +5 В), но я действительно не знаю характеристик мотора - так, может быть?

Можете ли вы заставить шагер двигаться (минимально за один шаг), подсоединив + 5В от источника питания к красному от двигателя и заземлению к оставшимся 4 клеммам в последовательности?

Если светятся светодиоды, а двигатель не двигается, кажется, что он не получает достаточного тока. Если это так, либо получите более мощный источник питания, либо (рекомендуется) добавьте отдельный блок питания для питания двигателя - снимите перемычку и вместо него подключите Vcc к крайнему выводу, и подключите GND к той же линии на макете, что и провод "-" (общая земля, не отсоединяйте тот, который уже есть)

(Существует небольшая вероятность того, что что-то не так с платой. Не могли бы вы предоставить хорошую фотографию обратной стороны платы? (сторона пайки)?

Научная фантастика
источник
Я могу заставить шаговый двигатель двигаться прямо - сейчас я пробую другой метод.
Стив Френч
Только что попробовал метод vcc - тот же результат. Может быть, эти доски просто не могут быть использованы с пи по какой-то причине.
Стив Френч,
Если светодиоды горят правильно, то плата работает правильно. Либо двигатель неисправен, либо он не получает достаточного тока (или, что маловероятно, повреждены проводка / разъемы на стороне двигателя.) Вы пробовали, если двигатель двигается без платы, просто подключая питание непосредственно к его контактам?
SF.
0

Глядя на код AdaFruit и на ваш, кажется, что последовательность шагов неправильная, в частности, кажется, что вам нужно одновременно управлять двумя выводами, а не одним.

Я думаю, что следующая последовательность должна работать на основе кода AdaFruit:

# Define simple sequence
StepCount1 = 4
Seq1 = []
Seq1 = range(0, StepCount1)
Seq1[0] = [1,0,1,0]
Seq1[1] = [0,1,1,0]
Seq1[2] = [0,1,0,1]
Seq1[3] = [1,0,0,1]
PiBorg
источник
Я, должно быть, скопировал, что по ошибке фактическая последовательность программы - та последовательность, которая у вас есть.
Стив Френч
0

Я следовал руководству здесь http://www.raspberrypi-spy.co.uk/2012/07/stepper-motor-control-in-python/ , хорошая группировка выводов GPIO, но в конечном итоге на стеке обмена, потому что мотор ничего не делал. За исключением того, что было. При поднятии я чувствовал небольшой «сердцебиение» каждый раз, когда светодиод менялся, я менял параметр WaitTime с 0,5 на меньшие и меньшие значения, пока 0,001 не позволил полный оборот за 8,5 секунд.

Но я изменил тип последовательности на 2 (производители), так как тип 1, казалось, иногда останавливал двигатель даже при работающем «сердцебиении».

Я изменил код, чтобы я мог проверить количество шагов, которые предпринял полный оборот, и построил переключатель командной строки для поворота либо по часовой стрелке, либо против часовой стрелки.

С WaitTime при 0.001, запустив тестовый CW и затем используя то же количество шагов, CCW выдал небольшую ошибку, т. Е. Он не выровнялся там, где начал.

Установка WaitTime в 0,01 позволила мне показать повторное выполнение 4100 шагов, CW или CCW всегда заканчивались в одной и той же точке.

грабить
источник