Wabashpress.ru

Техника Гидропрессы
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Умные шторы. Управление шаговым двигателем на Arduino через bluetooth

Умные шторы. Управление шаговым двигателем на Arduino через bluetooth.

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

Приложение для телефона позволяющее управлять шаговым двигателем.

Планировал сделать приложение в mit app inventor, но, к сожалению что-то случилось с данным сервисом и приложение для тестирования перестало работать. Возможно, на данный момент все работает, но на момент, когда я делал проект «управление шаговым двигателем по bluetooth» наблюдалась данная проблема. Поэтому сделал приложение в APP Thunkable, по функционалу они очень похожи и исходные материалы приложений будут работать в обоих сервисах.

Интерфейс приложения достаточно простой. Несколько текстовых полей, кнопок, бегунок и список.

Интерфейс приложения достаточно простой. Несколько текстовых полей, кнопок, бегунок и список.

Блоки программы для mit app inventor.

Блоки программы для mit app inventor.

Эта часть программы, отвечающая за подключение по bluetooth.

Эта часть программы, отвечающая за подключение по bluetooth.

Управление шаговыми двигателями происходит с помощью данных элементов.

Управление шаговыми двигателями происходит с помощью данных элементов.

Я сделал процедуру, которая позволяет реже отправлять значения при перемещении бегунка.

Я сделал процедуру, которая позволяет реже отправлять значения при перемещении бегунка.

Вот такое приложение для телефона, позволяющее управлять шаговым двигателем с помощью блютуз.

Вот такое приложение для телефона, позволяющее управлять шаговым двигателем с помощью блютуз.

Для проекта понадобиться следующая электроника:

Схема подключения шагового двигателя 28BYJ-48, Bluetooth модель HC-05 к Arduino.

Схема подключения шагового двигателя 28BYJ-48, Bluetooth модель HC-05 к Arduino.

Как видно из схемы к Arduino NANO, подключаем шаговый двигатель 28BYJ-48, Bluetooth модель HC-05. Драйвер шагового двигателя ULN2003 запитать лучше от отдельного блока питания 5-12 В.

схема Arduino NANO, подключаем шаговый двигатель 28BYJ-48, Bluetooth модель HC-05. Драйвер шагового двигателя ULN2003 з

Если делать умные рулонные шторы, то желательно добавить в схему конечный выключатель. А лучше геркон или KY-003 модуль датчика Холла. На штору поместить магнит. Что позволит определять границы перемещения полотна.

Код (скетч) управления шаговым двигателем на Arduino через bluetooth.

В коде всего 2 переменные, которые нужно поменять в том случае если вы будете использовать другой шаговый двигатель. Первая переменная устанавливает скорость по умолчанию – это 5 оборотов в минуту. Вторая определяет сколько нужно шаговому двигателю сделать шагов, чтобы совершить 1 оборот вала.

В следующем блоке кода подключаем библиотеку AccelStepper, которую можно скачать внизу статьи в разделе «Файлы для скачивания ».

Затем определяем тип двигателя (точнее тип драйвера шагового двигателя), данное подключение можно использовать с другими драйверами, такими как L293, L298 и пр.

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

В блоке setup() определяем параметры скорости и ускорения шагового двигателя.

И инициализируем соединение с Bluetooth модулем и скорость работы. У вашего Bluetooth модуля скорость работы может быть другая.

В основном цикле loop() проверяем, пришли данные или нет. Если данные получили, сохраняем их в переменную val и поднимаем флаг.

После поднятия флага проверяем, какую команду получили. Если ни одна не совпадает, то проверяем, возможно, это число скорости вращения шагового двигателя.

Затем переходим к алгоритму управления шаговым двигателем, в котором определяем статус запуска вращения шагового двигателя «flagStart».

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

Следующие 2 строчки заставляют шаговый двигатель сделать один оборот.

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

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

Умные рулонные шторы своими руками на Arduino.

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

Механическая часть умной рулонной шторы.

Чтобы реализовать механизм умной рулонной шторы можно воспользоваться готовыми 3D моделями для печати и модернизировать обычную штору.

