Рубрики
Схемы на Arduino

Подключение шагового двигателя к Arduino Uno

Шаговые двигатели с каждым годом находят все большее применение в мире электроники. Начиная от обычной камеры наблюдения до сложных станков с ЧПУ и роботов шаговые двигатели используются в качестве исполнительных механизмов, поскольку они обеспечивают точное управление. В этом проекте мы рассмотрим один из наиболее распространенных шаговых двигателей 28BYJ-48 и его подключение к плате Arduino с помощью модуля ULN2003.

Общие принципы работы шаговых двигателей

Внешний вид шагового двигателя 28BYJ-48 представлен на следующем рисунке:

Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.

Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

Так почему же этот двигатель называется 28BYJ-48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

Расчет шагов на оборот для шагового двигателя

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

В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

Справедлива следующая формула:

Количество шагов за оборот = 360 / угол шага.

В нашем случае 360/11.25 = 32 шага за оборот.

Зачем нужен драйвер мотора для управления шаговым двигателем

Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.

Работа схемы

Схема подключения шагового двигателя к плате Arduino представлена на следующем рисунке.

Мы использовали шаговый двигатель 28BYJ-48 и драйвер мотора ULN2003. Для подачи питания на 4 катушки шагового двигателя мы будем использовать контакты платы Arduino 8, 9, 10 и 11. Драйвер мотора запитывается от контакта 5V платы Arduino.

Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам и хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.

Разработка программы для платы Arduino

Перед тем как начать писать программу для платы Arduino давайте разберемся что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-шаговой последовательности, то есть нам нужно будет сделать 4 шага чтобы выполнить один полный оборот двигателя.

Номер шага Контакты, на которое подается питание Катушки, на которое подается питание
Шаг 1 8 и 9 A и B
Шаг 2 9 и 10 B и C
Шаг 3 10 и 11 C и D
Шаг 4 11 и 8 D и A

На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.

Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.

Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:

#define STEPS 32

Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).

Stepper stepper (STEPS, 8, 10, 9, 11);

Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.

Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:

stepper.setSpeed(200);

Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.

Теперь, чтобы двигатель сделал один шаг, мы можем использовать следующую команду:

stepper.step(val);

Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.

Значение переменной “val” в нашей программе мы будем вводить из окна монитора последовательной связи.

Работа проекта

Когда вы сделаете все необходимые соединения в аппаратной части нашего проекта у вас должна получиться примерно следующая конструкция:

Теперь загрузите код программы в плату Arduino UNO и откройте окно монитора последовательной связи (serial monitor). Как мы уже указывали, мы должны сделать 2048 шагов для совершения одного полного оборота, то есть если мы в окне монитора последовательной связи введем 2048, то вал шагового двигателя совершит один полный оборот по часовой стрелке, а сам двигатель в это время сделает 2048 шагов. Для вращения против часовой стрелки просто вводите нужное число шагов со знаком “–“. То есть если вы введете -1024, то вал мотора совершит пол-оборота против часовой стрелки. Чтобы протестировать работу проекта вы можете вводить любые числа.

Исходный код программы

Код программы достаточно простой. Я надеюсь после успешной реализации данного проекта вы сможете управлять любыми шаговыми двигателями с помощью платы Arduino.

#include <Stepper.h> // заголовочный файл библиотеки для работы с шаговыми двигателями
// измените необходимое число шагов в зависимости от модели вашего шагового двигателя
#define STEPS 32
// создайте класс для шагового двигателя и запишите для него правильную последовательность контактов
Stepper stepper(STEPS, 8, 10, 9, 11);
int val = 0;
void setup() {
Serial.begin(9600);
stepper.setSpeed(200);
}
void loop() {
if (Serial.available()>0)
{
val = Serial.parseInt();
stepper.step(val);
Serial.println(val); //for debugging
}
}

Видео, демонстрирующее работу схемы

4 ответа к “Подключение шагового двигателя к Arduino Uno”

Подскажите пожалуйста, как подключить 2 двигателя 28BYj-48 с uln2003 к arduino uno и как написать простую программу (в arduino ide) для вращения этих двигателей.Я недавно начал интересоваться arduino и шаговыми двигателями.

Так в представленной статье описано как подключить двигатель 28BYj-48 с драйвером uln2003 к плате arduino uno и приведен пример программы. Второй двигатель можно подключить аналогично — к свободным цифровым контактам платы arduino. Единственный момент, на который здесь стоит обратить внимание — для питания двух двигателей возможностей платы arduino может не хватить и тогда потребуется дополнительный источник питания

> Второй двигатель можно подключить аналогично — к свободным цифровым контактам платы arduino
не работает так. И питание внешнее не помогает. Моторы подключены каждый к своей четвёрке портов arduino. Но при попытке повращать сразу два мотора ничего не происходит.
По вашему же примеру, оба мотора просто вращаются
potVal = map(analogRead(A0),0,1024,0,500);
if (potVal > Pval)
stepperR.step(5);
stepperL.step(-5);
if (potVal < Pval)
stepperL.step(5);
stepperR.step(-5);
Pval = potVal;

Вопрос был про то как подключить два шаговых двигателя к Ардуино, а не как их одновременно вращать. Разумеется, с помощью представленного вами кода программы будет сначала вращаться один двигатель, а потом второй. Чтобы вращать сразу два двигателя одновременно, нужна либо другая библиотека, позволяющая это делать, либо написать для этого собственный код управления двигателями. За основу для этого можно взять код использованной библиотеки. Также можно использовать пример кода из статьи про управление шаговым двигателем с помощью микроконтроллера AVR.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *