- Управление шаговым двигателем с помощью джойстика
- Sketch code
- Подключение шагового двигателя к Ардуино
- Принцип работы шагового двигателя
- Драйвер шагового двигателя Ардуино
- Как подключить шаговый двигатель к Ардуино
- Управление шаговым двигателем с помощью Arduino и потенциометра
- Общие принципы работы шаговых двигателей
- Расчет шагов на оборот для шагового двигателя
- Зачем нужен драйвер мотора для управления шаговым двигателем
- Работа схемы
- Объяснение программы для платы Arduino
- Работа проекта
- Исходный код программы
- Как подключить джойстик к Ардуино
- Джойстик схема подключения к Ардуино
- Подключение джойстика к Arduino UNO
- Скетч. Подключение джойстика к Ардуино
- Скетч. Управление джойстиком светодиодами
- Пояснения к коду:
- БИБЛИОТЕКА ДЛЯ ШАГОВОГО ДВИГАТЕЛЯ ARDUINO
- БИБЛИОТЕКА GYVERSTEPPER
- ДОКУМЕНТАЦИЯ
- Документация
- Инициализация
- Время шага [NEW!]
- Медленные скорости (new!)
- Тик и тайминги
- Смена направления
- Режимы работы
- Режим FOLLOW_POS
- Режим KEEP_SPEED
- Алгоритм планировщика скорости
- Остановка и сброс
- Управление питанием
- Видео
Управление шаговым двигателем с помощью джойстика
Вывод 9 подключен к Steps драйвера EasyDriver
Вывод 8 подключен к Direction
Вывод 10 подключен к MS1
Вывод 11 подключен к MS2
Вывод 12 подключен к SLEEP
Вывод А0 подключенн к выводу джойстика Х
Вывод 4 подключен к Key и концевиком
Выводы 2 и 3 к выводу выходу (OUT) концевиков
Питание драйвера Easy Driver подключено к 12V отдельного блока питания
Питание Arduino и драйвера разделено Easy Driver
В программе не требуется использование дополнительных библиотек
Схема подключения |
Sketch code
#define step_pin 9 // Pin 9 connected to Steps pin on EasyDriver
#define dir_pin 8 // Pin 8 connected to Direction pin
#define MS1 10 // Pin 10 connected to MS1 pin
#define MS2 11 // Pin 11 connected to MS2 pin
#define SLEEP 12 // Pin 12 connected to SLEEP pin
#define X_pin A0 // Pin A0 connected to joystick x axis
#define Joy_switch 4 // Pin 4 connected to joystick switch
#define Limit01 2 // Pin 2 connected to Limit switch out
#define Limit02 3 // Pin 3 connected to Limit switch out
int step_speed = 10; // Speed of Stepper motor (higher = slower)
void setup() <
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(dir_pin, OUTPUT);
pinMode(step_pin, OUTPUT);
pinMode(SLEEP, OUTPUT);
pinMode(Limit01, INPUT);
pinMode(Limit01, INPUT);
digitalWrite(SLEEP, HIGH); // Wake up EasyDriver
delay(5); // Wait for EasyDriver wake up
/* Configure type of Steps on EasyDriver:
// MS1 MS2
//
// LOW LOW = Full Step //
// HIGH LOW = Half Step //
// LOW HIGH = A quarter of Step //
// HIGH HIGH = An eighth of Step //
*/
digitalWrite(MS1, LOW); // Configures to Full Steps
digitalWrite(MS2, LOW); // Configures to Full Steps
>
void loop() <
if (!digitalRead(Joy_switch)) < // If Joystick switch is clicked
delay(500); // delay for deboucing
switch (step_speed) < // check current value of step_speed and change it
case 1:
step_speed=10; // slow speed
break;
case 3:
step_speed=1; // fast speed
break;
case 10:
step_speed=3; // medium speed
break;
>
>
if (analogRead(X_pin) > 712) < // If joystick is moved Left
if (!digitalRead(Limit01)) <> // check if limit switch is activated
digitalWrite(dir_pin, LOW); // (HIGH = anti-clockwise / LOW = clockwise)
digitalWrite(step_pin, HIGH);
delay(step_speed);
digitalWrite(step_pin, LOW);
delay(step_speed);
>
>
if (analogRead(X_pin) Скопируйте код и вставьте в Arduino IDE
Подключение шагового двигателя к Ардуино
Шаговый двигатель 28byj-48 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 и потенциометра
Шаговые двигатели с каждым годом приобретают все большую популярность в мире электроники поскольку именно они обеспечивают превосходную точность позиционирования различных механизмов. В этой статье мы рассмотрим подключение одного из самых распространенных шаговых двигателей 28-BYJ48 к плате Arduino при помощи модуля ULN2003 и управление им с помощью потенциометра.
В нашей предыдущей статье про подключение шагового двигателя к плате Arduino мы управляли углом его поворота из она монитора последовательной связи, в этом же проекте мы будем управлять поворотом шагового двигателя вращая ручку потенциометра. Если мы будем вращать ручку потенциометра по часовой стрелке, то и шаговый двигатель будет поворачиваться по часовой стрелке, а если мы ручку потенциометра будем поворачивать против часовой стрелки – то и шаговый двигатель будет вращаться против часовой стрелки.
Общие принципы работы шаговых двигателей
Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:
Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.
Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.
Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.
Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.
На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.
Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).
Расчет шагов на оборот для шагового двигателя
Важно знать, как рассчитать количество шагов за один оборот для вашего шагового двигателя, потому что только тогда вы можете эффективно его запрограммировать.
В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).
Справедлива следующая формула:
Количество шагов за оборот = 360 / угол шага.
В нашем случае 360/11.25 = 32 шага за оборот.
Зачем нужен драйвер мотора для управления шаговым двигателем
Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.
Работа схемы
Схема устройства представлена на следующем рисунке.
Чтобы подавать питание на соответствующие катушки шагового двигателя мы будем использовать цифровые контакты 8, 9, 10 и 11 платы Arduino, к которым подключены соответствующие контакты драйвера двигателей ULN2003. Потенциометр, с помощью которого мы будем управлять вращением шагового двигателя, подключен к аналоговому контакту A0 платы Arduino.
Драйвер мотора запитывается от контакта 5V платы Arduino. Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.
Объяснение программы для платы Arduino
Перед тем как начать писать программу для платы Arduino давайте разберемся что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-шаговой последовательности, то есть нам нужно будет сделать 4 шага чтобы выполнить один полный оборот двигателя.
Номер шага | Контакты, на которое подается питание | Катушки, на которое подается питание |
Шаг 1 | 8 и 9 | A и B |
Шаг 2 | 9 и 10 | B и C |
Шаг 3 | 10 и 11 | C и D |
Шаг 4 | 11 и 8 | D и A |
На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.
Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.
Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:
Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).
Stepper stepper (STEPS, 8, 10, 9, 11);
Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.
Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:
Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.
Теперь, чтобы двигатель сделал один шаг, мы можем использовать следующую команду:
Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.
Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:
А один шаг против часовой стрелки:
В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.
potVal = map(analogRead(A0),0,1024,0,500);
if (potVal>Pval)
stepper.step(5);
if (potVal
stepper.step(-5);
Pval = potVal;
Работа проекта
Когда вы сделаете все необходимые соединения в схеме данного проекта у вас должна получиться примерно следующая конструкция:
После этого загрузите программу в плату Arduino и откройте окно монитора последовательной связи (serial monitor). После этого вы можете вращать ручку потенциометра и наблюдать как в соответствии с ее поворотами шаговый двигатель будет вращаться по часовой и против часовой стрелки.
Исходный код программы
Код программы достаточно простой, я надеюсь у вас не вызовет никаких затруднений реализация данного проекта.
Как подключить джойстик к Ардуино
Подключение джойстика к Arduino ► позволит сделать дистанционное управление машинкой или роботом. Рассмотрим, как джойстиком управлять сервоприводом на Ардуино.
Подключение джойстика к Arduino позволит сделать дистанционное управление с помощью джойстика машинкой или роботом на Ардуино. Рассмотрим в статье, как подключить джойстик шилд самостоятельно и сделать управление светодиодами с помощью джойстика на Ардуино. Представим несколько скетчей и дадим схему подключения джойстика к микроконтроллеру Arduino Nano или Arduino Uno.
Джойстик схема подключения к Ардуино
Аналоговый джойстик представляет собой ручку, которая крепится на шарнире с двумя потенциометрами, определяющими положение джойстика по оси X и Y, и кнопкой Z. Наклон ручки вращает потенциометры и изменяет выходное напряжение, позволяя отследить степень отклонения ручки от центральной точки. При отпускании ручки джойстика, она плавно возвращается в центральное (нулевое) положение.
Как подключить джойстик к Arduino Nano и Arduino Uno
У модуля джойстика KY-023 есть свои недостатки. Дело в том, что ручка джойстика не всегда точно возвращается в центральное положение, поэтому следует учитывать в программе центральное положение ручки, как некоторый диапазон значений, а не точное значение. То есть, при положении ручки джойстика в центре, значение X и Y координат может находиться в диапазоне от 490 до 530, вместо 512.
Подключение джойстика к Arduino UNO
Для этого занятия нам потребуется:
После подключения к Ардуино джойстика, загрузите следующий скетч. В данном примере на монитор порта будут выводиться данные с джойстика, а при нажатии кнопки будет выключаться светодиод на плате, подключенный параллельно к Pin 13. Соберите схему с джойстиком на Arduino Uno, как показано на схеме выше, загрузите скетч и откройте монитор порта программы Arduino IDE на компьютере.
Скетч. Подключение джойстика к Ардуино
Скетч. Управление джойстиком светодиодами
Теперь можно усложнить схему, сделав плавное включение светодиода, управляемое от джойстика. Для этого подключите два светодиода через резистор к аналоговым портам 5 и 6. В следующем скетче, с помощью функции map(), переменные X и Y преобразуются из диапазона чисел от 0 до 1023 в диапазон чисел от 0 до 255. Подключите светодиоды к пинам 5 и 6 Ардуино и загрузите следующий скетч.
Пояснения к коду:
Заключение. Мы рассмотрели схему подключения джойстика к Arduino и несколько вариантов управления светодиодами от микроконтроллера. Как вы убедились сами, что работа с джойстиком Ардуино доступна любому начинающему мейкеру, так как принцип работы модуля ky-023 схож с простым потенциометром. Данный модуль может использоваться во многих интересных DIY проектах.
БИБЛИОТЕКА ДЛЯ ШАГОВОГО ДВИГАТЕЛЯ ARDUINO
Для подключения шаговых моторов к Arduino нужно использовать драйверы. Очень дешёвые и популярные моторы 28byj-48-5v часто продаются вместе со своим драйвером (транзисторная сборка ULN2003), подключить можно к любым 4-м пинам Ардуино и использовать.
Для работы с большими шаговиками (типа Nema 17) нужно использовать специализированные драйверы, ниже вы найдёте описания и схемы подключения для A4988, DRV8825 и TMC2208, драйверы такого формата подключаются и работают практически одинаково, т.к. разработаны для CNC шилдов и взаимозаменяемы. У этих драйверов нужно настроить ток при помощи крутилки на плате. Это можно сделать “на глаз”, заставив мотор вращаться и регулируя крутилку. Мотор должен вращаться, но не вибрировать как перфоратор и сильно не нагреваться. Лучше настроить ток по опорному напряжению Vref, у каждого драйвера оно считается по своей формуле (см. картинки ниже). Берём ток своего мотора из описания, подставляем в формулу вместо current, считаем, и накручиваем полученное напряжение крутилкой. Для измерения опорного напряжения нужно подключить щупы вольтметра к самой крутилке и пину GND.
Главное преимущество дорогущих драйверов TMC – отсутствие шума/свиста/вибраций при работе, так как драйвер своими силами интерполирует сигнал до микрошага 1/256.
БИБЛИОТЕКА GYVERSTEPPER
GyverStepper v1.8
GyverStepper – производительная библиотека для управления шаговыми моторами
Поддерживаемые платформы: все Arduino (используются стандартные Wiring-функции)
Версия 1.1: добавлена возможность плавно менять скорость в режиме KEEP_SPEED. Добавлены примеры multiStepper и accelDeccelButton
v1.2 – добавлена поддержка ESP8266
v1.3 – изменена логика работы setTarget(, RELATIVE)
v1.4 – добавлена задержка для STEP, настроить можно дефайном DRIVER_STEP_TIME
v1.5 – пофикшен баг для плат есп
v1.6 – Исправлена остановка для STEPPER4WIRE_HALF, скорость можно задавать во float (для медленных скоростей)
ДОКУМЕНТАЦИЯ
Документация
Инициализация
Библиотека поддерживает два типа драйверов:
При инициализации указывается тип драйвера, количество шагов на оборот и пины:
Количество шагов на оборот нужно для работы функций, которые устанавливают или читают параметр в градусах. Если они не нужны – количество шагов можно поставить любое (единичку). Если нужно – количество шагов нужно указывать с учётом редукторов и микрошагов:
Время шага [NEW!]
Для драйверов STEP-DIR сделана задержка между переключением состояния пина STEP, эта задержка является минимальной, т.е. она может быть больше, чем нужно, но если будет меньше – возможна нестабильная работа драйвера. По умолчанию она составляет 4 микросекунды, но разным драйверам она нужна разная (для других драйверов см. даташит):
Также увеличение задержки может повысить стабильность работы при использовании длинных неэкранированных проводов от микроконтроллера к драйверу (к пину STEP).
Для изменения величины задержки сделай дефайн DRIVER_STEP_TIME перед подключением библиотеки:
Медленные скорости (new!)
Тик и тайминги
Смена направления
Режимы работы
Режим FOLLOW_POS
В этом режиме мотор следует на указанную позицию в шагах или градусах. Для её установки есть следующие методы:
Примечание: абсолютная позиция – говоришь мотору повернуться на 300 шагов, он повернётся на позицию 300. При повторном вызове ничего не произойдёт. Относительная – говоришь повернуться на 300 – он повернётся на 300 относительно текущей позиции. Если вызвать ещё раз через некоторое время – цель сместится относительно текущей позиции вала.
Установленную целевую позицию можно прочитать:
Дополнительно можно настроить максимальную скорость и ускорение при движении к целевой позиции:
Также можно вручную установить текущую позицию мотора в шагах и градусах при помощи:
Режим KEEP_SPEED
В этом режиме мотор просто крутится с заданной скоростью. Скорость задаётся при помощи
(New!) Вторым аргументом можно передать включение плавного изменения скорости, по умолчанию стоит false ( NO_SMOOTH ). Смотри пример accelDeccelButton
Установленную скорость можно прочитать:
Алгоритм планировщика скорости
В библиотеке реализовано два алгоритма планирования скорости для режима плавного движения к позиции с ненулевым ускорением:
Остановка и сброс
Управление питанием
Видео
Управление двумя униполярными шаговыми двигателями с помощью джойстика на базе Arduino uno.Скачать
Управление моторами с ArduinoСкачать
Урок: Управление шаговым двигателем NEMA17 - Stepper motor control. Working with a sketchСкачать
Плавное управление Джойстиком в программе FlprogСкачать
Программа для управления шаговым двигателем с помощью ArduinoСкачать
Урок: Управление шаговым двигателем NEMA17 в реальном времени. Real time NEMA17 control. SketchСкачать