Чтобы реализовать механизм умной рулонной шторы можно воспользоваться готовыми 3D моделями для печати

Используя электронику из проекта, получится вот такая умная рулонная штора.

Используя электронику из проекта, получится вот такая умная рулонная штора.

Заключение.

Управление шаговым двигателем через Bluetooth имеет ряд ограничений. Самое главное ограничение – это возможность подключиться только к одному устройству. Соответственно управлять сможем одновременно только одним устройством. А в случае со шторой, как правило, их в квартире 3-4 и больше и управлять ими желательно одновременно, что можно реализовать с помощью Wi-Fi управления. Если вам интересно продолжение данной темы, пишите в комментарии.

Понравился проект Умные шторы. Управление шаговым двигателем на Arduino через bluetooth? Не забудь поделиться с друзьями в соц. сетях.

Читайте так же:
Схема разъема микро usb

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Драйвер шагового двигателя uln2003

Сегодня вы узнаете о четырехфазном шаговом двигателе 28BYJ-48, работающим от постоянного напряжения 5 Вольт. Также существует его модификация на 12 Вольт. Двигатель потребляет значительный ток, а это значит, что мы не можем подключить его напрямую к выводам Arduino. Воспользуемся для этого драйвером двигателя на микросхеме ULN2003.

Технические параметры двигателя 28BYJ-48

  • Модель: 28BYJ-48
  • Тип двигателя: Униполярный
  • Напряжение питания: 5 Вольт, DC
  • Количество фаз: 4
  • Частота: 100 Гц
  • Сопротивление: 50Ω ± 7% (при 25 ℃)

Общие сведения о движке

4-х фазный шаговый двигатель 28BYJ-48 — это бесколлекторный двигатель, имеющий дискретное перемещение (вращение вала осуществляется шагами). На роторе (валу), расположен магнит, а вокруг него находятся катушки. Подавая поочередно ток на эти катушки, создается магнитное поле, которое отталкивает или притягивает магнитный вал, заставляя двигатель вращаться. Такая конструкция позволяет с большой точностью управлять валом, относительно катушек. Принципиальная схема четырехфазного шагового двигателя 28BYJ-48 приведена ниже.

Двигатель называется четырех фазным, из-за того, что в нем содержится две обмотки, которые, в свою очередь, разделены на четыре. (Это отражено на схеме выше). Центральные отводы катушек подключены вместе и служат для питания двигателя. Так как каждая обмотка подключена к питанию, такие двигатели называют униполярными. На роторе 28BYJ-48 расположено 8 магнитов, с чередующимися полюсами (то есть, четыре магнита с двумя полюсами).

На рисунке видно, что внутри расположен редуктор, с примерным передаточным числом в 1:64, если быть точнее 1:63,68395. Это значит, что двигатель за один оборот осуществляет 4075.7728395 шага. Данный двигатель поддерживает полушаговый режим и за один полный оборот может совершать 4076 шага, а точнее за 1° делает примерно 11,32 шага. (4076 / 360 = 11,32).

Режимы работы двигателя:

Чаще всего, при использовании шагового двигателя 28BYJ 48, используют два режима подключения.

  • Полушаговый режим — за 1 такт, ротор делает ½ шага.
  • Полношаговый режим — за 1 такт, ротор делает 1 шаг.

Ниже представлены таблицы последовательности тактов:

Модуль управления шаговым двигателем ULN2003:

Цифровой вывод микроконтроллера выдает ток до

40 мА, а одна обмотка 28BYJ-48 в пике потребляет

320 мА, то есть, если подключить двигатель напрямую, микроконтроллер сгорит. Для защиты был разработан модуль шагового двигателя ULN2003, в котором используется микросхема ULN2003A (состоящая из 7 ключей), которая позволяет управлять нагрузкой до 500 мА (один ключ). Данный модуль может работать с 5 Вольтовым и 12 Вольтовым двигателем 28BYJ-48. Для переключения необходимо установить или убрать перемычку (по умолчанию перемычка установлена на питание 5 Вольт).

С принципиальной схемой модуля ULN2003 можно ознакомиться на рисунке ниже

  • 1 — GND: «-» питание модуля
  • 2 — Vcc: «+» питание модуля (5В или 12В)
  • 3 — Vcc: «+» питание модуля (перемычка, только при 5В)
  • 4 — Vcc: «+» питание модуля (перемычка, только при 5В)

Возможен безналичный расчёт для юридических лиц при оформлении заказа

С этим товаром берут

Общие сведения

Шаговый двигатель 28BYJ-48-12V с драйвером на ULN2003 — разработан для применения в механизмах, где детали поворачиваются точно на требуемый угол.

Видео

Характеристики

  • Номинальное напряжение: 12 В
  • Угол шага 5,625 ° / 64
  • Передаточное отношение редуктора:1/64
  • Частота 100 Гц /> Сопротивление постоянному току 50Ω ± 7% (25 ℃)
  • Крутящий момент> 34.3mN.m (120 Гц)
  • Момент трения 600-1200 gf.cm
  • Класс изоляции 600VAC/1mA/1s
  • Шум

Подробнее о двигателе

Для работы с двигателем и драйвером предлагаем вам воспользоваться библиотекой Stepper_28BYJ (с примерами).

В этой статье мы поговорим о шаговых двигателях в проектах Ардуино на примере очень популярной модели 28BYJ-48. Так же как и сервоприводы, шаговые моторы являются крайне важным элементом автоматизированных систем и робототехники. Их можно найти во многих устройствах рядом: от CD-привода до 3D-принтера или робота-манипулятора. В этой статье вы найдете описание схемы работы шаговых двигателей, пример подключения к Arduino с помощью драйверов на базе ULN2003 и примеры скетчей с использованием стандартной библиотеки Stepper.

Шаговый двигатель – принцип работы

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

Шаговый двигатель обеспечивает вращения ротора на заданный угол при соответствующем управляющем сигнале. Благодаря этому можно контролировать положение узлов механизмов и выходить в заданную позицию. Работа двигателя осуществляется следующим образом – в центральном вале имеется ряд магнитов и несколько катушек. При подаче питания создается магнитное поле, которое воздействует на магниты и заставляет вал вращаться. Такие параметры как угол поворота (шаги), направление движения задаются в программе для микроконтроллера.

Читайте так же:
Самодельная лопата для копки земли

Упрощенные анимированные схемы работы шагового двигателя

Основные виды шаговых моторов:

  • Двигатели с переменными магнитами (применяются довольно редко);
  • Двигатели с постоянными магнитами;
  • Гибридные двигатели (более сложные в изготовлении, стоят дороже, но являются самым распространенным видом шаговых двигателей).

Где купить шаговый двигатель

Самые простые двигатели Варианты на сайте AliExpress:

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

Драйвер – это устройство, которое связывает контроллер и шаговый двигатель. Для управления биполярным шаговым двигателем чаще всего используется драйверы L298N и ULN2003.

Работа двигателя в биполярном режиме имеет несколько преимуществ:

  • Увеличение крутящего момента на 40% по сравнению с униполярными двигателями;
  • Возможность применения двигателей с любой конфигурацией фазной обмотки.

Но существенным минусов в биполярном режиме является сложность самого драйвера. Драйвер униполярного привода требует всего 4 транзисторных ключа, для обеспечения работы драйвера биполярного привода требуется более сложная схема. С каждой обмоткой отдельно нужно проводить различные действия – подключение к источнику питания, отключение. Для такой коммутации используется схема-мост с четырьмя ключами.

Драйвер шагового двигателя на базе L298N

Этот мостовой драйвер управляет двигателем с током до 2 А и питанием до 46В. Модуль на основе драйвера L298N состоит из микросхемы L298N, системы охлаждения, клеммных колодок, разъемов для подключения сигналов, стабилизатора напряжения и защитных диодов.

Драйвер двигателя L298N

Драйвер шагового двигателя ULN2003

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

Другие драйвера

Существует другой вид драйверов – STEP/DIR драйверы. Это аппаратные модули, которые работают по протоколу STEP/DIR для связи с микроконтроллером. STEP/DIR драйверы расширяют возможности:

  • Они позволяют стабилизировать фазные токи;
  • Возможность установки микрошагового режима;
  • Обеспечение защиты ключа от замыкания;
  • Защита от перегрева;
  • Оптоизоляция сигнала управления, высокая защищенность от помех.

В STEP/DIR драйверах используется 3 сигнала:

  • STEP – импульс, который инициирует поворот на шаг/часть шага в зависимости от режима. От частоты следования импульсов будет определяться скорость вращения двигателя.
  • DIR – сигнал, который задает направление вращения. Обычно при подаче высокого сигнала производится вращение по часовой стрелке. Этот тип сигнала формируется перед импульсом STEP.
  • ENABLE – разрешение/запрет работы драйвера. С помощью этого сигнала можно остановить работу двигателя в режиме без тока удержания.

Одним из самых недорогих STEP/DIR драйверов является модуль TB6560-V2. Этот драйвер обеспечивает все необходимые функции и режимы.

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

Подключение будет рассмотрено на примере униполярного двигателя 28BYj-48 и драйверов L298 и ULN2003. В качестве платы будет использоваться Arduino Uno.

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

Еще один вариант схемы с использованием L298:

Подключение шагового двигателя к Ардуино на базе L298

Схема подключения на базе ULN2003 изображена на рисунке ниже. Управляющие выходы с драйвера IN1-IN4 подключаются к любым цифровым контактам на Ардуино. В данном случае используются цифровые контакты 8-11. Питание подключается к 5В. Также для двигателя желательно использовать отдельный источник питания, чтобы не перегрелась плата Ардуино.

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

Принципиальная схема подключения.

Принципиальная схема подключения шагового двигателя

Еще одна схема подключения биполярного шагового двигателя Nema17 через драйвер L298 выглядит следующим образом.

Обзор основных моделей шаговых двигателей для ардуино

Nema 17 – биполярный шаговый двигатель, который чаще всего используется в 3D принтерах и ЧПУ станках. Серия 170хHSхххА мотора является универсальной.

Основные характеристики двигателя:

  • Угловой шаг 1,8°, то есть на 1 оборот приходится 200 шагов;
  • Двигатель – двухфазный;
  • Рабочие температуры от -20С до 85С;
  • Номинальный ток 1,7А;
  • Момент удержания 2,8 кг х см;
  • Оснащен фланцем 42 мм для легкого и качественного монтажа;
  • Высокий крутящий момент – 5,5 кг х см.

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

  • Номинальное питание – 5В;
  • 4-х фазный двигатель, 5 проводов;
  • Число шагов: 64;
  • Угол шага 5,625°;
  • Скорость вращения: 15 оборотов в секунду
  • Крутящий момент 450 г/сантиметр;
  • Сопротивление постоянного тока 50Ω ± 7% (25 ℃).

Описание библиотеки для работы с шаговым двигателем

В среде разработки Ардуино IDE существует стандартная библиотека Strepper.h для написания программ шаговых двигателей. Основные функции в этой библиотеке:

  • Stepper(количество шагов, номера контактов). Эта функция создает объект Stepper, которая соответствует подключенному к плате Ардуино двигателю. Аргумент – контакты на плате, к которым подключается двигатель, и количество шагов, которые совершаются для полного оборота вокруг своей оси. Информацию о количестве шагов можно посмотреть в документации к мотору. Вместо количества шагов может быть указан угол, который составляет один шаг. Для определения числа шагов, нужно разделить 360 градусов на это число.
  • Set Speed(long rpms) – функция, в которой указывается скорость вращения. Аргументом является положительное целое число, в котором указано количество оборотов в минуту. Задается после функции Step().
  • Step(Steps) –поворот на указанное количество шагов. Аргументом может быть либо положительное число – поворот двигателя по часовой стрелке, либо отрицательное – против часовой стрелки.
Читайте так же:
Предел текучести материала формула

