Instrument review: Triggerscope 4.0

Nikita Vladimirov
7 min readNov 30, 2020

What is Triggerscope?

Triggerscope by ARC is a device for control and synchronization of electronic systems in the lab, such as custom-made microscopes with cameras, motorized stages, lasers, galvanometic mirrors and other devices that need to work in synchrony with sub-millisecond precision. Triggerscope can listen to 4 digital channels and generate signals in 16 analog and 16 digital channels simultaneously.

Update: ARC took my first critical review to heart and improved many things in documentation and code. This is an updated review.

Due to my background, the focus will be on light-sheet microscopy, so the review will be biased to a particular application. I am interested in generation of pulse-triggered analog voltage waveforms. A modern light-sheet microscope may easily require 8 analog channels: 4 for laser power control, and 4 for two pairs of galvos. The analog waveforms are often triggered by an external master pulse, e.g. from a camera or scanning stage. I also assume that required update rates are moderate, 20 kHz or less.

Why not Arduino?

Arduinos are great for small projects and non-demanding analog waveform generation. For example, Teensy 3.5 offers analog output in 2, analog read in 27, and digital read/write in 58 channels. However, Arduinos are very limited in what they can do with analog output (AO): voltage is usually limited to positive (0..5V) and uses moderate-resolution DAQ converters (12 bit). Also, some soldering skills will be needed to connect your board to BNC cables. These are limitations of bare-bone Arduino/Teensy.

However, Triggerscope is an Teensy-powered device, boosted with DAC converters and other ICs controlled by Teensy 4.1, as we will see later.

Why not National Instruments cards?

NI cards are great in many respects, especially for highly demanding applications: very fast clock, high data rates, high signal resolution. However, there have several drawbacks. Programming them can be tricky — there are just too many options, and API may be not well documented if you use newer languages like Python. The cards take considerable physical space — you may need several cards and each takes a precious PCIe slot of your PC motherboard. Alternatively, you can fit them into a separate PXI module connected to your PC, which will cost you a few grands more. For a DIY research microscopes, NI cards are often an overkill.

Triggerscope 4.0 specs

Digital trigger inputs (TTL): 4 channels, 5V tolerant.
Digital outputs (TTL): 16 ch.
Analog outputs (DAQ): 16 ch.
DAQ resolution: 16 bit.
Range Selection for DAC: 0–5V, 0–10V, -10/+10V, -2.5/+2.5V
DAQ update rate (max): 270kHz
Switch time: < 10 microseconds
Processor speed: 600 MHz
RAM: 1024 KB
SD Card memory: 16 GB
Drivers: Micro-Manager, Metamorph, MatLab, Python 3x.

Sixteen DAQ channels with 16-bit resolution is very impressive! This is a bold claim that makes some high-end NI boards look bleak. See a comparative table below that compares Triggerscope with Teensy 3.5, octoDAC, and NI cards PCIe-6323 and PXI-6733.

Hardware design

The board has excellent ergonomic design. The use of SMA connectors allows packing many terminals in a moderate space, while ensuring reliable connection and easy switching of cables. The connectors are well labeled and arranged in an intuitive user-friendly layout. The transparent front plexiglass panel shows the belly of the PCB board with well-labelled status LEDs and microchips, and you can guess the contours of Teensy on the other side. The USB cable provided has high-quality connectors and braided outer layer, a really nice touch.

Documentation

Initially I could not find a good documentation, and contacted ARC for details. They soon provided a very detailed documentation. There is a new Getting Started guide, and a brand-new YouTube video how to get started. Huge help for a beginner, kudos!

Software

I have Windows 10 x64 Pro with Python 3.6, and the recommended GUI toolkit successfully unpacked and launched:

Triggerscope GUI (Windows)

Control with MicroManager 1.4

Micromanager is probably the most popular software for custom microscope control, so it is a good starting point for tests. I updated my Arduino IDE to the latest (1.8.13) and installed TeensyDuino 1.53. The Arduino IDE recognized Triggerscope as Teensy 4.1 at COM3.

Next I installed latest nightly build of MicroManager 1.4 for Windows x64 (20201120) and set up Triggersope per instructions for version 3B. There are two versions of Triggerscope device adapter in MM1.4: Triggerscope (older) and TriggerscopeMM (newer). The default adapter to choose here is Triggerscope, because the new adapter requires a firmware upgrade (see below). MM recognized my device at COM3. In the Edit menu, select Baud 115200. In the Peripherals menu, select the DAC and TTL channels you will need for your application, e.g. DAC01, DAC02, TTL01, TTL02.

The MM Device property browser allows you to control DAC and TTL channel states manually. So, time to grab a voltmeter and oscilloscope and test the output values!

Manual setting of TTL and DAC values

Note: most oscilloscopes have only 8-bit resolution. Measuring with oscilloscope will give only approximate values. A good discussion of oscilloscope resolution can be found here. So when possible, a constant signal must be measured with a good multimeter for maximum accuracy (1% on good multimeters).

TTL01, TTL02 channels low vs high measure voltage measure 0.000 and 5.020 V respectively. Test passed.

DAC01, DAC02
set 0 V — measured 0.000 V
set 1 V — measured 1.000V
set 3.14V — measured 3.144 V
set 7 V, measured 7.00V
set 10V — measured 10.01V
So, the measured constant DAC values are as accurate as can be measured by my voltmeter. Test passed.

Note: the default DAC range setting is 0–10V.
Serial command RANGE1,4 sets DAC01 range to -10..10V.

By the way, you can send serial commands via Arduino IDE serial monitor, with “newline” for termination.

After setting DAC01 range to -10..10V, it was tested in negative range. This was done programmatically by sending serial commands:
DAC1,65535 — measured 10.02V
DAC1,32767 — measured -0.003V
DAC1,0 — measured -9.96V
The last measured voltage seems to be offset by ~0.04 V from expected value (-10.00 V). Not sure if this is a firmware bug or the accuracy of my voltmeter.

Control with MicroManager 2.0

Triggerscope is supported in MicroManager 2.0 via the newer device adapter TriggerscopeMM. In order to use this device adapter you need to upload a new firmware to the board using the standard Arduino IDE: include local libraries via menu Sketch > Include library > Add .ZIP library and select the local \libraries\Scheduler folder. Compile and upload the sketch.

After uploading the new firmware, the MicroManager device adapter TriggerscopeMM can connect to the board:

This device adapter has selectors for DAC voltage range, which is nice:

The Device property browser shows more options than the older version:

Blanking and sequences

The TS documentation uses terms blanking and sequences, which can be very confusing in the beginning. As Nico Stuurman pointed out in the comment below, definition of these can be found in the TriggerscopeMM Wiki:

Blanking will cause the output to go to 0V when the input pin is low (or high). Sequences will be pre-loaded to the Triggerscope, and changes in input pin state will cause transition to the next state. Blanking and sequences can be combined.

Conclusions so far

I really like Triggerscope hardware design: it has very ergonomic interface, small footprint, and it is very fast due to the use of latest Teensy chip. It clearly has a lot of potential for microscopy and other lab applications.

After my initial (very critical) review, ARC took much effort to add comprehensive documentation and fix the bugs I stumbled upon. This is great that that they listen to feedback and improve quickly!

The triggered waveform generation API is still in development, and I hope to write about it’s performance when it will be released. It will be a wonderful feature to have, asit will allow Triggerscope to replace NI DAQ boards in many applications. Hopefully it will be much easier to program waveforms in Triggerscope than in NI DAQ, and tinker with the source code for more customization.

(to be continued)

--

--