СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Ардуино. Шаговый двигатель

Категория: Информатика

Нажмите, чтобы узнать подробности

Подключение шагового двигателя рассмотрено на контроллере Ардуино.

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

Просмотр содержимого документа
«Ардуино. Шаговый двигатель»

Ардуино: шаговый двигатель 28BYJ-48 и драйвер ULN2003

Шаговые двигатели — основа точной робототехники. В отличие от двигателей постоянного вращения, один оборот «шаговика» состоит из множества микроперемещений, которые и называют шагами. Другими словами, мы можем повернуть вал двигателя ровно на 90 градусов, и зафиксировать его в этом положении. Грубым аналогом шагового двигателя является серводвигатель.

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

Другим известным примером может служить ЧПУ станок. Взять тот же 3D-принтер. Для точного перемещения печатающей головки применяют именно шаговые двигатели. В старых дисководах шаговики использовались для перемещения магнитной головки. А в современных фотоаппаратах микро-миниатюрные шаговые двигатели перемещают линзы.

В этом уроке мы с помощью контроллера Ардуино Уно запустим популярный в среде начинающих робототехников шаговый двигатель 28BYj-48. Этот миниатюрный шаговик имеет встроенный редуктор, который позволяет совершать очень точные перемещения выходного вала.

Так, в 4-шаговом режиме двигатель совершает 2048 шагов за один оборот. В 8-шаговом — 4096. Напряжение питания — 5 Вольт. Потребляемый ток — 160мА. А значит, для эксперимента нам будет достаточно штатного питания от USB.

В качестве драйвера для двигателя используем микросхему ULN2003, которую часто продают в паре с 28BYj-48. Вот так выглядит плата драйвера:



На плате есть 4 входа для микроконтроллера: IN1..IN4. Пять выходов на двигатель, и два контакта питания. Также есть перемычка, разрывающая цепь питания двигателя.

1. Подключение

Как правило, кабель двигателя 28BYj-48 уже имеет разъем с ключом, который вставляется в плату только в правильном положении. В противном случае, при подключении необходимо следовать цветовой схеме (см. рисунок). Контакты IN1..IN4 можно подключить к любым цифровым выходам Ардуино Уно.

И «детская» схема подключения

2. Программа: вариант №1

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

Полу-шаговая последовательность

ШАГ

A

B

A\

B\

0

1

1

0

0

1

0

1

0

0

2

0

1

1

0

3

0

0

1

0

4

0

0

1

1

5

0

0

0

1

6

1

0

0

1

7

1

0

0

0

В этой таблице, колонка A соответствует катушке, управляемой сигналом IN3. Колонка B — IN4. A\ и B\ — управляются через IN1 и IN2, соответственно.

Получается такая вот незамысловатая программа. Переменная dl в ней — это время, между соседними коммутациями.

int in1 = 2;

int in2 = 3;

int in3 = 4;

int in4 = 5;

const int dl = 5;


void setup() {

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

pinMode(in3, OUTPUT);

pinMode(in4, OUTPUT);

}


void loop() {

digitalWrite( in1, LOW );

digitalWrite( in2, LOW );

digitalWrite( in3, HIGH );

digitalWrite( in4, HIGH );

delay(dl);


digitalWrite( in1, LOW );

digitalWrite( in2, LOW );

digitalWrite( in3, HIGH );

digitalWrite( in4, LOW );

delay(dl);


digitalWrite( in1, LOW );

digitalWrite( in2, HIGH );

digitalWrite( in3, HIGH );

digitalWrite( in4, LOW );

delay(dl);


digitalWrite( in1, LOW );

digitalWrite( in2, HIGH );

digitalWrite( in3, LOW );

digitalWrite( in4, LOW );

delay(dl);


digitalWrite( in1, HIGH );

digitalWrite( in2, HIGH );

digitalWrite( in3, LOW );

digitalWrite( in4, LOW );

delay(dl);


digitalWrite( in1, HIGH );

digitalWrite( in2, LOW );

digitalWrite( in3, LOW );

digitalWrite( in4, LOW );

delay(dl);


digitalWrite( in1, HIGH );

digitalWrite( in2, LOW );

digitalWrite( in3, LOW );

digitalWrite( in4, HIGH );

delay(dl);


digitalWrite( in1, LOW );

digitalWrite( in2, LOW );

digitalWrite( in3, LOW );

digitalWrite( in4, HIGH );

delay(dl);

}

Чтобы заставить двигатель двигаться быстрее или медленнее, необходимо будет изменить переменную dl. Увеличиваем паузу между коммутациями — двигатель вращается медленнее. Уменьшаем паузу — крутится быстрее.

2. Стандартная библиотека: вариант №2

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

#include


const int IN1 = 2;

const int IN2 = 3;

const int IN3 = 4;

const int IN4 = 5;


const int stepsPerRevolution = 32; // шагов за один оборот


Stepper myStepper(stepsPerRevolution, IN1, IN2, IN3, IN4);


void setup() {

myStepper.setSpeed(5); // скорость 5 об/минуту

}


void loop() {

myStepper.step(stepsPerRevolution); // шаг в одном направлении

delay(500);

Serial.println("counterclockwise");

myStepper.step(-stepsPerRevolution); // шаг в обратную сторону

delay(500);

}



6