Скетч для управления шаговым ардуино

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

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

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

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

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

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

motor_drv_uln2003

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

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

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

stepper_схема

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

stepper_bb

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 <Stepper.h> 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); }

4. Видео

Наконец, когда все подключено, и программа (один из двух вариантов) загружена на Ардуино Уно, наблюдаем результат проделанной работы!


Источник: http://robotclass.ru/tutorials/arduino-stepper-28byj-48-uln2003/


Закрыть ... [X]

Управляем шаговым двигателем с помощью Arduino Skab in Sky - Как называется станки для плетения



Скетч для управления шаговым ардуино Скетч для управления шаговым ардуино Скетч для управления шаговым ардуино Скетч для управления шаговым ардуино Скетч для управления шаговым ардуино Скетч для управления шаговым ардуино Скетч для управления шаговым ардуино