Close
0%
0%

Silicon Photomultiplier Gamma Spectrometer

Gamma spectrometer using scintillation crystal, Silicon Photomultiplier (SiPM), and all-digital FPGA signal processing

Similar projects worth following
This device allows for the quantitative measurement of the amount of different isotopes in an analyzed sample. It consists of a scintillator (a material that converts gamma particles into photons) and a photomultiplier that multiplies those photons and converts them into electric current pulses. By measuring the amplitude of these pulses, it is possible to calculate the original energy of the gamma ray that produced the pulse. Sampling data over time and plotting its histogram reveals which radioactive isotopes are present in the measured sample and their respective ratios.

Design Philosophy

Silicon Photomultiplier vs Traditional PMT

Traditional gamma spectrometers use vacuum photomultiplier tubes (PMT) that require high voltage (1-2kV), are fragile, bulky, and sensitive to magnetic fields.

This project uses a Silicon Photomultiplier (SiPM) - a modern solid-state alternative that solves the mentioned issues of PMTs.

Digital vs Analog Processing

Traditional spectrometers use analog CR-RC pulse shaping circuits and peak detectors.

Thanks to modern ADCs and FPGAs, it is possible to do all of this in software, making modifications much easier. The disadvantage is that the project is more costly due to higher requirements for the ADC and FPGA.

Hardware

Architecture Overview

The hardware consists of two PCBs:

Analog Frontend

Handles low-level currents produced by the sensor (typically 1µA - 1mA pulses, 10mV - 1V after amplification):

  • Transimpedance Amplifier (LTC6268) - Amplifies current pulses from SiPM and converts to voltage
  • Differential ADC Driver (LTC6363) - Shifts the signal to +1v5 common-mode voltage required by the ADC
  • Temperature Sensing (TBD) - Monitors SiPM temperature for bias compensation
  • Bias Supply (TPS7A4901) - Provides stable, filtered 29V bias voltage for the SiPM, automatically adjusted for SIPM's temperature changes
  • Overcurrent Protection (TBD) - Cuts bias voltage if SiPM is exposed to external light source, preventing sensor damage from excessive photocurrent

Note: Analog pulse shaping and peak detection are not used - raw signal is digitized directly and processed in FPGA.

More info.

Processing and Power
Handles high-speed data processing and provides power for all nodes:

  • ADC (AD9226) - 12-bit, 65 MSPS sampling rate, produces 780 Mbps (97 MB/s) of raw data
  • FPGA (iCE40HX4K) - Real-time digital pulse processing (trapezoidal filtering, peak detection, histogram generation)
  • SPI Flash (TBD) - Stores FPGA configuration bitstream
  • SPI Port - External header for FPGA programming
  • UART to USB Converter (TBD) - Communication interface to PC.

More info.

Tools: KiCad.

Software

Tools: VHDL

More info.

Mechanical

The analog frontend requires a metal chassis for protection from electromagnetic interference and external light sources.

The scintillator crystal is mounted inside using a 3D-printed stand.

The crystal and SiPM are optically coupled using optical gel to minimize light pulse reflections at the interface

Tools: OpenSCAD and FreeCAD.

More info.

Simulation

