|
CHESS Optical Table
Introduction
A set of macros has been written to accommodate the need for users running
Spec to be able to move the CHESS optical tables. These macros provide for
the six degrees of freedom that the optical table can have: three linear
translations and three rotations. By properly defining the motor
configuration for the table, the user can specify the orientation and ensure
that the motions are correct.
Setting up the optical table
The coordinate system of the optical table is defined as shown in Fig. 1
below. We define the Y-axis such that it is parallel to the beam and such
that increasing Y corresponds to increasing distance from the source. The
Z-axis is normal to the surface plate and positive Z represents height above
the table surface. The positive X-axis is then defined such that the three
form a right-handed coordinate system. As shown in figure 2, the origin is
defined to be the midpoint of the line drawn from Jack C to the midpoint of
AB, and lying in the plane of the surface plate.

Each table is equipped with six
separate motors mounted on three jacks, one jack having a single motor, one
having two motors, and one having three motors. We call these Jacks A, B and
C respectively, and their locations on the table are shown in Fig. 2. It is
assumed that the three jacks are located at the vertices of an isosceles
triangle having the line from Jack A to Jack B as its base. These jacks may
be oriented in any one of four ways with respect to the beam, as per Fig. 3.
The mnemonic that is assigned to a motor is dependent upon which orientation
of the table is being used. It is crucial that the correct mnemonics are
placed in the config file, as the macros sense the orientation of the table
from the defined motors. It is possible to omit motors from the
description—for instance if there is a shortage of unused E500 channels—but
this will reduce the number of degrees of freedom. It is also possible to
hard-wire the Z-motors on Jacks A and B together, and such configurations
are defined by using the mnemonics indicated with asterisks in Fig. 3.
Once the motors have been defined,
each must be checked to ensure that its movement is in accordance with the
directionality shown in Fig. 1, i.e. that moving the motor in a positive
direction translates the table surface plate in the direction of the
corresponding positive-going axis. If this is not the ease, the sign of the
steps-to-units conversion must be changed in the config file.

The mnemonics given to the motors
derive from the motion they control and from their position on the table as
viewed from the downstream end facing upstream. Thus, ‘zrd’ would
refer to a motor that drives a Z-motion and is situated at the right,
downstream corner of the table. Sometimes the Z-motors on Jacks A and B may
be hard-wired together; in that case, use the mnemonics indicated with
asterisks above.
Setting up the
macros
Before any of the optical table macros can be run, it is necessary is to
type
define_table. This runs a command
procedure that determines the table orientation from the motors that are
defined.
define_table must be run any time one
wishes to change the units of the table angles or to change the rotation
point. It must also be run any time that the table orientation is altered.
The user is asked if either a
six-circle diffractometer or a custom optical table is being used. If
neither of these is indicated, then it assumed that a standard CHESS optical
table is to be utilized. The dimensions of both the six-circle
diffractometer and the standard table surface plates are contained in the
macros, but the user must enter the dimensions of any other surface plates
by giving values for Kx, Ky, and Kz. Kx is just the distance from Jack A to
the midpoint of AB, and Ky is the height of the isosceles triangle formed by
Jacks A, B and C, as shown in fig. 2. Kz (not shown) is the distance from
the top of the balls that sit atop the jacks to the table surface. After the
size of the surface plate is known, a diagram of the table illustrating its
orientation is shown. If something is amiss, the user can exit the program
and correct the config file.
If there is no problem, one can then
enter the coordinates of the rotation point for the table. This is a point
that moves with the surface plate under linear translation; for instance, it
may be the location of a sample or a collimator that is fixed to the table.
Coordinates should be measured from the origin as defined in the section on
setting up the table, and care should be taken that the signs of the
coordinates are correct. The default rotation point is the origin, except on
the six-circle diffractometers, where the defaults are set to the common
centers of the theta, two-theta, chi, and phi circles.
Once the user confirms the choice of
rotation point, a search is done to ensure that all motors pertinent to the
peculiar the orientation are present, and the appropriate rotation matrix
elements are loaded into an array for the macros to use. If any motors are
not found, messages are displayed indicating what motors are missing and how
this will affect the motions which are available.
Using the macros
To obtain an overview of your table characteristics, use the show table
macro. This provides a listing of your table positions and their units, the
location of the rotation point, and the positions and limits of all motors
used to move the table.
Figure 4 provides a summary of the
macros that control the motion of the surface plate. An absolute motion
moves the table to a given value. A relative motion moves the table by a
given amount. A ‘tweak’ allows a repeated motion of the table by a given
amount. The scans allow for a relative motion through a parameter with
graphical and file output.
Fig. 4 also illustrates the various
motions and their directions. Positions and position increments may be sent
as arguments, but the macros prompt for input if no arguments are provided.
The motions are accurate to first order and are completely independent of
table orientation. For more information, see Appendix A.
Once the table has been aligned, it is
possible to set a zero position using the macro zero_table. This zeroes all table angles and linear positions, and
sets up the current table motor accumulator position) values as reference
points for future motions. It is recommended that this be run the very first
time that the table is defined.

Figure 4
Last Update:
2006-09-14
|