A simple open source XY motorized stage
Table of contents
- Translation stage
- Bill of materials
I will explain how to make a simple but effective motorized micrometer stage.
As I write it, the total cost should be around 100$ without the control board + drivers.
This is the last iteration of my automated stage. All my panoramas are made with it, and I’m able to image up to 1000x magnification.
|8086 CPU||Z80 CPU||6522 VIA||FC1001||W538T808|
|200x||200x||200x||500x ROIs||1000x ROIs|
Although it’s probably possible without one, a 3D printer is highly recommended for building this project.
You’ll also need some basic tools and knowledge.
Before making one, be sure you have enough vertical space on your microscope when removing the builtin stage (about 50mm).
Important note: This motorized stage will work only for reflected light microscopy, but you can probably adapt the coupling to a different translation stage.
The most important part of this build is a micrometric linear XY translation stage.
I use a SEMY60-AC with the following specs:
Table size: 60 x 60mm Load resistance: 44.1N Stroke: ± 6.5 mm Accuracy: 0.01mm Parallelism: 30μm Parallelism in motion: 20μm True Straightness: 3μm
Equivalent stages can be found on aliexpress.
Just make sure to get the ‘-C’ version, not the ‘-L’ or ‘-R’ ones.
If your microscope is an Olympus BH2, you can use this adapter to replace the original stage by the SEMY60.
STL - blend
The magic sauce is a RC drive shaft combining two universal joints and a spline (the red part).
You can find a pair of them for about 15€ on aliexpress.
I use the 2PCS 113-165mm 91-125mm one.
To connect the screw to the drive shaft, 3d print this piece.
Where to mount the motors?
Actually, anywhere, as long as it’s more or less in front of and at the height of the stage.
You can 3d print this Nema 17 holder and fix your motor on anything.
STL - blend
At first, I simply stuck them to a heavy box with double-sided tape, and that worked just fine.
A major advantage of this system is that when the microscope is no longer in use, the motors can simply be removed.
For the control board I use a cheap RAMPS mounted on an Arduino Mega. This setup was very common in the 3d printing scene some years ago.
I strongly recommend the use of trinamic drivers instead of the common A4988 or DRV8825 drivers to avoid vibrations. I got 5x TMC2208 with heatsinks for about 25€ some years ago.
Note: don’t use the TMC drivers without any heatsink. A fan is also recommended.
I made a very simple firmware to control only one motor at the same time so we can use a small power supply.
You don’t have to use that one specifically.
You can download it’s source code here.
SX: Start motor X SY: Start motor Y SZ: Start motor Z EX: Turn off motor X EY: Turn off motor Y EZ: Turn off motor Z MX pos [speed]: Relative movement in X MY pos [speed]: Relative movement in Y MZ pos [speed]: Relative movement in Z PX pos [speed]: Absolute positioning in X PY pos [speed]: Absolute positioning in Y PZ pos [speed]: Absolute positioning in Z POS: Get the current position HOME: Move to the origin SPD speed: Set the speed of movement FAN speed: Set the fan speed FAND: Reset fan speed to default FANS speed: Set default speed of the fan
Note: The firmware has safeguards to prevent you from moving outside the defined area. This is especially useful for the Z axis.
Please note that I have not tested the parts listed in the 2023 list.
Use at your own risk.
BoM updated for 2023:
|RC drive shafts||16€||Aliexpress||2PCS 113-165 91-125mm|
Prices on aliexpress vary widely. Use pricearchive to compare prices.
Original BoM for reference:
|RC drive shafts||8€/pcs||10/04/2023||Aliexpress|
|TMC2208 v3 UART||5€/pcs||18/08/2021||Amazon|
- The BoM don’t include the required screws.
- I recovered the motors from my old Anet A8 3d printer.
I use a StepperOnline 17HS19-2004S1 for my Z axis, and you can use them for other projects because they have a lot of torque.
For reference, the specs of the XY motors I use:
Stepper Motor 42SHDC3025-24B Rated Power 14W Rated Voltage 3.96V Rated Current 0.9A Rated Speed 1000rpm Rated Torque 0.34NM Holding Torque 0.4N.M Step Angle 1.8° Step Angle Accuracy ±5% Phase 2 Resistance 4.4Ω±10% Temperature Rise 80K Max Ambient Temperature -20℃~+50℃ Ambient Humidity 90% Max Insulation Resistance 100 MΩ Min. ,500VDC Size 42*42*40(mm) Weight 280g
The RC drive shaft has some backlash that you will have to correct when doing the captures.
Always use scanlines in the same direction to get the best precision.
Scan with backlash compensation
When you return to the first column, move to the previous column instead to correct the backlash (blue arrow).
If you check the translation stage specifications, it is theorically limited to
± 6.5 mm, or a total distance of 13mm.
From what I’ve observed, it seems the total distance is more than this, but it’s a constraint to keep in mind.
If you have to scan a very large die, you still can add a wedge between the stage and the screw when you reach the limit.
It may also be possible to change the micrometer screws, but I haven’t tried.
Accuracy is good, but not sufficient to stitch a panorama without having to calculate the error between consecutive images.
You’ll have to rely on a software like ImageJ/Fiji to make your panoramas.
If you use this page to make your own stage, please credit me.
This project required a lot of time and iterations to arrive at a result that was both simple to build and met various constraints, such as accuracy, precision and reliability.
Eventually send me a photo of the result so that I can publish it here as reference for others.