Sample motor stack

The sample motor stack consists of:

  1. Sample top X – horizontal motion above the rotary stage

  2. Sample top Z – horizontal motion orthogonal to Sample top X, above the rotary stage

  3. Rotary stage – tomography rotation axis

  4. Hexapod – six axes (x, y, z, roll, pitch, yaw)

Sample top X/Z

The X and Z axes above the rotary stage use the Kohzu CYAT-070 crossed-roller alignment stage:

kohzu_cyat070

Kohzu CYAT-070 alignment stage (Sample top X and Z)

Rotary stage

Rotary stages in use:

Station

Description

Model

Image

Controller

Speed (rpm)

Axial load (kg)

Info

2-BM-B

tomo

ABS250MP-M-AS

00004

ENSEMBLEHLE10-40-A-MXH (*)

500

66

box link 0003, box link 0004, order 0005

2-BM-B

fast tomo

ABRS-150MP-M-AS

00004

ENSEMBLEHLE10-40-A-MXH (*)

500

8

box link 0003, box link 0004, order 0006

2-BM-B

spindle

ABS2000-1000AS-RU

00003

ENSEMBLEHLE10-40-A-MXH (*)

6000

18

box link 0001, box link 0002, order 0004

(*) Replaced with ENSEMBLEML10-40-IO-MXH.

Ensemble

The Ensemble parameter setup currently in use at 2-BM is documented in Ensemble Settings.

Parameter

ABRS250MP

ABRS150MP

Units

Fundamental encoder resolution

11840

3600

lines/rev

Encoder scale factor

45

148

Encoder pulses per revolution

532800

532800

pulses/rev

Encoder resolution

0.000675675675676

0.000675675675676

deg/pulse

PSO

Details on Position Synchronized Output (PSO) are provided in the Aerotech Manual.

Hexapod

Available hexapods:

Station

Model

Data sheet

Images

Hardware manual

USB stick delivered

Quote

2-BM

HEX300-230HL-E1-PL4-TAS

hex300_datasheet

hexapod_04

hex300_hw_manual

usb1, usb2

hex300_quote

7-BM

HEX500-350HL-E3-PL4-TAS

hex500_datasheet

hexapod_04

hex500_hw_manual

hex500_quote

EPICS support

Start the hexapod tools on arcturus:

[2bmb@arcturus ~]$ bash
(base) 2bmb@arcturus ~ $ hexapod
Usage: 2bmHXP.pl {caqtdm|console|medm|phoebus|remote|restart|run|start|status|stop|usage}

Launch the caqtdm interface:

(base) 2bmb@arcturus ~ $ hexapod caqtdm
hexapod_control

Hexapod control screen

hexapod_enable

Hexapod enable screen

hexapod_motion

Hexapod motion control screen

Drive error recovery

A controller error can occur if the hexapod is commanded beyond its travel range, causing all axis drivers to disconnect. In this case, the Enable/Fault indicator, normally green, turns off.

hexapod_controller

Hexapod controller. The arrow indicates the Enable/Fault status light.

To recover:

  1. Stop the EPICS IOC controlling the hexapod.

    hexapod_ioc_control

    Hexapod EPICS IOC control

  2. From the Tomo control screen, select PDU 1.

    pdu_selector

    PDU selector

    pdu_web_interface

    PDU web interface

  3. Power-cycle outlet #5 (Hexapod).

  4. Wait approximately 2 minutes, then restart the Hexapod EPICS IOC.

  5. Verify that the controller is enabled.

After a few minutes, the hexapod will restart.

After reboot, all six hexapod axes are homed automatically as part of the reboot procedure — no manual dial adjustment is required.

Per-axis convention: user = dial home + OFFSET. For Y, the dial home is 350 and the OFFSET is -350, so the Y user coordinate reads zero at Y dial 350. Other axes have their own dial home + OFFSET values chosen so their user coordinate at the homed position is sensible for the beamline geometry.

Note

Earlier versions of this page described a “manual dial reset” workflow where the operator had to set the Y dial to 350 by hand after every reboot. That behaviour is obsolete — see the Fixed / obsolete behaviour subsection below for the historical record, or cora issue #597 (HXP-8) for the change record.

Fixed / obsolete behaviour

This subsection preserves the description of a hexapod-reboot quirk that has since been fixed. The workflow below is no longer required; kept here as a reference for anyone reading historical logs or comparing against the pre-fix screens.

Old behaviour (fixed 2026-07-28, cora#597 / HXP-8): after a reboot, all motions homed correctly (dial position and encoder readback both zero) except for Y. For Y:

  • Dial position was reset to zero (red arrow).

  • Encoder readback dial was at 350 (green arrow).

Attempting to move Y in this state would trigger a drive error.

hexapod_y_after_reboot

Hexapod Y after controller reboot (old behaviour — dial reset to 0 while encoder read 350).

The operator then had to set the Y dial manually to 350 before any Y move:

hexapod_y_dial

Hexapod Y dial manually set to 350 after controller reboot (old procedure).

Current behaviour (since 2026-07-28): the reboot procedure homes Y at 350 and sets the user coordinate to 0 automatically, as documented above. No manual dial adjustment is required.