Похоже, что вы в основном там, но конкретная последовательность не делает шаговый шаг.В L293D значения выводов ввода-вывода, по сути, являются тем, чем мы управляем катушкой, и я думаю, что здесь coil_A и coil_B - это две катушки, 1 и 2 которых являются их концами (две катушки типичны для биполярного шагового двигателя).Итак, вы применили следующие состояния:
1100 == == No power
0110 << >> both coils energised
0011 == == No power
1001 >> << both coils energised the opposite way
Это не обеспечивает руководство для двигателя и скорее всего просто приведет к вибрации.Попробуйте шаблон полного шага, в котором вы изменяете направление одной катушки за раз:
fullsteps = ((0,1,0,1), (0,1,1,0), (1,0,1,0), (1,0,0,1))
for i in range(0, steps):
for pattern in fullsteps:
setStep(*pattern)
time.sleep(delay)
Следующий вариант, который можно попробовать, это половинный шаг, где мы позволяем катушкам сделать два шага для перехода из одного направления.на другой:
halfsteps = ((0,1,0,1), (0,1,0,0), (0,1,1,0), (0,0,1,0),
(1,0,1,0), (1,0,0,0), (1,0,0,1), (0,0,0,1))
На второй взгляд, это на самом деле шаблон, использованный в вашей первой ссылке (чуть ниже комментария «настроить, если отличается» - только в обратном направлении и два полушагов не в фазе сверсия здесь).
Всегда, по крайней мере, одна катушка запитана, удерживая двигатель от падения в неизвестное положение.
Если мы сравним таблицы, показанные в http://www.nmbtc.com/step-motors/engineering/full-half-and-microstepping/, то их таблицы будут использовать порядок AB ~ A ~ B, в то время как ваш код использует A ~ AB ~ B.Таким образом, другой способ заставить код работать, это просто поменять местами B и ~ A:
def setStep(w1, w3, w2, 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)