Недавно я купил одну из этих плат шагового двигателя и платы водителя - и я не могу найти никакой документации о том, как подключить ее к 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
Ответы:
Вам нужны драйверы от 3,3 до 5 вольт. Моторный комплект, который вы купили, был для Arduino, который использует 5-вольтовый gpio, rpi использует 3,3 вольта, этого достаточно, чтобы отключить светодиоды, но не работает. Вы также можете получить контроллер двигателя, который принимает 3,3 вольт линии управления.
Помните, всегда проверяйте ваш рейтинг вольт!
источник
В статье Adafruit говорится
Если светятся светодиоды, и вы дважды проверили наличие 5 В на красном проводе, пришло время подозревать, что двигатель неисправен.
При отключенном двигателе используйте мультиметр, чтобы проверить сопротивление между каждым проводом и красным проводом. Они все должны быть примерно одинаковыми
источник
Во-первых, какой источник питания вы используете? В конфиге, который я вижу, тот же Vcc используется для управления RPi, двигателем и платой (перемычка замкнута). Я удивлен, что это не сбрасывает Raspberry (обычно слишком много напряжения от +5 В), но я действительно не знаю характеристик мотора - так, может быть?
Можете ли вы заставить шагер двигаться (минимально за один шаг), подсоединив + 5В от источника питания к красному от двигателя и заземлению к оставшимся 4 клеммам в последовательности?
Если светятся светодиоды, а двигатель не двигается, кажется, что он не получает достаточного тока. Если это так, либо получите более мощный источник питания, либо (рекомендуется) добавьте отдельный блок питания для питания двигателя - снимите перемычку и вместо него подключите Vcc к крайнему выводу, и подключите GND к той же линии на макете, что и провод "-" (общая земля, не отсоединяйте тот, который уже есть)
(Существует небольшая вероятность того, что что-то не так с платой. Не могли бы вы предоставить хорошую фотографию обратной стороны платы? (сторона пайки)?
источник
Глядя на код AdaFruit и на ваш, кажется, что последовательность шагов неправильная, в частности, кажется, что вам нужно одновременно управлять двумя выводами, а не одним.
Я думаю, что следующая последовательность должна работать на основе кода AdaFruit:
источник
Я следовал руководству здесь 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 всегда заканчивались в одной и той же точке.
источник