Segmented Quadrupole — PCB Edition

Recently we’ve been working on the design and construction of a new instrument build centering around a quadrupole mass spectrometer as a detector for ion mobility spectromety. The primary motivation is to monitor the arival time distributions (ATDs) for specific ions without the duty cycles limitations of TOF system. In many ways this may concept may be counter-intuitive, however, though TOF systems are quite fast (operating into the kHz range), if they are used as sampling devices for drift tube IMS separations cycle times in that approach 10 kHz only allow sampling of the IMS domain every 100 microseconds. When placed into context of higher resolution IMS experiments such sampling rates are largely inadequate for capturing enough points across the ATD. While we surely have not solved this problem fully, the current build needs to shuttle the any ion packets efficiently towards the detector. Stated differently, any delay in getting ions to the detector aids contributions to peak widths from diffusion–this we want to minimize. Below are a few sketches of the target build in Solidworks and the newly arrived segmented quadrupoles. Key things to remember is that this design is not aimed at a resolving quadrupole but rather one focused on ion transmission. Also, the great technical notes at Ardara Technologies would suggest that a simple rectilinear quadrupole would be sufficient for ion trasport but we simply wanted to explore this possibility.

Building upon some of the ideas at the Rowland Institute we had some of the segments comprising the higher pressure quad manufactured along with the necessary coupling board. The coupler depicted corresponds to the one-half of the RF signal needed to power the setup. Stay tuned for the results on the implementation. For those interested in the actual files (still a work in progress) hop on over to github for the files.

Schematic of the segmentic PCB ion guide.
Top view of the segmented quad. Things to note include the 0.01″ teflon spacer between boards. The tabs are not ideally located (oversight on beta design) but in newer version this is corrected. The clamp is simply used to simulate the compression necessary to hold the setup together.
Side view of the assembly. Notice that the PCB routing does not produce a smooth surface, however, we expect the ion transmission characteristics to be largely unaffected by this manufacturing by-product.
Slotted coupling board illustrating the concept behind the assembly and electric signal connections.

IMS Spectral Simulator: Arduino Edition

TL/DR — Code and wiring diagram to output a simulated spectrum WITH noise on a specified microcontroller output pin. Requires hardware interrupts which simulate a gating pulse.

When developing new approaches to signal processing or simply designing a new data acquisition system, having a reasonable reflection of the target signal is helpful during the development/testing stage. In an effort to supply the community with such a resource, below is a set of arduino code that is designed to output a simulated spectrum from a microcontroller following a hardware interrupt (i.e. a gate opening event). Using the variables in the code it is possible to space the output of the sequence. Though a standard arduino (e.g. 16 MHz clock) may be able to simply output the spectrum, if we want to add a level of random noise a call to generate a random integer is required. In that case a few extra clock cycles are necessary to generate such a number. For such a situation, a slightly faster clock speed is warranted.

The Adafruit WICED is an entirely capable little beast that fits the bill. In addition to sporting a WIFI chip and an additional flash module, this unit boast a 120 MHz ARM Core 3 processor. When considering the target goal (i.e. hardware simulation of an IMS spectrum), that speed comes in handy. More specifically, the code below illustrates that after each interrupt the next element in the simulated spectrum is output BUT it includes and extra call that generates a random integer that is added to the spectral element. The net effect is that a spectrum with a user-defined level of noise is output. When combined with a scope or data acquisition system, the impact of signal averaging can be explored.

To aid anyone interested in adapting the arduino code a sample spectrum from raw spectrum is provided along with output from the WICED platform with added noise. Additionally, a wiring diagram is provided though be sure that the input trigger is not too large as to overload the WICED input levels. For reference, we are a big fan of the Digilent Analog Discovery units as they provide a wide degree of functionality (i.e. two 100 MS/s ADC inputs and two 100 MS/s DAC outputs), an intuitive graphical interface, and the capacity to script the data acquisition.

Updated 2/27/2019: Here’s a video used to demonstrate SNR scaling for WSU’s Instrumental Analysis class using the output from the posted code.

Raw Simulated Spectrum:

Wiring Diagram:

PA5 is the interrupt pin (Trigger In)

A4 is the simulated spectrum out (Spectral Output)

Arduino Code for WICED Feather Platform

int irqpin = PC5;
int ledpin = BOARD_LED_PIN;

#include <libmaple/dac.h>

volatile int ledstate = LOW;

int spec[1000] = {3,4,0,4,3,1,3,3,0,1,1,2,2,0,2,0,5,0,3,1,7,0,0,0,1,1,2,0,2,1,1,3,1,3,3,4,3,1,0,2,5,5,2,1,0,2,3,3,0,4,0,0,1,1,4,0,0,5,3,1,1,2,3,0,0,2,3,0,4,1,0,6,1,0,1,1,3,0,0,3,4,3,0,6,1,0,1,5,0,5,4,9,12,11,15,16,23,22,32,33,41,48,50,61,61,68,73,75,80,90,86,94,97,96,96,94,90,85,86,89,78,75,60,54,46,30,30,13,6,1,14,18,37,43,53,57,71,78,76,83,85,99,101,101,96,97,95,88,89,86,78,74,74,64,58,53,40,43,35,36,20,23,23,15,18,16,8,4,8,2,6,5,2,1,3,0,1,0,2,0,0,5,1,1,2,2,0,2,4,0,3,1,2,1,5,2,1,2,1,0,2,4,4,2,3,5,0,0,4,1,1,0,2,2,4,1,1,2,0,0,0,0,1,3,1,2,0,1,2,1,4,2,2,3,1,2,2,2,4,1,4,0,3,4,4,0,5,2,3,2,4,1,2,1,0,1,4,0,2,5,2,3,2,5,7,2,5,1,1,3,3,0,1,4,2,3,2,1,4,10,1,4,1,3,0,2,2,0,1,1,1,2,0,5,3,10,2,0,10,12,3,22,13,16,30,30,38,38,49,60,67,78,88,99,118,126,146,157,179,193,213,228,245,258,278,289,300,309,317,322,325,324,325,318,315,308,292,287,270,254,242,218,211,189,176,155,144,121,116,92,78,75,62,60,50,44,42,38,39,35,43,44,51,54,66,71,83,92,105,125,135,159,175,191,218,243,263,280,303,323,346,362,388,398,407,420,430,440,434,432,430,429,419,403,391,376,354,339,310,295,270,247,226,208,188,168,146,124,117,97,84,71,63,47,47,36,28,25,22,20,11,12,10,4,14,5,4,8,0,5,0,0,2,1,1,1,2,2,3,0,2,0,1,1,1,0,1,3,0,2,0,6,4,3,0,2,0,2,1,0,4,0,0,0,0,2,2,2,1,1,1,3,1,2,0,0,3,1,1,6,0,4,1,1,2,3,6,0,3,4,1,1,3,0,2,0,0,1,3,0,0,0,2,2,2,2,4,4,1,1,3,0,0,1,4,3,4,4,3,5,6,6,11,14,22,19,24,29,27,38,49,56,66,74,82,89,108,123,134,156,180,194,213,235,253,275,301,319,347,361,387,402,422,441,448,463,463,465,476,473,476,473,463,452,441,422,409,393,370,350,328,313,287,261,241,217,199,178,162,141,131,110,101,90,73,62,55,50,38,32,24,24,20,15,13,9,9,8,4,8,3,2,2,2,3,0,2,0,11,5,3,3,0,2,0,5,0,4,1,0,2,1,2,1,1,1,7,4,0,2,1,2,1,1,4,0,4,3,1,1,2,3,1,2,2,5,0,4,3,0,0,2,5,4,1,1,0,1,4,0,4,10,6,2,6,8,16,15,14,17,22,24,21,30,33,37,44,44,57,61,69,72,89,89,96,105,110,124,131,139,149,151,161,170,171,176,177,185,188,183,192,188,184,187,177,173,170,167,160,148,151,139,129,122,115,113,103,92,87,82,74,63,62,56,46,38,38,35,25,23,19,13,18,14,12,8,11,6,4,6,8,3,8,3,6,10,11,15,9,14,19,24,30,33,35,38,48,47,51,60,71,82,87,92,102,110,124,135,136,151,156,174,179,195,200,208,214,219,224,228,234,239,236,239,237,237,228,229,221,209,208,202,192,184,174,165,157,151,141,126,119,113,110,92,78,74,65,63,57,50,41,37,37,28,27,23,21,14,17,16,14,6,4,10,0,4,3,7,0,0,2,3,2,3,0,0,1,1,5,4,1,2,0,1,5,4,3,5,2,5,3,4,1,1,3,0,1,4,0,5,4,4,2,6,2,3,3,3,3,1,1,1,1,6,4,0,1,0,1,2,3,1,0,0,2,4,1,2,2,1,4,0,0,0,4,3,0,5,0,1,2,0,2,7,0,1,3,5,0,6,4,0,0,7,3,2,2,2,2,0,2,1,1,2,2,5,0,0,2,0,0,0,0,0,0,4,0,0,2,1,1,3,1,1,3,3,0,4,4,2,2,1,3,1,0,3,7,1,3,2,2,5,0,3,2,1,1,0,3,1,5,2,2,0,3,5,9,0,2,0,3,1,2,2,0,3,0,4,7,5,4,1,6,1,3,1,3,1,2,1};

uint32_t i = 0;

void setup() 
  // Setup the LED pin as an output
  pinMode( ledpin, OUTPUT );
  // Setup the IRQ pin as an input (pulled high)
  pinMode( irqpin, INPUT_PULLUP );
  // Attach 'blink' as the interrupt handler when IRQ pin changes
  // Note: Can be set to RISING, FALLING or CHANGE
  attachInterrupt( irqpin, blink, CHANGE );

  dac_enable_channel(DAC, 1); // Configures Pin A4 as DAC1
  dac_init(DAC, DAC_CH1);     // Start DAC1

void loop() 
  // Set the LED to the current led state
  digitalWrite(ledpin, ledstate);

