Benchtop Brushless DC Motor Controllers

  • One-, Two-, and Three-Channel Models Available
  • Supports 3-Phase, Brushless DC Servo Motors (5 A Peak Total Output) with Encoder Feedback
  • Direct Front Panel Control or Remote PC Operation


1-Channel Controller


3-Channel Controller

Kinesis® Software GUI

Related Items

Please Wait
Other Brushless DC Servo Controllers
K-Cube™ Single-Channel Controller
BBD302 Rear
Click to Enlarge

BBD302 Front Panel
(Shown Connected to DDS200 Linear Stage and
DDR100 Rotation Stage)

BBD302 Rear
Click to Enlarge

BBD302 Rear Panel


  • Supports Thorlabs' Range of 3-Phase, Brushless DC Servo Motor Products
  • Encoder Feedback for Closed-Loop Velocity and Position Control
  • Front Panel Display and Control to Complement Remote PC Operation
  • AUX I/O Port Exposes RS232 Communications and Digital Input and Output Signals
  • USB and Ethernet Connectivity
  • Supported by the Kinesis and APT Software Control Suites
  • New Features Supported by Kinesis:
    • Synchronized Moves
    • PID Settings
  • Seamless Integration with All Kinesis Family Controllers
  • ActiveX® Software Graphical Panels
  • Compact Controller Footprints (See the Specs Tab for Details)

The BBD300 Series of Brushless DC Motor Controllers are ideal for motion control applications demanding operation at high speeds (hundreds of mm/s) and with high encoder resolution (<100 nm). These controllers offer one, two, or three channels of high-precision motion control for a wide range of applications, particularly microscopy sample manipulation if paired with our MLS203 Series of Dual-Axis Scanning Stages or general motion applications using our 220 mm, 300 mm, or 600 mm translation stages or our direct drive rotation stage. For 19" rack applications, we also offer the RBD201 controller.

Part of our Kinesis family of products, these controllers offer Thorlabs' standard control and programming interface, allowing for easy integration into automated motion control applications. As one of the newest members of the Kinesis family of controllers, these units are backed up by the fully featured Kinesis suite of PC software tools for immediate and easy out-of-the-box configuration and usage. These units are capable of being reprogrammed in-field, allowing the option of upgrading the units with future firmware releases as soon as new programming interfaces (such as microscopy standard command sets) are added.

USB connectivity provides easy plug-and-play PC operation. Multiple units can be connected to a single PC via standard USB hub technology for multi-axis motion control applications. Coupling this with the user friendly Kinesis software allows the user to get reasonably complex move sequences up and running in a short space of time. For example, all relevant operating parameters are set automatically for Thorlabs stage and actuator products. Advanced custom motion control applications and sequences are also possible using the extensive ActiveX® programming environment described in more detail on the Motion Control Software tab. These ActiveX Controls can be incorporated into a wide range of software development environments including LabVIEW, C++, and MATLAB.

Cables for connecting actuators or stages to the controller are shipped with the actuators or stages, not the controller. If you need help identifying the appropriate replacement cable, please contact Tech Support.

Joystick Controller
Click to Enlarge

MJC001 Joystick Console for X-Y Axis Control

Comparison to BBD200 Series Controllers
Our BBD300 series controllers represent a significant upgrade in capabilities compared to our previous-generation BBD200 series controllers. The new front panel enables direct control of attached stages via manual controls and LCD output of key parameters including velocity and position, regardless of whether the unit is connected to a PC. Also, synchronized moves can now be configured in multi-channel versions, enabling advanced contouring movements. Lastly, the user can now control the PID motor settings, allowing adjustments to account for different load inertias and optimization of movement.

Not For Use with Brushed DC Motors
This controller is designed for use with high-power, brushless DC servo motors. For control of the Thorlabs brushed DC servo motor devices, please see the KDC101 DC Servo Motor Driver K-Cube.

Optional Joystick Console
The MJC001 joystick console has been designed for microscope users, to provide intuitive, tactile, manual positioning of the stage. The console features a two axis joystick for XY control. In most applications, the default parameter settings saved within the controller allow the joystick to be used out-of-the-box, with no need for further setup, thereby negating the requirement to be connected to a host PC, and allowing true remote operation.

Item # BBD301 BBD302 BBD303
Number of Channels 1 2 3
Drive Connector 8 Pin DIN, Round, Female
Feedback Connector 15-Pin D-Type, Female
Brushless Continuous Output 2.5 A per Channel, 5.2 A Max All-Channel Total Output
Brushless Peak Output 4.0 A per Channel, 5.2 A Max All-Channel Total Output
PWM Frequency 40 kHz
Operating Modes Position and Velocity
Control Algorithm 16-Bit Digital PID Servo Loop with Velocity and
Acceleration Feedforward
Velocity Profile Trapezoidal/S-Curve
Position Count 32 Bit
Position Feedback Incremental Encoder
Encoder Bandwidth 2.5 MHz (10 M Counts/sec)
Encoder Supply 5 V
AUX Control Connector 37-Pin D-Type Female (User Digital IO, 5 V O/P)
Front Panel Display 4.3" Full-Color LCD, 480 x 272 Pixels
Input Power
250 VA
Voltage: 100 to 240 VAC
Frequency: 47 to 63 Hz
Fuse: 3.15 A
Dimensions (W x D x H) 199.8 mm x 229.1 mm x 108.8 mm
(7.87" x 9.02" x 4.28")
250.0 mm x 279.1 mm x 108.8 mm
(9.84" x 10.99" x 4.28")
350.0 mm x 279.1 mm x 108.8 mm
(13.78" x 10.99" x 4.28")
Mass (Weight) 1.20 kg (2.65 lbs) 1.70 kg (3.75 lbs) 2.20 kg (4.85 lbs)

Front Panel Features

Our BBD300 series controllers can be used to drive attached stages directly via the front panel controls and display, without the specific need of a computer connection and its peripheral software; only a mains power connection is needed, together with electrical connections to each stage. Below is a quick overview of functionality for the BBD301 single-channel controller.

Stage Control Screen (Stationary Stage) Stage Control Screen (Stage in Motion)

PM100D Numeric Display

After start-up and selecting the required channel (for multi-channel controllers), the display provides information on the stage connected to the channel, stage parameters, and status information. The stage can be enabled and homed simply by using the two touch buttons to the left of the screen.

PM100D Numeric Display

During any stage movement (in this case, while homing), the stage can be stopped by pressing the STOP button that becomes highlighted when the stage is in motion. This is useful if there are any unforeseen impediments to motion or the wrong run sequence is initiated.
Motor Parameters Editing Motor Parameters

PM100D Trend Graph Display

Stage travel parameters can be seen at a glance and changed (see next screen).

PM100D Needle Display

Changing any of the set parameters is simple and intuitive, as seen here for stage velocity.
Position Setpoints General Settings

PM100D Pulsed Numeric Display

Under the Teach menu, several position setpoints can be programmed using the knob and touch buttons. Once the stage position has been reached, press and hold the position touch button to record the position to firmware. The stage can then be sent directly to these positions by pressing the touch button next to the position required.

PM100D Pulsed Statistics Display

Screen brightness and knob sensitivity can also be changed. This screen also displays the firmware version, IP address, and controller serial number.


Female DIN Connector


Pin Description Pin Description
1 Motor Phase V 5 Stage ID
3 Temp. Sensor (Not Used) 7 Motor Phase W
4 Motor Phase U 8 Enable


Female D-Type Connector


Pin Description Pin Description
1 Not Connected 9 GND
2 GND 10 Limit Switch +
3 Not Connected 11 Limit Switch -
4 Index - 12 Index +
5 QB - 13 QB +
6 QA - 14 QA +
7a 5 V 15 Not Connected
8a 5 V
  • Pins 7 and 8 are short circuited internally.


Female Mini DIN Connector

Handset Connector

Pin Description Pin Description
1 RX
(Controller Input)
4 Supply Voltage
for Handset 5 V
2 Ground 5 TX (Controller Output)
3 Ground 6 Ground


Female D-Type Connector

37-Pin DIN Male

Pin Description Pin Description Pin Description Pin Description
1 RS232 TX 11 User Digital O/P 11+ 21 +5 V 31 User Digital O/P 4+
2 RS232 RX 12 User Digital O/P 10- 22 User Digital I/P 3 32 User Digital O/P 4-
3 Ground 13 User Digital O/P 10+ 23 User Digital I/P 2 33 User Digital O/P 5+
4 Differential I/P 2+ 14 User Digital O/P 9- 24 User Digital I/P 1 34 User Digital O/P 5-
5 Differential I/P 2- 15 User Digital O/P 9+ 25 User Digital I/P 0 35 User Digital O/P 6+
6 Differential I/P 1- 16 User Digital O/P 8- 26 User Digital O/P 0 36 User Digital O/P 6-
7 Differential I/P 1+ 17 User Digital O/P 8+ 27 User Digital O/P 1 37 Ground
8 User Digital O/P 12- 18 User Digital O/P 7- 28 User Digital O/P 2 - -
9 User Digital O/P 12+ 19 User Digital O/P 7+ 29 User Digital O/P 3
10 User Digital O/P 11- 20 +5 V 30 Ground


Type B USB Female

USB Connector


Female BNC Connector

I/O Connector


Note that currently the APT software does not support synchronized moves and PID settings with our BBD300 series controllers.

Thorlabs offers two platforms to drive our wide range of motion controllers: our Kinesis® software package or the legacy APT™ (Advanced Positioning Technology) software package. Either package can be used to control devices in the Kinesis family, which covers a wide range of motion controllers ranging from small, low-powered, single-channel drivers (such as the K-Cubes™ and T-Cubes™) to high-power, multi-channel, modular 19" rack nanopositioning systems (the APT Rack System).

The Kinesis Software features .NET controls which can be used by 3rd party developers working in the latest C#, Visual Basic, LabVIEW™, or any .NET compatible languages to create custom applications. Low-level DLL libraries are included for applications not expected to use the .NET framework. A Central Sequence Manager supports integration and synchronization of all Thorlabs motion control hardware.

Kinesis Software
Kinesis GUI Screen
APT Software
APT GUI Screen

Our legacy APT System Software platform offers ActiveX-based controls which can be used by 3rd party developers working on C#, Visual Basic, LabVIEW™, or any Active-X compatible languages to create custom applications and includes a simulator mode to assist in developing custom applications without requiring hardware.

By providing these common software platforms, Thorlabs has ensured that users can easily mix and match any of the Kinesis and APT controllers in a single application, while only having to learn a single set of software tools. In this way, it is perfectly feasible to combine any of the controllers from single-axis to multi-axis systems and control all from a single, PC-based unified software interface.

The software packages allow two methods of usage: graphical user interface (GUI) utilities for direct interaction with and control of the controllers 'out of the box', and a set of programming interfaces that allow custom-integrated positioning and alignment solutions to be easily programmed in the development language of choice.

A range of video tutorials is available to help explain our APT system software. These tutorials provide an overview of the software and the APT Config utility. Additionally, a tutorial video is available to explain how to select simulator mode within the software, which allows the user to experiment with the software without a controller connected. Please select the APT Tutorials tab above to view these videos.


Kinesis Version 1.14.36

The Kinesis Software Package, which includes a GUI for control of Thorlabs' Kinesis and APT™ system controllers.

Also Available:

  • Communications Protocol
Software Download


APT Version 3.21.5

The APT Software Package, which includes a GUI for control of Thorlabs' APT™ and Kinesis system controllers.

Also Available:

  • Communications Protocol
Software Download

Thorlabs' Kinesis® software features new .NET controls which can be used by third-party developers working in the latest C#, Visual Basic, LabVIEW™, or any .NET compatible languages to create custom applications.

This programming language is designed to allow multiple programming paradigms, or languages, to be used, thus allowing for complex problems to be solved in an easy or efficient manner. It encompasses typing, imperative, declarative, functional, generic, object-oriented, and component-oriented programming. By providing functionality with this common software platform, Thorlabs has ensured that users can easily mix and match any of the Kinesis controllers in a single application, while only having to learn a single set of software tools. In this way, it is perfectly feasible to combine any of the controllers from the low-powered, single-axis to the high-powered, multi-axis systems and control all from a single, PC-based unified software interface.

The Kinesis System Software allows two methods of usage: graphical user interface (GUI) utilities for direct interaction and control of the controllers 'out of the box', and a set of programming interfaces that allow custom-integrated positioning and alignment solutions to be easily programmed in the development language of choice.

For a collection of example projects that can be compiled and run to demonstrate the different ways in which developers can build on the Kinesis motion control libraries, click on the links below. Please note that a separate integrated development environment (IDE) (e.g., Microsoft Visual Studio) will be required to execute the Quick Start examples. The C# example projects can be executed using the included .NET controls in the Kinesis software package (see the Kinesis Software tab for details).

C Sharp Icon Click Here for the Kinesis with C# Quick Start Guide
Click Here for C# Example Projects
Click Here for Quick Start Device Control Examples
C Sharp Icon

LabVIEW can be used to communicate with any Kinesis- or APT-based controller via .NET controls. In LabVIEW, you build a user interface, known as a front panel, with a set of tools and objects and then add code using graphical representations of functions to control the front panel objects. The LabVIEW tutorial, provided below, provides some information on using the .NET controls to create control GUIs for Kinesis- and APT-driven devices within LabVIEW. It includes an overview with basic information about using controllers in LabVIEW and explains the setup procedure that needs to be completed before using a LabVIEW GUI to operate a device.

Labview Icon Click Here to View the LabVIEW Guide
Click Here to View the Kinesis with LabVIEW Overview Page
Labview Icon

The APT video tutorials available here fall into two main groups - one group covers using the supplied APT utilities and the second group covers programming the APT System using a selection of different programming environments.

Disclaimer: The videos below were originally produced in Adobe Flash. Following the discontinuation of Flash after 2020, these tutorials were re-recorded for future use. The Flash Player controls still appear in the bottom of each video, but they are not functional.

Every APT controller is supplied with the utilities APTUser and APTConfig. APTUser provides a quick and easy way of interacting with the APT control hardware using intuitive graphical control panels. APTConfig is an 'off-line' utility that allows various system wide settings to be made such as pre-selecting mechanical stage types and associating them with specific motion controllers.

APT User Utility

The first video below gives an overview of using the APTUser Utility. The OptoDriver single channel controller products can be operated via their front panel controls in the absence of a control PC. The stored settings relating to the operation of these front panel controls can be changed using the APTUser utility. The second video illustrates this process.

APT User - Overview
APT User - OptoDriver Settings

APT Config Utility

There are various APT system-wide settings that can be made using the APT Config utility, including setting up a simulated hardware configuration and associating mechanical stages with specific motor drive channels. The first video presents a brief overview of the APT Config application. More details on creating a simulated hardware configuration and making stage associations are present in the next two videos.

APT Config - Overview
APT Config - Simulator Setup
APT Config - Stage Association

APT Programming

The APT Software System is implemented as a collection of ActiveX Controls. ActiveX Controls are language-independant software modules that provide both a graphical user interface and a programming interface. There is an ActiveX Control type for each type of hardware unit, e.g. a Motor ActiveX Control covers operation with any type of APT motor controller (DC or stepper). Many Windows software development environments and languages directly support ActiveX Controls, and, once such a Control is embedded into a custom application, all of the functionality it contains is immediately available to the application for automated operation. The videos below illustrate the basics of using the APT ActiveX Controls with LabVIEW, Visual Basic, and Visual C++. Note that many other languages support ActiveX including LabWindows CVI, C++ Builder, VB.NET, C#.NET, Office VBA, Matlab, HPVEE etc. Although these environments are not covered specifically by the tutorial videos, many of the ideas shown will still be relevant to using these other languages.

Visual Basic

Part 1 illustrates how to get an APT ActiveX Control running within Visual Basic, and Part 2 goes on to show how to program a custom positioning sequence.

APT Programming Using Visual Basic - Part 1
APT Programming Using Visual Basic - Part 2


Full Active support is provided by LabVIEW and the series of tutorial videos below illustrate the basic building blocks in creating a custom APT motion control sequence. We start by showing how to call up the Thorlabs-supplied online help during software development. Part 2 illustrates how to create an APT ActiveX Control. ActiveX Controls provide both Methods (i.e. Functions) and Properties (i.e. Value Settings). Parts 3 and 4 show how to create and wire up both the methods and properties exposed by an ActiveX Control. Finally, in Part 5, we pull everything together and show a completed LabVIEW example program that demonstrates a custom move sequence.

APT Programming Using LabVIEW -
Part 1: Accessing Online Help
APT Programming Using LabVIEW -
Part 2: Creating an ActiveX Control
APT Programming Using LabVIEW -
Part 3: Create an ActiveX Method
APT Programming Using LabVIEW -
Part 4: Create an ActiveX Property
APT Programming Using LabVIEW -
Part 5: How to Start an ActiveX Control

The following tutorial videos illustrate alternative ways of creating Method and Property nodes:

APT Programming Using LabVIEW -
Create an ActiveX Method (Alternative)
APT Programming Using LabVIEW -
Create an ActiveX Property (Alternative)

Visual C++

Part 1 illustrates how to get an APT ActiveX Control running within Visual C++, and Part 2 goes on to show how to program a custom positioning sequence.

APT Programming with Visual C++ - Part 1
APT Programming with Visual C++ - Part 2


For assistance when using MATLAB and ActiveX controls with the Thorlabs APT positioners, click here.

To further assist programmers, a guide to programming the APT software in LabVIEW is also available here.

Posted Comments:
Vytautas Jakstas  (posted 2022-09-07 09:56:40.747)
Hi. We would like to operate three translation stages (type: DDS300/M and/or DDS220/M) at a time. Can we use a single BBD303 controller for all three of the stages?
DJayasuriya  (posted 2022-09-07 10:51:35.0)
Thank you for your feedback. Yes that is correct. The BBD303 has 3 channels that controls 3 brushless stages. Please get in touch with your local techsupport team if you have any questions, we would be happy to help.
user  (posted 2022-08-18 20:41:23.68)
Hi thorlabs, can BBD302 be used to control the galvo like GVS012?
DJayasuriya  (posted 2022-08-18 09:51:58.0)
Thank you for your inquiry. Unfortuantely the BBD302 would not support the GVS012. For the GVS012 you would need a DAQ card or a function generator. Please see chapter 4 on our manual (htps:// If you have any questions please do not hesitate to get in touch with your local tech support team.
Fu Kai-Jun  (posted 2022-06-29 15:51:28.873)
Hi,i am using BBD301 with DDS220.My product number is 103228554I want to use a trigger signal to trigger DDS220 but it didn't Work. I had used Kinesis set BNC1 = input in the Baseunit page.Then in Channel 1 trigger page I set input mode:home sorce:BNC1 polarity:high.
cwright  (posted 2022-06-29 09:10:34.0)
Response from Charles at Thorlabs: Thank you for contacting us. I will reach out to you to assist with troubleshooting. The configuration is correct and I have verified this works with the latest firmware (1.01.06). It is likely the device is disabled or there is a fault with the triggering method.
suraj somwanshi  (posted 2022-05-12 18:34:41.73)
Hi, I am using BBD302 controller with MLS203 stage, and wanted to understand trigger output feature. Can you please send me few sample codes on configuring and running XY stage with trigger output at fixed intervals? Best Regards, Suraj S.
cwright  (posted 2022-05-13 05:30:56.0)
Response from Charles at Thorlabs: Thank you for contacting us. The BBD30x series does have additional triggering options which may benefit from an example. We will look at putting together a short example and will reach out to you about this.
suraj somwanshi  (posted 2022-04-05 19:34:32.277)
Hi, We are using BBD 303 with MLS203 XY stage. We are experiencing intermittent channel disable issue. After this, we are not able to home the channel. We tried upgrading both firmware and software to latest version as well but still issue remains. URGENT help greatly appreciated. Best Regards, Suraj S. VP Product Engineering OptraSCAN
cwright  (posted 2022-04-05 08:52:29.0)
Response from Charles at Thorlabs: Thank you for contacting us. A member of technical support will reach out to help with troubleshooting. Your local technical support team can also be contacted directly using the details at the following link:
Noah Kolodziejski  (posted 2022-02-11 10:26:45.3)
I would like to know if these controllers have fans inside? Our assembly will be delivered to a clean room and fans are prohibited.
cwright  (posted 2022-02-14 06:27:34.0)
Response from Charles at Thorlabs: Hello and thank you for your query. These controllers do include two 60 mm x 60 mm fans inside the case.
Klaus Bartl  (posted 2022-01-12 05:04:23.41)
I'm controlling a DDR100/M rotation stage connected to a BBD301. I'm using the "Host-Controller Communications Protocol" like described in Issue 29 (2021-10-20). Everything works fine. Now I want to use time-position arrays (commands 0x0980, 0x0983, 0x0986). But after loading the data, setting the (cycling) parameters and sending SYNCHSTART nothing happens. The stage is not moving at all. Is there a possibility to check, if the data has been loaded correctly? It's a bit unclear and ambiguously described where indices (ArrayID, StartIx, CycleStartIx, CycleEndIx) start. Are they 0-based ore 1-based?
cwright  (posted 2022-01-14 04:40:23.0)
Response from Charles at Thorlabs: Thank you for your query. I will reach out to you directly to discuss this in detail. It appears the command protocol may have a couple of documentation errors which are likely causing confusing. An update will be released shortly.
Michael Giacomelli  (posted 2021-07-13 16:27:17.53)
Does the BBD302 still expose the quadrature encoder outputs on the AUX connector like the BBD202? The manual mentions QA, QB and IX/Ref, but they're not listed on the pinouts.
cwright  (posted 2021-07-15 10:26:46.0)
Response from Charles at Thorlabs: Hello and thank you for your query. Yes, this is still possible. The QA, QB and IX signal from the BBD302 are accessible through the AUX IO D-Type connector. There are differential outputs (“Digital O/P 4+/4-“ to “Digital O/P 12+/12-“) which output the QA, QB and IX signals by default.
Suraj Somwanshi  (posted 2021-07-01 16:43:58.507)
We were earlier using BBD200 series controllers with MLS 203 stages. We intend following functionality which was available in earlier BBD200 series and would like to know if this can be achieved in BBD302 controllers. Using user I/O port, we could readout encoder positions on our micro-controller based board using differential pins (QA,QB and Index). We technically use this to read the position and generate trigger output at certain position intervals. We would like to know if this can be achieved in BBD302 controller AUX I/O output signals. Once you confirm this, we would like to place order for two units immediately.
jcater  (posted 2021-07-02 06:12:24.0)
Response from Jack at Thorlabs: Thank you for your inquiry. It is possible to read the QA, QB and IX signal from the BBD302's AUX I/O connector. There are 9 differential outputs on the 37-way D-type connector (the pairs “Digital O/P 4+/4-“ to “Digital O/P 12+/12-“). These are configurable and by default they output the QA, QB and IX signals corresponding to the 3 motor channels.
Spencer Nelson  (posted 2021-02-16 12:01:58.88)
equip: Controller BBD201, Stage DDS300 Using a terminal communication app, the only command that I can get a responses is MGMSG_HW_REQ_INFO 0x0005. Any suggestions?
DJayasuriya  (posted 2021-02-17 09:09:58.0)
Thank you for your inquiry. On a BBD, REQ_INFO would take 0x11 (the motherboard) as the destination byte, other commands, such as the REQ_VELPARAMS would take the channel slot as the destination byte, 0x21, 0x22, 0x23. If you have used 0x11 as the destination byte for REQ_VELPARAMS there would be no response. Hope this helps. If you have any other questions your local tech support team will be happy to help.
Soyeon Kim  (posted 2020-06-09 03:43:25.61)
I followed a guideline for BDD 202 motor, but I had a problem with Issettingsinitialized method. I couldn't wire those with previous one. Could you tell me how I can do this? Plus can i open example file without upgrading labview?
cwright  (posted 2020-06-11 04:05:11.0)
Response from Charles at Thorlabs: Hello and thank you for your query. I will need to see your VI so I will reach out to you directly to diagnose the issues you are experiencing. An older version of Labview cannot open a file created for a recent version but they can be saved for compatibility with some older versions. I can help you with this when I reach out to you.
Min Kim  (posted 2020-05-29 16:07:06.787)
I am having trouble with connection between BBD202 (connected with MLS203) and micromanager. It seems MLS203 recognized as BD102. Could you kindly let me know how I can change it to MLS203 so that I can control XYstage? Please let me know. Thank you.
DJayasuriya  (posted 2020-06-01 09:38:42.0)
Thank you for your inquiry. We will get in touch directly to resolve your issue.
Mathias Hüne  (posted 2019-11-15 09:44:21.103)
Hi, I want to trigger the controller externally with a digital trigger. In the APTUser software, I set the Input trigger on my desired trigger behaviour (e.g rel move on rising edge) and this works so far. But unfortunately I can not figure out, how I set the distance. In the manual it is written, that the last value from move_rel is used. But either in my APT based python software nor in the APTUser software I have this command. So how can I set this value? I have also tried the Kinesis software, where I also can enable the Trigger. But this did not work at all. Do you have an idea or an example?
cwright  (posted 2019-11-22 09:44:00.0)
Response from Charles at Thorlabs: Hello Thank you for contacting us. The relative move distance is not available through APT’s GUI and must be set through ActiveX controls or serial commands. I will reach out to you directly to help troubleshoot your program.
user  (posted 2019-07-02 12:31:40.44)
Hi, I am having some issues getting this recognized in uManager. I see below that someone else requested some support. Any idea hints as to how to get this the BBD202 recognized? Many thanks for your help. A
AManickavasagam  (posted 2019-07-04 09:46:42.0)
Response from Arunthathi at Thorlabs: Thanks for your query. We will contact you directly with the documentation that might help set up the controller correctly in Micromanager.
Ekin Kocabas  (posted 2019-04-24 19:14:01.243)
Hello, I'm developing a python wrapper for the Kinesis C API to connect to BBD202 with two DDS220 stages in XY configuration. I had the following questions/comments. Current Setup ------------- * Windows 10 64 bit * Using Kinesis Version 1.14.16 C API (64 bit) * Two DDS220 stages connected as XY to a BBD202 controller * Python wrapping via ctypes, homing and basic motion commands implemented Questions/Comments ------------------ 1) TLI_DeviceInfo Struct Reference in Thorlabs.MotionControl.C_API.chm file does not match the definition in the Thorlabs.MotionControl.Benchtop.BrushlessMotor.h file. For instance, in the chm file TLI_DeviceInfo has a field called "maxPaddles" which is absent in the header file. 2) Why does the example code under BMC_Open checks for BMC_Open(serialNo) != 0 to execute the contents of the if statement? Does running BMC_LoadSettings and BMC_StartPolling automatically connect to the controller? 3) Without a BMC_LoadSettings call, position related functions such as BMC_GetRealValueFromDeviceUnit or BMC_GetMotorParamsExt do not work. Are there other inter-functional dependencies? It would be great to have those reflected in the documentation. 4) I try to use BMC_SetLimitsSoftwareApproachPolicy and BMC_SetMotorTravelLimits functions to limit motion by the stages, but BMC_MoveToPosition function overrides the travel limits. What is the proper way to limit the travel range for the DDS220 stages through the C API?
rmiron  (posted 2019-04-25 04:27:22.0)
Response from Radu at Thorlabs: Hello, Ekin. Thank you for taking the time to bring these issues to our attention. I have relayed your feedback internally such that our C_API documentation gets improved. I will try to address your points in order. 1) maxPaddles is a parameter of the TLI_DeviceInfo struct defined in Thorlabs.MotionControl.Polarizer.h. That is why it is mentioned in the .chm file. 2) BMC_Open is the function call which connects the controller to the PC. By checking whether the call returned 0, one is effectively checking whether the connection was initialised successfully. I advise you to add an else statement which prints the returned value (the error code) in case there are any connection issues. 3) Without a BMC_LoadSettings call, the PC does not know what motor parameters to use for conversions between real and device units. Every other method which requires such knowledge will be negatively affected. There are many other similar inter-functional dependencies (some functions need to be called before others in order for the code to run successfully) that are not documented. I agree that this situation needs to be amended. 4) I will contact you directly in order to check whether you have identified a bug, or whether the custom limits get overridden by a different function call. If it is a bug, we will fix it by the next software release. In the meantime, you could bypass the problem by amending your code such that it checks whether a stage has been ordered to move outside of this custom travel range.
aurelien.duboin  (posted 2018-03-21 11:07:26.443)
Good morning, I'm trying to run a MLS203 stage with a BBD202 Controller under Micromanager (build 1.4.23). When using the Thorlabs device adapter library I can connect the controller through a virtual COM, however then the stage moves only along X axis and the delay between 2 moves is approx 10s. The other adapter Thorlabs APTstages appears unavailable in the Hardware configuration wizard of Micromanager despite I'm copying the APT.dll in Micromanager folder. The stage is working fine under Metamorph on the same computer. Can you confirm which adapter I need to use under Micromanager ? Do I have to use APTconfig first to configure the controller ? Many thanks in advance, Best regards
bhallewell  (posted 2018-04-05 04:24:35.0)
Response from Ben at Thorlabs: I will contact you to see if I can assist you. Please note that Micromanager is an Open Source program and so it is possible that changes have been made to the program which is forcing this to not function correctly. It may be worth trying to use an older version of Micro-Manager (1.4.21) where we previously contributed to fixing issues with motor stage movement and XY stage initialization.
davide.musiari  (posted 2017-06-01 17:24:56.09)
Good afternoon, I'm trying to create a c++ program allowing me to control the 2 DDS220 stages through the BBD202 controller. I'm succeeding in importing the .h files and the other libraries, but I don't undestrand how to implement functions, such as motortype. Furthermore, I'm looking for the commands that gives the possibility to communicate with the controller. May you send me an easy example of c++ implementation? kind regards
bhallewell  (posted 2017-06-09 06:03:35.0)
Response from Ben at Thorlabs: The motor type for BBD202 is selected on controller start-up & therefore shouldn't need to be selected. We have some video tutorial resources for controlling our Motion Control hardware through ActiveX controls via use of our APT software package as well as C# .NET managed examples for the BBD202 via our Kinesis package. APT methods are defined in the APT Server help file from the APT software download & Kinesis methods outlined within the .NET API from the Kinesis download. Kinesis is our latest version of software which we would recommend use of. Kinesis Examples Download area (see - BBD Console Managed). Note - To query the Stage settings, you can refer to methods outlined in Thorlabs::MotionControl::GenericMotorCLI::Settings::MotorDeviceSettings from the .NET API guide. APT Visual C++ Tutorials
simone.decataldo  (posted 2017-05-11 11:57:15.81)
Good morning, We purchased two DDS220 translation stages with its specific control drive BBD202. We manage to move indipendently the 2 linear stages, but now we are facing a problem: we are not able to connect the 2 linear motors and give them simultaneous operations. We believe that the solution is in the APTUser Application, but we haven't found yet; then we hope to receive some technical advice from you. kind regards
bhallewell  (posted 2017-05-22 08:18:59.0)
Response from Ben at Thorlabs: Thank you for your feedback. It is unfortunate to hear that these devices are not currently meeting your expectations. I'll contact you directly to see if I can assist you.
eliana.cordero  (posted 2017-02-14 09:11:45.33)
The APT available to install does not content the BBD202 control unit which enables me to stablish the communication with the controller and the platform. also the Kinetics software does not work, I get a message that indicates that the applciation is going to close and that I should revew the error log. I would appreciate if any solution is suggested. Kind regards, Eliana Cordero
bwood  (posted 2017-02-15 11:13:18.0)
Response from Ben at Thorlabs: I am sorry to hear about your difficulties connecting our BBD202 controller to your computer. This question will likely require additional troubleshooting, so I will be in contact with you directly. However, one piece of advice I can give is that the "Firmware Update Utility" included with APT and Kinesis, is a good tool to use for initial communications troubleshooting. If your controller appears in the utility, that means that basic USB communications have been established with the controller.
chiwon.lee  (posted 2016-11-02 11:27:35.76)
Hello, I'm using BBD01 controller. On trying to do labview programming, I have a problem that my labview sub-vi doesn't communicate with the controller. The error message says that "A software call has been made to a control which is not currently communicating with any hardware. This may be because the control has not been started or due to incorrect serial number or missing hardware.". The serial number that I put on my sub-vi is the same with the one used in the APT User software. The controller is working well through the APT User, but not through the labview.
bhallewell  (posted 2016-11-03 10:00:04.0)
Response from Ben at Thorlabs: I will contact you directly to help you with using APT with LabVIEW. A number of web-based resources including examples, a help guide & video tutorials can be found in the following link.
okirfan  (posted 2016-10-21 08:01:56.927)
I want to use BBD203 (along with DDS 220) with lockin amplifier SR830, I don't know where to connect SR830 in this Assembly. Also, previously I used newport stuff. Can you provide program for pump probe spectroscopy with these? thanks
msoulby  (posted 2016-10-25 06:35:37.0)
Response from Mike at Thorlabs: We will contact you directly to discuss your application
jwlee  (posted 2016-07-02 03:44:20.337)
I tried to install APT software 32bit in my PC(windows enterprise 64bit). Another computer completely installed but my PC dosen't installed and error massage below, ##IDS_DIFX_X86##. So please, resolve this problem.
bhallewell  (posted 2016-07-04 06:37:15.0)
Response from Ben at Thorlabs: Thank you for your response here. Please ensure that you are downloading & installing either the 32-bit for 64-bit OS version of APT or the full 64-bit software package. I would also recommend trying our new Kinesis software package, which includes such benefits as an improved Sequence Manager & improvements to connectivity sensitivities that exist within the older APT framework. This is also free to download & install from the above link.
balaji  (posted 2015-09-24 22:28:15.08)
Hi I have been using a range of APT software driven instruments such as TDC controller, BBD002 servo controller etc., I want to point out that there is some issue with 64 bit software for 64 bit platform. The 32 bit for 64 bit works fine. Secondly and more importantly we have been trying to shift to using USB/serial communication while I have been able to list the com port after enabling Load VCP in the advanced tab of the driver. However having hard time sending commans through serial terminal software such as commdebug, real term etc., They all recogonise the com port but the device is totally unresponsive left to wonder if there is some way to test the communication and if we need to use a FTDI library to issue a write command rather than through terminal software
msoulby  (posted 2015-09-28 10:14:12.0)
Response from Mike at Thorlabs: The VCP setting should be set up as follows. Baud rate = 115200; Flow control = RTS/CTS; Bits per word = 8; Number of stop bits = 1; Parity = NONE. We have contacted you directly with the latest version of the communications protocols for our motion control products and also some brief instructions on how to use this is a terminal emulator, in this case Termite. Using the identify command MGMSG_MOD_IDENTIFY (0x0223) is a good way to check you have established communication with the controller, this command will flash the front panel LEDs of the addressed controller.
yannick.dmello  (posted 2014-07-28 11:42:54.91)
I am using the BBD203 to drive a translation stage and we have encountered two issues: 1. The controller seems to power off if left idle for over a few minutes, this is very inconvenient for remote controlled operation and I have not yet found a fix. I am using two controllers and only one of them has this issue. Can this setting be changed? 2. The translation stage does not move in exactly 0.1um precision though the software claims it does. How exactly can this be calibrated? Thank you
msoulby  (posted 2014-07-29 06:24:12.0)
Response from Mike at Thorlabs: (1) The controller should not power off after just five minutes, I suspect that there could be an issue with that controller especially in light of the fact that your second controller seems to operate correctly. We will need to get the controller back for evaluation/repair. Our US office will be in contact with you shortly regarding this. (2) The brushless DC motors all make use of a linear encoder to give feedback from the stage to the controller to obtain the correct position, we are confident that the encoder gives the correct distance travelled. This closed loop system uses a PID control loop to control how the stage reaches the final position, these PID settings can be tuned in the settings panel of APT to suit different customer applications to account for load, acceleration, speed, move size, etc.. As you are using such a small move size it will be worth taking a look through the BBD203 manual for more details on the settings and how they affect stage movements, the manual can be viewed here
ilr  (posted 2014-07-01 20:46:15.93)
Hello again. Did you manage to find a workaround to access motor's serial number from the controller? We are considering making a comercial product based on your BBD controller and MLS motors. Obviously, we would like to protect our product from being purchased once, but used on many setups with the same controller (just by replugging cables). So a workaround will be very much appreciated!
msoulby  (posted 2014-07-03 10:28:15.0)
Response from Mike at Thorlabs: Unfortunately there is no work around for this. Our controllers can often operate with a number of stage variants which is why we have the APT config utility so that the user can assign each controller serial number to a certain stage or axis. This controller serial number is how each stage is identified in APT. This means that the controller is not limited to using just one type of stage. However this does mean that attention needs to be paid to how the cables are connected to ensure you assign the correct axis to that particular channel.
ilr  (posted 2014-01-22 02:42:11.16)
Thank you again for the explanation, Mike! Since HWSerialNum is a property from the MG17Motor control, I thought I was setting up a motor's S/N, but now I see what you mean. I would really appreciate any workaround.
ilr  (posted 2014-01-20 17:46:58.493)
Thank you for your reply, Mike! I am a bit confused now, even though I have programmed fully one setup. Does the motor serial number belong to the controller or to the translation stage (MLS203)? I am asking because I would like to programmatically bind a translation stage to a particular controller, so that one cannot plug another (but same model) stage to a given controller. I was thinking to use controller's S/N together with motor's S/N. Is that possible?
msoulby  (posted 2014-01-21 05:00:24.0)
Response from Mike at Thorlabs: There is a motor serial number and this is read by the BBD202 controller, however as this is not generally required we did not develop an ActiveX method to help expose this. The only serial numbers you can use will be the serial numbers of the controller channels and not the motor. As the APT server does not see the motor it only sees the controller then each serial number needs to be configured to a particular stage before run time in our APT config utility. The APT config utility sets parameters used by the APT server specific to the stage you are using, for example travel length, max velocity, max acceleration, etc… these settings are all stored in the APTServer.ini file in the windows directory. As the APT server does not see the motor it is not possible to set a controller to a specific motor; currently the only way would be to ensure the same channel and stage have their connectors clearly labelled. We are however looking to see if there might be a workaround to access this value from the controller and we will contact you directly with our findings.
ilr  (posted 2014-01-18 17:09:14.277)
I am using BBD202 controller and two motors with my own software to make 2D scans. To enumerate the motors and get their serial numbers, I use the technique described in the manual. In particular, I use MG17System object and its methods GetNumHWUnits and GetHWSerialNum. Those serial numbers are then used with MG17Motor to address the particular motor. Now I would like to buy one more BBD202 controller, which will be controlled simultaneously with the same software (my own). How do I distinguish between the two controllers? I know that they have different serial numbers, but I could not find any reference in the manual saying how I can obtain this serial number and then use with the MG17System object to talk to the proper controller. Is it possible to operate two BBD202 controllers simultaneously that are connected on the same USB bus?
msoulby  (posted 2014-01-20 09:25:25.0)
Response from Mike at Thorlabs: Yes it is possible to use two controllers simultaneously on the same USB bus. The only way to address each individual channel is to use the HWSerialNum ActiveX property from the MG17Motor control. The correct serial number can be found above each channel on the rear panel of the BBD202 controller. Each controller will have the same hardware type but will have a unique set of serial numbers allowing each channel to be easily recognised; each channel will need its own instance of the MG17Motor.ocx control.

Based on your currency / country selection, your order will ship from Newton, New Jersey  
+1 Qty Docs Part Number - Universal Price Available
BBD301 Support Documentation
BBD301Customer Inspired! 1-Channel Benchtop 3-Phase Brushless DC Servo Controller
BBD302 Support Documentation
BBD302Customer Inspired! 2-Channel Benchtop 3-Phase Brushless DC Servo Controller
BBD303 Support Documentation
BBD303Customer Inspired! 3-Channel Benchtop 3-Phase Brushless DC Servo Controller
MJC001 Support Documentation
MJC0012-Axis Microscopy Joystick Console