Шаговый двигатель благодаря своей обширной сфере применения в робототехнике и других приложениях имеет множество средств управления. В этом материале будет рассмотрен один из них: управление с помощью одноплатного компьютера Raspberry Pi.

Для работы с двигателем в данном случае будут использоваться линии GPIO, имеющие напряжение 5 В.

Подключение к драйверу ULN2003A:

Вывод A подключаем к выводу 11 (GPIO 17)
Вывод B подключаем к выводу 12 (GPIO 18)
Вывод C подключаем к выводу 13 (GPIO 21)
Вывод D подключаем к выводу 15 (GPIO 22)
+5V и GND подключаем к выводу 2 и выводу 6 соответственно
При желании можно задействовать другие линии GPIO, но при этом следует переназначить их в коде.
Скрипт на языке Python
1. Импортируем необходимые библиотеки
import time
import RPi.GPIO as GPIO
2. Используем для GPIO нумерацию BCM вместо нумерации физического расположения
GPIO.setmode(GPIO.BCM)
3. Определяем используемые линии GPIO
Pins 18,22,24,26
GPIO24,GPIO25,GPIO8,GPIO7
StepPins = [24,25,8,7]
4. Устанавливаем высе выводы параметра StepPins на выход
print "Setup pins"
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin, False)
5. Определяем счетчик шагов и время ожидания
StepCounter = 0
WaitTime = 0.5
6. Определяем простую последовательность
StepCount1 = 4
Seq1 = []
Seq1 = range(0, StepCount1)
Seq1[0] = [1,0,0,0]
Seq1[1] = [0,1,0,0]
Seq1[2] = [0,0,1,0]
Seq1[3] = [0,0,0,1]
7. Определяем полную последовательность, как приведено в документации
StepCount2 = 8
Seq2 = []
Seq2 = range(0, StepCount2)
Seq2[0] = [1,0,0,0]
Seq2[1] = [1,1,0,0]
Seq2[2] = [0,1,0,0]
Seq2[3] = [0,1,1,0]
Seq2[4] = [0,0,1,0]
Seq2[5] = [0,0,1,1]
Seq2[6] = [0,0,0,1]
Seq2[7] = [1,0,0,1]
8. Выбираем, какую последовательность использовать
Seq = Seq1
StepCount = StepCount1
9. Основной цикл программы
while 1==1:
for pin in range(0, 4):
xpin = StepPins[pin]
if Seq[StepCounter][pin]!=0:
print " Step %i Enable %i" %(StepCounter,xpin)
GPIO.output(xpin, True)
else:
GPIO.output(xpin, False)
StepCounter += 1
# Если мы достигли конца последовательности
# начинаем заново
if (StepCounter==StepCount):
StepCounter = 0
if (StepCounter<0):
StepCounter = StepCount
# Ожидаем перед следующим движением
time.sleep(WaitTime)
В этом примере время ожидания составляет 0.5 секунд. Если хотите увеличить скорость двигателя, то можете уменьшить это значение. Экспериментальным путём установлено, что это значение можно уменьшить до 0.004, прежде чем вал двигателя перестанет вращаться. При 4-х шаговой последовательности скорость вращения достаточно большая, но крутящий момент не высок, мотор в данном случае легко остановить, удерживая вал пальцами. При 8-и шаговой последовательности скорость медленнее, но зато крутящий момент гораздо выше.
© digitrode.ru