LTspice
  • Simulation: Parts of the electronic circuit are simulated in LTspice.
  • Visualization (optional): The results can be either observed in LTspice or imported into a Docker-based Jupyter Notebook. This allows for further simulation analysis (although it's not really used for now). Also, the graphs are more aesthetic this way.

  • Try to keep it easy to solder and cheap

    Robert Gawron03/25/2026 at 22:34 0 comments

    I think it's best to handle all the math is in the FPGA (but I don't know FPGA). That way, no need for a peak detector or RC circuits, and it’s a lot easier to fix code than it is to reroute a PCB.  Also I've tried to choose easy to solder chips:

    • MICROFC-60035-SMT-TR1 as a sensor
    •  LTC6268 as transimpedance amplifier
    •  LTC6363 differential amplifier
    •  AD9226 fast "and good?" ADC
    •  iCE40HX4K + SPI flash for data handling
    •  maybe some STM32 for communicating with outside world

    TBD:

    •  SW tools for iCE40HX4K 
    • divide project on what can be done in v1 vs what can be touched in v1, learned and finalized later.

  • LTspice+JupyterNotebook simulation of sensor biasing

    Robert Gawron03/21/2026 at 18:15 0 comments

    Most important, there's  a relatively cheap photomultiplier diode, looks perfect for this project: MICROFC-60035-SMT-TR1.

    I've decided to change plans and use a regular DC/DC converter plus a silent voltage regulator at the output; this way, the output voltage will be well-stabilized and can be adjusted for temperature changes. 

    If I made the math right, mentioned above diode needs a bias of 28.89V - 29.22V (why it's not constant later on in post) assuming the device will work in temperature range of 20C-35C (meaning 15C span)?

    I've made this simulation and it seems to work (but it's just a simulation):

    The silicon photomultiplier (SiPM) requires not only a stable bias voltage, but also temperature-dependent voltage adjustment. This is necessary to compensate for the parameter called "temperature dependence of Vbr" (breakdown voltage), specified in mV/°C. As the SiPM temperature increases, its breakdown voltage shifts, causing its detection characteristics to change. To maintain consistent meassurements, the bias voltage must be increased proportionally - by the specified mV/°C value for each degree of temperature rise.

    The TPS7A4901DGNR regulator uses a feedback (FB) pin to monitor its output via a resistor divider. By injecting additional voltage into this node, we trick the regulator into sensing a higher-than-actual output, causing it to reduce the real output voltage. This provides a mechanism for precise voltage adjustment through an external control signal directly from microcontroller or via DAC for better precision.

    I didn't simulate gathering the actual temperature, as this seems easy.

    The diagrams were made in LTspice, and then raw output files were parsed in Jupyter Notebook Python to produce the above diagrams; this way, the diagrams look much better, and it's possible to do extra math.

    Jupyter Notebook is a web server that acts as a nice wrapper for small scripts, etc.; it's not a full IDE, but it works great for small snippets of code. It's containerized and launched inside Docker, but the web port is exposed so that on the host it can be accessed via a web browser.

  • Choosing a Scintillator crystal, PIN photodiode, and its biasing

    Robert Gawron03/18/2026 at 19:08 0 comments

    Choosing detector elements

    This project will be much more expensive than what I was thinking - scintillator crystals and PIN diodes are expensive! I've found a shop online that has scintillator crystals, and it seems to me that this one will be good:

    Hopefully, the frontend is the most pricey part, I think.

    Choosing sensor biasing

    The PIN diode can be biased either negatively (pulses will be positive, meaning signal peaks when a particle is detected will be higher than the background) or positively (peaks will be lower). Negative biasing seems better, so I will stick to it.

    The S3590-08 can withstand 100V of reverse voltage, so I plan to bias it with -70V - that should be good enough and it gives margins (I want to be extra safe since it costs money!).

    The easiest and cleanest way, at least for a prototype, is to just use 12V batteries in series. I've already used this when I was building a semiconductor radioactivity detector (which is a much more simplified version of the gamma spectrometer being designed here). The problem with batteries is that they lose voltage over time (although the PIN diode takes almost no current) and they take up a lot of space on the PCB/device.

    I was thinking about a DC/DC converter to produce the needed -70V, but then I would need a coil or a transformer in it, and I don't want to mess up the small signal from the diode with EMI interference from a coil. Maybe that's not a problem at all; I don't know, as I haven't built such a thing before.

    I then moved toward a voltage multiplier and designed a Dickson charge pump using LTspice, which at least in theory would give me the needed -70V from a usual 5V. Here is the circuit and simulation:

    Will this circuit work in real conditions with all the parasitic capacitances, resistances, etc? I don't know, so I will put space on the PCB for both batteries in series and this charge pump. If the pump works, great, if not, I will use batteries in the first prototype.

View all 3 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates