开源 MicroManipulator 发布:低成本亚微米级 XYZ 三轴运动控制平台
Open MicroManipulator – A sub-micrometer 3D motion control plattform
开源项目 Open Micro-Manipulator 发布低成本、易搭建的电动 XYZ 微操纵运动控制平台,可实现亚微米级精度,面向光学对准、电子元件探针测试和显微操作。
开放式微操纵器
本项目包含一个开源、低成本、易于搭建的电动 XYZ 微操纵器运动控制平台,可实现亚微米级精度。 它专为光学对准、电子元件探测和显微成像等应用而设计。
观看 YouTube 视频,了解更多关于该设备及其搭建方式的信息: 开源电动 XYZ 微操纵器——经济实惠的亚微米运动控制
得益于其并联运动学结构和微型球铰,它实现了良好的机械刚度和较大的运动范围。 电机为现成的步进电机,由 30 kHz 闭环控制器和非常精确的 PWM 信号驱动。 一种“磁齿轮”方法将低成本磁性旋转编码器的分辨率提高了 30 倍,使步进精度可达 50nm (请注意分辨率和精度之间的区别。绝对精度要差得多。
该设备可通过 USB 串行接口以简单的 G-Code 命令进行控制,因此易于集成到其他项目中。 固件实现了完整的运动规划栈,并带有前瞻功能,可实现平滑且精确的路径跟随能力。
入门指南
以下是如果你想复现该项目可以遵循的高层级步骤列表。 如果你在搭建过程中有疑问或遇到问题,或者只是想讨论与项目相关的主题, 请加入项目社区 Discord 服务器。
- 阅读本文档并观看链接的视频
- 获取 物料清单 中列出的零件
- 搭建设备和电子部分
- 根据你的搭建情况修改硬件配置 hw_config.h
- 使用带有 PlattformIO 插件的 VSCode 上传固件
- 校准轴
另请查看新设备的设置指南:设置指南
✨新功能:硬件版本 4.0
新版本的硬件已发布,修复了之前设计的几个问题:
- 修复了归位过程中的自碰撞问题。
- 仅用螺丝连接球铰块约束不佳,可能会轻微旋转。
- 无法可靠地确保连杆长度一致
- 不必要的球铰摩擦
- 准确的球位置严重依赖于打印质量和圆角
- 橡皮筋一旦粘合就无法更换或移除。
关于改进后的球铰和连杆制造过程的视频可在 YouTube 上找到:为开放式微操纵器打造更好的球铰 此外,FreeCAD 模型经过了重构和改进,现在包含所有销钉和紧固件。它现在为所有所需机械零件提供了参考。
警告:物料清单尚未更新……
开放式微操纵器 GUI
为了让开放式微操纵器的测试和使用变得简单方便,这里提供了一个带有图形用户界面的 Python 控制程序:开放式微操纵器 GUI。 它具有简单的控件来移动设备,同时还能显示实时摄像头画面(例如来自显微镜摄像头)。其他功能包括简单的 g-code 运行器和实时鼠标控制(例如用于生物学应用)。
🐍 Python-API
这个轻量级 Python API 处理所有串口通信,并提供便捷的命令执行和调试信息打印。 该接口包含回零、移动和校准设备的函数,以及查询设备信息的函数。 只需将 open_micro_stage_api.py 文件复制到你的项目中(同时安装 requirements.txt 中的依赖项),即可开始使用。
使用示例
from open_micro_stage_api import OpenMicroStageInterface
# create interface and connect
oms = OpenMicroStageInterface(show_communication=True, show_log_messages=True)
oms.connect('/dev/ttyACM0')
# run this once to calibrate joints
# for i in range(3): oms.calibrate_joint(i, save_result=True)
# home device
oms.home()
# move to several x,y,z positions [mm]
oms.move_to(0.0, 0.0, 0.0, f=10)
oms.move_to(3.1, 4.1, 5.9, f=26)
oms.move_to(0.0001, 0.0, 0.0, f=10)
# wait for moves to finish
oms.wait_for_stop()
API 函数(仅列出最相关的函数)
connect(port, baud_rate=921600)
disconnect()
set_workspace_transform(transform)
get_workspace_transform()
home(axis_list=None)
calibrate_joint(joint_index, save_result)
move_to(x, y, z, f, move_immediately, blocking, timeout)
set_tool_output(tool_idx, output_value, immediate)
set_pose(x, y, z)
dwell(time_s, blocking, timeout)
enable_motors(enable)
wait_for_stop(polling_interval_ms, disable_callbacks)
set_max_acceleration(linear_accel, angular_accel)
set_servo_parameter(pos_kp, pos_ki, vel_kp, vel_ki, vel_filter_tc)
✨ 固件 v1.0.4
固件 1.0.4 带来了许多较小的改进和错误修复,以及一项很棒的新功能:
工具:现在支持在 PCB 上 J5 的两个 GPIO 引脚上使用工具(例如用于激光雕刻)。 工具已集成到规划器中,在执行 g-code 时运行快速且时序正确。 工具支持 PWM(利用 PIO 特性在不依赖软件 PWM 的情况下扩展出额外通道)。
使用示例:
M3 T0 S0.7 // set pwm output of tool 0 to 70% G4 S0.001 // dwell command (or any other motion command) - necessary to apply the tools output校准:校准现在增加了一些额外的错误检查,以改进对编码器对齐等潜在问题的错误报告。
运动学模型参数:初始化代码已清理,并为参数添加了更好的注释。参数已针对 HW v4.0 预设,但如有必要,你可以切换回旧的 HW-v3.0 参数。
错误修复:较小的错误修复
重要提示:如果你使用的是 硬件版本 v3.0,则需要在 kinematic_model_delta3d.cpp 文件中切换回旧的运动学参数(文件顶部有一个对应的 #define)。
固件 v1.0.1
此更新改进了校准、回零、日志记录,并新增了若干 G-Code 命令。
改进
- 回零:支持并行回零、更高的重复精度、更精确的几何参考
- 关节校准:优化了流程,持久化闪存存储(重启后无需重新校准)
- 日志记录:输出更清晰、更详细
新增 G-Code 命令
G28— 关节回零(支持同时回零多个轴以加快启动速度)G24— 设置位姿命令(直接设置伺服目标,绕过运动控制器)M17/M18— 启用/禁用电机(启用时从编码器恢复位姿)M51— 读取编码器值M55— 设置伺服环路参数M56— 关节校准(可选保存到闪存)M57— 读取设备状态的各种信息M58— 读取固件版本
⚙ CAD 文件
所有 CAD 模型均使用 FreeCAD 制作,以便任何人都能查看和修改设计,而无需订阅或付费购买专有 CAD 解决方案。 请注意,大多数组件在设计时已考虑使其易于在三轴 CNC 铣床上加工。 你也可以 3D 打印这些零件,但必须接受热漂移问题(碳填充耗材可以减轻此问题)。
CAD 文件可在此处找到:CAD Models。 请注意,使用的是 FreeCAD 版本 1.2.0dev,这些文件可能无法在旧版本中正常工作。
用于打印的 STL 文件可在此处找到:STL Files
⚙ 运动学模型
运动学模型定义在此处:kinematic_model_delta3d.cpp。 请对照构造函数中设置的值检查你的构建尺寸。尤其要确保臂长匹配。
⚙ 电子部分
重要提示:如果你制作的是 PCB 版本 v1.2(见板上的版本标签),你需要钻掉二极管 D1 上一个位置错误的过孔,该过孔会将 5V 电源轨短路到地(参见修复图片)。该问题已在 v1.3 中修复。
电子部分使用 KiCAD 设计,仅使用常见的模块(电机驱动器和 MCU 板),并通过一块简单的 PCB 连接。无需进行 SMD 焊接即可组装电路板,使制作过程更加容易上手。 对于电机通常的绕组电阻,设备应由 \({\color{lightgreen} 5V-6V }\)(2A)供电,以将电流和发热保持在合理水平。
该仓库现在还包含可直接上传至 PCB 制造商的制造文件。
⚙ 固件
固件使用 C++ 编写,并从“SimpleFOC”项目中获得了一些灵感。它力求精简易读,不添加任何多余内容,专注于本项目所使用的硬件。 它实现了带前瞻的路径规划,并且与许多其他运动控制器项目不同,支持真正的 6DOF 位姿插值和规划,使其可用于驱动六足运动平台;这可能会也可能不会成为本项目的下一步。
你可以在 hw_config.h 中找到引脚编号、电机类型和其他参数的配置。请在上传固件前检查它们。
构建和烧录固件
对于构建和烧录固件,推荐使用 Visual Studio Code(可在 Windows 和 Linux 上免费获取)。 安装 PlatformIO 插件并打开固件文件夹。现在你可以像任何其他 PlatformIO 项目一样构建和烧录固件。
⚙ G 代码接口
固件仅支持下面列出的一小部分 G 代码命令。
每条命令都会以 ok 或 error 响应进行确认。
如果命令提供附加信息(例如_获取位置_命令),该信息会在 ok 消息之前返回。
客户端必须等待上一条命令的确认后才能发送下一条命令——否则行为未定义。
| 命令 | 描述 |
|---|---|
G0 X Y Z F |
将末端执行器沿直线移动到指定位置。 • X、Y、Z:目标位置• F:进给速率 |
G1 X Y Z F |
与 G0 相同。 |
G4 S/P |
暂停/停留指定时间。 • S:秒• P:毫秒 |
G24 X Y Z A B C |
直接为伺服回路设置当前位姿,可选旋转向量* A、B、C。 |
G28 A-F |
回零一个或多个关节。 • 可选关节选择 A–F。 |
M3 |
设置工具输出。 • T:工具索引• S:输出值(0.0..1.0)注意:新值仅在下一个运动或暂停命令时应用 |
M17 |
启用电机并将当前位姿读取为起始位姿。 |
M18 |
禁用电机。 |
M50 |
获取当前内部位姿。(此处不读取编码器) |
M51 |
获取当前编码器角度(以度为单位)和原始编码器值。 |
M52 |
获取规划器队列中的项目数。 |
M53 |
检查所有计划的移动是否完成(1 = 已完成,0 = 未完成)。 |
M55 A B C D F |
设置伺服回路参数。 • A、B:位置 PI 控制器增益(P 和 I)• C、D:速度 PI 控制器增益(P 和 I)• F:速度滤波器时间常数 |
M56 J S |
校准一个关节。 • J:关节索引• S:保存校准结果 |
M57 |
获取设备和伺服回路信息:回零/校准状态、角度、回路频率和文件列表。 |
M58 |
获取固件版本。 |
M204 L A |
设置线加速度和角加速度。 • L:线加速度• A:角加速度 |
*注意:通信协议使用 3D 向量表示旋转。方向表示旋转轴,向量的长度表示绕该轴旋转的角度。
❤️ 支持
如果您想支持这个项目,可以考虑以下方式:
- 为构建指南做贡献 – 通过提交拉取请求或提出建议来帮助改进或扩展构建说明。
- 表征典型的径向步进电机轴误差运动 – 测量多个 Nema-17 步进电机轴的径向误差运动(有关该主题的更多信息,请参阅 Cylos Garage:https://www.youtube.com/watch?v=gt2gK-oxy5s)。
- 对构建体验提供反馈 – 告诉我们哪些做得好、哪些不好,以及如何让这个过程对其他人更顺畅。
- 在 Ko-fi 上支持该项目 – 如果您觉得这个项目有价值,可以通过 Ko-fi ☕ 提供经济支持。
Youtube 视频
来源:Hacker News · github.com








