Operating a Variable Delay Line

This page describes how Standard OEM laser engines and Axsun Integrated Engines can operate a miniature motorized Variable Delay Line (VDL) if the optional driver electronics are installed.

Before you Begin

Insure these prerequisites are met before using the VDL optical module per the instructions listed below:

VDL Optical Module Installation

With the Laser Engine powered OFF, plug the VDL optical module's electrical connector into the corresponding receptacle on the Laser driver board. The beige 2x5-pin VDL connector is unique and can only be plugged into one receptacle on the Laser driver board. Also connect the VDL module's fiber connector(s) to your optical network as desired.

Beige 2x5-pin VDL electrical connector plugged into a Laser driver board.

Power ON the Laser Engine. Confirm successful connection between the Laser Engine and the host PC via OCT Host or the Hardware Control Tool. For example OCT Engine (i.e. the laser driver board) will be listed in the Connected Boards: indicator in the lower left region of the OCT Host window:

OCT Engine connection as shown in the OCT Host window

VDL Operation

Adjustment of the optical delay provided by the VDL optical module is acheived by movement of a retroreflector mounted on a carriage actuated linearly by a stepper motor turning a lead screw. The user sends commands to the Laser driver board microcontroller firmware which then controls the stepper motor motion.

There is no linear encoder present, hence the controller firmware must register itself with the actual physical position of the carriage by moving it to one extreme until it triggers a limit switch. This process is called homing or zeroing the VDL. Once the VDL has been homed, the firmware tracks the carriage position by accumulating all issued steps in the positive and negative directions. The homed position is considered the 0.00 mm delay point.

IMPORTANT! For accurate motion control of the VDL, the homing operation must be performed after each power-on cycle of the Laser driver board (i.e. any time the firmware is rebooted).

Commands to a) go home, b) move to an arbitrary position within the total range, and c) get the current VDL position are available in the Axsun GUI Tools (OCT Host or the Hardware Control Tool) or can be sent by a user's custom application using either the AxsunOCTControl_LW or AxsunOCTControl APIs:

OCT Host
Hardware Control Tool
AxsunOCTControl_LW API
AxsunOCTControl API

VDL controls on the OCT Host GUI are located on the VDL Motor tab. Buttons and input fields are provided to Home the VDL, Move it in a Relative or Move it in an Absolute fashion by a desired distance, or Stop VDL motion in progress. The current status of the VDL is also shown. Any requests to move the VDL to a position which is outside of its allowable delay range (0 to 15 mm) will be ignored.

OCT Host window showing VDL Motor tab and associated VDL controls and indicators.

VDL controls on the Hardware Control Tool GUI are located on the Miscellaneous tab. The GO HOME button homes the VDL and adjustment of the numeric VDL Position (mm) control field immediately commands the VDL to move to the requested absolute position.

Hardware Control Tool window showing Miscellaneous tab and VDL controls.

Before operating the VDL, please read the general instructions on using the AxsunOCTControl_LW API in your custom application.

See the AxsunOCTControl_LW function reference for details on calling the functions discussed here.

Homing the VDL

The VDL Homing operation must be performed for each power-on cycle of the Laser Engine board by calling axHomeVDL(). The carriage is moved in the negative direction until it reaches the home limit switch and then backs off the switch slightly. All subsequent motion within the delay range is referenced to this 0.00 mm position. This function returns after requesting the homing operation from the VDL controller; it does not wait for the mechanical homing operation to complete before returning.

Moving the VDL to a Desired Position

The VDL can be moved in a relative fashion (positive or negative displacement from the current position) with axMoveRelVDL(..) or in an absolute fashion (directly to a fixed position within the delay range) with axMoveAbsVDL(..). Any requests to move the VDL to a position which is outside of its allowable delay range (0 to 15 mm) will be ignored. These functions return immediately after requesting the the move operation from the VDL controller; they do not wait for the requested move operation to complete before returning.

Querying the Status of the VDL

The status of the VDL hardware can be queried or polled with axGetVDLStatus(..), providing information useful especially during a home or move operation, such as: instantaneous position and speed, target position for the current move, and limit switch state. After issuing a home or move command, poll this function to determine if the operation has completed or failed with an error.

Stopping the VDL

A VDL operation in progress can be stopped immediately using axStopVDL(). This function returns after requesting the stop operation from the VDL controller; it does not wait for the mechanical operation to stop before returning.

Before operating the VDL, please read the general instructions on using the AxsunOCTControl API in your custom application.

Homing the VDL

The VDL Homing operation must be performed for each power-on cycle of the Laser driver board. The carriage is moved in the negative direction until it reaches the home limit switch and then backs off the switch slightly. All subsequent motion within the delay range is referenced to this 0.00 mm position. This method returns after requesting the homing operation from the VDL controller; it does not wait for the mechanical homing operation to complete before returning.

uint HomeVDL() // returns 0 (success) or error code

Moving the VDL to a Desired Position

The VDL can be moved in a relative fashion (positive or negative displacement from the current position) or absolute fashion (directly to a fixed position within the delay range). Any requests to move the VDL to a position which is outside of its allowable delay range (0 to 15 mm) will be ignored. These methods return immediately after requesting the the move operation from the VDL controller; they do not wait for the requested move operation to complete before returning.

uint MoveRelVDL( // returns 0 (success) or error code
float Position, // distance to move relative to the current position (mm)
float Speed) // the speed at which to move (mm/sec)
uint MoveAbsVDL( // returns 0 (success) or error code
float Position, // the desired position (mm) in absolute terms
float Speed) // the speed at which to move (mm/sec)

Querying the Status of the VDL

The status of the VDL hardware can be queried or polled, providing information useful especially during a home or move operation, such as: instantaneous position and speed, target position for the current move, and limit switch state. After issuing a home or move command, poll this method to determine if the operation has completed or failed with an error.

uint GetStepperStatus( // returns 0 (success) or error code
ref float Position, // current position (mm)
ref float Target, // target position (mm) during a move operation
ref float Speed, // current speed (mm/sec) during a move operation
ref uint State, // 1 = idle,
// 2 = moving,
// 3 = seeking home,
// 4 = backing off home,
// 5 = at home,
// 10 = error state
ref bool HomeSwitch, // indicates if the home switch is tripped
ref bool LimitSwitch, // indicates if limit switch is tripped (far end of travel)
ref int ErrorFromLastHome, // error accumulated since last Home operation (in motor microsteps)
ref uint LastMoveTime, // time (sec) taken by the last issued move command
ref uint Error) // firmware error code (0 if no error)

Stopping the VDL

A VDL operation in progress can be stopped immediately using StopVDL(). This method returns after requesting the stop operation from the VDL controller; it does not wait for the mechanical operation to stop before returning.

uint StopVDL() // returns 0 (success) or error code