pizurscan

The aim of this code is to increase the accessibility of a newly experimental apparatus that was developed for the DIFA (Dipartimentimento di Fisica ed Astronomia) at University of Bologna. In particular, the code aims at controlling the Stepper Motor Controller by Physik Instrumente (PI) and interface it with the Zhinst Lock-in to perform one-dimensional spatial scan with the spatial resolution down to 0.5 µm.
The Stepper motor controller is connected to a servo motor that moves a stage issued on an mechanical axis. For every movement of the stage, a square-wave trigger signal can be provided by the controller. This signal is then used by the lock-in to trigger data acquisition of an external signal, which is correlated with the position of the stage. An example of application is a spatially-resolved measurements of the quantum efficiency of a solar cell over a line profile.
pizurscan simplifies the interaction between the two instruments with the following three features:
  1. Input Processing: input parameters defining the trajectory and the cinematics of the PI stage are processed to evaluate the parameters that must be provided to the data acquisition (DAQ) of the Zhinst Lock-in.

  2. Scan execution: the axis is directly controlled by pizurscan through the API PIPython. In particular, the user perform continuous and discrete scas: in the first the stage moves continuously from the starting point to the final position, while in the second small micrometric steps are performed, resting in fixed position for around 50 ms.

  3. Output Processing: When the trigger signal of the PI controller triggers the acquisition, the external signal is measured by the lock-in and the DAQ integrates data over the acquisition time. Depending on the DAQ parameters evaluated with Input Processing, data outputted by the DAQ are further processed (integrated) so that eventually a single value of external signal is associated with the position of the stage.

Accordingly, the code defines the main class Scanner, which instantiates Stepper and combines the inherited methods for easing the overall handling of the controller connection and scanning procedures. In this way, the user does not need any knowledge of the PIPYthon library. In addition to that, the three modules InputValidator, InputProcessor, and ``OutputProcessor``are developed for respectively validating the overall input parameters, processing the input parameters for increase compatibility with Zurich lock-in DAQ interface and eventually process the output data of the Zurich lock-in into an accessible format.
Code is developed by Giacomo Rizzi (mailto:rizzigiacomo@pm.me). Have fun and do good measurements!