Cosmic Ray Telescope

Cosmic Ray Telescope

Well, it’s not really cosmic rays and it’s not really a telescope…

Just as X-rays can be used to view inside a human body, it is possible to use muons to get at least a shadowy image of the hidden interior of intriguing stone structures.  This is how the “Big Void” in the Great Pyramid was “discovered” (though it isn’t really discovered until somebody manages to get a camera in there.)

Muons are born when cosmic rays from space slam into our upper atmosphere. They rain down on us constantly, passing through everything (including you, right now) like ghosts.  But they sometimes get stopped, just as X-rays do.  By comparing how many muons we “see” in different places, we can work out whether there is something very solid, or a void, in between us and the source of muons – the sky.

How do we “see” muons?  One way is to take a piece of “scintillator” material, in this case a special plastic called BC-408.  When a muon interacts with it, the BC-408 gets excited and generates a pulse of deep blue/violet light.  It’s only very faint, so we use a very sensitive device – in this case a silicon photomultiplier (SiPM) to view it.

BC-408 is tricky to get hold of in small quantities, but Mark Shropshall at Mi-Net Technology Ltd kindly provided a block from the manufacturer Luxium Solutions.  It’s a thing of beauty just on its own.

BC-408 – Scintillating!

I want to make a sort of telescope.  Other high energy particles will excite the scintillator, so to be sure I am capturing muons I am making a sandwich, with a piece of lead as the filling, and two pieces of scintillator as the bread.

For the microcontroller to declare that is has spotted a muon, the top scintillator must flash a short time before the bottom one – this tells it that the particle came from the sky.  The piece of lead is to absorb other non-muon particles – which will cause the top scintillator to flash, but not the bottom one.

The aim is to be really clever so that we make the most of the magic inside an STM32G431 microcontroller.  Conventional detector front ends need/use bias resistors, load resistors, coupling capacitors, threshold pots, protection diodes, and amplifiers. I’ve got rid of them all – I hope!

The SiPM fast output drives the STM32 comparator input directly (high-impedance match). DACs replace threshold resistors. ADCs replace external measurement. Comparators and TIM2 replace coincidence logic chips. The entire analogue front end is inside the microcontroller, so we just need an MT3608 boost module to provide the required higher voltage to the two MICROFC-60035-SMT-TR SiPMs.

The whole thing is matchbox-sized and component cost is about £60.

Component Part Cost Role
Scintillators Plastic × 2 Detect muon passage through both layers
SiPMs MICROFC-60035-SMT-TR × 2 £16 each Convert scintillation photons to electrical pulses
Bias supply MT3608 boost module £1.75 28–30 V SiPM bias from 5 V input
MCU STM32G431CBU6 (WeAct Mini) £4 Hardware coincidence, entropy output, UART to FPGA

I am writing this as I go along so I don’t know right now if it’s going to work, here’s the detail (you can skip the nerdy bits):

Hardware Coincidence Detection

A muon passing through both scintillators triggers them within nanoseconds. The STM32 hardware comparators (COMP1, COMP2) watch both SiPM fast outputs continuously. When the first fires, TIM2 captures the timestamp via input capture. When the second fires, the ISR calculates the delta. If within 100 ns (17 ticks at 170 MHz), the event is counted. This happens entirely in hardware — the main processor sleeps until a confirmed coincidence.

Current resolution: 5.88 ns ticks (TIM2 at 170 MHz). HRTIM can achieve 2.1 ns if tighter timing is needed.

Active Baseline Restoration

SiPM fast outputs show a voltage dip after each pulse. At low count rates this doesn’t have a big effect. At higher rates the dips add up and the threshold becomes unreliable.  So, every 100 ms the firmware samples the SiPM node voltage via ADC and injects a correction through the DAC output on the same wire (PA4 jumpered to PA1 node; PA5 jumpered to PA7). 

Self-Healing

The DAC output and SiPM input share a wire, which can sometimes start oscillating — a rapid wobble that looks like thousands of false events. The firmware detects this by taking 20 rapid ADC samples and calculating variance. If variance exceeds OSC_THRESHOLD, the DAC output driver is switched to high-impedance mode (BOFF bit), breaking the feedback loop. After HEALING_RETRY_MS (10 s) of stability, it attempts to reconnect. The process should be fully automatic – maybe!

I might add:

  • Dead-time check: add 1 ms debounce in ISR to suppress SiPM recovery double-pulses
  • If baselines never reach ~50 mV, invert the compensation sign in comp_mv logic (depends on DAC coupling to node)

The sketch is written, so the next step is to cut the scintillator into 30x30x10mm pieces of bread and add in the 10mm thick lead filling.  Each scintillator needs to be surrounded by a reflector that keeps external light out and the nice blue light flashes in.

To be continued….