Рубрики
Проекты на ESP32

Беспроводной контроллер шагового двигателя на ESP32 и TMC2240

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

Для тех, кто только начинает знакомиться с робототехникой и автоматизацией, понимание основ работы шагового двигателя — отличный первый шаг перед тем, как приступить к этому сложному проекту. В этом руководстве представлено инновационное решение для управления шаговым двигателем ESP32 с помощью Wi-Fi, позволяющее точно регулировать положение двигателя, отслеживать его работу и получать обратную связь в реальном времени из простого веб-браузера.

В этом руководстве мы рассмотрим беспроводной контроллер шагового двигателя на базе ESP32 — простой, но мощный способ добавить управление шаговым двигателем по Wi-Fi в любой проект. Этот беспроводной драйвер шагового двигателя сочетает в себе надежное управление и современные возможности подключения, что делает его идеальным для применения в автоматизации, робототехнике и промышленном прототипировании. Благодаря этой беспроводной конструкции драйвера шагового двигателя вы можете управлять двигателем напрямую через локальный веб-интерфейс, без необходимости в дополнительном программном обеспечении или сложной настройке.

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

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

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

Беспроводное управление шаговым двигателем: управляйте двигателем дистанционно через простой веб-интерфейс в любом браузере или на смартфоне.

Точность и аккуратность: обеспечьте высокоточное позиционирование с шагом до 1/256 микрошага и обратной связью от энкодера в реальном времени с помощью датчика AS5600.

Интеллектуальное управление питанием: автоматическое согласование оптимальных уровней мощности от источников питания USB-C Power Delivery (PD) в диапазоне от 5 В до 20 В.

Мониторинг в реальном времени: отслеживайте важные данные, включая температуру двигателя, потребляемый ток и точное положение, — вся информация обновляется в режиме реального времени на веб-панели управления.

Интуитивно понятная визуальная обратная связь: используйте цветные RGB-светодиодные индикаторы, чтобы мгновенно увидеть состояние питания системы и активность двигателей.

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

  • Веб-управление: простые HTTP-команды управляют всеми функциями двигателя — специальное программное обеспечение не требуется.
  • Точное перемещение: до 1/256 микрошага с замкнутым контуром позиционирования с использованием магнитного энкодера AS5600.
  • Интеллектуальное управление питанием: автоматически выбирает напряжение 5 В, 9 В, 12 В или 15 В от источников USB-PD.
  • Визуальная обратная связь: RGB-светодиоды отображают уровень мощности (цветовая кодировка) и активность двигателя (мигание).
  • Мониторинг в реальном времени: обновление информации о состоянии в режиме реального времени, включая температуру, потребляемый ток и местоположение.
  • Неблокирующая работа: веб-сервер остается отзывчивым, а двигатель работает бесперебойно.

Необходимые компоненты

Компонент Количество Описание
ESP32-S3-WROOM-1 1 Модуль микроконтроллера с поддержкой Wi-Fi и Bluetooth 5.0, двухъядерным процессором Xtensa LX7, 512 КБ SRAM и 8 МБ флэш-памяти.
TMC2240ATJ+T 1 Высокоточный драйвер шагового двигателя с управлением по протоколу SPI, поддерживающий ток до 2 А и обеспечивающий сверхтихую работу.
AS5600-ASOM 1 Бесконтактный магнитный датчик положения вращения с 12-битным разрешением для точного измерения угла.
ADPL44002AUJZ 1 Линейный стабилизатор напряжения с низким падением напряжения (LDO), поддерживающий входное напряжение 2,7–40 В и выходной ток до 200 мА.
FUSB302BMPX 1 Контроллер USB Type-C с поддержкой Power Delivery (PD) для согласования напряжения и переключения ролей передачи данных.
ADM803SAKSZ 1 Микросхема контроля напряжения с двухтактным выходом для надежного управления сбросом системы.
AO3400A 1 P-канальный MOSFET (30 В, 4 А) для низковольтных коммутационных приложений.
EVQ-P7A01P 4 Тактильные кнопочные переключатели (6×6 мм, усилие срабатывания 160 гс) для ввода данных пользователем.
SMF40A 1 Диод подавления переходных напряжений (TVS) на 40 В для защиты цепи от скачков напряжения.
SD05 1 Массив TVS-диодов, предназначенный для защиты от USB-зарядов и электростатического разряда.
LTST-C191KRKT 1 Красный светодиод для поверхностного монтажа (корпус 0603) для индикации состояния.
XL-1615RGBC-YG 1 RGB-светодиод (с общим катодом, корпус 1615) для многоцветной визуальной обратной связи.
Другие пассивные компоненты Включает конденсаторы, резисторы и необходимые дискретные компоненты.
Разъемы Дополнительные разъемы по мере необходимости.
Заказная печатная плата Основная печатная плата системы.
Детали, вырезанные лазером Корпуса и механические опоры.
Прочие инструменты и расходные материалы Материалы для сборки и тестирования.

Компонентов достаточно много, но для проекта с таким функционалом это нормально.

Схема проекта

Схема беспроводного контроллера шагового двигателя на ESP32 и TMC2240 представлена на следующем рисунке. Она демонстрирует как эффективно управлять шаговым двигателем с помощью ESP32. Ее также можно скачать в формате PDF из репозитория GitHub, ссылка на который приведена в конце статьи.

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

Во-первых, силовой блок, который объединяет контроллер USB Power Delivery (PD) и стабилизатор напряжения с низким падением напряжения (LDO) для управления входным напряжением и обеспечения стабильного выходного напряжения 3,3 В. В качестве контроллера USB PD используется FUSB302BMPX, который согласовывает профили питания через разъем USB-C. Он подключается к линиям CC1 и CC2 через подтягивающие резисторы 5,1 кОм для определения ориентации кабеля и профилей напряжения. После согласования параметров питания линия VBUS подает необходимое напряжение (например, 9 В или 12 В), которое затем передается на стабилизатор LDO.

В качестве стабилизатора напряжения используется LDO ADP4140002, который понижает согласованное напряжение до стабильного значения 3,3 В. Это напряжение 3,3 В используется для питания микроконтроллера ESP32-S3, логической части драйвера шагового двигателя, датчика магнитного положения и светодиодных индикаторов.

LDO-регулятор включает в себя входные и выходные конденсаторы для стабилизации напряжения и фильтрации шума, а контроллер PD взаимодействует с ESP32-S3 через I²C и уведомляет его о любых событиях, связанных с питанием, с помощью вывода прерывания.

В основе системы лежит модуль ESP32-S3-WROOM-1, обеспечивающий подключение по Wi-Fi и Bluetooth, а также множество выводов GPIO для управления и связи. Эта конфигурация демонстрирует, как эффективно управлять шаговым двигателем с помощью ESP32. Его выводы GPIO0 и EN подключены к кнопкам для загрузки и сброса. Связь осуществляется через USB с использованием собственных выводов D+ и D–, которые подключены через резисторы 33 Ом. 

Шина I²C на выводах GPIO9 (SCL) и GPIO8 (SDA) подключается к контроллеру USB PD и магнитному датчику положения, обеспечивая двустороннюю связь для контроля питания и положения. ESP32 также взаимодействует с драйвером шагового двигателя TMC2240 как через SPI, так и через выделенные управляющие выводы. Для связи по SPI используются выводы GPIO10–13, а для сигналов STEP и DIR — выводы GPIO5 и GPIO6.

Кроме того, три светодиода подключены к выводам GPIO40, GPIO41 и GPIO42 через резисторы сопротивлением 330 Ом и служат индикаторами состояния.

Драйвер шагового двигателя TMC2240 обеспечивает точное управление шаговым двигателем. Он получает входное питание двигателя (VM) от внешнего источника питания и логическое питание от стабилизатора напряжения 3,3 В. Управление двигателем осуществляется с помощью сигналов STEP и DIR от ESP32, а шина SPI используется для настройки внутренних параметров и считывания диагностических данных. Драйвер также включает выводы разрешения и диагностики для точного управления и обратной связи. Защита реализована с помощью TVS-диода, подключенного параллельно линии VM, для защиты от скачков напряжения, и резисторов для контроля тока двигателя. Выходные выводы драйвера подключены непосредственно к обмоткам двигателя, что обеспечивает плавную работу в режиме микрошага. Для тех, кто использует драйверы A4988, наше пошаговое руководство по подключению A4988 к Arduino поможет вам разобраться в этом вопросе.

