Open MicroManipulator: открытый XYZ-микроманипулятор с шагом до 50 нм

Open MicroManipulator, открытый проект моторизованной платформы для перемещения по осям XYZ с субмикронной точностью. По описанию в README, платформа недорогая и простая в сборке; она рассчитана на оптическую юстировку, зондирование электронных компонентов и микроскопию. Сборку подробно показывают в видео на YouTube, а для вопросов и обсуждения у проекта есть сервер сообщества в Discord.
Конструкция, параллельная кинематика с миниатюрными шаровыми шарнирами; это даёт хорошую механическую жёсткость и большой диапазон перемещений. Моторы, обычные шаговые, их ведёт замкнутый контур управления с частотой 30 кГц и очень точный ШИМ-сигнал. Ключевой приём, «магнитная передача» (magnetic gearing): она повышает разрешение недорогих магнитных поворотных энкодеров в 30 раз и позволяет делать шаги до 50 нм. Авторы сразу оговаривают: это разрешение, а не точность, абсолютная точность значительно хуже, а её числового значения в README нет.
Управляется устройство простыми командами G-кода через последовательный интерфейс USB, поэтому его легко встроить в другие проекты. Прошивка на C++ (частично вдохновлена проектом SimpleFOC) содержит полный стек планирования движения с упреждающим просмотром для плавного и точного движения по траектории. В отличие от многих контроллеров движения, она поддерживает интерполяцию и планирование полной позы с шестью степенями свободы, то есть годится для гексаподов; станет ли это следующим шагом проекта, в README сказано «может быть, а может и нет». Каждая команда подтверждается ответом ok или error, и клиент обязан дождаться подтверждения предыдущей команды, иначе поведение не определено.
Вышла новая версия железа. Она исправляет самостолкновение при поиске нулевой позиции (homing), недостаточно жёсткую фиксацию блока шарового шарнира одними винтами, отсутствие надёжного способа выдержать одинаковую длину тяг, лишнее трение в шарнирах, зависимость точности положения шара от качества печати и скругления углов, а также невозможность заменить или снять приклеенные резинки. Модель в FreeCAD переработана и теперь включает все штифты и крепёж. Но список комплектующих (BOM) для новой версии ещё не обновлён.
Прошивка 1.0.4 приносит мелкие улучшения и исправления, а главное, поддержку инструментов (например, лазерной гравировки) на двух выводах GPIO J5 платы. Инструменты встроены в планировщик, работают с правильным временем при выполнении G-кода и поддерживают ШИМ. Кроме того, добавлены проверки ошибок при калибровке (например, при плохой юстировке энкодера), а параметры кинематической модели по умолчанию заданы для версии железа HW v4.0; у владельцев HW v3.0 есть переключатель на старые параметры в файле kinematic_model_delta3d.cpp. Обновление также улучшило калибровку, homing и журналирование и добавило команды G-кода: G28 (поиск нуля, в том числе по нескольким осям сразу), G24 (прямая установка позы), M17/M18 (включение и отключение моторов), M51, M55, M56, M57 и M58 (чтение энкодеров, параметры сервоконтура, калибровка суставов, сведения об устройстве и версия прошивки).
Для удобства есть Python-программа с графическим интерфейсом: перемещение, показ изображения с камеры (например, микроскопа), запуск G-кода и управление мышью в реальном времени. Лёгкий Python-API скрывает работу с последовательным портом: достаточно скопировать файл open_micro_stage_api.py и поставить зависимости. Функции API, подключение (скорость по умолчанию 921600 бод), homing, калибровка, перемещение, установка выходов инструментов, паузы и другое.
CAD-модели сделаны в FreeCAD, электроника, в KiCAD; нужны только распространённые модули (драйверы моторов и платы с микроконтроллером), соединённые простой платой, пайка SMD-компонентов не требуется. Большинство деталей рассчитано на обработку на 3-осевом фрезерном станке с ЧПУ; можно печатать их и на 3D-принтере, но придётся мириться с тепловым дрейфом (углеродонаполненные пластики его снижают). В конце авторы просят помочь: улучшить руководство по сборке, измерить радиальное биение вала у разных моторов Nema-17, поделиться опытом сборки или поддержать проект на Ko-fi.
Ключевые факты
- Открытый микроманипулятор XYZ на параллельной кинематике и обычных шаговых моторах; предназначен для оптической юстировки, зондирования компонентов и микроскопии.
- «Магнитная передача» повышает разрешение магнитных энкодеров в 30 раз и даёт шаги до 50 нм при контуре управления 30 кГц; абсолютная точность значительно хуже, её значение не приведено.
- Управление G-кодом по USB, прошивка на C++ с упреждающим планированием траектории и поддержкой позы с шестью степенями свободы; есть Python-API и графическая программа.
- Новая версия железа исправила ряд недостатков (самостолкновение при homing, трение в шарнирах и др.); прошивка 1.0.4 добавила поддержку инструментов (например, лазерной гравировки) на двух выводах GPIO.
- Список комплектующих для новой версии ещё не обновлён; у плат v1.2 нужно высверлить ошибочное переходное отверстие у диода D1, в v1.3 это исправлено.
Почему это важно
Субмикронное позиционирование обычно ассоциируется с дорогим профессиональным оборудованием, а здесь выложен полностью открытый проект: CAD-модели в FreeCAD, электроника в KiCAD, прошивка, Python-API и файлы для заказа печатных плат. Технически интересен приём с «магнитной передачей», который повышает разрешение недорогих энкодеров в 30 раз (до шагов в 50 нм). Сравнения с коммерческими микроманипуляторами в README нет, поэтому оценивать место проекта среди готовых решений по этому тексту нельзя.
Кому это важно
Тем, кому нужна точная подвижка для оптической юстировки, зондирования электронных компонентов или микроскопии, любителям, лабораториям и мейкерам, готовым собирать устройство самостоятельно. Разработчикам удобен простой интерфейс G-кода через USB-serial. Отдельно README упоминает биологические задачи: управление мышью в реальном времени. Проекту также нужны помощники: авторы просят улучшать руководство по сборке и измерять радиальное биение валов Nema-17.
Как это применить
Порядок из README: прочитать документ и посмотреть видео, закупить детали по списку комплектующих, собрать устройство и электронику, поправить hw_config.h под свою сборку, загрузить прошивку через VSCode с плагином PlatformIO и откалибровать оси. Детали можно фрезеровать на 3-осевом станке с ЧПУ или печатать (с тепловым дрейфом; углеродонаполненные нити его уменьшают). Плату можно собрать без пайки SMD. В Python достаточно скопировать open_micro_stage_api.py, поставить зависимости и вызывать connect, home, move_to и другие функции. Учтите: список комплектующих для новой версии железа пока не обновлён, а владельцам HW v3.0 надо вернуть старые кинематические параметры в kinematic_model_delta3d.cpp. Также нужно сверить размеры сборки (особенно длину рычагов) со значениями в конструкторе кинематической модели.
Можно ли доверять
Источник, README самого проекта на GitHub, то есть заявления авторов о собственной разработке. Независимых измерений и сравнений с другими устройствами в нём нет. Число 50 нм, это разрешение (размер минимального шага), а не точность: сами авторы пишут, что абсолютная точность значительно хуже, и числового значения не приводят. Имя автора, цена сборки и дата релиза в тексте README не указаны, поэтому слово «недорогой» остаётся без цифр.
Риски и подводные камни
Главный риск, путаница между разрешением и точностью: 50 нм не означают позиционирование с такой точностью. Список комплектующих для новой версии ещё не обновлён, так что при закупке придётся сверяться с актуальной моделью в FreeCAD. У печатных плат v1.2 есть дефект: ошибочное переходное отверстие у диода D1 замыкает шину 5 В на землю, его нужно высверлить (в v1.3 исправлено). Печатные детали подвержены тепловому дрейфу. Клиент обязан ждать подтверждения предыдущей команды, иначе поведение не определено. Для CAD-файлов использовалась версия FreeCAD 1.2.0dev, со старыми версиями они могут не работать. Гексапод с шестью степенями свободы, лишь возможный следующий шаг, не обещанная работа.
«Обратите внимание на разницу между разрешением и точностью. Абсолютная точность значительно хуже.»
— README проекта Open MicroManipulator