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

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

Шаговый двигатель Arduino ► предназначен для перемещения объекта на заданное количество шагов вала. Рассмотрим устройство и схему подключения шагового двигателя.

Шаговый двигатель (stepper motor) предназначен для точного позиционирования или перемещения объекта на заданное количество шагов вала. Плата Arduino может управлять шаговым двигателем с помощью драйвера и библиотеки stepper.h или accelstepper.h. Рассмотрим принцип работы и схему подключения шагового двигателя к Arduino Uno / Nano, а также разберем скетч для управления шаговым мотором.

Принцип работы шагового двигателя

В зависимости от конструкции, сегодня применяются три вида шаговых двигателей: с постоянным магнитом, с переменным магнитным сопротивлением и гибридные двигатели. У двигателей с постоянным магнитом число шагов на один оборот вала доходит до 48, то есть один шаг соответствует повороту вала на 7,5°. Гибридные двигатели обеспечивают не меньше 400 шагов на один оборот (угол шага 0,9°).

Фото. Устройство шагового мотора в разрезе

Подсчитав количество сделанных шагов, можно определить точный угол поворота ротора. Таким образом, шаговый двигатель является сегодня идеальным приводом в 3D принтерах, станках с ЧПУ и в другом промышленном оборудовании. Это лишь краткий обзор устройства и принципа работы stepper motor, нас больше интересует, как осуществляется управление шаговым двигателем с помощью Ардуино.

Драйвер шагового двигателя Ардуино

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

Фото. Виды драйверов для управления шаговым двигателем

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

Схема подключения шагового двигателя 28BYJ-48 к Arduino Uno через драйвер ULN2003 изображена на рисунке ниже. Основные характеристики мотора 28BYJ-48: питание от 5 или 12 Вольт, 4-х фазный двигатель, угол шага 5,625°. Порты драйвера IN1 — IN4 подключаются к любым цифровым выводам платы Arduino Mega или Nano. Светодиоды на модуле служат для индикации включения катушек двигателя.

Как подключить шаговый двигатель к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • драйвер шагового двигателя ULN2003;
  • шаговый двигатель 28BYJ-48;
  • провода «папа-мама».

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

Ардуино для начинающих. Урок 5. Кнопки, ШИМ, функции

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

В этом уроке используются следующие детали:

Большая макетная плата на 1600 точек с 4 шинами питания: Купить
Набор резисторов из 100 штук на все случаи: Купить
Набор светодиодов из 100 штук: Купить
5 штук кнопок в удобной форме: Купить
Соединительные провода 120 штук: Купить

Подключение кнопки к Arduino

Как видите, ничего сложно в подключении кнопки к ардуино нет. Обратите внимание, что кнопка установлена так, что каждый ее контакт подключен к разным линиям макетной платы. Так же вы можете заметить резистор на 10 кОм который притягивает контакт к земле. Это нужно для того, что бы мы на 8 контакте не ловили наводок. Попробуйте убрать этот резистор из схемы. Светодиод будет загораться при шевелении проводов или кнопки. Теперь давайте рассмотрим скетч:

В этом уроке, как и прошлом, в самом начале мы объявляем переменные со значениями пинов к которым у нас подключены кнопка и светодиод. Далее в функции setup() мы обозначаем какой пин используется как вход, а какой как выход. В функции loop() мы используем условный оператор if с оператором сравнения и проверяем приходит ли на пин 8 высокий сигнал. Если да то включаем светодиод, если нет то выключаем. Описание функций и операторов вы найдете в справочнике по языку программирования Arduino

Читайте также:  Что заливают в радиатор своего автомобиля знающие водители видео; АвтоНоватор

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

В этом скетче мы добавили переменные для хранения состояния светодиода и кнопки. Так же мы создали новую функцию для подавления дребезга контактов debounse(). Код в цикле loop() тоже немного изменился. Теперь в условном операторе мы проверяем нажата ли кнопка и если нажата, то меняем состояние светодиода на противоположное. Потом меняем переменную с последним состоянием на текущее состояние кнопки и включаем или выключаем светодиод.

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

Подключение светодиода к Arduino

Теперь светодиод подключен к 11 пину ардуино, которой умеет делать ШИМ. И нам пришлось добавить токоограничивающий резистор на 220 Ом перед светодиодом, что бы его не спалить. Это необходимо потому, что светодиоды работают при напряжении 3.3 В, а пин ардуино отдает 5 В. Теперь посмотрим что нужно изменить в скетче:

В этом примере мы изменили значение переменной ledPin на 11. Так же добавили переменную для хранения уровня ШИМ ledLevel. При нажатии на кнопку будем увеличивать эту переменную. Функция debounce() осталась без изменений. В цикле мы теперь используем функцию analogWrite().

Вот и все! Сегодняшний урок на этом мы закончим. Надеюсь вам все было понятно. Если нет, то можете задавать свои вопросы в комментариях ниже.

21 комментариев

Здравствуйте)))
Подскажите пожалуйста новечьку,
Как можно реализовать такой скечь
При нажатии на кнопку светодиод плавно загорается если нажать ещё раз на кнопку то светодиод плавно тухнет…?

Очевидно при нажатии на кнопку в цикле менять значение ledLevel

Денис что такое ledlevel?

//Как можно реализовать такой скечь
//При нажатии на кнопку светодиод плавно загорается если нажать ещё раз на кнопку то светодиод плавно тухнет…?

/*== к примеру, вот так ==*/

// переменные с пинами подключенных устройств
int switchPin = 8;
int ledPin = 11;

// переменные для хранения состояния кнопки и светодиода
boolean lastButton = LOW;
boolean currentButton = LOW;
int ledLevel = 0;

// настройка изменения яркости
int deltaLevel = 5; // Шаг изменения яркости
int sign = 1; // Знак шага
int step_delay = 100; // задержка в шаге изменения яркости светодиода

// настройка сигнализатора окончания изменения яркости
int max_blink = 3; //число морганий светодиода на pin13 (LED_BUILTIN)
int blink_delay = 500; //задержка состояния светодиода на pin13 (LED_BUILTIN)

void setup()
<
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);// потушим светодиод на pin13 (LED_BUILTIN)
>

// функция для подавления дребезга
boolean debounse(boolean last)
<
boolean current = digitalRead(switchPin);
if(last != current)
<
delay(5);
current = digitalRead(switchPin);
>
return current;
>

// При нажатии на кнопку, светодиод медленно увеличивает яркость
// При повторном нажатии на кнопку, светодиод медленно гаснет
void loop()
<
currentButton = debounse(lastButton);
if(lastButton == LOW && currentButton == HIGH)
<
if(ledLevel == 0) sign = 1;
if(ledLevel == 255) sign = -1;
for(int i = 0; i 255) ledLevel = 255;
if(ledLevel
Света 2018-03-12 12:18:59

МУЖЧИНЫ кто согласится написать скетч за вознаграждение,к примеру на телефон.

Здравствуйте. Какой именно скетч вам нужен?

ОБОРУДОВАНИЕ
ТЕХНОЛОГИИ
РАЗРАБОТКИ

Блог технической поддержки моих разработок

Урок 35. Подключение STEP/DIR драйверов шаговых двигателей к Ардуино. Библиотека StepDirDriver.


В уроке подключим STEP/DIR драйвер TB6560-V2 к плате Ардуино. Научимся управлять им с помощью библиотеки StepDirDriver.

Читайте также:  Разрушающие нагрузки для болтов Интернет-магазин крепежа

TB6560-V2 недорогой драйвер шаговых двигателей поддерживающий все типичные режимы и функции STEP/DIR драйверов.

В уроке будем подключать его к плате Ардуино. Все схемы и программы урока подойдут к любому другому STEP/DIR драйверу.

Подключение драйвера к плате Ардуино.

В статье о модуле TB6560-V2 есть две схемы подключения к микроконтроллеру. Будем использовать эту.

При высоком уровне сигнала (+5 В) через светодиод входного оптрона течет ток, и модуль воспринимает это как активный управляющий уровень. Резисторы 330 Ом ограничивают ток светодиодов. Т.е. драйвером можно управлять сигналами непосредственно с выводов микроконтроллеров.

С учетом этого схема подключения драйвера TB6560-V2 к плате Ардуино выглядит так.

Обратите внимание на плавкий предохранитель. Я настоятельно рекомендую его поставить. В схемах с простыми драйверами при сгорании ключей через двигатель течет рабочий ток, ограниченный либо сопротивлением обмотки, либо дополнительным резистором. В драйверах со стабилизацией тока ток регулируется за счет ШИМ модуляции. Если в подобных устройствах сгорают выходные ключи, то на двигатель может попасть полное напряжение питания. Это приведет к недопустимому току и сгоранию шагового двигателя. Процесс это медленный, поэтому от выхода из строя привода спасет любой предохранитель – плавкий или самовосстанавливающийся.

Параметры драйвера задаются переключателями на плате модуля. Я задал ток фазы 1 А.

Переключателями S3 иS4 выбирается режим коммутации фаз.

Состояние переключателей Режим
S3 S4
OFF OFF шаговый
ON OFF полу шаговый
ON ON микро шаговый
1/8 шага
OFF ON микро шаговый
1/16 шага

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

Собранная схема у меня выглядит так.

Осталось научиться управлять такой системой.

Библиотека StepDirDriver.

Эту библиотеку я разработал для управления STEP/DIR драйверами. Она полностью совместима по функциям с библиотекой StepMotor (урок 29). Только 2 отличия:

  • Конструктор имеет другие аргументы. Просто для STEP/DIR драйвера требуются другие сигналы управления и другое количество сигналов.
  • В функции установки режима setMode() игнорируется параметр stepMode – режим коммутации. Режим задается переключателями на драйвере.

Загрузить библиотеку StepDirDriver можно по этой ссылке:

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Описание класса StepDirDriver.

У класса следующие public методы.

public:
StepDirDriver(byte pinStep, byte pinDir, byte pinEn); // конструктор
void control(); // управление, функция должна вызываться регулярно с максимальной частотой коммутации фаз
void step(int steps); // инициирует поворот ротора на заданное число шагов
void setMode(byte stepMode, boolean fixStop); // задает режимы коммутации фаз и остановки
void setDivider(int divider); // установка делителя частоты для коммутации фаз
int readSteps(); // чтение оставшихся шагов
> ;

Нетрудно догадаться, о назначении аргументов конструктора:

  • pinStep — вывод сигнала STEP;
  • pinDir — вывод сигнала DIR;
  • pinEn — вывод сигнала ENABLE.

StepDirDriver myMotor1(10, 11, 12); // создаем объект StepDirDriver, задаем выводы для сигналов STEP, DIR, ENABLE

Описание методов библиотеки StepDirDriver.

void control()

Необходимо вызывать метод регулярно в параллельном процессе (прерывании по таймеру). В нем вырабатываются управляющие сигналы, определяющие коммутацию фаз. Частота вызова функции control() вместе с делителем, задаваемым функцией setDivider, определяет скорость вращения двигателя.

// обработчик прерывания 200 мкс
void timerInt () <
myMotor1.control(); // управление двигателем
>

void step(int steps)

Метод инициирует поворот двигателя на заданное число шагов. В микро шаговых режимах речь идет не о физических шагах двигателя, а о микро шагах. Параметр steps с положительным значением инициирует поворот против часовой стрелки, с отрицательным значением – по часовой стрелке.

Запустив вращение функцией step()

myMotor1.step(300); // сделать 300 шагов против часовой стрелки

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

myMotor1.step(0); // остановить привод

Ничего не мешает задать новое число шагов, не дожидаясь остановки двигателя. Для непрерывного вращения можно периодически вызывать функцию step() с большим числом шагов.

myMotor1.step(30000); // постоянное вращение

О том, что двигатель остановился можно узнать с помощью метода readSteps().

Читайте также:  Контрольная лампа заряда аккумуляторной батареи - не горит лампа заряда аккумулятора

void setMode(byte stepMode, boolean fixStop)

Метод задает состояние двигателя при остановке.

  • Если fixStop = true, то при остановке на обмотки двигателя подается ток удержания, положение ротора зафиксировано.
  • При fixStop = false, напряжение с обмоток двигателя при остановке снимается.

Аргумент stepMode игнорируется. Он добавлен для совместимости с такой же функцией библиотеки StepMotor.

myMotor1.setMode(0, true); // фиксация ротора при остановке
myMotor1.setMode(0, false); // двигатель полностью отключен

void setDivider(int divider)

Функция задает коэффициент деления частоты вызова метода control(), а значит, определяет скорость вращения двигателя. Скорость вращения можно вычислить по следующей формуле:

Rpm = 60 000 / ( divider * Tcontrol * Nдвигателя ) / Nмикрошагов

  • Rpm – скорость вращения в оборотах в минуту;
  • Tcontrol – период вызова метода control() в мс;
  • Nдвигателя – число шагов двигателя на полный оборот;
  • Nмикрошагов – число микро шагов двигателя на одну фазу.

Для шагового режима Nмикрошагов = 1, для полу шагового Nмикрошагов = 2 и т.д.

myMotor1.setDivider(5); // делитель частоты 5

int readSteps()

Метод считывает количество шагов, оставшихся до остановки двигателя. Возврат 0 означает, что двигатель остановлен.

if (myMoto1r.readSteps() == 0) <
// двигатель остановлен
>

Примеры использования библиотеки StepDirDriver.

Использование новой библиотеки ничем не отличается от применения функций библиотеки StepMotor из предыдущих уроков.

Всего два отличия:

  • Подключение библиотеки #include вместо #include .
  • Другой формат конструктора StepDirDriver myMotor(10, 11, 12); вместо StepMotor myMotor(10, 11, 12, 13) .

В программе меняются всего 2 строки.

Можете загрузить и проверить скетч программы

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

, которая заставляет сделать двигатель 2 оборота по часовой стрелке со скоростью 1 оборот в секунду, затем пауза 1 секунда, 2 оборота против часовой стрелки, опять пауза на секунду и так в цикле. Он похож на примеры из предыдущих уроков для библиотеки StepMotor. Не забудьте установить библиотеку StepDirDriver:

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Проверка драйвера шагового двигателя с AT командами.

Я заменил две строчки программы драйвера с управлением от компьютера из Урока31 и получилось новое устройство для работы с шаговым двигателем. Загрузить новый драйвер с управлением по протоколу AT команд можно по этой ссылке:

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

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

Задал микро шаговый режим с 16 микро шагами. У меня двигатель имеет 400 физических шагов. В микро шаговом режиме получился двигатель, имеющий целых 6400 шагов на оборот! Попробовал управлять программой верхнего уровня StepMotor (урок 31).

Все работает. Точность установки просто невероятная.

Проверил и работу следящего электропривода из урока 32.

Разрешающая способность положения ротора почти 0,05 °!

Другие варианты библиотеки StepDirDriver.

Библиотека StepDirDriver вырабатывает сигналы управления с высокими активными уровнями. Если STEP/DIR драйвер подключить к плате Ардуино непосредственно, без оптронов, то необходимы управляющие сигналы с низкими активными уровнями. Я сделал такой вариант библиотеки.

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Есть еще один вариант библиотеки с типом данных long для свойства step.

Зарегистрируйтесь и оплатите. Всего 40 руб. в месяц за доступ ко всем ресурсам сайта!

Наверное, в последних двух уроках я убедительно показал преимущества STEP/DIR драйверов. Но какой драйвер применять в конкретном случае решать разработчику. Что важнее низкая цена простого драйвера из ключей или функциональность STEP/DIR драйвера.

Бывают очень серьезные разработки с простыми драйверами. Например, практически все шаговые двигатели в фасовочном оборудовании НПП ”РОСТ” работают в униполярном режиме с простыми драйверами-ключами. Из-за этого у двигателей уменьшился крутящий момент, снизилась максимальная скорость вращения, но зато значительно упала цена системы управления. Для устройств с 7-10 шаговыми двигателями это важно.

Надо выбирать оптимальный вариант. В каких-то случаях без STEP/DIR драйвера не обойтись, в других проектах вполне удачно будут работать простые драйверы.

Ссылка на основную публикацию
Удостоверение МВД как выглядит и как отличить от поддельного, образец
Удостоверение МВД как выглядит и как отличить от поддельного, образец Если гражданина остановил на улице сотрудник полиции, требуя предъявить документы...
УАЗ Хантер — технические характеристики размеры, расход потлива, клиренс
Внедорожник УАЗ-315195 Hunter Хаоактеристики, объем двигателя В ноябре 2003 года с конвейера завода в Ульяновске сошел первый автомобиль с индексом...
УАЗ-3909 технические характеристики, двигатель, устройство, цена, фото, видео
Технические характеристики УАЗа-39094 «Фермер», его описание УАЗ-39094 представляет собой коммерческую технику, предназначенную для транспортировки грузов. Он обладает выдающимися рабочими параметрами,...
Узлы для троса буксировочного
Ликбез 4х4 буксировочный трос для джипа Azov Off Road Буксировочный трос — неотъемлемая составляющая аварийного запаса внедорожника. Как в городе,...
Adblock detector