Open MicroManipulator – A sub-micrometer 3D motion control plattform
Open MicroManipulator: A Sub-Micrometer 3D Motion Control Platform
The Open Micro-Manipulator is an open-source, budget-friendly, and accessible motorized XYZ platform designed to achieve sub-micron precision. This system is ideal for high-precision tasks such as:
- Microscopy
- Probing electronic components
- Optical alignment
🛠 Technical Architecture
The device utilizes a parallel kinematic structure combined with miniature ball joints, which ensures a high degree of mechanical rigidity while maintaining a generous range of motion.
Control & Precision
The system is powered by standard, off-the-shelf stepper motors. These are managed by a closed-loop controller operating at using a highly precise PWM signal.
To push the limits of low-cost hardware, the project employs a "magnetic gearing" technique. This method amplifies the resolution of standard magnetic rotary encoders by a factor of 30, enabling incremental steps as small as .
[!IMPORTANT] Note: It is critical to distinguish between resolution (the smallest detectable change) and accuracy (how close the position is to the true value).
Software Stack
The platform is controlled via G-Code commands transmitted through a USB serial interface, making it highly compatible with existing automation workflows. The internal firmware features a sophisticated motion planning stack with look-ahead capabilities to ensure paths are followed smoothly and accurately.
🚀 Getting Started
If you are looking to replicate this build, follow the workflow outlined below:
Build Checklist
- Review the primary documentation and tutorial videos.
- Purchase all components listed in the Bill of Materials.
- Construct the physical frame and electronic circuits.
- Adjust the
hw_config.hfile to match your specific build. - Upload the firmware using the PlatformIO plugin in VSCode.
- Perform the axis calibration.
Struggling with the build? Join the community on the project's Discord Server.
✨ Hardware Evolution: Version 4.0
The latest hardware iteration (v4.0) addresses several shortcomings of the previous design:
| Feature/Issue | Previous Version (v3.0) | Hardware v4.0 Improvement |
|---|---|---|
| Homing | Collision-free homing sequence | |
| Stability | Securely constrained screw connections | |
| Consistency | Reliable method for uniform length | |
| Friction | Optimized for smooth movement | |
| Print Quality | Robust design regardless of print quality | |
| Maintenance | Easily replaceable rubber bands |
Additionally, the FreeCAD model has been overhauled to include all fasteners and pins, serving as a comprehensive mechanical reference.
💻 Software & Integration
Graphical User Interface (GUI)
A dedicated Python-based GUI is available to simplify operation. It features:
- Manual Controls: Easy movement of the manipulator.
- Visual Feedback: Integrated live camera stream.
- Automation: A built-in G-code runner.
- Intuitive Input: Real-time control via mouse.
🐍 Python API
For developers, a lightweight API (open_micro_stage_api.py) handles all serial communication. After installing the requirements.txt dependencies, you can integrate the stage into your own code.
Implementation Example:
from open_micro_stage_api import OpenMicroStageInterface
# Initialize interface and establish connection
oms = OpenMicroStageInterface(show_communication=True, show_log_messages=True)
oms.connect('/dev/ttyACM0')
# Calibrate the three joints
for i in range(3):
oms.calibrate_joint(i, save_result=True)
# Home the device and move to coordinates (x=0.1mm, y=0, z=0) at feedrate 10
oms.home()
oms.move_to(0.0001, 0.0, 0.0, f=10)
# Block execution until movement is complete
oms.wait_for_stop()
Key API Reference
| Function | Description |
|---|---|
connect(port, baud_rate=921600) | Opens serial communication. |
home(axis_list=None) | Returns specified axes to home position. |
move_to(x, y, z, f, ...) | Moves to absolute coordinates at feedrate f. |
calibrate_joint(joint_index, save_result) | Calibrates a specific joint. |
set_servo_parameter(...) | Adjusts PID gains (kp, ki) and filter time constants. |
⚙️ Firmware v1.0.4 Updates
The latest firmware release introduces significant bug fixes and a powerful new feature: Tool Support.
Using the two GPIO pins on the J5 connector of the PCB, users can now integrate tools (e.g., a laser for engraving). These tools are fully integrated into the motion planner for precise timing. The system utilizes the PIO (Programmable I/O) feature to provide hardware-level PWM without taxing the CPU.
Example G-Code for Tool Control:
M3 T0 S0.7 ; Set Tool 0 PWM output to 70%
G4 S0.001 ; Dwell for 0.001 seconds