Як підключити кроковий мотор?


10

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

Хтось знає, де я можу шукати додаткову інформацію про те, як підключити малиновий пі до крокового двигуна?

Оновлення: 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 вольт.

Пам'ятайте завжди перевіряйте свої вольт-оцінки !!


[Похитується головою] Я не думав про це - чи є спосіб змусити контролер двигуна працювати, про який ви можете придумати, - я розумію, що я прошу щось чудодійне, чи мені просто не пощастило?
Стів Френч

@SteveFrench, тому вони роблять драйвери подвійної напруги, які буферують між напругами, я купував деякі на ebay місяці тому, але не можу згадати частину ні. вони поширені та легко доступні
1313

Але червоний на фотографії підключений до 5-контактного контакту, а не до 3.3. Не повинно це бути гаразд ?? Я сам не користувався цим, але думаю, що є деякі застереження ..
goldilocks

1
@goldilocks це залежить від мікросхеми контролера, але, мабуть, ні. Я не шукав таблицю даних для мікросхеми контролера, але більшість мікросхем подвійного напруги використовують 3,3 В io, коли vcc підключено до 3,3 V. але перш ніж спробувати, що вам доведеться переконатися, що це мікросхема подвійного напруги, більшість - це одно напруга. Є також широкі мікросхеми напруги, але в нижньому рядку перевіряється аркуш даних для вашої мікросхеми.
hildred

0

У статті адафрута йдеться

Хоча в коді нижче згадується штифт 18 роз'єму GPIO, який використовується як штифт Enable, це потрібно лише під час використання L293D.

Якщо світлодіодні індикатори горять, і ви двічі перевірили, чи є у вас 5В червоного дроту, прийшов час підозрювати, що двигун несправний.

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


Я прокоментував enable_pin і використав інший мотор, все безрезультатно. Я намагаюсь підходу мумеметра сьогодні - дякую за допомогу
Стів Френч

Я перевірив стійкість - ніякої різниці в стійкості - дуже здивував.
Стів Френч

Який би був хороший спосіб тестування 5В на червоний провід? Я намагався просто поставити мультиметр туди безпосередньо, але імпульс, здається, не вистачить довго, щоб щось зареєструвати.
Стів Френч

0

По-перше, яке джерело живлення ви використовуєте? У конфігурації, яку я бачу, той же Vcc використовується для приводу RPi, мотора та плати (перемичка короткометражна). Я здивований, що не скидає Raspberry (затягуючи занадто багато від + 5V, як правило, це робити), але я дійсно не знаю характеристик двигуна - так, можливо?

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

Якщо світлодіоди загоряються, а мотор не рухається, то, здається, він не надто струм. Якщо це так, або отримайте більш потужне джерело живлення, або (рекомендується) додати окремий блок живлення двигуна - зніміть перемичку і замість неї приєднайте Vcc до крайнього штифта та підключіть GND до тієї ж лінії на дошці, що і провід "-" (загальний заземлення, не відключайте той, який вже є.)

(Є невелика ймовірність, що з дошкою теж щось не так. Чи можете ви надати гарну фотографію зворотного боку дошки? (припоя)?


Я можу змусити кроковий двигун рухатися безпосередньо - зараз я пробую інший метод.
Стів Френч

Щойно спробував метод vcc - той самий результат. Можливо, ці дошки просто не можуть бути використані з пі з певних причин.
Стів Френч

Якщо світлодіоди світиться правильно, то плата працює правильно. Або електродвигун несправний, або він не отримує достатнього струму (або, мабуть, малоймовірно, проводки / роз'єми на стороні двигуна пошкоджені.) Ви намагалися, якщо двигун рухається без використання плати, просто підключивши живлення безпосередньо до своїх контактів?
СФ.

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]

Я, мабуть, скопіював, що помилкою фактична послідовність програми - це послідовність у вас.
Стів Френч

0

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

Але я змінив тип послідовності на 2 (виробники), оскільки тип 1, здавалося, час від часу зупиняв двигун навіть при робочому "серцебитті".

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

Коли WaitTime на 0,001 виконував тестовий CW, а потім використовуючи однакову кількість кроків, CCW створив невелику кількість помилок, тобто він не вирівнювався з того, де він почався.

Встановлення WaitTime до 0,01 дозволило мені показати повторне виконання 4100 кроків, або CW або CCW завжди закінчувались в одній точці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.