Пример скетча для управления

В наборе примеров библиотеки Stepper.h существует программа stepper_oneRevolution, в которой задаются все параметры для шагового двигателя – количество шагов, скорость, поворот.

Заключение

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

ESP32 with Stepper Motor (28BYJ-48 and ULN2003 Motor Driver)

In this guide, you’ll learn how to control a stepper motor with the ESP32. We’ll use the 28BYJ-48 unipolar stepper motor with the ULN2003 motor driver. The ESP32 board will be programmed using Arduino IDE.

ESP32 with Stepper Motor 28BYJ-48 and ULN2003 Motor Driver

We have tutorials for other motors with the ESP32:

Parts Required

To follow this tutorial, you need the following parts:

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Introducing Stepper Motors

A stepper motor is a brushless DC electric motor that divides a full rotation into a number of steps. It moves one step at a time, and each step is the same size. This allows us to rotate the motor by a precise angle to a precise position. The stepper motor can rotate clockwise or counterclockwise.

The following picture shows two 28BYJ-48 stepper motors.

28BYJ-48 Stepper Motors

Stepper motors are made of internal coils that make the motor shaft move in steps in one direction or the other when current is applied to the coils in a specific way.

There are two types of stepper motors: unipolar and bipolar stepper motors.

In this article, we won’t detail how the stepper motors are made and how they work internally. To learn in more detail how they work and the differences between each type of stepper motor, we recommend reading this article by the DroneBotWorkshop blog.

28BYJ-48 Stepper Motor

There are several stepper motors with different specifications. This tutorial will cover the widely used 28BYJ-48 unipolar stepper motor with the ULN2003 motor driver.

28BYJ-48 connected to ULN2003 Motor Driver 01 module

28BYJ-48 Stepper Motor Features

Features of the stepper motor (for more details, consult the datasheet):

  • Rated voltage: 5V DC
  • Number of phases: 4
  • Speed variation ratio: 1/64
  • Stride angle: 5.625º/64
  • Frequency: 100Hz

The 28BYJ-48 stepper motor has a total of four coils. One end of the coils is connected to 5V, which corresponds to the motor’s red wire. The other end of the coils corresponds to the wires with blue, pink, yellow, and orange color. Energizing the coils in a logical sequence makes the motor move one step in one direction or the other.

28BYJ-48 stepper motor coils

The 28BYJ-48 Stepper Motor has a stride angle of 5.625°/64 in half-step mode. This means that the motor has a step angle of 5.625º—so it needs 360º/5.625º = 64 steps in half-step mode. In full-step mode: 64/2 = 32 steps to complete one rotation.

However, the output shaft is driven via a 64:1 gear ratio. This means that the shaft (visible outside the motor) will complete a rotation if the motor inside rotates 64 times. This means that the motor will have to move 32×64 = 2048 steps for the shaft to complete one full rotation. This means that you’ll have a precision of 360º/2048 steps = 0.18º/step.

  • Total steps per revolution = 2048 steps
  • Step angle = 0.18º/step

If you’re using a different stepper motor, please consult the datasheet.

ULN2003 Motor Driver

To interface the stepper motor with the ESP32, we’ll use the ULN2003 motor driver, as shown in the figure below. The 28BYJ-48 stepper motor is many times sold together with the ULN2003 motor driver.

ULN2003 Motor Driver 01 module board

The module comes with a connector that makes it easy and simple to connect the motor to the module. It has four input pins to control the coils that make the stepper motor move. The four LEDs provide a visual interface of the coils’ state.

ULN2003 IC Motor Driver Labels

There are pins to connect VCC and GND, and a jumper cap that acts as an ON/OFF switch to power the stepper motor—if you remove the jumper, there is no power reaching the motor. You can use those pins to wire a physical switch.

Читайте так же:
Ручная и механическая клепка

ULN2003 Motor Driver Pinout

The following table shows the module pinout:

IN1Control the motor: connect to a microcontroller digital pin
IN2Control the motor: connect to a microcontroller digital pin
IN3Control the motor: connect to a microcontroller digital pin
IN4Control the motor: connect to a microcontroller digital pin
VCCPowers the motor
GNDCommon GND
Motor connectorConnect the motor connector

Wire Stepper Motor to the ESP32

In this section, we’ll connect the stepper motor to the ESP32 via the ULN2003 motor driver.

We’ll connect IN1, IN2, IN3, and IN4 to GPIOs 19 , 18 , 5 , and 17 . You can use any other suitable digital pins (check our ESP32 pinout reference guide).

You can follow the next schematic diagram.

ESP32 with Stepper Motor 28BYJ-48 and ULN2003A Schematic Diagram Wiring

Note: you should power the motor driver using an external 5V power supply.

Motor DriverESP32
IN1GPIO 19
IN2GPIO 18
IN3GPIO 5
IN4GPIO 17

Control Stepper Motor with the ESP32 – Code

There are different ways to control stepper motors with a microcontroller. We’ll use the Arduino built-in Stepper.h library. This library provides an easy way to move the motor by a defined number of steps.

Copy the following code to your Arduino IDE.

We adapted this code from the examples provided by the Stepper library (File > Examples > Stepper > stepper_oneRevolution).

How the Code Works

First, include the Stepper.h library.

Define the steps per revolution of your stepper motor—in our case, it’s 2048:

Define the motor input pins. In this example, we’re connecting to GPIOs 19, 18, 5, and 17, but you can use any other suitable GPIOs.

Initialize an instance of the stepper library called myStepper . Pass as arguments the steps per revolution and the input pins. In the case of the 28BYJ-48 stepper motor, the order of the pins is IN1 , IN3 , IN2 , IN4 —it might be different for your motor.

In the setup() , set the stepper speed using the setSpeed method. The stepper speed is in rpm.

Initialize the Serial Monitor at a baud rate of 115200.

In the loop() , we’ll rotate the stepper motor clockwise and counterclockwise. You can use the step() method on the myStepper object. Pass as an argument the number of steps you want to take. For a full rotation (revolution), you need 2048 steps ( stepsPerRevolution variable).

To rotate the motor counterclockwise, you need to pass the number of steps with the minus “ – ” sign.

Demonstration

Upload the code to your board. After uploading, the motor will make one clockwise rotation and a counterclockwise rotation over and over again.

You can watch a quick video demonstration:

Other Libraries

Using the Stepper.h library is one of the easiest ways to control a stepper motor. However, if you want more control over your stepper motor, there are libraries with more functions like the AccelStepper library. This library is well documented, with all the methods described in great detail.

It provides several examples that are compatible with the ESP32. Just make sure you initialize a stepper object with the right pins:

This library allows you to control the motors in a non-blocking way and allows you to control more than one motor at a time. But this is a subject for another tutorial.

Wrapping Up

This tutorial was a getting started guide for stepper motors with the ESP32. Stepper motors move one step at a time and allow you to position the motor shaft at a specific angle.

One of the easiest ways to control the stepper motor is to use the built-in Arduino Stepper library. This library provides an easy way to rotate the motor clockwise or counterclockwise a determined number of steps. If you want more control over your stepper motor, we recommend the AccelStepper library.

Шаговый двигатель в доработке новогоднего диско-фонаря (ATtiny2313A, ULN2003)

Привет читателям и писателям Датагор.ру! Попала мне в руки такая вот красивая новогодняя игрушка. Внутри три светодиода, над ними вращается прозрачный шар из пластика. Конструкция формирует линзы, которые проецируют красоту во все стороны. Шар медленно крутится, разноцветные узоры бегают по стенам и потолку.

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

Содержание / Contents

↑ Схема первая

Код пишем в Mikropascal. Программа просто переключает выходы поочередно в нужном для шаговика порядке, таким образом моторчик работает в режиме полушага.

Читайте так же:
При какой температуре сваривать полипропиленовые трубы

↑ Первый запуск с шаром, первые проблемы

Собираем макет, напыживаем шар на вал и испытываем.

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

Ок, звуки можно побороть, прикрепив мотор через пористую резину, но что делать с неравномерным вращением? Ведь и бегающие проекции точно так же дергаются, не очень-то это красиво.

↑ Решение

Решение пришло само собой, когда я вспомнил о своей предыдущей статье про шаговики: «Как покрутить шаговый двигатель с помощью аудиоусилителя».

Смысл такой: если крутить моторчик двумя синусоидами, он вращается гораздо равномернее, и практически бесшумно!
В чистом виде такое решение едва ли будет применимо, но вот сделать синусоиду ШИМом можно, и для этого даже не понадобится более мощный микроконтроллер. У Attiny2313A есть четыре канала ШИМ, что как раз нам подходит.

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

↑ Расчёт синуса

Я не стал заморачиваться с вычислением значений синуса в микроконтроллере и просто подготовил их заранее в Excel.
Поскольку используется восьмибитный ШИМ, для каждого шага значение синуса (оно не может быть больше единицы) нужно умножить на 255, чтобы получить итоговые значения от 0 до 255

Получился такой ряд цифр:

↑ Новый код

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

Получился такой код:

↑ Схема вторая

Собираем, запускаем… О чудо, работает, даже как бы и неплохо, но тоненько свистит в такт шагам.
Уменьшаем предделитель таймера с 8 до 1, но сам таймер переставляем режим фазо-корректного ШИМ, он в два раза медленнее «быстрого» ШИМ. Итоговая частота получилась около 16 кГц, что уже не слышно.
Включаем… Писк пропал! Тишина просто пугающая! Крутится плавно!
Осталось всё собрать, чтобы выглядело не хуже, чем было.


↑ Итоги тестирования, правки, выводы

Тестовая эксплуатация показала, что нужна некоторая доработка. Маленькая китайская платка 5В питания от пульсирующей нагрузки сходила с ума, пришлось сгладить потребление с помощью четырех конденсаторов по 1500 μF 6.3V из материнок.

Что ещё хуже, плавное вращение оказалось неустойчивым. Может несколько минут крутиться плавно, потом, начинает дергаться, потом опять вращаться плавно… Кроме того, были проблемы с запуском. При старте раскачка начиналась обязательно, и её приходилось успокаивать пальцем.

Для начала я решил приделать плавный старт, хотя это и было неудобно, ведь оба таймера заняты ШИМом. Это не помогло, всё стало хуже. Очевидно, что дело не в программе, а в физических основах работы устройства.

Проанализируем:
1) Каждое устойчивое положение мотора не фиксируется жестко, оно обладает определенной упругостью.
2) Шар это достаточно массивный кусок пластика, обладающий моментом инерции
3) Упругость и масса образуют колебательную систему!
4) Мы сами её раскачиваем пинками (хотя и сглаженными) через повторяющиеся промежутки времени!

В итоге оказалось достаточно в приведенном выше коде изменить период следования тактов.
Вместо delay_us (1000); делаем delay_us (1150);

Резонанс сбивается, и всё начинает работать как запланировано. Старт тоже становится уверенным, и любая внесенная извне раскачка моментально угасает.

Хочу заметить, что если вы решите сделать что-то подобное, эти конкретные цифры периода, вероятно, не подойдут под ваш моторчик и под ваш вращающийся объект. Их придётся подбирать самому.

Теперь всё прекрасно работает, всем спасибо за внимание!

↑ Файлы

stepper.7z 63.43 Kb ⇣ 8 В архиве проект в Proteus 8, проект-исходник в mikroPascal, готовый stepper.hex, файл синус.xlsx.

↑ Фьюзы

Нужные фьюзы программа выдаст ниже в виде галок и в виде 16-ричных значений. В нашем случае поменяется только одна галка — CKDIV.

↑ Дополнение о моторах

Редуктора не слышно, он демпферной смазкой залит по уши. А вот сам моторчик противно скрежещет.

Если не торопиться, на его место можно воткнуть такой:

Он тоже шаговый, но с редуктором, поэтому ему все эти приколы с резонансами пофиг. Наверняка очень тихий.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector