top bar


Revision as of 17:06, 25 March 2011 by Nenad (Talk | contribs)

XY Stage

Summary:XY Stage - brushless DC motor controller BBD 102
Author:Nenad Amodaj and Thorlabs Inc
Platforms:All platforms (uses serial port)
Example Config File:See below

XY stage device adapter that works with BBD 102 brushless DC motor contoroller[1] and supports high speed motorized scanning stage MLS 203 [2].


This adapter requires only a serial serial port (RS-232). One port should be reserved for this stage and initialized with the following parameters:

BaudRate: 115200

Handshaking: Off

Parity: None

StopBits: 1

(all other micro-manager port parameters can be left with defaults)

The only parameter that is required for configuration of the stage is the name of the serial port (e.g. COM2) attached to the controller. If the port was correctly set and connected in the previous step, micro-manager will load the stage adapter at startup. In Device Property Browser (menu: Tools | Device Property Browser...) the stage appears as:

Property Browser 2011-03-25 16-03-56.png

Using the stage

The stage uses absolute XY coordinates and any positions recorded in micro-manager will always correspond to the same physical location. However, because of this feature, each time we power-up this stage needs to be "homed" before sending any commands. If we try to move it before homing, error message will pop up. Homing is not automatic on startup because during this procedure stage moves to its limits and in may cause one of the objectives to hit the stage frame, if the objective turret is left high enough. This is an issue with any XY stage and the user always needs to make sure that objective turret is in the safe position before homing.

Home procedure

The stage needs to be homed once after each power-up. Homing is not necessary if we just exit and re-start the software without powering down. There are three alternative ways to home the stage. Choose one of the following:

Calibrate command

Open Stage Position List dialog and press "Calibrate" button (menu: Tools | XY List...).


Copy the following script, paste it into the Script Editor (menu: Tools | Script Panel...) and press "Run" button.

// home XY Stage
gui.message("Homing started...");
xyStage = mmc.getXYStageDevice();
x = mmc.getXPosition(xyStage);
y = mmc.getYPosition(xyStage);
gui.message("Done! Home position [um]: " + x + ", " + y);

This script can be saved and stored in the Script-Shortcut list for future use.

Special micro-manager startup script

To automate the process of homing so that you get prompted for it each time you start micro-manager you can use startup scripts. Startup script must reside in the root directory of the micro-manager software and its name is specified in the Options dialog (menu: Tools | Options...). Add the following code to the existing startup script (or create a new one):

// startup script to home Thorlabs BBD102 XY stage
import ij.gui.GenericDialog;

GenericDialog dlg = new GenericDialog("HOME command - XY Stage", null);
dlg.addMessage("WARNING!!! The XY stage is about to move. Make sure objectives are out of the way.\nIf you are in doubt about what to do Cancel this command!");
if (dlg.wasCanceled())
	return false;

gui.message("Homing started...");
xyStage = mmc.getXYStageDevice();
x = mmc.getXPosition(xyStage);
y = mmc.getYPosition(xyStage);
gui.message("Done! Home position [um]: " + x + ", " + y);

Each time you start micro-manager the script will be automatically executed and you will be prompted to home the stage and warned to move objectives to the safe position.

Adjusting motion parameters

Testing and automation

For verification and testing of the stage we can load test configuration MMConfig_Thor_BBD102.cfg supplied with the micro-manager installation. This configuration file contains XYStage tied to the com port and a couple of device simulators (demo adapters) acting as demo camera and focus stage. The configuration probably won't work right away because the COM port on your system may be different. To edit the port information use Hardware Configuration Wizard (menu: Tools) as with any other device.

After the configuration loaded without errors we can use the following script to test the stage:

// Exercise XY stage
import java.text.DecimalFormat;

// obtain xy stage name
xyStage = mmc.getXYStageDevice();


// report starting position
x = mmc.getXPosition(xyStage);
y = mmc.getYPosition(xyStage);
gui.message("Starting position [um]: " + x + ", " + y);

// define test points in um
ArrayList xPos = new ArrayList();
ArrayList yPos = new ArrayList();



DecimalFormat FMT2 = new DecimalFormat("#0.0");

for (int i=0; i<xPos.size(); i++) {
	start = System.currentTimeMillis();
	mmc.setXYPosition(xyStage, (double)xPos.get(i), (double)yPos.get(i));
	end = System.currentTimeMillis();
	gui.message("Reached point " + i + " at (" + xPos.get(i) + "," + yPos.get(i) + ")" + " in " + (end-start) + " ms");

	x = mmc.getXPosition(xyStage);
	y = mmc.getYPosition(xyStage);
	gui.message("Current position [um]: " + FMT2.format(x) + ", " + FMT2.format(y));

© Micro-Manager : Vale Lab, UCSF 2006-2011 | All Rights Reserved | Contact