This device has been dubbed ‘Edgerton’, in honour of the legendary Papa Flash.
2019-05-21 – This project is entered in the 2019 Hacakday Prize contest. If you have any feedback or like what you see, please consider following, leaving a comment, or liking the project at https://hackaday.io/project/165622-edgerton-a-high-speed-led-flash. Thank you!
Some time ago I designed and built a ballistic chronograph and used it to take some high-speed photos of bullets striking glass. The results were great, but the photos were somewhat limited by the standard ‘speedlight’ flashes that I used – there was always some motion blur. Edgerton is a ‘High-Speed Flash’ which uses LED’s to make one-microsecond flashes to freeze motion.
High-speed photography is no recent invention. Doc Edgerton was already experimenting with high-speed photography in the 1940’s, and has taken some incredible photos. He was known to use an Air-Gap Flash, which is similar to the Xenon flash tubes found in modern camera equipment. It unfortunately requires much higher voltage which could easily cause injury (SEVERE injury). While I didn’t completely disregard the option, I eventually opted for a safer solution.
A recent kickstarter campaign (Velo One) offered a high-speed LED flash. It can produce flashes lasting 0.5 μs (microseconds), was not dangerous, but was priced about $1,750 CAD! Similarly, other internet hobbiests have conducted experiments with LED’s for high-speed photography (notably petermobbs.wordpress.com and timscircuits.blogspot.com). I did some testing with a single LED and came up with similar results. I’m documenting my attempt at building a full-scale flash.
A Little Science
There are three requirements for a high-speed flash: light power (luminous power), beam focus (viewing angle), and flash duration. Luminous power is the total power output from a source, while luminous intensity is the amount of power per radial angle.
Because the luminous power and viewing angle do not change with flash duration, increasing the flash duration also increases the total light output. The response time of all the components are discussed below. I limited the flash duration to between 0.5 μs and 4 μs, selectable in one-stop increments (0.5 μs, 1 μs, 2 μs, and 4 μs).
Below is a comparison of a typical camera flash vs this high-speed flash (1-μs duration). Both air rifle pellets were fired from the same rifle, travelling about 280 m/s. This demonstrates the advantage of using a high-speed flash for high-speed photography.
Here is a complete parts list. All prices in CAD. Total cost: About $165.
- 12x CREE CXA2530-0000-U20E3 LED’s (datasheet) – $6.66 ea.
- 4x Vishay MKP1848S 10μf Capacitors (datasheet) – $6.17 ea.
- 4x INFINEON IPP60R190P6 N-Channel Power MOSFETs (datasheet) – $3.92 ea.
- 45-390V Boost Regulator (no model number, no datasheet – just search the description on eBay) – $10
- ATMega328P Microcontroller – $3.31
- LM7805 Linear Regulator (from eBay) – $0.25
- TC4452 FET Driver (datasheet) – $3.38
- Opto-Isolated Relay (from eBay) – $1
- TM1637 Four-Segment LED Display (from eBay) – $2
- KY-040 Encoder (from eBay) – $0.50
- AA Battery Connectors
- Various Resistors
- Various Ceramic & Electrolytic Capacitors
- 22-Guage Silicon Wire (multiple colours would be helpful)
- Over 500g of 3D Printed PETG (Please find the STL Files here on Thingiverse) – $20
- 1/4″ Rare-Earth Magnets (from eBay) – $1
- Arca-Swiss Compatible Mounting Plate (I milled, but available on eBay) – $5
- 4x M5 x 16mm Countersink-Head Screws & Nuts
- 6x M4 x 16mm Socket-Head Screws
- 3x M3 x 8mm Socket-Head Screws
- 8x M2 x 10mm Socket-Head Screws
I 3D printed the body in two halves. That’s about half of a spool of PETG and over 30 hours of printing! The 12 LED’s are configured in four banks of three LED’s. Each bank has its own capacitor and MOSFET.
An aluminum Arca-Swiss compatible plate is mounted on the back. It also has a 1/4″ threaded hole so it can mount on tripods without the Arca-Swiss mount.
The two halves of the case screw together with six M4 screws.
The front half has two embedded magnets. A cover also has two magnets, so it snaps onto the front and protects the LED’s. The cover will protect the bare LED’s when not in use.
The entire flash is powered with eight AA batteries. The batteries slide into a hole in the case.
A capacitor stabilizes the 12-volt rail. The boost converter has a bit of an in-rush current issue, but the rail is quite stable with the capacitor.
The boost regulator screws into the case and the relay is hot-glued into place. I typically try to avoid using hot-glue for permanent solutions, but options are limited in this case. If I could re-print the case, I would integrate zip-tie holes inside – but a third of a roll of filament and 18 hours of printing is too much to just re-print for one little issue.
Here’s all of the electronics installed (except of three of the four LED banks).
The cover was printed half translucent and has a couple embedded magnets. It snaps onto the body nicely. In this photo I only have one bank of LED’s installed. If something goes wrong during development and the LED’s die, I would rather only lose three instead of all twelve.
The complete circuit diagram can be found in the GitHub repository. I soldered up the control board on a perfboard PCB. Since I hadn’t tested the LED’s to failure before designing the control board, everything was designed for up to 200 V. This was overkill, as I currently have the regulator set to 75 V. Note that the unit is being tested and has currently fired off more than 75,000 flashes at voltages up to 95 V with no ill effect. The final voltage will likely be increased above 75 V.
The controller uses an ATMega328P and no external crystal. At 8 mHz, the processor is plenty fast enough to operate the MOSFET driver and user interface.
A major concern is that the microcontroller will reset due to a power fluctuation while the LED’s are energized, since it will take some time for the microcontroller to reset and the LED’s will remain energized until reset is complete.
To mitigate the danger, I’ve added additional capacitors (electolytic and ceramic) to the 5V rail, which will stabilize the LM7805’s output. All of the high-voltage rails are kept physically distant from the 5V rail. Finally, I’ve purposely selected a 10 μF capacitor to drive each 3-LED bank. After energizing the LED’s for 4 μs at 60 V, the capacitor loses 12% of its voltage. This is enough to keep the output ~almost~ constant, but in case the MOSFET remains energized, the capacitor should drain completely before too long. Hopefully the LED’s can handle the capacitor’s entire energy reserve without dying!
The boost regulator was purchased on eBay. Some of the components had their markings scratched off, but some kind folks have provided a bunch of info on it (including a schematic) at dalmura.com.au and diyaudio.com forum. Unfortunately it originally seemed to require an input of more than 10 V (likely since the UC3842 requires a start-up voltage of about 8.4 V, and the 78L09 regulator has a 1.6 V dropout), so eight NiMh batteries wouldn’t work to drive it. After reviewing the schematics for a while, I thought it would be ok to try bypassing the regulator as long as I didn’t go over 16 V. Then I discovered that the board was actually designed to do this, as shown on the photo below – simply short out the two pads as shown! Now it works on rechargable batteries.
The LED’s, capacitor, and MOSFET for each bank are kept physically close to each other in order to minimize impedance in the circuit. I removed the insulation on 22-guage wires and used the bare conductors as high-voltage rails. This is one area I would like to do some more research! As I understand it, using finer stranded wire reduces impedance at high frequencies (the output will have an effective frequency of 2 mHz).
I printed a jig to hold the LED’s during assembly. The hold-down clamps are installed using M2 screws. The odd-shaped triangles on top are guides for the capacitor (which are HUGE!).
My rolls of silicone 22-guage wire have very fine strands, which are perfect for this application.
Here’s the positive side of the capacitor and LED.
The positive side of the capacitor is tied directly to the LED’s high-voltage rail.
Yeah, it’s a little bit of a mess inside there. I need to print a separator to keep all the high-voltage wires away from the sensitive 5 V components. Note the high-voltage outputs on the lower right corner of the control board can be disconnected, which deactivates an individual bank of LED’s. There’s also an empty DIP-8 socket which is wired up for a second MOSFET driver in case I find one driver isn’t enough for 4x MOSFETs. Turns out that wasn’t needed, one good driver is fine.
Over-Driving the LED’s
Most of the cost was in the LED’s. They were about $12 CAD each. I selected the LED by downloading a list of suitable LED’s from digikey, and sorting by luminous flux/$. The Cree CXA2530 series was a good choice, with the U20E3 coming in at 551 Lum/USD$. It has a temperature of 5000K (subject to change under the high-voltage pulse conditions), a rated forward voltage of 37 V, and 115 degree angle of view, it was a solid choice. I anticipated driving the LED’s with up to 200 V (but probably much lower).
The Cree LED’s I used are rated for 1.6 A. When the pulse duration is very short, an LED can handle significantly more power than during constant illumination. See this paper and Cree’s application note on the topic. The Cree application note above advised not to drive the LED with more than 300% of the rated current, but that is for 1 kHz continuous pulsing – not the single pulses used in the flash.
Some tests were done to determine the best voltage to drive the LED’s at. I aimed the flash at an 18% grey card positioned 20 cm away, and photographed the card (which ~almost~ filled the frame) at a constant ISO and aperture (ISO 5000, f/2.8 – max aperture so that there are no variations in diameter) and flash duration (1 μs). The flash’s firmware calculates the average current by measuring the change in capacitor voltage during the flash. IRfanview reports the average brightness of the pixels in an image (whether the average pixel value is linearly related to exposure is another thing – please comment if you have any advice).
Testing began at 45 V and incremented by 10 V per test. The LED’s appear to have failed at 115 V, where illumination began to drop while current increased rapidly. I tested one entire bank, expecting the LED’s to fail at slightly different rates. Instead all three failed identically (I watched them during each flash).
This data isn’t perfect, but it gives me a small amount of confidence in selecting the voltage. 75 V is well below the fail point, but still outputs a reasonable amount of light. I also wanted some safety margin for the 4 μs flashes, which can damage the LED’s at lower voltages (I haven’t tested these LED’s but testing other models has proven this). For this reason I have the boost regulator set to 75 V.
The ATMega328P is good at generating a 5 V pulse, but there are several components downstream that need to follow suit. The gate driver and MOSFETs need to rise and fall with the signal. The LED manufacturer’s application note says that the LED’s take about 10 ns (0.01 μs) to turn on and off, so they aren’t a problem.
I started with a TC4420 gate driver since it was available in my workshop. It was tested using an oscilloscope. The gate voltage was simple to sample, just clip onto the output. I tested the transistor’s response by sampling the capacitor voltage. If the cap voltage was decreasing, the MOSFET is active.
The initial test didn’t look so good. The gate voltage rose quickly, but fell very slowly. I tried adding some resistors between the gate and the source on the MOSFETS (200 ohm per transistor) and a 39 ohm resistor on the control board between the gate driver’s output and ground.
This had the desired effect – the gate voltage fell much quicker. There’s still some lag and the LED’s are being driven too long. This can be accounted for in the firmware by reducing the pulse time. I haven’t done so at this point since it’s reasonably close.
The down side to the resistors is that the gate voltage isn’t as high. It now only reaches 10 V, while it could hit 11 V without the resistors. But the transistors are still conducting, and I can make up for the slightly increased resistance with increased LED voltage.
Eventually I ordered some more powerful gate drivers: TC4452 (non-inverting) and TC4451 (inverting). They were drop-in replacements for the TC4420.
It’s very apparent that the new gate driver handles the MOSFET’s much better. I didn’t bother testing the inverting driver with these results. The pull-down resistors are still in place, but I’m not sure if they’re necessary anymore. However, there seems to be some ringing. Based on this application note from ON Semiconductor, it’s probably because I didn’t include a gate resistor, gate clamping diodes, or ferrite bead. Eventually I will experiment with adding these components and post the results.
Below is the gate driver output (Vgs) on the left and capacitor voltage on the right. The transistor’s response to the gate driver looks good. I can’t explain why the 500-ns pulse lasts 1 μs and the 1-μs pulse lasts 1.5 μs, while the 2-μs and 4-μs pulses are very close to 2 μs and 4 μs respectively. I’ve recently calibrated the flash durations by adjusting the number of NOP delays in the firmware and checking with the oscilloscope.
Interfacing With The Sensor
So the flash would be useless without a sensor to send a trigger signal at the appropriate time. My ballistic chronograph will act as the sensor. The chronograph is already set up to control some typical camera speedlight flashes, so I designed the high-speed flash to use a similar signal.
The flash has a 3.5mm audio cable port. The tip is connected to a pin on the controller. The pin is set to have a pullup resistor in the firmware. The base of the 3.5mm port is grounded to the controller. When the flash is activated, it waits until the pin goes low before firing. I used an active-low signal because it’s common with cameras and speedlight flashes, so it may as well be consistent.
On the chronograph, I made an interface board with four 3.5mm audio ports. Each port has a tip connection to a GPIO pin, and the bases are grounded. The controller GPIO pins are held in tri-state (input) mode, then source (output low) when activated. The ports can control speedlight or this high-speed flash, a camera, and even an automated trigger on my air rifle.
Each port has a clamping diode. This protects the controller in case a device with reversed polarity (tip-ground) is plugged in. I should also add a zener clamping diode to protect the controller in case a device with more than 5V is plugged in, but for now I will just be careful. In the past I’ve used opto-isolators, but those introduce their own lag and complicate the entire system – not worth it.
The firmware for the flash is available on Github. It’s pretty simple – an encoder selects the flash duration, a short-click charges the flash and waits for an external trigger, and a long-hold executes a flash immediately. While the capacitors are charging, I can hold the button and the display will continue to show the voltage output from the booster. This helps for adjusting the high-voltage rail. There’s also a diagnostics test that checks how the system charges and discharges.
The pulse duration, pre- and post-flash voltages, and current draw for each flash pulse are recorded to EEPROM, and I can review the data using a serial terminal on my PC. This allows me to monitor the long-term health of the electronic components in case anything gets damaged or worn. The ATMega328P has 2kB of EEPROM, and each data entry uses 5 bytes. There is room for 400 entries, so I can probably download and clear the data yearly.
Here’s a list of changes I would make given the opportunity to build another flash. I don’t plan on making heavy modifications to this flash, given that it seems to work so well.
- Lower-voltage capacitors would be cheaper and smaller. These 400V caps are overkill, I would look for some 150V caps.
- A lower-power boost capacitor optomized for 75V. Unfortunately that probably means I would have to build my own, which would be more expensive than the cheap regulator I found on eBay. But it would consume less power, especially if I can remove the relay.
- It’s annoying having to use 8 AA batteries, I would hope to redesign for 4 AA batteries.
- An audible ‘Ready’ signal would be nice. Adding a piezo buzzer would be easy, maybe I’ll update the current board with a buzzer.
- The firmware could review the EEPROM data to check if there are any changes to the current draw over time. This may alert me to potential issues without having to download and review the data myself.
Thanks for reading!
Last Updated 2019-05-20