SPAD512²

System manual

This online documentation portal details all aspects of the SPAD512² single-photon detector system.


  • Version: 1.35
  • Updated: September 2023
SPAD512S system

If you have any question that is not answered in this manual, feel free to send an e-mail.


Getting started


Downloads

Below are the links to the latest software versions for both Windows and Linux. Both software versions should run standalone and feature the same functionalities. The Windows version has been tested on Windows 10 and 11. The Linux version is tested on Ubuntu 20.04 and 22.04.


Installation

Windows:

  1. Unzip the downloaded package. It contains the following folders:
    • Drivers
    • SPAD512S_standalone_win64
  2. Install the drivers and the Visual C++ Redistributables from the Drivers folder.
  3. Connect the two USB-B cables to the camera and the PC. Ideally to separate USB host controllers for the best performance.
  4. Connect the 5V power plug to the camera's master power jack. Always use only one power supply for the camera.
  5. Run the software by double clicking the SPAD512S.exe in the SPAD512S_standalone_win64 folder.
  6. The software will run a background calibration task the first time you turn on the camera.
  7. You should now be able to see the live view from the camera.

Linux:

  1. Unzip the downloaded package. It contains the following folders:
    • Install
    • SPADSPAD512S_standalone_linux64
  2. Open a terminal in the Install folder and execute the following command: sudo ./install.sh. You might be prompted for your administrator password to proceed with the installation. The installation file might require execution permissions, set this with sudo chmod +x install.sh
  3. Connect the two USB-B cables to the camera and the PC. Ideally to separate USB host controllers for the best performance.
  4. Connect the 5V power plug to the camera's master power jack. Always use only one power supply for the camera.
  5. Run the software by double clicking the SPAD512S executable in the SPAD512S_standalone_linux64 folder. Alternatively, open a terminal in the SPAD512S_standalone_linux64 folder and execute: ./SPAD512S. The application might require execution permissions, set this with sudo chmod +x SPAD512S
  6. The software will run a background calibration task the first time you turn on the camera.
  7. You should now be able to see the live view from the camera.

Setting up

At the first run, the noise and uniformity calibration data should be automatically downloaded from the remote server. However, it is advised to execute the following steps in order to ensure that the calibration data also matches the current environment conditions:

  1. Keep the system in the dark and run the noise calibration from the menu.
  2. Continue by running the dead pixel calibration from the menu still keeping the system in the dark.
  3. In case the system will be synchronized to a laser, illuminate the sensor as uniformly as possible with the laser light and run the master/slave offset calibration from the menu. This step might have to be redone on each change of input frequency.

All these parameters will be stored and loaded on each new startup of the camera.

The software will regularly check for updates and prompt in case new updates are available. One can force an update check from the dropdown menu in the top left corner of the software interface. To use the new software, remove the old software from the PC and extract the files from the new package as described in Installation.


Pile-up correction

Since the camera has only a single-bit memory in each pixel, incident photons might be ignored when the memory is already filled with a '1'. This effect is mainly noticeable for higher photon count rates and would ideally need to be corrected for, i.e. using the pile-up correction. This correction transforms the measured amount of photons into the probable amount of photons that hit the SPAD. To correct the images, one can use the following formula to correct the measured number of photons in each pixel Nmeasured into the actual amount of photons Nactual:


Nactual = -log(1.0 - Nmeasured / 255) × 255

This formula is valid for 8-bit image data. In case a different bit depth is used, the value 255 has to be adapted to reflect this change, e.g. 4-bit requires the value 15.


Hardware


Sensor

The SPAD512² system contains a sensor with a 512×512 SPAD array. Each pixel contains circuitry for gated operation and a single-bit memory. This implies that binary images are read from the sensor into the memory on the FPGA, where the single-bit images are integrated into multi-bit images. The current version of the firmware allows to read the 1-bit images directly or it integrates multi-bit images that are streamed to our software package. FLIM images are always using an 8-bit image sequence. The maximum integration time per 1-bit frame is limited by the pixel memory to roughly 1ms.


System

The system is housed in a solid aluminium enclosure measuring 147×105×50mm. It is powered from a single 5V adapters and data can be read from the two USB-B ports. One can also connect only the 'Master' part to read data from half of the sensor. The SMA connectors on the top of the package are shown in the figure below. They have the following functionality:

  • Laser clock input
    Frequency: 10—80MHz, high impedance, maximum input voltage: 1.8V (or 5.0V for systems delivered after July 2022).
  • Frame clock input
    High impedance, maximum input voltage: 1.8V (or 5.0V for systems delivered after July 2022).

Acceptable input voltage ranges: 0—1.8V and 0—3.3V (3.3V only when terminated with a 50Ω load to make it effectively 1.65V), or 0—2.5V, 0—3.3V and 0—5.0V for systems delivered after July 2022. The minimum detectable pulse width for the frame trigger is 12ns and for the gate trigger roughly 3ns.

Mechanical drawing

The system, FPGAs + sensor, consumes in idle operation mode around 7.5W. This is mainly static power consumed by the FPGA resources. Under measurement operation, the power consumption increases to maximum 10W. For optimal thermal performance, the system can be shutdown when unused for an elongated period of time. A proper metal support on the box can help to absorb part of the heat in the large thermal mass of an optical table. Adding a fan to the system is beneficial for cooling and reducing the dark noise.


Graphical user interface


Menu

The options menu is available in the top left corner of the user interface. There are the following options:

  • Set save path
    Changes the folder in which the software is saving the data to a user selected one.
  • Toggle plots to linear/log
    Switch the plots on the gated/FLIM tabs to use either a log or linear scale on the y-axis.
  • Toggle images colormap
    Switches the 8-bit colormap in between colored and greyscale representation. All images are by default saved with a greyscale color map.
  • Calibrate breakdown
    Measures the breakdown point of the SPADs. This ensures each detector will always be biased at the same excess bias voltage with respect to the breakdown point. The breakdown voltage is stored and loaded on startup.
  • Calibrate noise
    Stores a map of the noisy pixels to be interpolated for further measurements. This requires the system to be in complete darkness. The noise threshold is set to ~2kcps.
  • Calibrate dead
    Stores a map of the dead/broken pixels to be interpolated for further measurements. This requires the system to be uniformly illuminated.
  • Calibrate master/slave offset [only after calibrate noise is completed]
    Stores the laser clock delay between the two halves. This requires the system to be illuminated with a pulsed light source. The measurement integration time is the value set for gated measurements.
  • Disable/enable/full-speed fans
    Turn on and off the fans inside the enclosure. In the on state, the fan speed will be regulated by the internal temperature. In the full-speed state, the fans are always turning at the highest speed. In systems delivered after July 2022, the fans are always turning at the highest speed when enabled.
  • Disable/enable VDD
    Turn on and off the detectors power supplies.
  • Check for updates
    Forces an online check for a new software version.
  • Help
    Opens this manual.
  • Quit
    Closes the software.

Live view

Live view

The live view tab shows images from the sensor array. The exposure is set automatically to account for changes in the light condition. The auto exposure tries to find a suitable average light intensity, which may give unwanted results in very dark environments. A black—red—yellow—white colour scale shows the intensity variation over the array. The colour scale can be changed to grey scale in the menu.

A small version of the live view is also available on the other tabs in the bottom left corners.


Intensity imaging

Intensity imaging

The second tab provides the intensity imaging capabilities of the system. On the left side, there is a control panel to setup the parameters for the measurements that are displayed on the right. The measurement progression is indicated in the bottom status bar. The following options are available:

  • 1/4/6/7/8-bit mode
    Switch between 1, 4, 6, 7 and 8-bit imaging modes. The frame rate can be increased with a factor 2 when switching to 7-bit mode, a factor 4 when switching to 6-bit mode, a factor 16 when switching to 4-bit mode, and a factor 256 when switching to 1-bit mode.
  • Integration time (1-bit)
    Set the measurement integration time in microseconds for an 1-bit image. This time is the single-bit image exposure time.
  • Integration time (4-bit)
    Set the measurement integration time in microseconds for the total of a 4-bit image. This time is divided by 16 to get the single-bit image exposure time.
  • Integration time (6-bit)
    Set the measurement integration time in milliseconds for the total of an 6-bit image. This time is divided by 64 to get the single-bit image exposure time.
  • Integration time (7-bit)
    Set the measurement integration time in milliseconds for the total of an 7-bit image. This time is divided by 128 to get the single-bit image exposure time.
  • Integration time (8-bit)
    Set the measurement integration time in milliseconds for the total of an 8-bit image. This time is divided by 256 to get the single-bit image exposure time.
  • Overlap expose/read checkbox
    Enables the simultaneous exposure and reading from the chip, which reduces the overhead from reading the single-bit frames. This might, however, introduce some rolling-shutter artefacts in the resulting image.
  • Frames
    Set the number of frames to be read from the camera. Setting zero (for 4, 6, 7, 8-bit modes) gives the option to measure an infinite amount of time until the stop button is pressed. The resulting images will be displayed on the right and can be scrolled through with the scrollbar on top of the images.
  • External frame trigger checkbox
    Allows the start of each frame to be synchronized with an external source. On the rising edge of the frame trigger, a new 1, 4, 6, 7 or 8-bit image is integrated, dependent on the bit mode set by the user. The external trigger is sampled with the internal 100MHz clock, thus requiring the trigger to have a minimum pulse width of roughly 12ns. Requires at least number of frames + 1 triggers to operate successfully.
  • Sparse data checkbox (1-bit)
    Instead of saving the complete image, only the pixels with a count are saved. Data is a binary array (integers) of the activated pixels.
  • Save checkbox
    Saves the measurement to disk. A folder data/intensity_images is created in the run or user specified directory and images are saved with the name IMGXXXX-YYYY.png or RAWXXXX-YYYY.bin (1-bit). XXXX denotes the run iteration, YYYY is the frame or package number of the measurement. The following metadata is available in the saved images: Author, System, Mode, Integration time, Overlap, Frame, Frames, External frame trigger.
    The raw binary data saved in 1-bit mode is a continuous array of bits. Each bit represents a single pixel, with its value either being 0 or 1. Each binary file stores at most 1,000 frames, with each frame taking exactly 512×512 bits.
    The sparse binary data saved in 1-bit mode is a continuous array of the activated pixels. Each four bytes form a single integer representing the pixel number with a value '1'. These binary files store at most 10,000 frames, pixel numbers are increasing. A dummy pixel 512×512 indicates the end of the current frame.
  • Start button
    Launches the chosen measurement.

Gated imaging

Gated imaging

The third tab provides the gated imaging capabilities of the system. The control panel is again visible on the left and results are displayed and plotted on the right. The measurement progression is indicated in the bottom status bar. The following options are available:

  • Integration time (6-bit)
    Set the measurement integration time in milliseconds for the total of an 6-bit image. This time is divided by 64 to get the single-bit image exposure time.
  • Integration time (7-bit)
    Set the measurement integration time in milliseconds for the total of an 7-bit image. This time is divided by 128 to get the single-bit image exposure time.
  • Integration time (8-bit)
    Set the measurement integration time in milliseconds for the total of an 8-bit image. This time is divided by 256 to get the single-bit image exposure time.
  • Frames
    Set the number of gate sequences to be read from the camera. The resulting images will be displayed on the right and can be scrolled through with the scrollbar on top of the images. The intensity profile of any pixel can be shown in the plot on the right by clicking on it in the image (up to 10 graphs). One can turn the plot to log scale through the menu.
  • Gate steps
    Set the number of gates to take for each frame. Each gate step will be shifted away from the laser clock edge by the step size either in positive or negative direction.
  • Gate step size
    Set the step size in picoseconds. The step is calculated based on the provided frequency. This value is dictated by the phase shifting of the PLL.
  • Arbitrary step sizes checkbox
    Defines if the gate steps will be uniform or loaded with a user defined sequence. The number of gate steps is defined by the length of the user defined sequence.
  • Arbitrary step sizes
    Input the user defined sequence of steps. Each step is a multiple of the minimum step size. Each value has to be separated with a comma. The total number of defined steps need to be a multiple of 4, e.g. define 4, 8, 12, 16 etc. steps.
  • Gate width
    Set the exposure opening of the gate with respect to the laser clock period, e.g. 50ns. The width is an integer value from 4 to a value that depends on the provided frequency. The actual gate width is roughly the gate width parameter multiplied by 1ns (with a slight deviation for lower values).
  • Gate offset
    Set the initial offset of the gate sequence. The offset is a multiple of the minimal gate step size.
  • Gate increment checkbox
    Defines the direction of the gate shift to be in either positive (increment) or negative (decrement) direction from the laser clock edge.
  • External frame trigger checkbox
    Allows the start of each frame (one frame is a complete gate sequence with X gate steps) to be synchronized with an external source. On the rising edge of the frame trigger, a new 6, 7 or 8-bit image sequence is integrated, dependent on the bit mode set by the user. The external trigger is sampled with the internal 100MHz clock, thus requiring the trigger to have a minimum pulse width of roughly 12ns.
  • External gate trigger checkbox
    Allows the start of each gate pulse to be controlled with an external source. This triggering cannot operate together with the external frame triggering. On each rising edge of the gate trigger, a single gate is opened for the duration set by the gate width. The minimum distance between two consecutive gate triggers depends on the connected laser clock frequency, i.e. the dead time is roughly the period of the laser clock. A higher laser clock frequency will thus allow for a shorter dead time. The integration time of a single image is set separately in the software as usual. In this integration time, there can be as little as zero external gate triggers up to a maximum of the integration time divided by the laser clock period. This mode requires a synchronization clock to be active on the laser clock SMA for the internal gating circuitry to be operational. The external trigger is sampled with the internal 500MHz clock, thus requiring the trigger to have a minimum pulse width of roughly 3ns.
  • Save checkbox
    Saves the measurement to disk. A folder data/gated_images is created in the run or user specified directory and images are saved with the name IMGXXXX-YYYY.png. XXXX denotes the frame, YYYY is the gate step. The following metadata is available in the saved images: Author, System, Mode, Integration time, Overlap, Frames, Gate step, Gate steps, Gate step size, Gate width, Gate offset, Gate increment, External gate trigger.
  • Start button
    Launches the chosen measurement.
  • Find gate button
    Calculates the optimal gate offset and number of gate steps to cover one period of the gate.

The gating measurement principle is shown below. A gated frame is a series of 6, 7 or 8-bit images, each shifted by a small time step in order to reconstruct the time varying phenomenon of interest. The number of images to be taken in a single frame is given by the gate steps parameter, or in case arbitrary step sizes are used, by the number of arbitrary steps. Each step, the gate opening, defined by the gate width, is shifted by the set gate step in picoseconds. The gate is shifted away from the rising edge of the laser clock in either positive direction (gate increment) or negative direction (gate decrement). To create a single 8-bit image, the gate is opened for N times, where N is given by the integration time (8-bit) multiplied by the laser frequency. For example, when the integration time is set to 3ms and the laser frequency is 20MHz, the gate will open 60,000 times to create a single image. One can also estimate the actual exposure time (the time in which the sensor is sensitive) from the gate width: exposure time = gate width / laser period * integration time. Taking the same example as before with a gate width of 6: exposure time = 6/50*3ms = 0.36ms.

Live view

Fluorescence lifetime imaging

FLIM imaging

The fourth tab provides the FLIM imaging capabilities of the system. This mode uses a sequence of gated images to calculate the lifetimes and generate a lifetime image. For ease of use, the number of parameters in the control panel on the left is simplified and most underlying gate parameters are calculated based on the expected lifetime. The control panel is split in between the measurement mode and the analysis mode, which becomes available after finishing a lifetime measurement. In measure mode, the following options are available:

  • Mono/bi-exponential mode [only before calibration]
    Switch between mono-exponential measurements and bi-exponential measurements. The main differences are the way the system is calibrated and the way normal measurements are IRF corrected.
  • Integration time (8-bit)
    Set the measurement integration time in milliseconds for the total of an 8-bit image. This time is divided by 256 to get the single-bit image exposure time.
  • Maximum expected lifetime [only before calibration]
    Set the maximum expected lifetime of the fluorophores under investigation. This parameter defines the measurement window of the exponential decay curve.
  • Gate width [only before calibration]
    Set any of the three options for a short, medium or long exposure gate width. A short gate width should be sufficient for the majority of measurements. These gate widths correspond to values 3, 6 and 9 respectively in gated imaging mode.
  • Gate subsampling [only after calibration]
    Divide the optimal number of gates as calculated in the calibration. For calibration, the minimum gate step size is taken to get the most accurate calibration result. For normal measurements, one can undersample to trade-off precision versus speed.
  • Save checkbox
    Saves the measurement to disk. A folder data/flim_images is created in the run or user specified directory and images are saved with the names IMGXXXX-intensity-YYYY.png, IMGXXXX-lifetime-YYYY.png and IMGXXXX-phasor-YYYY.pdf. XXXX denotes the run iteration, YYYY is the frame number. The following metadata is available in the saved images: Author, System, Mode, Integration time.
  • Live view checkbox
    This option is available after at least one normal FLIM measurement. Enabling this box and launching a new measurement will continuously run new FLIM measurements until the user stops the operation.
  • Start button
    Launches the chosen measurement.
  • ROI button
    Click and drag in the intensity image to select a region of interest. During selection, a white outline will appear on the image.
  • ROI reset
    Resets the region of interest back to the full image.

FLIM images are generated with the phasor method. In the case of mono-exponential samples, the calibration of the IRF finds the falling edge of the gate. The end of the IRFs falling edge determines the starting point for normal measurements and the measurement window is defined by the maximum lifetime. Since the gate falling edge is convolved with the fluorescence decay for normal measurements, we will capture exactly the exponential part of the decay curve. The phasor is calculated directly from the measurement data without further corrections.

In the case of bi-exponential data, the calibration and measurements rely on the complete gate window. Therefore, the calibration determines both the gate rising and falling edges and calculates the complete window, including the extension from the fluorescence convolution. For normal measurements, the phasor data is calculated and the IRF phasor data is subtracted from it.

For each measurement, an intensity image, lifetime image, pixel response curve and phasor plot are generated. Each is displayed in one quadrant of the screen on the right side of the control panel. One can add multiple pixels (up to 10) to the pixel curve graph by clicking on them in either the intensity or lifetime image. Hovering over any of the image pixels will also highlight the corresponding phasor in the phasor plot. The average calculated lifetime and standard deviation are printed in the bottom right corner. A colorbar below the lifetime image denotes the minimum and maximum lifetimes visible in the image.

Alternatively, one can stream out the raw data that is generated from the phasor calculations through the remote TCP/IP interface. The data for each pixel is streamed out and contains the intensity [cps], lifetime [ns] and the g/s coordinates of the phasor.

When the measurement is completed, the analysis tab is unlocked. Switching to the analysis tab transforms the intensity and lifetime images into plots. One can adjust the zoom and color range to adjust the image for better clarity. The intensity image is corrected for background noise and pile-up. The analysis mode has the following capabilities:

  • ROI button
    Click in the intensity image and move around the area of interest to draw the region of interest to be analysed. Click a second time to confirm the region. Once a region has been selected, the ROI is also displayed in the lifetime image. The average curve is displayed in the curves plot on the top right and the lifetime phasor points belonging to the current selection are shown in the phasor plot. One can make up to 20 regions of interest.
  • ROI reset
    Clears all active regions of interest.
  • Open button
    Allows to load a previously stored set of ROIs. Once an analysis result is stored, a file is saved with the coordinates of each ROI. This file can be selected to repeat the same analysis on a new measurement.
  • Save button
    Saves all four plots into *.pdf documents, saves the list with the information on counts and lifetime into a *.txt file and saves the coordinates of each ROI into a *.txt file that can be loaded to rerun the analysis on a new measurement.

Settings

Settings

The last tab shows the system settings. The top half is divided in 6 boxes:

  • Top left
    Status indication of the USB connection. This is indicated green when the system is connected by USB3. The system can be reinitialized by clicking the reset button. The software gives a warning when the system is not connected with USB3.
  • Top middle
    Speed test for the USB connection. The transfer speed is calculated by transferring the set number of MBs and dividing by the elapsed time.
  • Top right
    Status of the remote communication server. The software can be programmed from any capable TCP/IP software package, see the command guide for instructions. The listening port on the localhost can be changed through the dropdown menu.
  • Bottom left
    Current operating voltages. The operating voltages can be changed on the fly. One can change the detectors sensitivity by adjusting the Vex. Vq is set to 0 by default and cannot be changed.
  • Bottom middle
    Current operating temperatures of the FPGA, the interposer (main) PCB and the chip PCB on which the sensor is located. Therefore, the chip PCB temperature should be a good indication of the sensors current operating temperature. Ideally, the sensor temperature should be kept as low as possible. Without air flow, the PCB temperature should be below 45°C.
  • Bottom right
    Current SMA input frequencies. Shows the current running frequency for the SMA laser and frame clock input.

The log is printed in the field below. Here you can find information regarding the connection to the two FPGAs and the current versions of the firmware and software. The log can be saved with the save button on the right.


Remote command interface

The software can be started with the following optional command line arguments. The command line syntax is either SPAD512S.exe arg1 arg2 arg3 on Windows or ./SPAD512S arg1 arg2 arg3 on Linux.

  • arg1 is GUI
    Launches the software with the GUI shown (default).
  • arg1 is headless
    Launches the software without the GUI shown. A tray icon is visible in the taskbar.
  • arg2 is options
    Displays the following options in the tray icons context menu: show, hide, quit (default in headless mode).
  • arg2 is no-options
    No context menu available for the tray icon.
  • arg3 is the user defined TCP/IP port
    Select a port of free choice. The software will confirm that it is listening on the chosen port. This value will default to 9999 when unused (or the value stored from a previous run).

For example to start the software without a GUI and with a context-menu in the tray icon on windows, execute in the command line: SPAD512S.exe headless options

To also specify a custom TCP/IP port, e.g. 2500, we execute on windows, in the command line: SPAD512S.exe headless options 2500

The software can be operated over TCP/IP with a simple command protocol. The software is listening for new remote users on the PCs localhost port 9999 by default. This port can be changed on the settings tab. The following sections list the available commands and show some programming examples.


Command guide

All commands start with capital characters, followed by its parameters. Parameters indicated in triangle brackets <> should be replaced by a numerical value, parameters in square brackets [] should be replaced by a string. Commands can be separated by a line feed \n, so multiple commands can be send at the same time.

  • Live view image
    L
    Command returns the latest live view image in binary format.
  • Intensity imaging
    I,<bits>,<measurement time in us>,<frames>,<frame trigger>,<overlap>,<sparse>,<stream>
    <bits> is either 1, 4, 6, 7 or 8 for the bit-depth of the image.
    <frame trigger> is either 0 for no external triggering of new frames or 1 for the external triggering of new frames.
    <overlap> is either 1 for overlapping exposure and read-out or 0 for non-overlapped measurements.
    <sparse> is either 1 for sparse saving of data or 0 for standard full images. This option is only available in 1-bit mode, set to zero for all other bit modes.
    <stream> is either 1 for direct streaming of the images through TCP/IP or 0 for saving of the images to disk.
    Command returns the paths to the image files, or streams the images directly.
  • Gated imaging
    G,<bits>,<measurement time in ms>,<frames>,<gate steps>,<gate step size in ps>,<gate step arbitrary>,<gate width>,
    <gate offset ins ps>,<gate direction>,<gate trigger>,<overlap>,<stream>
    <bits> is either 6, 7 or 8 for the bit-depth of the image.
    <gate step arbitrary> is either 0 for uniform step sizes defined by step size and steps or 1 for arbitrary step sizes defined by the user (use command Ga).
    <gate direction> is either 0 for decrementing or 1 for incrementing the gate with respect to the laser.
    <gate trigger> is either 0 for internal trigger, 1 for the use of an external trigger to launch each gate pulse, or 2 for the use of an external trigger to launch each gate frame (step sequence).
    <overlap> is either 1 for overlapping exposure and read-out or 0 for non-overlapped measurements.
    <stream> is either 1 for direct streaming of the images through TCP/IP or 0 for saving of the images to disk.
    Command returns the paths to the image files.
  • Set arbitrary gated step sizes
    Ga,[step size array]
    [step size array] is a dot-comma (;) separated array with the user defined step sizes to be loaded into the FPGA.
    Command returns a confirmation if writing the array is successful.
  • Find optimal gate offset and number of gate steps
    Gf,<measurement time in ms>,<gate step size in ps>,<gate width>,<gate direction>
    <gate direction> is either 0 for decrementing or 1 for incrementing the gate with respect to the laser.
    Command returns the parameters found for the gate.
  • FLIM imaging
    • Calibration
      F,c,<flim mode>,<measurement time in ms>,<expected lifetime in ns>,<gate width>
      <flim mode> is either 0 for mono-exponential or 1 for bi-exponential measurements.
      <gate width> is either 0 for a short, 1 for a medium or 2 for a long gate width.
      Command returns the result of the calibration.
    • Normal measurement
      F,i,<measurement time in ms>,<gate subsample ratio>,<raw data>
      <raw data> is either 0 for image output or 1 for raw data output in the format master/slave, counts, lifetime, g, s per pixel for the two halves. See below python example for the reconstruction of an image from the raw data.
      Command returns the paths to the image files and phasor plot or it returns the raw data directly.
  • Set auto or manual exposure for the live view
    AE,<mode>,<measurement time in ms>
    <mode> is 0 for manual exposure and 1 for auto exposure.
    Command returns a confirmation of the changed exposure mode.
  • Calibrate the system
    CALIB,<mode>
    <mode> is 0 for noise calibration, 1 for dead pixel calibration, 2 for master/slave offset calibration and 3 for breakdown calibration.
    Command returns when the measurement has completed.
  • Manually set the master/slave offset value
    CALIB,<mode>,<value>
    <mode> is 2 to set master/slave offset.
    <value> is the offset in picoseconds.
    Command returns the new offset value.
  • Get current operating temperatures and running frequencies
    R
    Command returns the temperatures of the FPGA and PCBs in °C. It also returns the measured frequency of the laser and frame clocks. Format is <FPGA master temperature>,<FPGA slave temperature>,<main PCB temperature>,<chip PCB temperature>,<laser clock frequency>,<frame clock frequency>
  • Set the path for the software to save data and images
    D,[dir]
    Command returns the folder path if it exists.
  • Get system information
    D
    Command returns the debug information for the system. This includes the FPGA serial numbers, version numbers and enabled modules.
  • Set the fan speed
    S,<speed>
    <speed> is 0 for disabled fans, 1 for enabled fans with automatic speed control and 2 for enabled fans at full-speed.
    Command returns a confirmation if fan speed change is successful.
  • Set voltages
    V,<Vq>,<VOP>
    <Vq> is 0V.
    <VOP> range is 26 to 29V.
    Command returns a confirmation if changes are successful.
  • Get voltages
    V
    Command returns the current operating voltages. Format is <Vq>,<VOP>

Programming examples

Some simple programming examples are available for download below. The following files are available:


Performance benchmarks

The following tables gives an overview of the acquisition speeds that can be obtained with our camera and software. Since they depend on the connected PC, these metrics cannot be guaranteed and are solely for reference purposes. These values were obtained on a PC with the following specifications:

  • OS: Windows 10, version 22H2
  • Processor: AMD Ryzen 7 3700X
  • RAM: 64 GB
  • Storage: SSD 1 TB

The table shows some typical measurement scenarios and corresponding values, most of them are split between the reading time from the USB and the post-processing time taken by the software. Currently, the 4-bit mode requires most post-processing due to the packing of the data in bytes and the need to unpack this data. In most scenarios, a read-out speed can be obtained that is fairly close to the theoretical value. In case of 1-bit mode, the data is stored locally in the FPGA before being transmitted to the PC; in this case the read-out speed is not separated from the total speed. Saving to disk and streaming through TCP/IP have a slight overhead, mainly dependent on the performance of the PC. The time with saving is the time until the system is ready for a new measurement; it might be that the software is still writing the images to disk in the background.

