X-ray beam hardening calibration is a method of calibrating an X-ray detector for use with a multi spectral X-ray source. Because I am not a particle physicist, I will not attempt to explain it any further than that, here is a link that provides a better overview than I could ever come up with.
Now that you know what it is, how do you do it?
Basically you want to put various thickness of material such as aluminum between your X-ray source and your detector and then calibrate the detector at each thickness level.
Here is a video of how we did this at ASI:
So in each frame holder we can place sheets of aluminum and then move them in and out of the beam for each calibration level, and the whole thing is controlled remotely so there is no need to turn off the X-ray source and open the X-ray cabinet. All of this of course makes the beam hardening calibration both faster and safer.
How does the system really work?
At the core of the electronics is a BeagleBone Black, I designed a custom PCB that plugs into the BeagleBone Black headers, and this PCB has 5 L293s to drive the 10 DC motors, and then it uses 20 GPIOs to listen for end stop switches.
The BeagleBone Black runs linux and is connected to the network; the firmware accepts TCP/IP connections, and commands are sent over the network from a remote PC to instruct which motor to move where. When a motor is so instructed it simply moves in the correct direction until the end stop switch is hit, at which point the firmware stops driving the motor.
All of the mechanical work for this project was done by a mechanical engineer, and I was responsible for all of the software, and PCB design and test. The software involved setting up the pinmux for all of the GPIOs, and then writing a firmware layer that accepts TCP/IP connections and interfaces with the GPIOs to drive the motors. Additionally I wrote a host side library that provided an easy to use C++ interface to command and control the motors. Finally I wrote a java module that interfaced with the host side library via JNI to provide a GUI for end users to actually manipulate the X-ray beam hardening calibrator.