Open-Source IEC nuclear fusion reactor control, monitoring, and data logging system
OpenReactor is an open source reference design and control system for a small scale neutron-producing IEC fusor. The control system integrates with Pfeiffer high vacuum turbo pumps, MKS and Edwards high vacuum gauges, MKS and Sierra mass flow controllers, high voltage power supplies, and proportional neutron counters and NIM instrumentation.
-
Repeatable "one-click" fusion - OpenReactor runs reusable YAML configuration profiles and monitors power, vacuum, and gas delivery conditions to achieve fusion with no user interaction
-
Mobile Control - a mobile web app communicates with the reactor to tweak settings remotely in real time over the network
-
kubectl
-inspired CLI for monitoring and control -
Realtime data logging and monitoring with InfluxDB and Grafana
-
Modular microservice architecture
-
100% open source
Deuterium plasma (During neutron-producing fusion run) |
Low-energy plasma test (Poor insulation on high voltage feedthrough) |
Reactor hardware (Chamber behind lead shield and foil cover) |
OpenReactor runs as a collection of microservices that interface with the hardware components of a reactor over RS232 or USB. Each runs in a container and exposes a REST API that's shared between similar hardware, such as different vacuum guages and mass flow controllers. Hardware subsystem microservices share a common service interface that manages configuration, polling, and data logging for each service.
hv
- High voltage power supplypfturbo
- Pfeiffer turbo molecular pump controllersedwgauge
- Edwards high vacuum gaugesmksgauge
- MKS high vacuum gaugesmksmfc
- MKS mass flow controllerssierramfc
- Sierra mass Flow controllerscounter
- Neutron counterradiacode
- Radiacode scintillation counter
The hardware subsystem services, state machine, and Grafana and Caddy, all run in Docker Compose on the reactor control computer. InfluxDB runs on a larger compute cluster to offload query processing.
The central state machine and operator controls run in a service called "maestro
" . When running a fusion profile, maestro
monitors and adjusts reactor parameters such as voltage, vacuum level, and flow rate, to achieve repeatable fusion. It also serves the API and WebSocket server for the web UI and fusionctl
control program.
FSM Flowchart
maestro
detects long term over-current and low vacuum errors and shuts the high voltage supply down to limit arcing. The high voltage supply controller also has an internal current limit that reacts much faster than maestro would be able to.
Reactor operators interact with OpenReactor through a web UI and kubectl
-inspired CLI. The web UI communicates with maestro
over WebSockets for reactor state management and manual control over the high voltage, gas delivery, and vacuum systems.
Web UI | fusionctl CLI |
Fusion profiles describe the reactor's operational parameters for a fusion run. They're stored as YAML documents and managed with the fusionctl
control program.
For example, fusionctl profile generate
creates a new default profile:
name: Default # User specified name
revision: "0" # User specified revision identifier
auto:
startOnApply: false # Start profile on apply
startGas: false # Skip to GasRegulating immediately on CathodeVoltageReached
vacuum:
turboRotorSpeed: 90000
turboRotorStartupHold: 15s
lowVacuum: 0.01
targetVacuum: 1e-05
targetVacuumHold: 15s
cathode:
tripCurrent: 8
rampCurve: "0" # Voltage ramp curve in slope-intercept form in terms of x (in milliseconds)
voltageCutoff: 40
gas:
flowRate: 10
flowSlop: 0.1
runtime: 1m
To apply the profile, run fusionctl profile apply -f 20240701001.yaml
. OpenReactor will start the profile at TurboSpinup
if auto.startOnApply
is set, otherwise it'll wait in the ProfileReady
state for an operator to start the profile from the web UI or with fusionctl fsm next
. Running fusionctl fsm reset
or clicking the FSM reset button on the web UI sets the FSM back to ProfileWait
and stops the current profile.
Each hardware subsystem reports metrics to a central InfluxDB server for visualization in Grafana.
The hv service controls and monitors a Spellman PTV power supply and communicates communicates with a RP2040 over serial. The microcontroller features an internal over-current shutoff, read from a 250W ballast resistor to sink momentary arc faults.
HV supply overview
The power supply case is grounded to the chamber and mains earth through the AC plug, and a RG8 coax cable supplies the high voltage output to the cathode feedthrough.
High voltage power supply and ballast resistor
The gas delivery conversion and delivery system manages Deuterium production and regulation via electrolysis and flow restriction.
The system has two tasks:
- Convert Deuterium Oxide (D2O) to Deuterium (D2) gas via electrolysis
- Regulate gas flow into the central vacuum chamber
There are two independent gas supply lines connected to the vacuum chamber. The primary supply line handles gas conversion and closed-loop flow control, while a secondary manual syringe and needle valve allows the chamber to be purged with inert gas or short fusion runs when supplied with D2 gas.
Gas Conversion and Delivery System Overview
D2O is manually injected into a PEM cell mounted under the mass flow controller as needed prior to reactor operation. A 3-way luer lock valve on the PEM cell input supply tube permits a syringe to push any remaining liquid into the PEM cell to conserve D2O. The PEM cell output is connected to a second 3-way luer lock "divert" valve fitted with a reservoir syringe to store D2 gas during or prior to fusion operation. The divert valve enables the gas supply to come directly from the reservoir syringe or both the reservoir syringe and PEM cell for continuous operation.
The divert valve feeds the mass flow controller, which regulates gas flow from the reservoir syringe and, depending on the divert valve position, the PEM cell too.
OpenReactor supports MKS and Sierra mass flow controllers. Each shares an identical internal REST API and communicates with the MFC over RS232 (Sierra) or USB to a RP2040-based control board.
GDCS with MFC, PEM cell, and adapter column visible | Deuterium Oxide (Heavy Water) |
All high vacuum fittings are 1/4" VCR, with a series of reducers to adapt down to a luer lock syringe connector.
The high vacuum system consists of a series of pumps and gauges to pull and monitor the high vacuum environment in the chamber.
High vacuum system overview
OpenReactor supports the Pfeiffer Vacuum Protocol to control an monitor a wide range of Pfeiffer turbo pump controllers and drive units.
Many turbo pump controllers have a panel mount RS232 port, but some expose RS232 over their X5 port which is blocked by the turbo pump control cable. In this case, it's trivial to break out the RS232 TX, RX, and ground lines to a small panel mount jack between the X1 and X2 ports.
RS232 line added to the TCP control board | RS232 port via back panel connector |
OpenReactor supports MKS and Edwards vacuum gauges for vacuum measurement from atmospheric to 1e-9 Torr.
MKS gauges connect to the mksgauge service over RS232 and report all available pressure reading slots (PR1/PR2 for 901p pirani and piezo gauges).
Edwards gauges connect to a RP2040-based gauge controller which controls the gauge enable state and reports the analog gauge output over USB. The edwgauge service converts the analog gauge signal to a vacuum level according to an interpolation profile (currently supports Edwards AIM-S and APG-L).
Adding other gauges and gas-dependent curves is as easy as adding a new set of interpolation points to the YAML config.
We detect neutron emissions using a proportional neutron counter tube, an amplifier, and a counter running on a RP2040. The counter service logs the count rate over serial and supports any falling-edge signal from a NIM rack or scalar. A RadiaCode scintillation counter monitors lower energy background radiation over USB.
Older Ludlum scalars don't have a RS232 interface like the new ones do, so instead of wiring up a microcontroller to read and control the internal counter's time base and reset state, we can simply expose the pulse signal and trigger an interrupt on a microcontroller. We can wire the counter pulse trigger pin through a voltage divider to get a 3.3V falling-edge trigger signal, and pass it through a panel mount BNC jack to a RP2040 digital input pin.
Tap on the count trigger pin on the 2000 control board | Panel mount BNC connector with voltage divider |
- Plasma conditions
- Langmuir probe
- Optical spectrometer
- Neutron activation decay monitoring with RadiaCode
OpenReactor is licensed under GNU GPL v3.0.