В состав системы входит магнитный датчик углового положения на базе AS5600, предназначенный для определения углового положения вращающегося вала. Этот датчик взаимодействует по интерфейсу I²C, используя ту же шину, что и ПД-контроллер. Он питается от шины 3,3 В и включает в себя развязывающий конденсатор для фильтрации шума. Датчик предоставляет точные данные об угле поворота для ESP32, что позволяет использовать его в системах управления двигателем с обратной связью или в приложениях с отслеживанием положения.

Таким образом, мы рассмотрели принципиальную схему. Далее переходим к печатной плате.

Благодаря интеграции универсального микроконтроллера ESP32 с высокопроизводительным драйвером TMC2240 и энкодером AS5600, эта система управления шаговым двигателем на базе ESP32 с поддержкой Wi-Fi обеспечивает непревзойденную точность и обратную связь в реальном времени.

Разработка печатной платы для беспроводного драйвера шагового двигателя

Для этого проекта мы решили создать собственную печатную плату. Это гарантирует, что конечный продукт будет максимально компактным, простым в сборке и использовании. Плата была разработана с помощью KiCad, и все файлы проекта доступны для скачивания из репозитория GitHub, ссылка на который приведена ниже в этой статье.

Размеры печатной платы составляют приблизительно 42,3 мм x 42,3 мм, что точно соответствует стандартным размерам шаговых двигателей, таких как NEMA 17. Таким образом, она легко устанавливается за двигателем.

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

Сборка проекта

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

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

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

Корпус для драйвера шагового двигателя, вырезанный лазером

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

Выше вы можете увидеть изображение вырезанных фигур.

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

Сборка очень проста. Единственное, что требует особого внимания, — это размещение магнита на валу. Это важно, поскольку он отвечает за определение положения вала.

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

Далее следует корпус. Он собирается, как показано на следующем изображении.

После полной сборки готовый проект выглядит так, как на изображении ниже. Вы можете оценить компактность этого проекта.

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

Этот проект беспроводного контроллера шагового двигателя, созданный своими руками, предлагает мощное и компактное решение для робототехнических проектов и проектов домашней автоматизации. Благодаря интеграции универсального микроконтроллера ESP32 с высокопроизводительным драйвером TMC2240 и энкодером AS5600, эта система обеспечивает непревзойденную точность и обратную связь в реальном времени. Веб-управление и интеллектуальное управление питанием делают ее идеальным инструментом для быстрого прототипирования, робототехники и промышленных приложений. Вы можете загрузить весь код и файлы проекта из репозитория GitHub, ссылка на который приведена ниже, чтобы собрать свою собственную систему.

Техническое описание и репозиторий GitHub 

Краткое техническое описание, в котором изложены основная идея, принцип работы и основные свойства проекта. Кроме того, репозиторий GitHub содержит исходный код, файлы проекта и документацию для удобства использования. Это описание дает читателю краткий обзор проекта и достаточный метод для его воспроизведения с использованием материалов с открытым исходным кодом.

Объяснение кода для ESP32

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

Драйвер шагового двигателя TMC2240: для сверхтихого и точного управления шаговым двигателем.

Технология USB-C Power Delivery: обеспечивает интеллектуальное и регулируемое питание.

Магнитный энкодер AS5600: для высокоточной обратной связи по положению в замкнутом контуре.

RGB-светодиоды состояния: обеспечивают наглядную визуальную индикацию состояния системы.

Веб-интерфейс сервера: для удобного удаленного управления и мониторинга в режиме реального времени.

Система позволяет управлять шаговым двигателем через веб-браузер, одновременно отслеживая мощность, температуру и положение в режиме реального времени.

Библиотеки 

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

  • » SPI.h » – обеспечивает связь с драйвером TMC2240 с использованием последовательного периферийного интерфейса (встроенная библиотека).
  • » Wire.h » – Обеспечивает связь по протоколу I2C с магнитным энкодером (встроенная библиотека).
  • » WiFi.h » и «WebServer.h» — обеспечивают подключение к Wi-Fi и управление через веб-интерфейс (встроенные библиотеки).
  • «AS5600.h» — управляет магнитным энкодером для определения положения.
  • «PD_UFP.h» – Управляет согласованием параметров питания USB-C.
  • «ArduinoJson.h» – форматирует данные для ответов веб-API.
  • «index_page.h» – содержит HTML/CSS/JavaScript для веб-интерфейса (пользовательская библиотека).

