In most cases, Iris controls hardware using National Instruments digital and analog connections. Even though some devices, such as the ThorLabs B-scope, come with a control unit that accepts serial port commands, we avoid using these in order to maximise cross-compatibility between rigs and minimise the need to have custom code for each rig. For example, in the case of the B-Scope, we have opened up the ECU and patched connections directly into the PMT control boards, galvo control board, and resonant scanner control board.
Iris is designed around a resonant x-axis scanner. Unlike conventional galvos, the position of the resonant scanner cannot be defined. Instead, we define the amplitude at which the scanner resonates. The frequency is fixed for the unit, with 8 kHz and 12 kHz being commonly available frequencies. The resonant scanner control board sends a sync signal that indicates when the mirror changes direction. We call this signal the "line trigger." The line trigger is fed into the NI digitizer (e.g. the NI-5772). Note that typically, the line trigger goes low-to-high as the mirror moves forward, and goes back from high-to-low as the mirror moves back. The line trigger thus goes low-to-high (or vice versa) only once for every pair of forward and backward scan lines. For bidirectional scanning, both the rising and the falling edge of the line trigger should be detected in order to update the position of Y-mirror for every scanned line. In labview, trigger configurations are limited to detect only one of the two types of transitions. Therefore, both rising and falling edge detection is achieved in software (within the vi that runs on the FPGA) and a new trigger OUT is created that goes low-to-high (and back) for every scan line. We call this the "Y-trigger". The Y-trigger frequency has twice the frequency of the line trigger. The Y-trigger is written onto one the PFI lines and can be read out as an output from the digitizer and used as the source clock for the Y-mirror. Note that for unidirectional scanning, the line trigger itself can be used to clock the Y-mirror.
The exact wiring of the line trigger signal will depend on the the code. You should look both at the VI running on the FPGA and at the VI which runs on your machine. e.g. D_FPGA_5772_2ch.vi. In a common configuration, for instance, the line trigger is seen by the FPGA via the trigger IN port on the digitizer. The Y-trigger is read out from the auxiliary I/O connector on the digitizer and further connected to the source clock terminal of the analog output channel that controls the Y-mirror position. We found that directly routing the line-trigger from the resonant scanner to the digitizer may sometimes fail due to the low input impedance of the FPGA. In such a situation, the line trigger is may be amplified by sending it first to a PFI line (say PFI0) on the PCI card and internally routing it to another PFI line (say PFI1). If you're using the DFPGA_5772_2ch.vi, you'll see this link being defined in software just before execution of the main loop. The amplified line trigger can then be routed from PFI1 of the PCI card to the digitizer. This configuration is just an example. You should follow the code to check.
Iris is designed to be modular. The idea is that a core of programs, such as the main GUI window, remain unchanged across rigs. However, different rigs have different components. e.g. some may have a Pockels cell and others may have a half-wave plate on a rotation mount. In order to cope with these differences, each rig has an INI file associated with it. Iris knows which INI file to use based upon the hostname of the machine. In the INI file are a series of keys that define different "drivers." You can add and remove drivers from Iris by modifying the "driver.list" key. You can change the values of drivers to match your hardware. Setting up a new INI file for a new install of Iris goes something like this:
Different PMTs may have controllers that accept control voltages over different ranges of values. In order to cope with this, we define the type of PMT using the key "pmt.1.driver" in the INI file. e.g. The GaAsP type H7422 has an input control voltage that varies between 0 and 0.9V. On the other hand, units such as the R6357 go between 0 and 5. In all cases, however, actual sensitivity is not a linear function of control voltage.
You need to define a valid save path for data in the .INI file, or Iris will generate errors
on startup.
We have a Pockels cell control VI, but currently no turn-around blanking. This is planned. If you need it or have coded it, please contact us via the Discussion forum.