openQCM TWIN · Dual-crystal QCMSubtract the world.
openQCM TWIN carries two identical oscillators on one OEM board. One crystal meets your gas or your vacuum; the other stays behind as a reference, at the same temperature (and, if it sees the same gas, the same pressure and viscosity). Whatever moves both, temperature first of all, largely cancels in the difference. Whatever moves only the sensor is your signal.

F9998240,10001570,3330
- crystals: sensor and reference
- 2
- frequency range
- 1–25MHz
- Peltier drive
- ±1.5A
- board weight
- ~25g

Two oscillators, one difference.
Two Pierce oscillators on SN74LVC1GX04 inverters, with identical components, drive the sensor and the reference crystal through gold-plated MMCX connectors. A Teensy 4.0 counts both in hardware over 2 ms gates, accumulated into a one-second window, and reports the two frequencies and their difference. The difference also leaves the board as a TTL square wave at |f_sensor − f_ref|, set by the firmware once per second, on its own connector, for a counter or a data logger.
Every connector, named.
59.8 × 53.5 mm, four M2 holes. A schematic map, not to scale: point at a connector.
TTL DIFFMMCX · TTL square wave at |f_sensor − f_ref|, updated once per second
And a Peltier to hold still.
A Thorlabs MTD415T controller drives a thermoelectric element up to ±1.5 A, heating or cooling, reading a 10 kΩ thermistor with better than 10 mK resolution (2 mK typical). Its digital PID, with auto-tuning, holds the set point stable to ±0.01 °C. An MCP9808 sensor (±0.25 °C) watches the board, and a PWM fan output completes the loop.
- Thermistor resolution, typical
- 2mK
- Set-point stability
- ±10mK
- Peltier current, both ways
- ±1.5A
Plain text on a serial port.
The open Arduino firmware prints one line per second: F with reference frequency, sensor frequency and their difference in hertz; T with the Peltier temperature; C with the board temperature. Anything typed on the port goes straight to the MTD415T, so the temperature controller can be tuned from a terminal.
Made to disappear into your rig.
TWIN mounts on four M2 screws and takes your own sensor holder, Peltier, thermistor and fan on push-wire terminal blocks. In the box: the board with a Teensy 4.0 and sample firmware, USB data cable, USB power cable and 5 V adaptor for the Peltier, five SMA-to-MMCX cables and a sample Peltier-thermistor kit.
Where the board ends.
TWIN measures frequency at the fundamental only. Its manual gives no frequency-noise figure and no vacuum rating for the board itself: in a vacuum system, the crystals sit in your holder and the board stays outside, behind a feedthrough. Common-mode rejection is only as good as the match between the two crystals' temperature curves and thermal paths: near room temperature their slopes can differ, and a fast temperature change leaves a transient in the difference.
The data sheet.
From the official manual. Where two documents disagree, the figure is left out until it is confirmed.
Measurement
- Crystals
- 2: sensor and reference
- Range
- 1–25 MHz
- Quantity
- Frequency, at the fundamental
- Oscillators
- 2 × Pierce, SN74LVC1GX04
- Counting
- Teensy 4.0 timers, 2 ms gates × 500 = 1 s
- Outputs
- USB serial (115200 baud); TTL difference frequency
Thermal
- Controller
- Thorlabs MTD415T
- Drive
- ±1.5 A at 4 V, heating and cooling
- Sensor
- 10 kΩ NTC thermistor, resolution < 10 mK (2 mK typical)
- Set-point stability
- ±0.01 °C (digital PID, auto-tune)
- Board sensor
- MCP9808, ±0.25 °C typical
- Fan
- PWM output with RPM line
Board
- Size
- 59.8 × 53.5 mm
- Weight
- ~25 g
- Mounting
- 4 × M2 holes
- RF connectors
- MMCX: SENS IN/OUT, REF IN/OUT, TTL difference
- Power
- USB 5 V (logic); 5 V jack (Peltier)
News on openQCM TWIN, by email.
Firmware and software releases, new modules and accessories, application notes. A few emails a year.
Build TWIN into your rig.
Tell us about your gas cell or vacuum system, and we will help you with holders, Peltier and firmware.