Распределение контактов и аппаратные соединения

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

Драйвер шагового двигателя TMC2240 использует интерфейс SPI с выводами MOSI на контакте 11, MISO на контакте 13, SCK на контакте 12 и CS на контакте 10, в то время как выводы управления двигателем включают Enable на контакте 14, Step на контакте 5 и Direction на контакте 6.

Магнитный энкодер AS5600 взаимодействует по протоколу I2C, используя контакты 8 для SDA и 9 для SCL.

RGB-светодиод использует три отдельных контакта для управления цветом: красный — на контакте 40, зеленый — на контакте 42, а синий — на контакте 41.

В системе USB-C Power Delivery контакт 7 используется в качестве контакта прерывания для контроллера FUSB302.

Глобальные переменные и конфигурация

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

К переменным управления двигателем относятся isMotorEnabled, отслеживающая, включен ли двигатель, currentDirection, хранящая направление вращения, и isMovingToAngle, указывающая на активность автоматического позиционирования по углу. Параметры двигателя, такие как currentSpeed, motorCurrent и microSteps, можно регулировать во время работы для точной настройки производительности.

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

В конфигурации подачи питания используется массив pd_profiles, определяющий различные комбинации напряжения и тока, включая варианты 5 В, 9 В, 12 В, 15 В и 20 В, которые могут быть согласованы с источниками питания USB-C.

Система управления состоянием светодиодов основана на использовании цветовых констант RGB и временных переменных для управления системой визуальной обратной связи, при этом разные цвета указывают на различные состояния, такие как подключение к Wi-Fi, уровни мощности и состояние работы двигателя.

Функция setup() — инициализация системы

Функция setup() инициализирует все компоненты системы в тщательно спланированной последовательности, чтобы обеспечить корректную работу функции управления шаговым двигателем ESP32 по Wi-Fi .

Процесс начинается с инициализации последовательной связи в целях отладки, за которой следует тестирование RGB-светодиодов с использованием последовательности цветов: красный, зеленый и синий, для проверки работоспособности. Настройка аппаратных компонентов включает в себя конфигурирование связи I2C для магнитного энкодера, инициализацию контроллера Power Delivery с начальным профилем 5 В и настройку всех контактов GPIO для управления двигателем и связи SPI.

Установление Wi-Fi-соединения — важный этап, на котором система подключается к указанной сети, отображая желтый светодиод во время процесса подключения и меняя цвет на зеленый при успешном подключении. Затем система отображает назначенный IP-адрес для доступа к веб-сайту. Конфигурация маршрутов веб-сервера создает несколько HTTP-конечных точек, включая корневой путь для обслуживания основного интерфейса управления, маршруты включения и выключения управления питанием двигателя, маршруты настройки параметров скорости, тока и микрошага, маршруты команд перемещения для базового шагового и углового позиционирования, маршруты передачи данных в реальном времени для информации о состоянии и энкодере, а также маршруты управления подачей питания. Наконец, драйвер TMC2240 настраивается с параметрами по умолчанию, включая ограничения тока, разрешение микрошага и параметры синхронизации прерывателя. 

Основной цикл — непрерывная работа

Основной цикл непрерывно обрабатывает множество задач для поддержания работоспособности и быстродействия системы.

Обработка запросов включает в себя вызов метода server.handleClient() для обработки входящих веб-запросов и вызов метода PD_UFP.run() для поддержания согласования подачи питания с источниками USB-C. Система визуальной обратной связи обновляет светодиодную индикацию в зависимости от уровня приоритета: проблемы с подключением к Wi-Fi отображаются миганием красного цвета, успешное согласование PD — цветами, кодированными напряжением, а нормальная работа указывает на состояние подключения.

Периодически происходит обновление данных с датчиков, считывающих показания магнитного энкодера и датчика температуры TMC2240, при этом значения кэшируются во избежание избыточной передачи данных, которая может замедлить работу системы. Функция автоматического перемещения активируется, когда isMovingToAngle имеет значение true, в результате чего функция moveToAngle() непрерывно корректирует положение двигателя в направлении целевого угла. Отчеты о состоянии периодически выводят в последовательный порт информацию о системе, включая состояние двигателя, показания температуры и состояние подключения, для целей отладки и мониторинга.

