Flexure Combined Motion

Table of contents

This support was designed for APS flexure stages, but it should work for other coarse/fine motor applications.

APS Flexure Hardware

An APS flexure stage includes the following hardware:

  • A New Focus picomotor controller
  • A New Focus open-loop picomotor (providing coarse motion and a large travel range)
  • A PI piezo controller
  • A PI piezo (providing fine motion and a small travel range)
  • A Lion Precision cap sensor driver
  • A Lion Precision cap sensor (providing absolute positioning)
  • A measComp USB-2408-2AO or LabJack T8 (analog inputs to read the cap sensor)

Motivation

The existing CoarseFineMotor.db could not be used because it was not guaranteed that the open-loop picomotor would get within the piezo’s range of the desired position. flexCombinedMotion.st was adapted from a hybrid motion program already in use at an APS beamline.

Modes of Operation

Mode Description
Fast Combined motion using the specified piezo range as the deadband
Precise Combined motion using the specified deadband as the deadband
Coarse Motion using only the coarse motor
Fine Motion using only the fine motor

Example Configuration

Motors

Parameter Value
PREFIX optics:
Picomotor $(PREFIX):nf:c0:m1
Piezo $(PREFIX):pi:c0:m1
Piezo range 15 um
Analog input (cap sensor voltage) $(PREFIX):LJT8:1:Ai0
Cap sensor conversion factor 32.59 um/V
Cap sensor name cap1
Combo motor name m1

IOC configuration

The flexCombinedMotion.iocsh file describes the required and optional macros it accepts. This example includes only the required macros:

iocshLoad("$(OPTICS)/iocsh/flexCombinedMotion.iocsh","P=$(PREFIX),C=cap1,V=$(PREFIX)LJT8:1:Ai1,UMV=32.59,M=m1,LLM=0.0,HOME=7.5,HLM=15.0,FM=pi:c0:m1,CM=nf:c0:m1")

The LLM/HLM values can be used to restrict the usable range of the piezo. The HOME can be near LLM or HLM to allow more fine steps in one direction before a coarse move is needed.

Display file macros

flexCombinedMotionTop.{adl,ui}

"P=optics:,M=m1,CM=nf:c0:m1,FM=pi:c0:m1,C=cap1"

flexCombinedMotion.{adl,ui}

"P=optics:,M=m1"

flexCapSensor.{adl,ui}

"P=optics:,C=cap1"