Сколько шаговых двигателей можно подключить к arduino uno

Управление шаговым двигателем на Ардуино

Рассмотрим управление шаговым мотором при помощи стандартной библиотеки stepper.h и с помощью более удобной и популярной библиотеки accelstepper.h, где реализовано намного больше дополнительных команд и функций. Схема подключения мотора при этом остается неизменной. Чуть дальше мы перечислили возможные команды, которые можно использовать в программе с этими библиотеками.

Скетч для шагового двигателя на Ардуино (Stepper.h)

#include <Stepper.h> // библиотека для шагового двигателя // количество шагов на 1 оборот, измените значение для вашего мотора const int stepsPerRevolution = 200; // устанавливаем порты для подключения драйвера Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11); void setup() { myStepper.setSpeed(60); // устанавливаем скорость 60 об/мин } void loop() { // поворачиваем ротор по часовой стрелке myStepper.step(stepsPerRevolution); delay(500); // поворачиваем ротор против часовой стрелки myStepper.step(-stepsPerRevolution); delay(500); }

Пояснения к коду:

  1. вместо портов 8,9,10,11 можно использовать любые цифровые порты;
  2. библиотека Stepper.h имеет маленький функционал, поэтому подходит только для тестирования шагового двигателя и проверки подключения драйвера.

Скетч для шагового мотора с библиотекой AccelStepper.h

#include // библиотека для шагового двигателя

Пояснения к коду:

  1. библиотеку AccelStepper.h можно использовать при подключении шагового двигателя к Motor Shield L293D совместно с библиотекой AFMotor.h;
  2. в программе можно задавать не только максимальную скорость, но и ускорение и замедление вала шагового двигателя.

Описание команд библиотеки AccelStepper.h

AccelStepper mystepper(DRIVER, step, direction);// Шаговый двигатель, управляемый платой AccelStepper mystepper(FULL2WIRE, pinA, pinB);// Шаговый двигатель, управляемый Н-мостом AccelStepper mystepper(FULL4WIRE, pinA1, pinA2, pinB1, pinB2);// Униполярный двигатель mystepper.setMaxSpeed(stepsPerSecond);// Установка скорости оборотов в минуту mystepper.setSpeed(stepsPerSecond);// Установка скорости в шагах за секунду mystepper.setAcceleration(stepsPerSecondSquared);// Установка ускорения

mystepper.currentPosition(); // Возвращает текущее положение в шагах mystepper.setCurrentPosition (long position); Обнуляет текущую позицию до нуля mystepper.targetPosition(); // Конечное положение в шагах mystepper.distanceToGo(); // Вернуть расстояние до указанного положения mystepper.moveTo(long absolute); // Переместиться в абсолютно указанное положение mystepper.move(long relative); // Переместиться в относительно указанное положение

mystepper.run(); // Начать движение с ускорением, функцию следует вызывать повторно mystepper.runToPosition(); // Начать движение до указанной точки mystepper.runToNewPosition(); // Начать движение с ускорением до заданной позиции mystepper.stop(); // Максимально быстрая остановка (без замедления) mystepper.runSpeed(); // Начать движение с заданной скоростью без плавного ускорения mystepper.runSpeedToPosition(); // Начать движение без плавного ускорения, до позиции

mystepper.disableOutputs(); // Деактивирует зарезервированные пины и устанавивает их в режим LOW. Снимает напряжение с обмоток двигателя, экономя энергию mystepper.enableOutputs(); // Активирует зарезервированные пины и устанавивает их в режим OUTPUT. Вызывается автоматически при запуске двигателя

ПЛАВНОЕ УПРАВЛЕНИЕ ЩЁТОЧНЫМ МОТОРОМ

Решил я сделать библиотеку для управления обычным щёточным мотором с энкодером, которая позволила бы управлять им как шаговым (с либой AccelStepper) с поддержкой ускорения и ограничения максимальной скорости. Библиотека полностью наследует все инструменты по работе с мотором из GyverMotor. Основной метод библиотеки tick() принимает текущее положение вала мотора (сигнал с потенциометра или энкодера) и позволяет:

  • Сделать полноценный сервопривод из моторчика с редуктором и резистором на валу
  • Поддерживать скорость вращения моторчика под переменной нагрузкой (шпиндель станка)
  • Из моторчика с энкодером позволяет получить аналог шагового мотора с возможностью повернуть вал на нужное количество оборотов (градусов) с плавным ускорением и ограничением максимальной скорости

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

Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

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

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

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

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

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 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)

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

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

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

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

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

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

БИБЛИОТЕКА ДЛЯ ШАГОВОГО ДВИГАТЕЛЯ ARDUINO

Для подключения шаговых моторов к Arduino нужно использовать драйверы. Очень дешёвые и популярные моторы 28byj-48-5v часто продаются вместе со своим драйвером (транзисторная сборка ULN2003), подключить можно к любым 4-м пинам Ардуино и использовать.

Для работы с большими шаговиками (типа Nema 17) нужно использовать специализированные драйверы, ниже вы найдёте описания и схемы подключения для A4988, DRV8825 и TMC2208, драйверы такого формата подключаются и работают практически одинаково, т.к. разработаны для CNC шилдов и взаимозаменяемы. У этих драйверов нужно настроить ток при помощи крутилки на плате. Это можно сделать “на глаз”, заставив мотор вращаться и регулируя крутилку. Мотор должен вращаться, но не вибрировать как перфоратор и сильно не нагреваться. Лучше настроить ток по опорному напряжению Vref, у каждого драйвера оно считается по своей формуле (см. картинки ниже). Берём ток своего мотора из описания, подставляем в формулу вместо current, считаем, и накручиваем полученное напряжение крутилкой. Для измерения опорного напряжения нужно подключить щупы вольтметра к самой крутилке и пину GND.

Главное преимущество дорогущих драйверов TMC – отсутствие шума/свиста/вибраций при работе, так как драйвер своими силами интерполирует сигнал до микрошага 1/256.

Контроллеры бесколлекторных моторов (ESC регуляторы)

Для управления бесколлекторными моторами используют специальные контроллеры — ESC (Electric speed controller — электронный контроллер скорости) регуляторы (рис. 3).

Рис. 3. ESC регуляторы

Задача контроллера состоит в том, что бы передать энергию постоянного тока от аккумулятора к трехфазному бесколлекторному мотору. Для передачи энергии контроллер использует MOSFETы — силовые ключи, которые могут открываться и закрываться за долю секунды. Если мощности одного ключа недостаточно, используется несколько ключей, включенных параллельно. Попеременное включение/выключение фаз поддерживает вращение мотора. За переключением фаз следит микроконтроллер регулятора. Функциональная схема ESC регулятора показана на рис. 4

Рис. 4. Функциональная схема ESC регулятора

Обзор драйвера L298N

Драйвер L298N используется радиолюбителями для многофункционального управления двигателями постоянного тока. Схема модуля, состоящая из двух H-мостов, позволяет подключать к нему один биполярный шаговый двигатель или одновременно два щёточных двигателя постоянного тока. При этом есть возможность изменять скорость и направление вращения моторов. Управление осуществляется путём подачи соответствующих сигналов на командные входы, выполненные в виде штыревых контактов. На рисунке №1 показан внешний вид модуля с кратким описанием всех его составляющих.

Рисунок №1 – внешний вид модуля L298N

  • OUT1 и OUT2 – разъёмы для подключения первого щёточного двигателя или первой обмотки шагового двигателя;
  • OUT3 и OUT4 – разъёмы для подключения второго щёточного двигателя или второй обмотки шагового двигателя;
  • VSS – вход для питания двигателей (максимальный уровень +35V);
  • GND – общий провод (не забываем соединить с аналогичным входом Arduino. );
  • Vs – вход для питания логики +5V. Через него непосредственно запитывается сама микросхема L298N. Есть ещё второй способ питания, при котором 5V для L298N берётся от встроенного в модуль стабилизатора напряжения. В таком случае на разъём подаётся только питание для двигателей (Vss), контакт Vs остаётся не подключенным, а на плате устанавливается перемычка питания от стабилизатора, который ограничит питающее моторы напряжение до приемлемых 5V.
  • IN1, IN2 – контакты управления первым щёточным двигателем или первой обмоткой шагового двигателя.
  • IN3, IN4 – контакты управления вторым щёточным двигателем или второй обмоткой шагового двигателя.
  • ENA, ENB – контакты для активации/деактивации первого и второго двигателей или соответствующих обмоток ШД. Подача логической единицы на эти контакты разрешает вращение двигателей, а логический ноль – запрещает. Для изменения скорости вращения щёточных моторов на эти контакты подаётся ШИМ-сигнал. Для работы с шаговым двигателям, как правило, на эти контакты ставят перемычки, обеспечивающие постоянную подтяжку к +5V.

На рисунке №2 показана электрическая схема модуля L298N.

Рисунок №2 – электрическая схема модуля L298N

Как видно из вышеприведенной схемы, основным элементом модуля является микросхема L298N, в состав которой входят два полноценных H-моста. Каждый H-мост выполнен в виде сборки из четырёх транзисторных ключей с включённой в центре нагрузкой в виде обмотки двигателя. Такой подход позволяет менять полярность в обмотке и как следствие направление вращения двигателя путём чередования пар открытых и закрытых ключей. Более наглядно этот процесс демонстрирует рисунок №3.

Рисунок №3 – транзисторные мосты Н-типа

На рисунке изображены два транзисторных моста Н-типа. В первом случае на вход IN1 подаётся логическая единица, а на вход IN2 – логический ноль. Так как транзисторы в схеме моста имеют разный тип проводимости, то при таком входном сигнале транзисторы Т1 и Т4 останутся в закрытом состоянии, в то время, как через транзисторы Т2 и Т3 потечёт ток. Ввиду того, что единственный путь протекания тока лежит через обмотку двигателя, то последний окажется подключен правой клеммой к плюсу питания, а левой к минусу. Всё это приведёт к вращению мотора в определённом направлении. Абсолютно противоположная картина показана на нижнем рисунке. Здесь IN3 установлен в логический ноль, а IN4 в логическую единицу. Теперь ток течёт в обратном направлении (левая клемма – плюс, правая – минус), заставляя второй двигатель крутиться в противоположную сторону.

Работа схемы

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

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

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

Шаговый двигатель от CD-ROM — запуск на Arduino без драйвера

Добрый вечер ребята. У меня такой вопрос. Как правильно подключить и запустить на ардуино шаговый двигатель от дисковода без драйвера и как урправлять реверсом? Заранее всем откликнувшимся большое спасибо за помощь.

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

Там нет шагового двигателя. Там три других двигателя: один обычный коллекторный моторчик, который открывает/закрывает каретку. И два трёхфазных бесколлекторных двигателя: один крутит диск (побольше), другой двигает лазерную головку (поменьше).

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

Хмм . А я видел привод каретки и от коллекторного и от шагового движков.

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

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

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

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

Похоже я ошибся и двигатель, который двигает головку всё-таки биполярный шаговый.

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

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

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

А как можно реализовать через ардуино реверс обычного постоянного мотора (например от лотка дисковода)? Мотор собираюсь запускать через транзистор подавая на базу сигнал с ардуино. Спасибо за вашу помощь заранее.

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

Через транзистор реверсить не получится надо или мост или полумост.

вообщетто непонятно , как Вы нашли этот форум, если не умеете пользоваться поиском?

а если умеете то почему не ищете сами?

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

Поиском я умею пользоваться но там советуют в других форумах через драйвер. Как вот можно обычный постоянный мотор реверсить без драйвера . Подключать хочу его к ардуино и задавать реверс цифровым выходом (пинами)

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

Спасибо вам. через Н-мост попробую Но я так понимаю если случайно запусить оба транзистора то будет короткое замыкание цепи (например нажал на пульте две кнопки Вперед и Назад одновременно).

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

Да, будет коротыш. Именно роэтому лучше применить мелкосхему, там есть защита.

откуда такой антагонизм к драйверам? Драйвер на мелкосхеме — тот же Нмост с защитами и в одном корпусе. Очень удобно.

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

Да не антагонизм к драйверам. Просто нет в наличии пока. А так понимаю что очень удобно

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

Хмм. L293 достаточно распрострненная и недорогая. На ебээ вообще копейки стоит.

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

Заказать собираюсь либо на алике или а ебее

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

Спасибо за совет вам. Вопрос такой L293 может управлять 12В моторами? Какое количество моторов можно задействовать максимально. Я так понимаю он служит вроде ключа для открывания (пропукскания) питания на моторы, а также реверсы делать.

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

В даташите всё написано:

Wide Supply-Voltage Range: 4.5 V to 36 V Output Current 1 A Per Channel (600 mA for L293D) Peak Output Current 2 A Per Channel (1.2 A for L293D)

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

БЛАГОДАРЮ ВСЕХ ЗА ОКАЗАННУЮ ВАМИ МНЕ ПОМОЩЬ))))))))))))))))))))))))))))))))))

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

Там нет шагового двигателя. Там три других двигателя: один обычный коллекторный моторчик, который открывает/закрывает каретку. И два трёхфазных бесколлекторных двигателя: один крутит диск (побольше), другой двигает лазерную головку (поменьше).

Не будьте столь категоричны: недавно разбирал CD-Drive, так там головку двигает мотор, к которому идет ровно 2 провода — красный и черный. Вы уверены, что это трехфазный бесколлекторный?

Источник

Шаг 5: Что такое мост H-bridge?

H-Bridge — схема, состоящая из 4 переключателей, которые могут безопасно управлять двигателем постоянного тока или шаговым двигателем. Эти переключатели могут быть реле или (чаще всего) транзисторами. Транзистор представляет собой твердотельный переключатель, который можно закрыть, посылая небольшой ток (сигнал) на один из его контактов.

