Когда нам нужны точность и стабильность, мы выбираем шаговый двигатель — степпер. То, как спроектировано это устройство позволяет ему двигаться лишь от одного шага к следующему и фиксироваться в этом положении. Обычный степпер имеет 200 шагов на один полный переворот; если мы при этом укажем моторчику передвинуться на 100 шагов в одном направлении, то он повернётся ровно на 180 градусов. Когда мы даём команду пройти 1 шаг, степпер поворачивается ровно на 1.8 градуса.

Степперы есть в принтерах, сканерах, промышленных роботах, 3Д-принтерах и во многих устройствах, где нужна точность в движении.


Существует два типа шаговых двигателей: униполярные и биполярные.
Униполярные двигатели легко контролировать за счет низкой производительности и мощности. У биполярных шаговых двигателей намного более высокие производительность и крутящий момент, тем не менее, ими при этом и сложнее управлять. Чтобы полностью контролировать один такой движок, требуется два Н-моста. К счастью есть множество биполярных степперов, совместимых с Ардуино (Arduino) и в этой статье мы узнаем о некоторых способах управления ими.

Мы можем управлять биполярным мотором при помощи платы Arduino Motor Shield. Вот, что нам для этого потребуется:

Вот простой метод определить тип двигателя. Четырёхкабельный степпер обычно биполярный. Если вы видите 6 кабелей, то он скорее всего униполярный, а два центральных катушечных кабеля должны быть соединены друг с другом. Есть версии с пятью проводами, что тоже говорит о том, что моторчик униполярный и два центральных катушечных кабеля уже внутренне соединены. Есть также шаговые двигатели с 8 кабелями, но они встречаются крайне редко. Они также униполярные и четыре их центральных кабеля соединены вместе.

Шаг 1: Как подключать степперы

Подключение шагового двигателя к ардуино организуется следующим образом:

  • Аккуратно установите Arduino Motor Shield поверх Ардуино, не погните пины.
  • Найдите катушки. При помощи мультиметра определите сопротивление между всеми проводами. Провода с низким сопротивлением между ними будут катушками.
  • Соедините 4 провода степпера с основным выходом клемм на Shield. Одна катушка идёт на один выход двигателя, а вторая на другой выход.

На картинке изображено как всё должно выглядеть.


Шаг 2: Код

Следующий код повернёт двигатель на 100 шагов в одном направлении и на 100 шагов в обратном.

// Подключаем библиотеку для шаговых двигателей
#include 

// Объявляем используемые пины
int dirA = 12;
int dirB = 13;
int pwmA = 3;
int pwmB = 11;
// Объявляем шаговый двигатель на 200 шагов
Stepper stepper1(200, dirA, dirB);
void setup() {
  // Пины PWM нужно объявлять, если они используются как Цифровые
  pinMode(pwmA, OUTPUT);
  pinMode(pwmB, OUTPUT);
  
  // Устанавливаем пины PWM в постоянный режим HIGH
  digitalWrite(pwmA, HIGH);
  digitalWrite(pwmB, HIGH);
  
  // Устанавливаем скорость шагового двигателя
  stepper1.setSpeed(60);
}
void loop(){
  // Поворачиваем степпер на 100 шагов, что равно 180 градусам
  stepper1.step(100);
  // Ждём 0.5 секунды
  delay(500);
  
  // Поворачиваем степпер на 100 шагов обратно, что равно 180 градусам
  stepper1.step(-100);
  // Ждём 0.5 секунды
  delay(500);
}

Шаг 3: Разбор кода

В коде объявляется использование степпера, устанавливается его скорость и мотор поворачивается по команде в обоих направлениях.

На этом этапе объявляется использование степпера. Синтаксис требует указать в качестве первого параметра количество шагов двигателя, а затем пины, к которым он подключен. Нам нужно указать два пина направлений Arduino Motor Shield, они указывают, в котором направлении будут возбуждаться катушки:

Stepper stepper1(200, dirA, dirB);

В обычном управлении шаговым двигателем постоянного тока в Motor Shield, два пина PWM определяют, какую мощность мы направляем на каждый моторчик. Тем не менее, так как мы работаем со степпером, мы хотим использовать его на полную мощность, поэтому мы упростим задачу и напрямую зададим пинам PWM постоянное состояние HIGH:

// Пины PWM нужно объявлять, если они используются как Цифровые
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
  
// Устанавливаем пины PWM в постоянный режим HIGH
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);

Еще одним важным шагом является определение скорости, на которой мы хотим, чтобы мотор вращался. Если, например, мы устанавливаем скорость на 60 оборотов в минуту, как в нашем случае, а у мотора 200 шагов, то у него займёт около 5 миллисекунд для того, чтобы пройти 1 шаг. Скорость моторчика можно поменять в любое время:

stepper1.setSpeed(60);

И, наконец, чтобы заставить моторчик двигаться, мы должны отправить команду с количеством шагов, которое он должен пройти. Если мы отправим отрицательное число шагов, он будет двигаться в обратном направлении. Заметьте, что функция step() остановит выполнение программы, пока моторчик не повернётся до конца. Если, к примеру, мы задали 200 шагов на скорости 1 оборот в минуту, то пройдёт ровно 1 минута перед тем, как Ардуино продолжит выполнять код программы.

stepper1.step(-100);

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

Шаг 4: Больше информации о степперах

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

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