Raspberry Pi. Урок 10. Шаговый двигатель

Шаговый двигатель — это что-то среднее между обычным электромотором (Урок 9) и сервоприводом (Урок 8). Их преимущество в том, что можно точно регулировать их положение, двигать вперед или назад на один «шаг» за раз, а также они могут вращаться непрерывно.

learn_raspberry_pi_photo_uln.jpg

В этом уроке мы узнаем, как управлять шаговым двигателем с помощью Raspberry Pi и все того же чипа управления мотором L293D, который мы использовали с электромотором в Уроке 9.

Кроме того, Вы также узнаете узнаете как использовать альтернативный чип драйвера ULN2803.

В этом проекте не сильно важно, используете Вы L293D или ULN2803. Если у Вас нет ни одного из чипов, то, возможно, лучше выбрать ULN2803, поскольку его стоимость ниже и в комплекте к нему четыре запасных детали.

Двигателю требуется меньше питания и менее чувствителен к перепадам напряжения, чем электродвигатели и сервоприводы. Питания 5В от Raspberry Pi будет достаточно, если Pi имеет хороший источник питания как минимум 1А.

Детали

Для этого проекта Вам понадобятся следующие детали:

learn_raspberry_pi_stepper.jpg

Шаговый двигатель 5В

learn_raspberry_pi_L293d.jpg

Интегральная схема L293D

learn_raspberry_pi_uln2803-component.jpg

ULN2803

learn_raspberry_pi_breadboard_half_web.jpg

Макетная плата половинного размера

Raspberry Pi

learn_raspberry_pi_jumpers_web.jpg

Набор джамперов

Аппаратное обеспечение (L293D)

У шагового двигателя есть пять проводов, поэтому в этот раз мы будем использовать обе части L293D. Это значит, что нужно будет сделать много соединений на макетной плате.

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

learn_raspberry_pi_breadboard_293.png

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

Ориентируйтесь по цветам, а не по позиции откуда идет провод.

Аппаратное обеспечение (ULN2803)

Если Вы используете ULN2803, тогда используются все пять проводов.

У шагового двигателя есть пять проводов, поэтому в этот раз мы будем использовать обе части L293D. Это значит, что нужно будет сделать много соединений на макетной плате.

Установка не может быть использована с 5-пиновыми (однополюсными) шаговыми двигателями.

learn_raspberry_pi_breadboard_ULN.png
Хотя в коде упоминается разъем GPIO 18 как вход разрешения, но это требуется только при использовании с L293D.

Шаговые двигатели

В шаговых двигателях используются зубчатое колесо и электромагниты, которые толкают колесо на «шаг» за раз.

learn_raspberry_pi_steppers.png

Подача питания на катушки в правильном порядке заставляет работать двигатель. Количество шагов шагового двигателя в одном полном вращении — это количество зубчиков колеса.

Двигатель, который мы используем имеет 8 шагов, но поскольку в нем есть понижающий редуктор 1:64, то шагов 512 (8х64).

В этом уроке мы не используем красный провод. Этот провод нужен только если Вы используете другой тип схемы управления, который не позволяет току в каждой катушке менять направление. Подключение к каждой из катушек по центру означает, что Вы можете подавать питание на левую либо правую сторону катушки, чтобы изменить направление тока без использования для этого схемы.

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

ULN2803

В уроке 9 мы уже рассматривали L293D. ULN2803 — очень полезный чип.

learn_raspberry_pi_uln2803.png

В то время как у L293D есть четыре вывода, полярность которых может быть изменена, у ULN2803 таких выводов 8, что позволяет усилить слабые сигналы с разъемов GPIO  raspberry Pi и переключить их на более высокие показатели тока.

Однако в отличии от L293D, вывод ULN2803 может только поглощать ток, поэтому используется позитивный красный провод шагового двигателя. Поэтому вместо использования всей катушки между, например, розовым и оранжевым проводами, только половина катушки между красным и розовым проводами получает питание.

learn_raspberry_pi_steppers_ULN.png

Программное обеспечение

 Программное обеспечение для чипов L293D и ULN2803 абсолютно одинаковое.

В этом проекте используется библиотека Rpi.GPIO. Если Вы не использовали ее раньше, Вам нужно установить это.

Чтобы установить код, подключитесь к Pi через SSH и откройте окно редактора с помощью команды:

$nano stepper.py

Затем скопируйте код ниже в окно редактора и сохраните (CTRL-X, затем Y).

learn_raspberry_pi_nano.png

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)

time.sleep(delay)

setStep(0, 1, 1, 0)

time.sleep(delay)

setStep(0, 1, 0, 1)

time.sleep(delay)

setStep(1, 0, 0, 1)

time.sleep(delay)

 

def backwards(delay, steps):

for i in range(0, steps):

setStep(1, 0, 0, 1)

time.sleep(delay)

setStep(0, 1, 0, 1)

time.sleep(delay)

setStep(0, 1, 1, 0)

time.sleep(delay)

setStep(1, 0, 1, 0)

time.sleep(delay)

 

 

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))

Когда шаговый двигатель не двигается, он все равно «активирован» и  находится в одной из позиций. На это требуется питание. Если Вам не нужно, чтобы двигатель находился в какой-либо позиции, Вы можете ввести setStep(0,0,0,0), чтобы освободить катушки. Мотор будет вращаться свободно и не будет тратить много тока.

Настройка и тестирование

Программу нужно запустить от имени администратора, поэтому введите следующую команду в сессию SSH.

$sudo python stepper.py

Задайте значение delay (5 подойдет), а затем количество шагов (number of steps) (512 — полный оборот).

learn_raspberry_pi_running.png

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