В отличие от одного транзистора, который позволяет вам контролировать скорость двигателя, H-мосты позволяют вам также контролировать направление вращения двигателя. Он делает это, открывая различные переключатели (транзисторы), чтобы ток тек в разных направлениях и, таким образом, изменяя полярность на двигателе.

H-Bridges может помочь вам предотвратить перегорания вашего Arduino моторами, которыми вы пользуетесь. Двигатели являются индукторами, а это означает, что они хранят электрическую энергию в магнитных полях. Когда ток больше не посылается двигателям, магнитная энергия возвращается в электрическую энергию и может повредить компоненты. H-Bridge помогает изолировать ваш Arduino лучше всего. Вы не должны подключать двигатель непосредственно к Arduino.

Хотя H-Bridges можно легко сделать самому многие предпочитают покупать H-Bridge (например, чип L293NE / SN754410) из-за удобства. Это чип, который мы будем использовать в этом уроке. Физические номера контактов и их назначение ниже:

  • Пин 1 (1, 2EN) → Мотор 1 Включен/Выключен (HIGH/LOW)
  • Пин 2 (1A) → Мотор 1 логический выход 1
  • Пин 3 (1Y) → Мотор 1 терминал 1
  • Пин 4 → Земля
  • Пин 5 → Земля
  • Пин 6 (2Y) → Мотор 1 терминал 2
  • Пин 7 (2A) → Мотор 1 логический выход 2
  • Пин 8 (VCC2) → Питание для двигателей
  • Пин 9 → Мотор 2 Включен/Выключен (HIGH/LOW)
  • Пин 10 → Мотор 2 логический выход 1
  • Пин 11 → Мотор 2 терминал 1
  • Пин 12 → Земля
  • Пин 13 → Земля
  • Пин 14 → Мотор 2 терминал 2
  • Пин 15 → Мотор 2 логический выход 2
  • Пин 16 (VCC1) → Питание для H Bridge (5В)

Пример использования

Рисунок №6 — электрическая схема робота-машинки

Для приёма управляющих сигналов с ИК-пульта, в проекте будет использоваться популярная микросхема TSOP-1738. Удобство её заключается в том, что она напрямую подключается к плате Arduino и поддерживает большое разнообразие пультов управления. Цифра 38 в конце маркировки означает несущую частоту (кГц), с которой ваш пульт передаёт сигнал. Существует несколько модификаций данной микросхемы на разные несущие частоты. Ниже приведён список возможных вариантов.

  • TSOP-1730 (30 кГц);
  • TSOP-1733 (33 кГц);
  • TSOP-1736 (36 кГц);
  • TSOP-1737 (37.6 кГц);
  • TSOP-1738 (38 кГц);
  • TSOP-1740 (40 кГц);
  • TSOP-1756 (56 кГц);

Следует помнить, что помимо несущей частоты, каждая кнопка пульта дистанционного управления имеет свой уникальный код, который предварительно необходимо считать и вставить в текст основного скетча. В данном проекте будет использоваться всего 4 кнопки: “вперёд”, “назад”, “вправо” и “влево”. Определить коды поможет библиотека IRremote . Итак, собираем всё по вышеприведенной схеме, устанавливаем библиотеку IRremote, и для начала заливаем в Arduino этот скетч:

После запуска, в мониторе будут отображаться коды клавиш, нажатые на пульте ДУ. Нам необходимо выбрать 4 кнопки для управления движением робота и выписать их коды для дальнейшего использования в основной программе. У меня получилось следующее:

  • Кнопка “Вперёд” — 0xB4B4E21D
  • Кнопка “Назад” — 0xB4B412ED
  • Кнопка “Вправо” — 0xB4B45AA5
  • Кнопка “Влево” — 0xB4B49A65

На этом подготовка к реализации проекта завершена, можно приступать к сборке шасси. Здесь можно дать волю своей фантазии. В моём случае получилось следующее (рисунок №7).

Рисунок №7 — пример реализации шасси для робота

В пластиковом корпусе удалось разместить все необходимые элементы схемы, а именно: источник питания, Arduino Nano и модуль L298N. ИК-приемник TSOP-1738 был вынесен на верх корпуса, чтобы обеспечить надёжную связь с пультом ДУ. Ведущие колёса с моторами закреплены снизу при помощи двухстороннего скотча. В качестве переднего колеса используется поворотный ролик от кресла. На рисунке №8 показан итоговый результат сборки.

Рисунок №8 — робот готов к программированию

Ниже приведён исходный код управления роботом-машинкой с подробными комментариями.