Measurement settings Time without saving Time with saving Time with streaming
Intensity 8-bit, overlap enabled,
2.7 ms/frame, 1,000 frames
2705 + 5 ms 2705 + 5 ms 2705 + 6 ms
Intensity 7-bit, overlap enabled,
1.4 ms/frame, 1,000 frames
1412 + 6 ms 1413 + 9 ms 1412 + 9 ms
Intensity 6-bit, overlap enabled,
0.7 ms/frame, 1,000 frames
720 + 10 ms 726 + 11 ms 732 + 12 ms
Intensity 4-bit, overlap enabled,
170 μs/frame, 1,000 frames
218 + 260 ms 222 + 285 ms 227 + 335 ms
Intensity 1-bit, overlap enabled,
10.3 μs/frame, 10,000 frames
640 ms 945 ms 714 ms
Gated 8-bit, overlap enabled,
2.7 ms/frame, 10 frames, 50 gate steps/frame
1372 + 4 ms 1371 + 6 ms 1372 + 6 ms
Gated 7-bit, overlap enabled,
1.4 ms/frame, 10 frames, 50 gate steps/frame
767 + 7 ms 767 + 8 ms 767 + 9 ms
Gated 6-bit, overlap enabled,
0.7 ms/frame, 10 frames, 50 gate steps/frame
500 + 13 ms 503 + 20 ms 508 + 36 ms
Gated 8-bit, overlap enabled,
2.7 ms/frame, 1 frames, 500 gate steps/frame
1349 + 4 ms 1349 + 4 ms 1350 + 5 ms
Gated 7-bit, overlap enabled,
1.4 ms/frame, 1 frames, 500 gate steps/frame
701 + 11 ms 701 + 12 ms 701 + 17 ms
Gated 6-bit, overlap enabled,
0.7 ms/frame, 1 frames, 500 gate steps/frame
361 + 17 ms 363 + 24 ms 368 + 45 ms

Support

If this documentation doesn't answer your questions, feel free to send us an e-mail.


Changelog

Version history with most notable changes.

Version 1.35

  • Changed1-bit mode can now be activated from the options menu.

Version 1.34

  • AddedCheck if TCP/IP port is occupied and select next one in case.
  • AddedAbility to start with custom TCP/IP port from the command line.
  • AddedAbility to reset intensity shutdown through TCP/IP.
  • AddedAbility to separate remote commands with line feed for improved reliability.
  • ImprovedIntensity shutdown information now also through TCP/IP.
  • FixedGating at low frequencies (below 18MHz).

Version 1.33

  • ImprovedDetection of master/slave FPGAs.
  • ImprovedUSB speed-test accuracy.

Version 1.32

  • AddedRemote command to manually set the master/slave offset.
  • FixedIntensity linearity of images when the software is not in greyscale mode.

Version 1.31

  • ImprovedMaster/slave offset calibration.
  • ImprovedOptimal gate settings finder.
  • AddedTime-out for triggered acquisitions.
  • AddedAbility to stop ongoing acquisitions by sending the remote command again.

Version 1.30

  • AddedBreakdown calibration.
  • AddedFrame-based read-out for gated imaging in firmware.
  • AddedAbility to stop an ongoing gated acquisition.
  • ChangedNDO command to CALIB and added breakdown calibration flag.

Version 1.22

  • FixedFrame triggering in gated imaging.
  • FixedCalibrate noise/dead not functioning.

Version 1.21

  • AddedAbility to stop an ongoing intensity acquisition.
  • FixedHandling of 1-bit data corruption.

Version 1.20

  • AddedHeadless mode for the GUI.
  • AddedCommand to get the latest live view image.
  • AddedCommand to get system information.
  • AddedFrame triggering to gated imaging.
  • FixedNoise / dead pixel removal.
  • ChangedDead pixel calibration to require darkness (like noise calibration).

Version 1.16

  • Contact usIf you require 1-bit functionality.
  • AddedOptimal gate settings finder to help set the initial gate parameters.
  • AddedRemote command for gate settings finder.
  • FixedMinimum gate width not working properly.
  • FixedSystems not always starting.

Version 1.15

  • Removed1-bit functionality -> please contact us if you need this.
  • ReducedIdle power consumption.
  • PleaseDon't use versions 1.11 / 1.12 / 1.13 / 1.14, they may break your system.

Version 1.14

  • FixedCritical startup bug (this might potentially break the system).

Version 1.13

  • ImprovedIntensity shutdown.
  • AddedManual exposure time slider to the live view.
  • AddedCommand to change the auto exposure.
  • AddedButton to copy the current live view exposure time to intensity imaging.

Version 1.12

  • FixedLVDS read-out glitches.

Version 1.11

  • FixedMinor bugfixes.

Version 1.10

  • ChangedSeveral remote commands to add the bit-options for the images.
  • AddedIntensity shutdown at excessive count rates.
  • AddedAcceptance range of laser clock frequency from 10 to 80MHz.
  • AddedRecalculation of gate time steps at each input frequency.
  • AddedDisable of 1-bit imaging clock after time-out (re-enabled on the next 1-bit run).
  • Added6 and 7-bit options to both intensity and gated imaging.
  • ImprovedPerformance of intensity and gated imaging.
  • ImprovedHandling of 1-bit data and processing speed.
  • RemovedMinimum integration time limit in overlapped exposure and read-out mode.
  • FixedHandling of failed 1-bit acquisitions.
  • FixedCrashes on infinite measurements when frames set to 0.
  • Fixed10MHz gated acquisition mode no longer doubling gates.
  • FixedMaster/Slave offset calculation not properly aligning.

Version 1.04

  • ImprovedPerformance of various acquisition modes.
  • FixedHandling of failed 1-bit acquisitions.

Version 1.03

  • ImprovedGated imaging performance.
  • ImprovedAccuracy of measured acquisition time.

Version 1.02

  • ChangedOnline documentation platform.
  • FixedSet save path crashes.

Version 1.01

  • ImprovedAutomatic download of the calibration files from the remote server.
  • AddedCommands to calibrate the noise, dead pixels and master/slave offset through TCP/IP.

Version 1.0

  • ImprovedUpdated the core system for better support on modern systems and high-DPI displays.
  • AddedSupport for higher laser frequencies (experimental, not supported on all systems).
  • AddedFirst FLIM analysis functions with multi-ROI support.
  • AddedDialog on first startup to select firmware flavour.
  • FixedHttps issues for new version checks.

Version 0.91

  • ImprovedNoise correction algorithm.
  • ImprovedDead pixel correction algorithm.
  • ImprovedLVDS/SE device handling.
  • FixedMinor bugfixes.
  • RemovedGated offset in external trigger mode.

Version 0.9

  • AddedStreaming mode for gated imaging.
  • AddedArbitrary step sizes for gated imaging.
  • AddedSaving of the fan state.
  • AddedSupport for LVDS version devices.
  • ImprovedMerging 10/20MHz in same firmware with internal switch.
  • ChangedStreaming for all image modes to binary data.
  • ChangedIntensity and gated measurement commands to add frame trigger and overlapping.
  • Fixed1-bit sensor read-out.
  • FixedHalf-sensor data processing.
  • FixedFLIM image processing.

Version 0.81

  • AddedA dummy pixel 512×512 to sparse image saving/streaming in 1-bit mode.
  • ChangedSet minimum number of frames in gated mode with external trigger to 2.

Version 0.8

  • AddedSparse image saving/streaming for 1-bit images.
  • AddedOption to set the fan speed remotely.
  • Improved1-bit mode processing speed.
  • ChangedSaving/streaming of 1-bit images into binary format.
  • ChangedIntensity and gated measurement commands to add frame trigger and overlapping.
  • FixedCrashes in 1-bit mode.
  • FixedExternal triggering in gated mode.

Version 0.79

  • AddedOption to stream the raw FLIM data through TCP/IP.
  • FixedFLIM calibration and edge detection.
  • FixedLimits for maximum integration times.
  • FixedLimits for maximum expected lifetime.

Version 0.78

  • AddedMetadata into the images.
  • FixedGreyscale saving.

Version 0.77

  • AddedOption to externally trigger gates in gated image acquisitions.
  • AddedOption to synchronize the laser clock between master/slave.
  • FixedPixel mappings.
  • FixedFLIM calculations.
  • FixedMinor bugfixes.

Version 0.76

  • ImprovedIncreased the acceptable laser frequency range.

Version 0.75

  • AddedOption to externally trigger gates in gated image acquisitions.
  • AddedOption to synchronize the laser clock between master/slave.
  • FixedPixel mappings.
  • FixedFLIM calculations.
  • FixedMinor bugfixes.

Version 0.74

  • AddedMultithreading to some heavier calculations and image saving.
  • ImprovedReliability.
  • FixedPixel mappings (partially solved).
  • FixedMinor bugfixes.

Version 0.73

  • AddedOption to externally trigger frames in intensity image acquisitions.

Version 0.72

  • AddedOption for infinite 4 and 8-bit intensity image acquisitions..
  • FixedMinor bugfixes.

Version 0.71

  • AddedOption to overlap read-out and exposure.
  • AddedOption to stream intensity images through TCP/IP.
  • FixedArray column ordering.

Version 0.7

Initial release with the following functionalities:

  • Live view from the SPAD sensor (intensity + FLIM mode).
  • Intensity imaging (1, 4 and 8-bit modes).
  • Gated imaging.
  • FLIM imaging.
  • Voltage control.
  • Temperature reading.
  • TCP/IP remote command interface.

Windows 64-bit + Linux 64-bit.