void blink() 
  ledstate = !ledstate;
  for(i = 0; i<1000; i++){
    dac_write_channel(DAC, DAC_CH1, spec[i]+random(10, 500));

Open Source IMS Initiative Update


Following up on previous post, we’ve finally released a major update to the Open Source IMS Initiative.  Appearing now in Hardware X we detail a new modular IMS design that is extremely flexible.  Three of our ASMS 2018 posters feature data from these system and the are proving an invaluable new tool to our research infrastucture.  Though the current systems are limited to lower temperature operation (i.e < 120 °C),  the designs are readily adapted to Rogers material which is quite robust well above 200 °C.  Another key adaptation making this design tractable is the new ion shutter design which uses 3 grids to create a set of well defined ion pulses.  Though the BN-gates are attractive in that the physical structure is in a single plane, their construction is an art.  Moreover, the fields established by the BN gates are also, by no means, fully planar.  With the new design we can achieve that smooth field in the region surrounding the ion gate and still get extremely small ion gate pulse widths (i.e < 20 μs).  If you are interested in some of the core details or have suggestions for improvement, come find us on github:


Ion Gates?! Where we’re going we don’t need ion gates!

Ion gating remains a critical aspect of drift tube IMS experiment and a range of clever approaches have been used the past.  However, most techniques use a physical grid to modulate the ion beam. In collaboration with Steve Kenyon and Keith Gendreau we’ve adapted a modulated x-ray source to printed circuit board IMS.  Though there is still room for improvement, the initial results look quite promising.  Interestingly, because the source is now located orthogonal to the drift axis, a new term is added to the descriptors of peak width.  What we’re most excited about, however, is the fact that because we no longer have a physical ion gate, some of the capacitive coupling during the pulsing of a standard ion gate is now effectively eliminated–enter artifact-free multiplexing…

Open-Source, Modular Approaches to Ion Mobility Spectrometry

Pulse_Comp_v3Outside of an ionization source and a Faraday plate, a drift tube IMS system is fundamentally comprised of 5 primary components:

  • Reaction/Drift Cell
  • Ion Gate
  • Gate Pulsing Electronics
  • Current to Voltage Converter
  • Data Acquisition System (DAQ)

Within the IMS research community hardware and DAQ solutions are often custom and rarely replicated exactly. In an effort to address this knowledge and resource gap, the links posted below outline a range of solutions to the construction and operation of research-grade ion mobility spectrometers.  It is our sincere hope that this information will be useful to other research groups and encourage others to make suggestions and improvements.  The github links, including those from GAA Custom Engineering are found below:

Ion Gate Pulser

Current to Voltage Converter

WiPy DAQ System and GUI

The most recent poster presented ISIMS 2016 in Boston, MA can be found here: Clowers_ISIMS_2016_v5.

Live from Fulmer Hall: Waters G2

We are pleased to announce the unpacking and, more importantly, the successful pump down of the G2.  Combined with a new UPLC unit we anticipate this instrument playing a large role in future metabolomics work in our laboratory. Kudos to Justin Chang from Waters for executing the pump down sequence like a champ.  IMG_2148



IMS – Ion Trap Equipped with UV Photofragmentation


Comparison of CID and UV Photodissociation of Leucine Enkephaline Acquired at WSU.


In early 2015 the research group is pleased to bring the next generation ion mobility-ion trap system online.  This system is equipped with two ion gates which allows the speed of the IMS to be effectively coupled to the slow scan speeds of traditional ion trapping experiments.  Though not as fast as tradition IMS-TOF configurations, this experimental setup does allow multiple stages of CID and alternative modes of fragmentation such as UV and IRMPD.  Another unique feature of this IMS system is that it can obtain IMS spectra using a standard Faraday plate and/or the LTQ.

Additional photos of the initial setup and UV beam line:


The ExcellIMS Dual Gate System smoothly mates to the LTQ.


Though a little difficult to see the IMS tube actually uses a square drift tube design with a nice set of BN gates.


Fully functional Dual-Gate IM-LTQ system.




193 nm Excimer Beam Line


3D Printing CTC PAL Autosampler Trays

Recently, we brought two CTC PAL systems on-line in the group and in an effort to save a little bit of money* and explore the utility of 3D printing we engaged the engineering department at WSU to print out a sample trays that was compatible with the PAL system.  Granted the result doesn’t have the fancy vial numbers (nor did we try) but the result was quite pleasing.  3D printing still isn’t dirt cheap when you factor in the time but at least for this application the trays were a significant break compared to the commercial version.


In case there are others that are interested, the stl and sldprt files are here:  PAL_Tray

*sure the cost of the PAL vastly exceeds the cost of single tray but every little bit counts at this stage.


We Have Ignition on Ion Engine #1

First Data AcquiredThe Clowers Research Group is now live.  Reporting in are the background ions from ionized air measured using a residual quadrupole gas analyzer and the LeCroy “Panzer” oscilloscope.  These data are to help monitor background gases in the high vacuum chamber (not shown) and provide diagnostic support for gases ionized by the excimer laser (also not shown).  With a little luck, laser beams are next week.  Stay tuned…