EdigE
← ЛЕНТА
MCU · 02.07.2026

USB CDC Motor Driver: моторный HAT заменили пачкой COM-портов

Два коллекторных двигателя получают собственный замкнутый контур и появляются в хост-системе отдельным USB CDC-устройством. Контроллер XorTech Electronics считает квадратурные энкодеры с декодированием 4× и обновляет скорость раз в 100 ms по таймеру, пока USB обслуживает команды и телеметрию. Цена такой простоты определяется дискретностью измерения, 10-герцовым контуром и устройством бинарного протокола.

XorTech Electronics опубликовала двухканальный контроллер коллекторных DC-моторов, подключаемый к хосту как USB CDC-устройство. Плата рассчитана на сценарий с несколькими моторными узлами: каждый контроллер получает собственный COM- или ttyACM-порт, а соединение нескольких плат сводится к USB-концентратору и отдельному питанию силовой части.

В основе платы стоит AVR32DU32 семейства AVR DU. Микроконтроллер содержит USB 2.0 Full-Speed device, таймер TCA и интерфейс прошивки UPDI; USB работает от внутренней тактовой схемы crystal-less. Силовую часть обслуживает TB6612FNG — двухканальный H-мост с рабочим диапазоном питания VM 2.5–13.5 В. Для напряжения VM от 4.5 В документация микросхемы указывает до 1.0 А на канал, однако реальный непрерывный ток определяется медной площадью, тепловым режимом и параметрами конкретного мотора. Питание двигателей подаётся на отдельный вход; USB может питать логику в опциональном режиме.

У каждого канала предусмотрен квадратурный энкодер. Прошивка декодирует все четыре фронта A/B-сигналов, увеличивая разрешение счётчика в четыре раза относительно одного фронта одного канала. Таймер TCA0 формирует период около 100 ms: за это окно вычисляется приращение энкодера, из него получается RPM, затем выполняется шаг PID-регулятора и обновляется ШИМ. Такая организация отделяет ритм контура от прихода USB-пакетов и от активности пользовательского приложения.

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

XorTech.Electronics (владелец проекта Hackaday.io)

Обмен идёт фиксированными бинарными кадрами. Команда двигателей начинается с 0x55 и занимает 11 байт; конфигурационный кадр с заголовком 0xBB имеет длину 22 байта. В обратном направлении контроллер отправляет 14-байтную телеметрию RPM с 0xAA и 27-байтный PID-debug кадр. Отладочный пакет содержит шесть чисел float, передаваемых как сырые 32-битные IEEE-754 значения в little-endian. Хостовая Python-утилита отображает вклад P, I и D, ошибку и текущие параметры регулирования.

Фиксированные размеры кадров упрощают прошивку 8-битного МК, однако в опубликованной реализации отсутствуют CRC, поле длины и номер последовательности. Парсер ищет заголовок и читает известное число байтов; при сдвиге потока после повреждения или вставки байта восстановление синхронизации зависит от следующего совпадения заголовка. Для локального USB CDC-канала риск ограничен, но в оборудовании с требованиями к диагностике протоколу потребуется контроль целостности и явная модель ошибок.

Скоростной контур с окном 100 ms работает на частоте около 10 Гц. На малых оборотах измерение RPM будет ступенчатым: за окно энкодер набирает мало импульсов, а задержка измерения сопоставима с динамикой небольшого двигателя. Публичный код и фотографии подтверждают аппаратный прототип, но схемы, Gerber-файлы, осциллограммы ШИМ и USB, температурные данные H-моста и переходные характеристики PID пока не опубликованы. Проект показывает компактную архитектуру моторного узла с телеметрией, где ограничивающими факторами остаются качество обратной связи, тепловой запас драйвера и надёжность протокола.