Шаговый двигатель и Arduino - основы

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

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

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

Необходимые элементы

Для данного проекта нам понадобятся:

1 шаговый двигатель с напряжением питания 5 вольт

1 чип L293D

1 монтажная плата

1 Arduino Uno R3 (или другая плата от Arduino)

Набор коннекторов

Схема подключения шагового двигателя

Arduino_A298N_шаговый_двигатель_подключение

У нашего шагового двигателя 5 выходов. Мы будем использовать обе коннекторы по обе стороны L293D. Подключать придется все это долго достаточно мучительно.

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

Скетч Arduino

В программе используется серийный монитор. После запуска, откройте его и укажите количество "шагов". Для начала попробуйте значение близкое к 500. В результате ваш двигатель должен повернуться примерно на 360 градусов. Введите -500 и ротор отработает поворот в обратном направлении.

/*

Пример - шаговый двигатель

*/

#include

int in1Pin = 12;

int in2Pin = 11;

int in3Pin = 10;

int in4Pin = 9;

Stepper motor(512, in1Pin, in2Pin, in3Pin, in4Pin);

void setup()

{

pinMode(in1Pin, OUTPUT);

pinMode(in2Pin, OUTPUT);

pinMode(in3Pin, OUTPUT);

pinMode(in4Pin, OUTPUT);

// эта строка для Arduino Leonardo. Генерируется задержка в серийном мониторе

// пока он открыт

while (!Serial);

Serial.begin(9600);

motor.setSpeed(20);

}

void loop()

{

if (Serial.available())

{

int steps = Serial.parseInt();

motor.step(steps);

}

}

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

После подключения библиотеки 'Stepper' инициализируются управляющие пины от 'in1' до 'in4'.

Для объявления данных пинов с использованием библиотеки шаговых двигателей, используется следующая команда:

Stepper motor(768, in1Pin, in2Pin, in3Pin, in4Pin);

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

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

Следующая команда устанавливает скорость вращения ротора шагового двигателя:

motor.setSpeed(10);

Функция 'loop' очень простая. Функция ожидает, пока придет команда из серийного монитора и преобразовывает текст в виде числового значения в переменную типа int с помощью 'parseInt'. После этого подается сигнал на двигатель для его вращения на указанное количество шагов.

Полезная информация о шаговых двигателях

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

Структура шагового двигателя

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

Двигатель, который мы используем имеет 48 шагов, но в нем также установлен редуктор 1:16. В результате мы получаем 16x48=768 шагов.

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

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

С чем еще можно поэкспериментировать

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

motor.setSpeed(20);

Установите, например, меньшее значение (5), загрузите скетч и обратите внимание, что шаговик начал вращаться медленнее.

Теперь попробуйте найти максимальную скорость шаговика, увеличивая скорость на 20. В результате после некоторого значения шаговый двигатель перестанет двигаться из-за того, что он просто не успевает считывать импульсы, генерирующие шаги.

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