M-SiPM gamma counter


Yes, I did it! Finally, I’ve designed and created a portable gamma-ray counter based on either a CdWO4 or CsI(Tl) scintillator, coupled with a 6x6mm SiPM. It will be very useful, connected via Bluetooth to my mobile phone, for detecting radioactive items at antique fairs and second-hand stores. Let’s find some radium-painted clocks! The crucial aspect was to make it small enough to fit in a pocket, including a rechargeable LiPo battery and a USB-C connector for practicality. The scintillator crystal provides unbeatable sensitivity: initially, I prototyped it with CsI(Tl), but to make it smaller, I chose CdWO4. This material, thanks to its high density, can be as sensitive as CsI(Tl) but with a smaller volume.

Although this project is not open source, I will share the schematic and an example Android App created with App Inventor. You can download it here: p9A0i_bluetooth_dinamico


You are welcome to build your own version of the circuit/software for personal use only, either by taking inspiration from my schematic or by copying it.

However, you cannot create a commercial product without infringing on my copyright. © Papadopol Lucian Ioan 2021. All rights reserved.


This is the general schematic, provided to give you an overview of the design. The following sections will explain some key parts of it in detail.

Essentially, the schematic consists of five functional blocks:

  1. MCU STM32L053: It counts pulses, controls power to peripherals, and sends data via UART.
  2. TIA + SiPM: This block is responsible for pulse extraction and forming.
  3. SiPM Bias Supply: It provides the necessary bias for the SiPM.
  4. LiPo Charger and Voltage Regulators: These components manage battery charging and voltage regulation.
  5. Bluetooth Module: This module facilitates wireless communication.

Regarding the LiPo charger and Bluetooth module, there’s almost nothing special to mention. They are standard building blocks. Regarding voltage regulators, one is always operational to power the MCU. The second one is controlled by the MCU to activate or deactivate the Bluetooth, the op-amp chain, and the bias supply.

The push button in the middle of the schematic has a specific function. It triggers an Interrupt Service Routine (ISR) that signals the MCU to either continue operating or enter standby mode.

How does the MCU detect and count pulses? It utilizes the internal OPAMP. The pulse input, C_IN+, is connected to the +IN pin of the internal comparator. A voltage divider made with R18/R19 sets the Lower Level Discriminator (LLD). In the schematic, it’s initially set to 1/2Vcc due to a 100k/100k configuration. However, this is incorrect and is merely a placeholder indicating that you should adjust the divider based on the noise level at the C_IN+ pin as observed with an oscilloscope. I’ve set it to 60mV. When a pulse significantly exceeds the LLD, the comparator triggers an ISR, which increments a counter. This counter is read and sent via UART once per second, then reset.

SiPM bias PSU

This schematic generates +28.5V bias from 1S LiPo, 4V aproximatively, with 10mVpk-pk noise. It’s derivated directly from MAX5026 datasheet. Please read it!

R13-R14 selects output voltage. L1 is 47uH with 300mA current capabilty from Wurth brand. Output ripple filter is made with CLC cell C7-L2-C11. Please select good 1uF 50V ceramics or tantalum.


This part of the schematic, despite its simplicity, took me a lot of time to optimize. The first op-amp is the Transimpedance Amplifier (TIA). Its gain is set by the 10k feedback resistor. The 470-680pF capacitor in parallel is necessary to compensate for the SiPM capacitance. You must choose it carefully to prevent oscillation in the stage. The second stage is an inverting gain stage with a 10x gain, where you can adjust the gain as needed. Please note that each op-amp operates biased at 1/2Vcc via the 10k/10k voltage dividers on the -IN pin. This arrangement allows for the presence of negative pulses at the output of the TIA, which are then inverted by the second gain amplifier.

The OpAmp must be choosen to have >=1Mhz GBP for CdWO4 and >=10Mhz for CsI(Tl).

This is how pulses appear at the exit of this stage. The result is sufficiently good for conducting basic gamma spectroscopy. I plan to enhance my project to accommodate this by adding a bypass track to the ADC input pin and setting the MCU ADC to run in continuous mode with DMA, incorporating fully software-based peak searching. This update will be added here as soon as possible.