Шаговый мотор ардуино проекты

Содержание

Шаговый мотор ардуино проекты

Пошаговая инструкция о том как своими руками собрать регулятор скорости вращения для униполярного шагового двигателя.

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

Регулятор скорости вращения для биполярного шагового двигателя на базе Arduino Nano

Самодельный димер на базе платы Arduino Nano и драйвера DRV8825

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

Привод для жалюзи на базе Arduino UNO и шаговых двигателях 28BYJ-48 5V

Как собрать привод для жалюзи, на базе Arduino UNO и двух шаговых двигателях 28BYJ-48 5V.

К данной статье прилагаются два готовых скетча.

Управление двумя шаговыми двигателями с помощью джойстика на базе Arduino UNO.

Статья о том, из чего и как своими руками собрать привод на базе Arduino UNO, джойстика и двух униполярных шаговых двигателях 28BYJ-48 5V

Имеется схема и скетч, работающий без библиотек.

Автоматическая фокусировка на Arduino и Digispark с датчиком расстояния VL53L0X и драйвером DRW8825.

Статья, содержащая материалы для изучения и сборки двух вариантов привода, для автоматической фокусировки микроскопа, на Arduino UNO и Digispark

Как объединить две платы Arduino и Digispark, для совместной работы над общей задачей.

Как подключить биполярный шаговый двигатель к Arduino Uno и к Digispark.

Управление двумя униполярными шаговыми моторами по Bluetooth.

Статья о том, как своими руками собрать беспроводное управление, для двух униполярных шаговых моторов 28BYJ-48 5V.

В качестве пульта подойдет любой ANDROID телефон с наличием Bluetooth.

Лучший эмулятор Arduino UnoArduSim V2.6. Первая серия.

Набор из 9 простых скетчей, которые использовались в этой серии.

В этой серии рассмотрены принципы работы таких модулей как: светодиод, кнопка, потенциометр, Serial порт, программный Serial порт, 4 фазный шаговый двигатель, 2 фазный шаговый двигатель и DC Motor.

Регулятор скорости вращения для униполярного шагового двигателя на базе Didgispark

Простой и не дорогой, регулятор скорости вращения, для униполярного шагового двигателя.

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

Arduino управление шаговыми двигателями по Bluetooth при помощи Android смартфона

Статья о том как написать код для электрического привода, для слайдера под видеокамеру, с управлением по Bluetooth, на базе Arduino Nano, драйверов DRV8825 и Bluetooth модуля HC-05.

Управление биполярным шаговым двигателем при помощи инкрементального энкодера

Статья о том как подключить инкрементальный энкодер EC11 к Arduino, как управлять биполярным шаговым двигателем при помощи энкодера, как проверить инкрементный энкодер, как подключить драйвер шагового двигателя drw8825 к Arduino.

Плавный пуск и остановка биполярного шагового двигателя. Спец драйвер на Digispark Attiny85.

Статья о том, как организовать плавный пуск биполярного шагового двигателя, путём совмещения драйвера шагового двигателя с платой Didispark Attiny85, которая выступает в роли посредника между платой Arduino и драйвером шагового двигателя A4988 или DRW8825

ЧПУ станок для намотки трансформаторов на Arduino и Digispark.

Инструкция по управлению ЧПУ станком для намотки трансформаторов на Arduino.

А также материалы, для самостоятельной сборки ЧПУ станка, для намотки трансформаторов на Arduino.

ЧПУ станок для намотки трансформаторов с укладчиком провода, и автоматическим натяжением провода на Arduino и Digispark.

Материалы, для самостоятельной сборки ЧПУ станка для намотки трансформаторов на Arduino, с укладчиком провода, и с автоматическим натяжением провода.

А также инструкция, по управлению ЧПУ станком, для намотки трансформаторов на Arduino и Digispark.

Творческая мастерская Мастер Колотушкин 2022

Проекты на базе Arduino для начинающих, электронные самоделки своими руками.

Источник

Библиотека для шагового двигателя Arduino v2.2.0

ОБНОВЛЕНИЯ

  • v2.1.6 – исправлена ошибка компиляции при вызове disable() в GStepper
  • v2.1.7 – добавлен clearBuffer() в GPlanner2
  • v2.1.8 – оптимизация, исправлен KEEP_SPEED в GStepper
  • v2.2.0 – добавлен скоростной профиль GS_FAST_PROFILE для GStepper2, GPlanner, GPlanner2. Поддержка режима “слежения” для GStepper2
  • v2.4 – повышена плавность движения шаговиков в Planner и Planner2. Исправлена бага в Stepper2

ТЕОРИЯ

Для подключения шаговых моторов к Arduino нужно использовать драйверы. Очень дешёвые и популярные моторы 28byj-48-5v часто продаются вместе со своим драйвером (транзисторная сборка ULN2003), подключить можно к любым 4-м пинам Ардуино и использовать.

Для работы с большими шаговиками (типа Nema 17) нужно использовать специализированные драйверы, ниже вы найдёте описания и схемы подключения для A4988, DRV8825 и TMC2208, драйверы такого формата подключаются и работают практически одинаково, т.к. разработаны для CNC шилдов и взаимозаменяемы. У этих драйверов нужно настроить ток при помощи крутилки на плате. Это можно сделать “на глаз”, заставив мотор вращаться и регулируя крутилку. Мотор должен вращаться, но не вибрировать как перфоратор и сильно не нагреваться. Лучше настроить ток по опорному напряжению Vref, у каждого драйвера оно считается по своей формуле (см. картинки ниже). Берём ток своего мотора из описания, подставляем в формулу вместо current, считаем, и накручиваем полученное напряжение крутилкой. Для измерения опорного напряжения нужно подключить щупы вольтметра к самой крутилке и пину GND.

Главное преимущество дорогущих драйверов TMC – отсутствие шума/свиста/вибраций при работе, так как драйвер своими силами интерполирует сигнал до микрошага 1/256.

БИБЛИОТЕКА

GyverStepper v2.4

Производительная библиотека для управления шаговыми моторами с Arduino

  • Поддержка 4х пинового (шаг и полушаг) и STEP-DIR драйверов
  • Автоматическое отключение питания при достижении цели
  • Режимы работы:
    • Вращение с заданной скоростью. Плавный разгон и торможение с ускорением
    • Следование к позиции с ускорением и ограничением скорости
    • Следование к позиции с заданной скоростью (без ускорения)
  • Быстрый алгоритм управления шагами
  • Поддержка “виртуальных” драйверов
  • Встроенный планировщик скорости и траектории для ЧПУ

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

УСТАНОВКА

  • Библиотеку можно найти и установить через менеджер библиотек по названию GyverStepper в:
    • Arduino IDE (Инструменты/Управлять библиотеками)
    • Arduino IDE v2 (вкладка “Library Manager”)
    • PlatformIO (PIO Home, вкладка “Libraries”)
  • Про ручную установку читай здесь

ДОКУМЕНТАЦИЯ

Аааа почему так много всего?!
Библиотека содержит набор инструментов для разных сценариев работы с шаговыми моторами

  • StepperCore.h [класс Stepper]: ядро всех остальных классов, умеет быстро щёлкать пинами (AVR) и делать один шаг для настроенного типа драйвера. Поддерживает 4 фазы шаг/полушаг, а также step-dir драйверы.
  • GyverStepper.h [класс GStepper]: основная тяжёлая библиотека, много настроек. Движение одного мотора с ускорением к заданной позиции или вращение с заданной скоростью. Не очень оптимальная работа в прерывании таймера.
  • GyverStepper2.h [класс GStepper2]: новая облегченная версия GyverStepper, практически полностью с ней совместима. Более оптимальный целочисленный гибридный алгоритм движения с ускорением, лёгкий вес. Оптимизировано для работы в прерывании таймера.
  • GyverPlanner.h [класс GPlanner]: многоосевой планировщик траектории, движение с ускорением (2 порядок). Остановка в каждой точке. Оптимальная работа в прерывании таймера.
  • GyverPlanner2.h [класс GPlanner2]: многоосевой планировщик траектории, движение с ускорением (2 порядок). Планирование скорости на маршруте, оптимальное движение по точкам. Оптимальная работа в прерывании таймера.

Инициализация

Библиотека поддерживает два типа драйверов:

  • STEPPER2WIRE — специализированный 2-х проводной драйвер для шагового мотора с интерфейсом STEP-DIR (+опционально пин EN), например A4988, DRV8825, TMC2208 и прочие.
  • STEPPER4WIRE и STEPPER4WIRE_HALF — 4-х проводной фазовый драйвер (+опционально пин EN), т.е. полномостовой (например L298N, L9110S) или транзисторная сборка (например ULN2003).
    • STEPPER4WIRE управляет мотором в полношаговом режиме (выше скорость и момент).
    • STEPPER4WIRE_HALF — в полушаговом (меньше скорость и момент, но в два раза больше шагов на оборот и выше точность).

При инициализации указывается тип драйвера, количество шагов на оборот и пины:

  • GStepper stepper(steps, step, dir); // драйвер step-dir
  • GStepper stepper(steps, step, dir, en); // драйвер step-dir + пин enable
  • GStepper stepper(steps, a1, a2, b1, b2); // драйвер 4 пин
  • GStepper stepper(steps, a1, a2, b1, b2, en); // драйвер 4 пин + enable
  • GStepper stepper(steps, a1, a2, b1, b2); // драйвер 4 пин полушаг
  • GStepper stepper(steps, a1, a2, b1, b2, en); // драйвер 4 пин полушаг + enable

Где steps — количество шагов на один оборот вала для расчётов с градусами, step , dir , a1 , a2 , b1 , b2 — любые GPIO на МК, en — пин отключения драйвера EN, любой GPIO на МК. Пин en опциональный, можно не указывать.

Для 4-х пиновых драйверов: a1 и a2 — первая обмотка (первая фаза), b1 и b2 — вторая обмотка (вторая фаза). При использовании мотора 28byj-48 с родным драйвером нужно поменять крайние пины местами (например, подключаем D2-IN1, D3-IN2, D4-IN3, D5-IN4, но в программе меняем 5 и 2: stepper(2048, 5, 3, 4, 2); , потому что на драйвере фазы выведены через одну, вот картинка). При подключении через мостовой драйвер — подключать и указывать пины по порядку выхода фаз из мотора (см. последнюю схему выше).

Количество шагов на оборот нужно для работы функций, которые устанавливают или читают параметр в градусах. Если они не нужны — количество шагов можно поставить любое (единичку). Если нужно — количество шагов нужно указывать с учётом редукторов и микрошагов:

  • Пример 1: есть мотор NEMA 17, он имеет 200 полных шагов на оборот (по документации). Подключен через драйвер с настроенным микрошагом 1/16. При создании объекта библиотеки нужно указать 200*16 шагов.
  • Пример 2: есть мотор 28byj-48-5v, имеет 32 полных шага на оборот и редуктор с соотношением 63.68395:1. Подключен через микросхему ULN2003. Итоговое количество шагов на оборот составляет 63.68395*32 == 2038 для режима полного шага ( STEPPER4WIRE ).
  • Пример 3: подключим тот же самый мотор 28byj-48-5v, но в режиме полушага ( STEPPER4WIRE_HALF ). Количество шагов на оборот удвоится (32*2 == 64) и, с учётом редуктора, станет равным 4076 .

Время шага [NEW!]

Для драйверов STEP-DIR сделана задержка между переключением состояния пина STEP, эта задержка является минимальной, т.е. она может быть больше, чем нужно, но если будет меньше — возможна нестабильная работа драйвера. По умолчанию она составляет 4 микросекунды, но разным драйверам она нужна разная (для других драйверов см. даташит):

  • A4988 — 1 мкс
  • DRV8825 — 4 мкс
  • TB6500 — 1 мкс

Также увеличение задержки может повысить стабильность работы при использовании длинных неэкранированных проводов от микроконтроллера к драйверу (к пину STEP).

Для изменения величины задержки сделай дефайн DRIVER_STEP_TIME перед подключением библиотеки:

Медленные скорости (new!)

В версии 1.6 скорость во всех режимах может быть задана в виде десятичной дроби (тип float ), то есть меньше одного шага в секунду. Минимальная скорость ограничена разрешением используемой в библиотеке micros() и составляет 1 шаг в час. Для удобного задания медленных скоростей появились макросы degPerMinute() и degPerHour() , которые нужно использовать совместно с setSpeedDeg() и setMaxSpeedDeg() :

Тик и тайминги

Самый главный метод библиотеки — tick() , при активной работе мотора его нужно вызывать как можно чаще. Тик имеет встроенный таймер на micros() и работает по нему. Если в коде программы присутствуют задержки на большее время, чем нужно мотору на текущей скорости, скорость мотора будет ограничена этой задержкой.

Узнать минимальный период вызова tick() (при установленной скорости) можно при помощи getMinPeriod() , который вернёт его в микросекундах. Также можно напрямую опрашивать переменную stepTime , в которой хранится текущий период. Эти инструменты можно использовать для организации работы шаговика в прерывании таймера (см. пример timerISR).

Также .tick() возвращает true , если мотор движется к цели или крутится по KEEP_SPEED и false , если мотор остановлен или приехал.

Метод getState() возвращает текущее состояние мотора аналогично tick() .

Смена направления

Можно глобально (для всех режимов) сменить направление вращения мотора при помощи reverse(true) .

Режимы работы

Библиотека имеет два режима работы с мотором, устанавливается при помощи setRunMode(mode) , где mode :

  • FOLLOW_POS — режим плавного движения к заданной позиции с ускорением и ограничением скорости.
  • KEEP_SPEED — режим вращения с заданной скоростью (знак скорости задаёт направление вращения).

Режим FOLLOW_POS

В этом режиме мотор следует на указанную позицию в шагах или градусах. Для её установки есть следующие методы:

  • setTarget(pos) — установка абсолютной целевой позиции в шагах, принимает положительные и отрицательные значения (тип данных long ).
  • setTarget(pos, type) — то же самое, но можно указать тип позиции type — абсолютная ABSOLUTE или относительная RELATIVE .
  • setTargetDeg(pos) — установка абсолютной целевой позиции в градусах, принимает положительные и отрицательные дробные значения (тип данных float ).
  • setTargetDeg(pos, type) — то же самое, но можно указать тип позиции type — абсолютная ABSOLUTE или относительная RELATIVE .

Примечание: абсолютная позиция — говоришь мотору повернуться на 300 шагов, он повернётся на позицию 300. При повторном вызове ничего не произойдёт. Относительная — говоришь повернуться на 300 — он повернётся на 300 относительно текущей позиции. Если вызвать ещё раз через некоторое время — цель сместится относительно текущей позиции вала.

Установленную целевую позицию можно прочитать:

  • getTarget() — возвращает тип данных long
  • getTargetDeg() — возвращает тип данных float

Дополнительно можно настроить максимальную скорость и ускорение при движении к целевой позиции:

  • setMaxSpeed(speed) — установка максимальной скорости по модулю в шагах/секунду, тип данных float . По умолчанию 300.
  • setMaxSpeedDeg(speed) — установка максимальной скорости по модулю в градусах/секунду, тип данных float .
  • setAcceleration(accel) — установка ускорения по модулю в шагах/сек/сек, тип данных float . По умолчанию 300.
  • setAccelerationDeg(accel) — установка ускорения по модулю в градусах/сек/сек, тип данных float .

Примечание: при установке ускорения в ноль 0 мотор будет двигаться к позиции с максимальной скоростью, заданной в setMaxSpeed() .

Также можно вручную установить текущую позицию мотора в шагах и градусах при помощи:

  • setCurrent(long pos);
  • setCurrentDeg(float pos);

Режим KEEP_SPEED

В этом режиме мотор просто крутится с заданной скоростью. Скорость задаётся при помощи

  • setSpeed(speed) — в шагах/секунду, положительные и отрицательные целые значения, тип данных float .
  • setSpeedDeg(speed) — в градусах/секунду, положительные и отрицательные дробные значения, тип данных float .

(New!) Вторым аргументом можно передать включение плавного изменения скорости, по умолчанию стоит false ( NO_SMOOTH ). Смотри пример accelDeccelButton

  • setSpeed(speed, smooth) — в шагах/секунду, положительные и отрицательные целые значения, тип данных float . smooth — SMOOTH или NO_SMOOTH
  • setSpeedDeg(speed, smooth) — в градусах/секунду, положительные и отрицательные дробные значения, тип данных float . smooth — SMOOTH или NO_SMOOTH

Установленную скорость можно прочитать:

  • getSpeed() — возвращает тип данных float
  • getSpeedDeg() — возвращает тип данных float

Алгоритм планировщика скорости

В библиотеке реализовано два алгоритма планирования скорости для режима плавного движения к позиции с ненулевым ускорением:

  • Мой алгоритм: скорость планируется с фиксированным периодом, что сильно разгружает процессор и позволяет работать на скоростях до 30’000 шагов в секунду (полностью загрузив процессор) без наличия посторонних задержек в коде. Сильная экономия процессорного времени оставляет возможность спокойно выполнять параллельно другой код и управлять несколькими моторами в разных режимах на хороших скоростях, и «ещё останется». Немного «резковат» при торможении. Активен по умолчанию.
  • Модифицированный алгоритм из библиотеки AccelStepper: скорость планируется каждый шаг, что очень сильно нагружает процессор и ограничивает скорость до 7’000 шагов в секунду (полностью загрузив процессор) без наличия посторонних задержек в коде (в оригинальной библиотеке — 5’000 шагов/сек). Разгоняется и тормозит максимально плавно. Для активации нужно прописать дефайн #define SMOOTH_ALGORITHM перед подключением библиотеки в коде (см. пример smoothAlgorithm) или раскомментировать данный дефайн в файле библиотеки GyverStepper.h, находится сразу после описания.

Остановка и сброс

  • stop() — плавная остановка с заданным в setAcceleration() ускорением от текущего положения мотора. Можно вызвать в режиме KEEP_SPEED для плавной остановки вращения! Смотри пример accelDeccelButton
  • brake() — резкая остановка мотора. Если активен autoPower(true) — мотор будет отключен.
  • reset() — brake() + сброс текущей позиции в 0 . Удобно для остановки и калибровки начала координат по концевику (смотри пример endSwitch).

Управление питанием

Питанием мотора/драйвера можно управлять вручную при помощи enable() и disable() . Данные методы включают и выключают пин Enable (если он указан при инициализации), а также снимают и возвращают питание на управляющие выводы (для 4х пинового драйвера).

Поведением пина EN (если он указан при инициализации) можно управлять при помощи invertEn(true) и invertEn(false) . По умолчанию установлено enable(false) переводит пин en в низкое состояние.

В библиотеке реализовано автоматическое управление питанием, включается при помощи autoPower(true) , по умолчанию оно отключено. В режиме FOLLOW_POS при достижении целевой позиции мотор будет автоматически отключен (будет вызван disable() ). При дальнейшей установке новой позиции мотор будет автоматически включен (будет вызван enable() ).

Источник

Adblock
detector