Мотор «от Xiaomi»

152783a65522b3db161bee1301b60898.png

Как известно, движение — жизнь. А пошаговое движение — надёжный путь к любой цели (даже если эта цель в простом движении по кругу). Вот и я, лениво передвигаясь по бесконечной ленте товаров китайского маркетплейса наткнулся на необычный гаджет. Называется это чудо китайской инженерии «Xiaomi Cyber Gear», и мимо трёх этих слов нельзя пройти спокойно, если проживаешь в 2024-м году.

В сущности, это и не гаджет даже, а компонент для Xiaomi Cyber Dog. Эта робо‑псина не так популярна в Ютубе и в России, как изделия от Unitree, но видимо достаточно популярна, чтобы продавать к ней запчасти. Впрочем, любителям DIY, к коим я себя причисляю, данный моторчик тоже может быть интересен.

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

Встречают в коробке, а провожают в ящике… В общем, встречает нас красивая картонная коробка, как от смартфона, не какой‑то антистатический пакетик. Внутри коробки китайская агитация, qr‑код на WiChat с кошка‑жена, радикально чёрный демпферный пенопласт и сам мотор. Тоже чёрный.

699a0811021fdf552c5ed33c42e3dab1.png

Первое впечатление от него, в самом деле, как от любого гаджета Xiaomi, это впечатление очень дорогой, почти премиальной вещи (на фото я уже залапал эту вещь, извините, не смог удержаться).

a2036df3636c8a9292539b16fa7c7936.png

Самое главное, что можно рассказать про этот двигатель: это шаговый двигатель со встроенным энкодером и контроллером, взаимодействие с которым происходит по CAN-шине на скорости 1Мбит. Питается мотор от 24-х вольт, максимальное чисто оборотов — около трёхсот в минуту, минимальное — очень медленно. Детали можно прочитать в справочном буклете из коробки.

Xie xie!

Xie xie!

У мотора есть своё приложение-компаньон для Windows, из него можно подавать тестовые команды мотору, смотреть за показателями датчиков. Из него же мотору можно… обновить прошивку. Но я с приложением не стал связываться, так как оно на китайском целиком и полностью.

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

Питание и CAN-шина

Питание и CAN-шина

Драйвер взаимодействует с двигателем по CAN‑шине, позволяет управлять скоростью в режиме двигателя «speed», углом поворота и скоростью в режиме позиционирования «location», также позволяет управлять током в режиме «current», но я не пробовал, наверное, это для робо‑собаки и имитации работы мышц, а у меня был другой тип нагрузки.

Двигатель очень мощный, на мой взгляд, руками его не остановить. Энкодер точный, но не сильно точный, с ним приходится играть в «доведи меня до нужной кондиции» в несколько приёмов на разной скорости. Чем‑то напоминает…, а впрочем не будем об этом.

Управлял двигателем из RPi 4 + СAN hat (но работает и с обычным MCP2515 и со встроенным в ESP32 can‑драйвером). Там же, внутри RPi писал код через VSCode Remote + Swift, как я и сказал, всё получилось довольно легко и удобно, двигатель уже описан высокоуровневыми классами и методами, думать о байтах не пришлось вовсе. Выглядит код примерно так:

let motorA = CyberGear.Motor(canID: 017, bus: canBusA)
try! motorA.runMode(.speed)
try! motorA.enable()

На видео демонстрация плавного набора скорости (в цикле и через Task.sleep (), простите, люди добрые)

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

В целом очень приятный DIY-компонент, современный и удобный. Это как раз тот компонент в проекте (о котором я никогда не расскажу) с которым не возникло никаких проблем. Подключил и забыл. Рекомендую.

© Habrahabr.ru