Объяснение основных функций

Функции управления RGB-светодиодами, такие как setRGBColor() и updateStatusLED(), управляют системой визуальной обратной связи, которая предоставляет пользователям мгновенную информацию о состоянии. Система использует цветовую кодировку, где зеленый цвет обозначает напряжение 5 В, синий — 9 В, фиолетовый — 12 В, оранжевый — 15 В, а розовый — 20 В.

Связь с TMC2240 осуществляется с помощью функций writeRegister() и readRegister(), которые обрабатывают SPI-соединение с драйвером двигателя, в то время как такие функции, как setCurrent() и setMicrostepping(), настраивают параметры двигателя путем записи в определенные аппаратные регистры.

// Переместить двигатель на заданное количество шагов в указанном направлении

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

Система управления питанием PD согласовывает соответствующие уровни мощности с источниками питания USB-C, позволяя двигателю получать оптимальное напряжение в диапазоне от 5 В до 20 В в зависимости от требований системы и возможностей источника питания.

Загрузка прошивки и тестирование веб-интерфейса

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

Если вы хотите отлаживать программу через последовательный монитор, не забудьте включить параметр CDC (Communication Device Class) в среде разработки Arduino IDE в разделе Инструменты > Режим USB перед загрузкой кода.

Теперь давайте посмотрим на пользовательский интерфейс. Он простой и понятный.
Всего здесь 5 вкладок.

  • Настройки двигателя (задает ток двигателя (1000 мА) и режим микрошага (1/16 шага))

  • Управление питанием PD (выбор профиля напряжения)

  • Состояние системы (отображает текущее состояние системы, выполненные команды и т. д.)

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

  • Состояние двигателя (на правой панели отображается информация о состоянии в режиме реального времени, включая текущий угол поворота двигателя, скорость вращения (об/мин), фактический потребляемый ток двигателя (мА) и рабочую температуру.)

Выше вы можете увидеть пользовательский интерфейс этого проекта беспроводного контроллера шагового двигателя, который прекрасно демонстрирует возможности управления шаговым двигателем ESP32 по Wi-Fi через современный веб-интерфейс.

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

⇥ Можно ли использовать другой шаговый двигатель с этим беспроводным контроллером?
Да. Поскольку драйвер TMC2240 поддерживает большое количество шаговых двигателей, типичными примерами являются NEMA 17 и NEMA 23. Вам просто нужно будет настроить параметры ограничения тока в веб-интерфейсе контроллера в диапазоне от 100 мА до 2000 мА в соответствии со спецификациями вашего двигателя. Кроме того, через веб-интерфейс вы также можете выбрать микрошаговый режим для вашего двигателя.

⇥ С какими типами источников питания может работать данный контроллер шагового двигателя ESP32? 
Этот контроллер поддерживает технологию USB-C Power Delivery в диапазоне от 5 до 20 В. Он будет выбирать напряжение, наиболее подходящее для работы беспроводного драйвера шагового двигателя, которое может быть одним из следующих: 5 В/3 А, 9 В/3 А, 12 В/1,5 А, 15 В/2 А или 20 В/1,5 А.

⇥ Можно ли управлять несколькими шаговыми двигателями с помощью одного ESP32?
Данная схема предназначена для управления одним двигателем с помощью одного ESP32. Для управления несколькими двигателями необходимо использовать несколько беспроводных контроллеров шаговых двигателей или перепроектировать схему, чтобы использовать несколько драйверов TMC2240, каждый со своим собственным выводом выбора микросхемы SPI.

⇥ Каков диапазон управления беспроводным шаговым двигателем? 
Диапазон беспроводного управления ограничен местом передачи сигнала Wi-Fi. В помещении диапазон обычно составляет 30-100 метров, но для приложений с большими расстояниями и установок промышленной автоматизации, требующих расширенного беспроводного покрытия, целесообразно использовать Wi-Fi-ретранслятор или ячеистую сеть.  

⇥ Насколько точен проект беспроводного контроллера шагового двигателя?
Система отличается высокой точностью благодаря разрешению микрошага 1/256 и обратной связи с замкнутым контуром от энкодера AS5600, обеспечивая точность позиционирования ±0,35 градуса для большинства приложений автоматизации и робототехники, требующих точного контроля положения двигателя.м

Полный код проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *