Андрей Смирнов
Время чтения: ~26 мин.
Просмотров: 2

Драйвер шагового двигателя (troyka-модуль)

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

Как работает шаговик?

Для практических задач с точным перемещением объекта обязательно требуется ШД. Это мотор, который перемещает свой вал в зависимости от заданных шагов в программе контроллера.  Чаще всего их применяют в станках ЧПУ, робототехнике, манипуляторах, 3D-принтерах.

Мы же с вами рассмотрим конкретный двигатель 28BYj-48 с драйвером управления  ULN2003. Он достаточно дешёвый, прост в сборке и легко писать программу.

В 4-шаговом режиме он может совершать 2048 шагов, в 8-шаговом 4096 шагов. Питание 5 В, ток потребления 160 мА. Передаточное число 1:64 , то есть один шаг он совершит на 5,625 градусов. Крутящий момент составляет 34 мН.м. Средняя скорость 15 об/мин, с помощью программного кода можно ускорить до 35 об/мин, но вы должны понимать, что мы при этом теряем мощность и точность.

Размеры двигателя указаны из первоисточника — даташита производителя Kiatronics.

А вот таким образом он выглядит изнутри:

Для небольших технических проектов — 28BYj-48 идеальный вариант. Его главным преимуществом является дешевизна и простота. Прилагаю спецификацию:

Тип мотораУниполярный шаговый двигатель
Число фаз4
Рабочее напряжение5-12 вольт
Частота100 Гц
Частота под нагрузкой> 600 Гц
Крутящий момент> 34.3 мН*м (120 Гц)
Режим шагарекомендуется полушаговый режим (8-шаговая управляющая сигнальная последовательность)
Угол шага

8-шаговая управляющая сигнальная последовательность — 5.625º/шаг

4-шаговая управляющая сигнальная последовательность — 11.25º/шаг

Передаточное отношение редуктораПроизводителем заявлено 64:1
Вес30 г

ШД имеет четыре обмотки, которые запитываются последовательно:

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

1.Шаговый режим — это когда две из четырех обмоток запитываются на каждом шаге. Смотрите карту включения обмоток: Для этого способа используется библиотека myStepper.h.

ПроводФазы для шагового режима
1234
4 оранжевый
3 желтый
2 розовый
1 синий

2.Полушаговый режим — это когда запитывается первая обмотка, потом вторая и третья вместе, потом четвёртая и т.д. В Даташите разработчика указано, что предпочтительнее режим полушага для мотора. Подробно изображено на карте подключений:

ПроводФазы для полушагового режима
12345678
4 оранжевый
3 желтый
2 розовый
1 синий

Описание драйвера ULN2003

Плата представляет собой силовой модуль, который содержит в себе семь независимых транзисторов Дарлингтона. Каждая пара представляет собой каскад из двух биполярных транзисторов. ULN2003 является неким усилителем с током нагрузки 500 мА и напряжением 50 В. На изображении отображена сама плата и описание выводов к ней.

Технические характеристики A4988

Конструктивно это выглядит как два круглых полюса, на поверхности которых расположены зубцы ротора из магнитомягкого материала. Можно увеличить количество шагов в 16, 32, 64 раза и т.

Поддержка такого режима для указанного драйвера осуществляется микропроцессором, управляющим входами ЦАП. Таким образом, выполняется один шаг.

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

Для изменения направления вращения достаточно изменить очередность подачи импульсов в соответствующие обмотки. Режим управления двигателем задается коммутатором. Шаговые двигатели.

Рекомендуем: Необходимый метериал для проведения электричества

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

А принцип работы этого всего очень прост: конденсатор формирует сдвиг фаз на одной из обмоток, в результате обмотки работают почти попеременно и шаговый двигатель крутится. В таком двигателе сечение отдельных обмоток вдвое больше, а омическое сопротивление — соответственно вдвое меньше. Так, пожалуй, можно дать строгое определение. Готовые шаговые двигатели с редукторами хотя и существуют, однако являются экзотикой. Иногда двигатели с постоянными магнитами имеют 4 раздельных обмотки.

Общие сведения:

Микрошаговый режим. Режим удержания уменьшает максимальный ток, потребляемый обмотками двигателя, с двух до одного ампера. Диаграммы, диаграммы

В пределе, шаговый двигатель может работать как синхронный электродвигатель в режиме непрерывного вращения. Схема контроллера униполярного шагового двигателя с драйвером на биполярных транзисторах. Описание библиотеки для работы с шаговым двигателем В среде разработки Ардуино IDE существует стандартная библиотека Strepper. Гибридный двигатель.
Обзор копеечной платы управления шаговым двигателем.

https://youtube.com/watch?v=Zqbz-mI04Xk

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

Рассмотрим управление шаговым мотором при помощи стандартной библиотеки 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 <AccelStepper.h> // библиотека для шагового двигателя

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

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

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

// Шаговый двигатель, управляемый платой// Шаговый двигатель, управляемый Н-мостом// Униполярный двигатель// Установка скорости оборотов в минуту// Установка скорости в шагах за секунду// Установка ускорения

// Возвращает текущее положение в шагахОбнуляет текущую позицию до нуля// Конечное положение в шагах// Вернуть расстояние до указанного положения// Переместиться в абсолютно указанное положение// Переместиться в относительно указанное положение

// Начать движение с ускорением, функцию следует вызывать повторно// Начать движение до указанной точки// Начать движение с ускорением до заданной позиции// Максимально быстрая остановка (без замедления)// Начать движение с заданной скоростью без плавного ускорения// Начать движение без плавного ускорения, до позиции

A4988 Stepper Driver Pinout

Now let’s close look at the pinout of the driver and hook it up with the stepper motor and the controller. So we will start with the 2 pins on the button right side for powering the driver, the VDD and Ground pins that we need to connect them to a power supply of 3 to 5.5 V and in our case that will be our controller, the Arduino Board which will provide 5 V.  The following 4 pins are for connecting the motor. The 1A and 1B pins will be connected to one coil of the motor and the 2A and 2B pins to the other coil of the motor. For powering the motor we use the next 2 pins, Ground and VMOT that we need to connect them to Power Supply from 8 to 35 V and also we need to use decoupling capacitor with at least 47 µF for protecting the driver board from voltage spikes.

The next two 2 pins, Step and Direction are the pins that we actually use for controlling the motor movements. The Direction pin controls the rotation direction of the motor and we need to connect it to one of the digital pins on our microcontroller, or in our case I will connect it to the pin number 4 of my Arduino Board.

With the Step pin we control the mirosteps of the motor and with each pulse sent to this pin the motor moves one step. So that means that we don’t need any complex programming, phase sequence tables, frequency control lines and so on, because the built-in translator of the A4988 Driver takes care of everything. Here we also need to mention that these 2 pins are not pulled to any voltage internally, so we should not leave them floating in our program.

Next is the SLEEP Pin and a logic low puts the board in sleep mode for minimizing power consumption when the motor is not in use.

Next, the RESET pin sets the translator to a predefined Home state. This Home state or Home Microstep Position can be seen from these Figures from the A4988 Datasheet. So these are the initial positions from where the motor starts and they are different depending on the microstep resolution. If the input state to this pin is a logic low all the STEP inputs will be ignored. The Reset pin is a floating pin so if we don’t have intention of controlling it with in our program we need to connect it to the SLEEP pin in order to bring it high and enable the board.

The next 3 pins (MS1, MS2 and MS3) are for selecting one of the five step resolutions according to the above truth table. These pins have internal pull-down resistors so if we leave them disconnected, the board will operate in full step mode.

The last one, the ENABLE pin is used for turning on or off the FET outputs. So a logic high will keep the outputs disabled.

Stepper Motor Knob

Stepper motors, due to their unique design, can be controlled to a high degree of accuracy without any feedback mechanisms. The shaft of a stepper, mounted with a series of magnets, is controlled by a series of electromagnetic coils that are charged positively and negatively in a specific sequence, precisely moving it forward or backward in small «steps».

There are two types of steppers, Unipolars and Bipolars, and it is very important to know which type you are working with. For each of the motors, there is a different circuit. The example code will control both kinds of motors. See the unipolar and bipolar motor schematics for information on how to wire up your motor.

In this example, a potentiometer (or other sensor) on analog input 0 is used to control the movement of a stepper motor using the Arduino Stepper Library. The stepper is controlled by with digital pins 8, 9, 10, and 11 for either unipolar or bipolar motors.

The Arduino or Genuino board will connect to a U2004 Darlington Array if you’re using a unipolar stepper or a SN754410NE H-Bridge if you have a bipolar motor.

For more information about the differences of the two types, please take a look at Tom Igoe’s page on stepper motors.

Hardware Required

  • Arduino or Genuino Board

  • 10k ohm potentiometer

  • stepper motor

  • U2004 Darlington Array (if using a unipolar stepper)

  • SN754410ne H-Bridge (if using a bipolar stepper)

  • power supply appropriate for your particular stepper

  • hook-up wires

  • breadboard

Circuits

Below you’ll find circuits for both unipolar and bipolar steppers. In either case, it is best to power your stepper motors from an external supply, as they draw too much to be powered directly from your Arduino board.

In both circuits, connect a 10k pot to power and ground, with it’s wiper outputting to analog pin 0.

Note: Both circuits below are four wire configurations. Two wire configurations will not work with the code provided.

Unipolar Stepper Circuit and schematic

Unipolar Motor Knob Circuit

image developed using Fritzing. For more circuit examples, see the Fritzing project page

Unipolar Motor Knob Schematic

Bipolar Stepper Circuit and schematic

Bipolar Motor Knob Circuit

image developed using Fritzing. For more circuit examples, see the Fritzing project page

Bipolar Motor Knob Schematic

See also

  • Stepper myStepper = Stepper(steps, pin1, pin2, pin3, pin4)

  • stepper.setSpeed()

  • stepper.step()

  • StepperOneRevolution — Turn the shaft one revolution clockwise and one counterclockwise.

  • StepperOneStepAtATime — Single stepping to check the proper wiring of the motor.

  • StepperSpeedControl — The stepping speed is controlled by a potentiometer.

Last revision 2018/08/23 by SM

Arduino Code – Basic Example

The following sketch will give you complete understanding on how to control speed and spinning direction of a bipolar stepper motor with DRV8825 stepper motor driver and can serve as the basis for more practical experiments and projects.

Code Explanation:

The sketch starts with defining Arduino pins to which DRV8825’s STEP & DIR pins are connected. We also define . Set this to match your stepper motor specifications.

In setup section of code, all the motor control pins are declared as digital OUTPUT.

In loop section we spin the motor clockwise slowly and then spin it counterclockwise quickly at an interval of a second.

Control Spinning Direction: To control the spinning direction of a motor we set the DIR pin either HIGH or LOW. A HIGH input spins the motor clockwise and a LOW will spin it counterclockwise.

Control Speed: The speed of a motor is determined by the frequency of the pulses we send to the STEP pin. The higher the pulses, the faster the motor runs. A pulses is nothing but pulling the output HIGH, waiting a bit then pulling it LOW and waiting again. By changing the delay between two pulses, you change the frequency of those pulses and hence the speed of a motor.

Подключение обмоток

Шаговые двигатели относятся к многофазным моторам. Больше обмоток, значит, больше фаз. Больше фаз, более гладкая работа мотора и более выокая стоимость. Крутящий момент не связан с числом фаз. Наибольшее распространение получили двухфазные двигатели. Это минимальное количество необходимых для того, чтобы шаговый мотор функционировал. Здесь необходимо понять, что число фаз не обязательно определяет число обмоток. Например, если каждая фаза имеет 2 пары обмоток и мотор является двухфазным, то количество обмоток будет равно 8. Это определяет только механические характеристики мотора. Для упрощения, я рассмотрю простейший двухфазный двигатель с одной парой обмоток на фазу.

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

Биполярный двигатель

Это наиболее простая конфигурация. Используются 4 провода для подключения мотора к контроллеру. Обмотки соединяются внутри последовательно или параллельно. Пример биполярного двигателя:

Мотор имеет 4 клеммы. Два желтых терминала (цвета не соответствуют стандартным!) питают вертикальную обмотку, два розовых — горизонтальную обмотку. Проблема такой конфигурации состоит в том, что если кто-то захочет изменить магнитную полярность, то единственным способом будет изменение направления электрического тока. Это означает, что схема драйвера усложнится, например это будет H-мост.

Униполярный двигатель

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

Используя этот общий провод, можно легко изменить магнитные полюса. Предположим, например, что мы подключили общий провод к земле. Запитав сначала один вывод обмотки, а затем другой — мы изменяем магнитные полюса. Это означает, что схема для использования биполярного двигателя очень простая, как правило, состоит только из двух транзисторов на фазу. Основным недостатком является то, что каждый раз, используется только половина доступных катушечных обмоток. Это как при волновом управлении двигателем с возбуждением одной обмотки. Таким образом, крутящий момент всегда составляет около половины крутящего момента, который мог быть получен, если бы обе катушки были задействованы. Другими словами, униполярные электродвигатели должны быть в два раза более габаритными, по сравнению с биполярным двигателем, чтобы обеспечить такой же крутящий момент. Однополярный двигатель может использоваться как биполярный двигатель. Для этого нужно оставить общий провод неподключенным.

Униполярные двигатели могут иметь 5 или 6 выводов для подключения. На рисунке выше продемонстрирован униполярный мотор с 6 выводами. Существуют двигатели, в которых два общих провода соединены внутри. В этом случае, мотор имеет 5 клемм для подключения.

8-выводной шаговый двигатель

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

Этот двигатель может быть подключен любым из возможных способов. Он может быть подключен как:

  • 5 или 6-выводной униполярный,
  • биполярный с последовательно соединенными обмотками,
  • биполярный с параллельно соединенными обмотками,
  • биполярный с одним подключением на фазу для приложений с малым потреблением тока

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

Драйвер двигателей — L293D, общее описание

Мотор-шильды на основе микросхем L293 и L298N являются самыми популярными драйверами для управления моторами постоянного тока. На фото выше данная плата позволяет подключить 4 DC мотора (либо 2 шаговых двигателя) и два серводвигателя. Помимо этого ещё на борту платы есть несколько аналоговых входов, что позволяет подключить несколько ультразвуковых датчиков. Это очень удобно.

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

Неважно, будет ли это Raspberry Pi, или Orange Pi, или Banana Pi

Я закончил своё лирическое отступление, продолжаем дальше:

В составе этой платы имеются две микросхемы L293D (1). L-ка позволяет управлять слаботочными двигателями с током потребления до 600 мА на канал. Для подключения двигателей используются зажимные клеммы (2).

Использование двух микросхем L293D позволяет одновременно подключить 4 моторчика постоянного тока либо 2 шаговых мотора, либо два моторчика и шаговый. Для управления на прямую выводами L-ки (IN1, IN2, IN3, IN4),отвечающими за выбор направления вращения, необходимо 4 вывода, а для двух микросхем целых 8.

Для уменьшения количества управляющих выводов в игру вступает сдвиговый регистр 74НС595 (3). Благодаря регистру управление сводится с 8-ми пинов к 4-ем.

Так же на шильдике имеются шесть пинов (4) для подключения двух сервоприводов. (Кстати очень полезная и нужная штука, если понадобиться прицепить манипулятор с двумя степенями свободы).

Питание силовой части производится либо от внешнего клеммника (6) либо замыканием джампера (5) ( питание от клеммника моторов +M соединяется с выводом VinArduino).

При замкнутом джампере напряжение для объединенного питания должно лежать в пределах от 6 до 12 Вольт.

DRV8825 Stepper Motor Driver Chip

At the heart of the module is a Microstepping Driver from Texas Instruments – DRV8825. It’s small in stature (only 0.8″ × 0.6″) but still packs a punch.

The DRV8825 stepper motor driver has output drive capacity of up to 45V and lets you control one bipolar stepper motor at up to 2.2A output current per coil.

The driver has built-in translator for easy operation. This reduces the number of control pins to just 2, one for controlling the steps and other for controlling spinning direction.

The driver offers 6 different step resolutions viz. full-step, half-step, quarter-step, eighth-step, sixteenth-step and thirty-second-step.

Настройка тока двигателя на A4988

На плате драйвера предусмотрен потенциометр для регулировки тока. Для настройки понадобиться мультиметр, для замера напряжения на потенциометре.

Расположение токоограничительных резисторов и потенциометра Vref

Формула Vref для A4988 изменяется от номинала токочувствительных резисторов (Обведены на фото выше). . Обычно подписаны R050 или R100. 

Vref = Imax * 8 * (RS)

Imax — максимальный ток двигателя;

RS — сопротивление резистора. В моем случае RS = 0,100. Для 17HS4401 Vref = 1,7 * 8 * 0,100 = 1,36 В.

Рабочий ток двигателя равен 70% от тока удержания. Умножим полученные значения чтобы двигатель не грелся при простое.

Для 17HS4401 Vref ист. = 1,36*0,7 = 0,952 В.

Подключаем драйвер к микроконтроллеру, включаем и меряем напряжение Vref на драйвере. Если оно не соответствует нужному нам номиналу, а оно скорее всего будет не будет соответствовать, крутим потенциометр в какую то сторону и смотрим что поменялось. Доводим до нужного нам значения и радуемся, ведь ток на драйвере теперь настроен!

Простой пример работы Arduino с драйвером L298N

Сейчас мы рассмотрим пример простой схемы совместного использования Arduino и L298N. Такой вариант позволяет управлять скоростью вращения вала и его направлением у двигателя постоянного тока. Для этого задается специальная программа на ПК, которая будет определять генерацию ШИМ сигнала от L298N и направление протекания электрического тока через Н-мост. Разумеется, для формирования схемы потребуются еще несколько дополнительных компонентов, которые позволят соединить между собой драйвер, Ардуино, компьютер и двигатели.

Схема совместного использования Arduino и L298N

Перечень необходимых компонентов для сборки схемы:

  • Arduino UNO  — наиболее простая модель из линейки, но его функционала будет более чем достаточно. Если вы используете более продвинутый вариант, то он также хорошо справится с этой задачей.
  • Драйвер  L298N – не самый доступный драйвер, но заменить его другим не получится, так как принцип работы похожих моделей может в корне отличаться.
  • Двигатель на 12 В – в данном примере используется электрическая машина постоянного тока.
  • Потенциометр 100 кОм.
  • Кнопка для коммутации цепи.
  • Источник питания 12 В  — может подойти любой вариант, включая несколько пальчиковых батареек.
  • Плата для установки элементов.
  • Соединительные провода, желательно с готовыми штекерами папа/мама.
КомпонентСпецификацияКоличествоГде купить
ArduinoUNO Rev3.01Ссылка
ДрайверL298N1Ссылка
Мини-двигатель12В, DC, 6000 об/мин.1Ссылка
Блок питания12 Вольт1Ссылка
КнопкаMicro SMD SMT1Ссылка
Потенциометр100 кОм1Ссылка
Соединительные проводапапа-мама Ссылка

Полный код проекта:

Практическое применение.

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

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

Microstep Selection Pins

The DRV8825 driver allows microstepping by allowing intermediate step locations. This is achieved by energizing the coils with intermediate current levels.

For example, if you choose to drive NEMA 17 having 1.8° or 200 steps per revolution in quarter-step mode, the motor will give 800 microsteps per revolution.

The DRV8825 driver has three step size(resolution) selector inputs viz. M0, M1 & M2 . By setting appropriate logic levels to these pins we can set the motors to one of the six step resolutions.

M0M1M2Microstep Resolution
LowLowLowFull step
HighLowLowHalf step
LowHighLow1/4 step
HighHighLow1/8 step
LowLowHigh1/16 step
HighLowHigh1/32 step
LowHighHigh1/32 step
HighHighHigh1/32 step

These three microstep selection pins are pulled LOW by internal pull-down resistors, so if we leave them disconnected, the motor will operate in full step mode.

Что представляет собой драйвер L298N?

Данная плата  содержит микросхему и 15 выходов для генерации управляющих сигналов. Предназначено для передачи сигналов к рабочим элементам индуктивного типа – обмоткам двигателя, катушкам реле и т.д. Конструктивно  L298N позволяет подключать в работу до двух таких элементов, к примеру, через нее можно одновременно управлять двумя шаговыми двигателями.

На схеме ниже приведен пример распределения выводов L298N от рабочей микросхемы.

L298N. Выводы

  • Vss – вывод питания для логических цепей в 5В;
  • GND – нулевой вывод (он же корпус);
  • INPUT1, INPUT 2, INPUT 3, INPUT 4 – позволяют плавно наращивать и уменьшать скорость вращения двигателя;
  • OUTPUT1, OUTPUT2 – выводы для питания первой индуктивной нагрузки;
  • OUTPUT3, OUTPUT4 – выводы для питания второй индуктивной нагрузки;
  • Vs – вывод для переключения питания;
  • ENABLE A, B – выводы, при помощи которых осуществляется раздельное управление каналами, могут устанавливать активный и пассивный режим (с регулируемой скоростью вращения и с установленной);
  • CURRENT SENSING A, B – выводы для установки текущего режима.

Arduino Code – Using AccelStepper library

Controlling the stepper without a library is perfectly fine for simple, single motor applications. But when you want to control multiple steppers, you’ll need a library.

So, for our next experiment we will make use of an advanced stepper motor library called AccelStepper library. It supports:

  • Acceleration and deceleration.
  • Multiple simultaneous steppers, with independent concurrent stepping on each stepper.

This library is not included in the Arduino IDE, so you will need to install it first.

Library Installation

To install the library navigate to the Sketch > Include Library > Manage Libraries… Wait for Library Manager to download libraries index and update list of installed libraries.

Filter your search by typing ‘accelstepper’. Click on the first entry, and then select Install.

Arduino Code

Here’s the simple sketch that accelerates the stepper motor in one direction and then decelerates to come to rest. Once the motor makes one revolution, it changes the spinning direction. And it keeps doing that over and over again.

Code Explanation:

We start off by including the newly installed AccelStepper library.

We define Arduino pins to which DRV8825’s STEP & DIR pins are connected. We also set to 1. (1 means an external stepper driver with Step and Direction pins)

Next, we create an instance of stepper library called .

In the setup function we first set the maximum speed of the motor to a thousand. We then set an acceleration factor for the motor to add acceleration and deceleration to the movements of the stepper motor.

Next we set the regular speed of 200 and the number of steps we’re going to move it to i.e. 200 (as NEMA 17 moves 200 steps per revolution).

In the loop function, we use an If statement to check how far the motor needs to travel (by reading the property) until it reaches the target position (set by ). Once reaches zero we will move the motor in the opposite direction by changing the position to the negative of its current position.

Now at the bottom of the loop you’ll notice we have called a function. This is the most important function, because the stepper will not run until this function is executed.

Power Connection Pins

Unlike other typical stepper motor drivers, the DRV8825 has only one power supply connection.

VMOT & GND MOT supplies power for the motor which can be 8.2V to 45V.

The module does not have any logic supply pin as DRV8825 gets its power from the internal 3V3 voltage regulator.

However, you should common your microcontroller’s ground with GND LOGIC pin.

According to datasheet, the motor supply requires appropriate decoupling capacitor close to the board, capable of sustaining 4A.

Warning:

This driver has low-ESR ceramic capacitors on board, which makes it vulnerable to voltage spikes. In some cases, these spikes can exceed the 45V(maximum voltage rating of DRV8825), potentially permanently damaging the board and even the motor.

One way to protect the driver from such spikes is to put a large 100µF (at least 47µF) electrolytic capacitor across motor power supply pins.

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

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

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

Объяснение программы для платы Arduino

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

Номер шагаКонтакты, на которое подается питаниеКатушки, на которое подается питание
Шаг 18 и 9A и B
Шаг 29 и 10B и C
Шаг 310 и 11C и D
Шаг 411 и 8D и A

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

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

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

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

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

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

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

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

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

Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:

А один шаг против часовой стрелки:

В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации