EspositoWang
Back to Psych 221 Projects 2013
LED Super Capacitor Design Test Light / Flash
Background
This projects builds upon the 2012 LED Flicker project. The goal is to build an ultra bright, multi-channel test light using extremely high power LEDs driven to their maximum rated current, and controlled precisely. By driving an array of 7 ultra bright LEDs, we aim to produce a world class LED flash.
Instead of controlling the LEDs via PWMs, which has properties of flicking between OFF and ON states, the goal of this project is to design a system that provides a constant current through each LED. The design mimics a camera flash with the use of super capacitors charged by a wall wart power adapter or benchtop supply. Each LED will be pulsed with a max of 1 amp of current. There are 7 different LEDs on the LED array module and each LED is flashed so that no two LEDs are on at the same time. The time duration that the LED is on and the time interval between LED flashes are adjustable to allow for ease of use. Modifications can be made so that this design can be charged with Alkaline or Lithium-Ion batteries to make the entire system compact and portable.
High Level Device Specifications
- Should have at least 7 channels for controlling each LED
- The rate at which the LEDs flash should be adjustable
- To adjust the interval time between each LED flash and the duration that each LED is on for
- The light intensity shall be constant and be set with ~1A of current
- Easy modifications can be made so that the light intensity can be adjustable
- System design should be modular to allow for quick modifications to system parameters
- Amount of charge caps can hold the amount of current through LED
- Should incorporate the use of super capacitors for a quick discharge of energy to the load
Device Overview
The purpose of this system is to produce a controlled ultra bright LED based camera flash.
In order to achieve this goal, we built a system using one current driver circuit for each LED, an Arduino micro-controller to switch each channel, and a super-capacitor circuit to provide the necessary current. This system is charged by a high power, efficient charging circuit which keeps the capacitors charged and ready to drive the flash.
Design
Components
- LED Array of primary lights
- For the final design : 7-in-1 round assembly LED Array
- Arduino Uno microcontroller product
- A circular flat top Heat Sink Diameter ~ 2 1/4th inches
- A perforated circuit board (for the intermediate design) and a breadboard (for making a prototype)
- Circuit components
- 50F super capacitors product
- Fairchild Semiconductor FQP30N06L: N-Channel MOSFET datasheet
- Fairchild Semiconductor 2N3904 NPN BJT datasheet
- TI LM317 Adjustable Linear Regulator datasheet
- Ohmite RA-T2X-51E Heatsink, TO-220 product
- Assmann WSW Heatsinks, TO-220 product
- Kyoto Solid State Relay: In-32VDC max, Out-60VDC max, 4A max datasheet
- 1.3 Ohm 5% 3 watt power resistors feedback resistances
- 2.7KOhm 5% 1/4 watt resistors to connect control signals from the Arduino to the circuit.
LED Driver Circuit
![](/psych221wiki/images/thumb/1/16/LED_Driver_Schematic.png/200px-LED_Driver_Schematic.png)
To get a system that produces a stable light output, the LED must be driven by a constant current. An approach to get a constant current is using the circuit to the right. The way this circuit works is that the feedback resistor and BJT combination sense the amount of current flowing though the LED and feed this signal back to the MOSFET gate controlling its voltage and hence the current flowing through it. This design allows approximately ~1A of current to flow through the LED. The key idea was drive the LEDs and FETs with a constant current making their light output insensitive to supply voltage. Simulations were performed to analyze the behavior of the system with the proposed circuit parameters, and it was found that the LEDs in the Luxeon array have a relatively shallow turn on slope, introducing voltage sensitivity despite the constant current drive of the supply. In order to remedy this, we had to choose a supply voltage range that would keep the LEDs in their own 'saturation' region.
For current control, the key parameter that must be selected with caution is the feedback resistance since that controls the maximum current flowing through the circuit. Given that this is a high current (1Amp) design, multi-watt power resistors must be used for the current limiters ensure that the power dissipated in them does not damage the circuit.
To determine what feedback resistance we needed, we performed several simulations in LTSpice to verify that the circuit will work the way we expect it to and the optimal resistance parameters for the feedback and input resistors (at the gate of the FET).
Seven copies of this circuit will be assembled, one to drive each LED in the array, with the seven control signals routed to the gates of the FETs from the Arduino microcontroller.
Super Capacitor Charging/Discharging Circuit
![](/psych221wiki/images/thumb/3/3e/Charging_schematic.png/200px-Charging_schematic.png)
Ideally, the system should be able to drive more than one LED in the array at once. In order to support a much higher (multi-amp) drive current, caused by triggering 7 or more 1A LEDs at once, we had to build a supply circuit that was based around a collection of 50F super-capacitors.
These capacitors can be charged simply, using a conventional voltage regulator to approximate an ideal voltage source. This is problematic, however, as it will take an extremely long time to charge the capacitors fully. As a result, we designed a current controlled power supply.
The circuit is fairly straightforward -- an LM317 adjustable linear regulator acts as a regulated voltage supply. This supply could easily be replaced by a switch mode supply to improve system efficiency, however, one would have to carefully select a replacement supply capable of handling 7.5+ volts on the output and supplying >1.5A for the time it takes to charge the capacitors (about 1 minute)
The current drive is formed with a MOSFET is placed in series with the capacitors. Its gate is connected to the supply rail. Thus, the FET will drive as much current as it can into the capacitors until the voltage of the charged capacitors pushes the FET into cutoff. The result is that the capacitors will charge as quickly as possible and be voltage limited to the regulator's setting minus the (approximately) 2V Vgs of the FET.
Once the capacitors are fully charged, the voltage regulator can be disconnected (using the solid state relay) and the capacitors will retain their charge, ready to supply current to the LED array.
A simple resistive voltage divider has been included to allow our Arduino to sense when the capacitors are charged and then disconnect the regulator. This allows us to 'overdrive' the capacitors -- that is, set the linear regulator to drive the capacitors to a voltage higher than their design specification, and then use the Arduino to disconnect the supply before the capacitors actually exceed their specified rating. The advantage to this is that the FET does not approach cutoff as the capacitors are finishing charging, resulting in a higher current at the final stage of charging and thus a much shorter charging sequence.
Note that the Arduino is required for this configuration to work safely, and the circuit should not be connected without a powered and programmed Arduino. If an Arduino is unavailable, it is STRONGLY ADVISED that the circuit be readjusted to ensure that the super-capacitors to not exceed their rated voltage.
Overall System Design
The entire circuit design is shown below. Since there are 7 LEDs on the LED array module, each of the individual LED driver circuits is connected at the same node (in parallel).
![](/psych221wiki/images/thumb/6/64/Entire_circuit_schematic.png/500px-Entire_circuit_schematic.png)
Method
Simulations
Various simulations in LTSpice were performed prior to and in parallel with testing the prototype breadboarded version. The idea was to use the same circuit configuration as in the previous project since the MOSFET and BJT current limits the maximum amount of current through the LED. The optimal feedback resistance (in series with MOSFET source) was found by adjusting the resistance so the current in the saturation region of the MOSFET was approximately 1A. The feedback resistor has to be rated for at least 3 watts to handle the 1A. Lower power rating resistors could be used since the LED flash system will not have a continuous 1A flowing through it, the flash duration will be within the range of ~10ms or less.
The feedback resistor value is 0.68ohms, while the resistor on the collector side of the BJT was 51ohms. The MOSFET model used in the simulation was the FQP20N06L, but in the actual circuit we used the FQP30N06L. Fairchild Semiconductors did not make a FQP30N06L model so we used the closest model as possible. Although the values for the resistors were obtained through simulations, we knew that once we tested the actual circuit, we would have to modify the resistor on the collector side of the BJT to compensate for the difference in the MOSFET models.
As shown in the figures below, the circuit simulation for the LEDs only consisted of the LED driver current and not the charging/discharging unit. All the LEDs on the LED module were simulated except for the deep red and red LEDs because models were not available for those components. All simulation files can be found in the Appendix.
NOTE: The charging/discharging system was not simulated because models for the LM317 from Texas Instruments were not available and for some reason simulating capacitors in the Farad (1-50F) range does not simulate properly in LTSpice.
- Simulation waveforms
-
Royal Blue (447.5nm) LED circuit (without super caps)
-
Royal Blue LED current waveform
-
Blue (470nm) LED current waveform
Characterization of LED Array Module
Although simulations were performed for the LED driver circuit with averaged models of the Luxeon LEDs, we wanted to fully characterize the LEDs ourselves to determine how much of a difference there was from the model to the actual product. To test each LED, we hooked each one within the LED driver circuit to a benchtop power supply with initially 0V. We stepped up the voltage by 0.1V and made note of what the current draw from the LED was. As you can see, the measured plot is very similar to the simulated plots (royal blue LED shown below). The major noticeable difference is from 2.7-3.6V range in which the shows a very weird effect from the LEDs. At around 3.5-3.6V (which is very close to the voltage drop of the LED), the LED suddenly kicks on and conducts hard. If the upper linear portion of the plot is extrapolated down, it would look more like the simulated.
One difference between the simulated and measured plots is that the MOSFET was different. The actual MOSFET was an FQP30N06L while the simulated MOSFET was a FQP20N06L (fairchild semiconductor did not have a model for the FQP30N06L). From the simulation, the current in the saturation mode is ~1A, but when measured and due to the difference of the MOSFETs, the resistor value on the collector side of the BJT was 51 ohms in the simulation made the measured saturation current limit at 1.1-1.2A. To make sure that the limit of ~1A is strictly enforced, the resistor was changed to 2.7K. Tests were conducted and the LEDs were clamped to 1A within a +/-0.5% range.
From this test, we were able to observe that the average saturation cutoff region for all the LEDs is around 4.8V. For the flash sequence to run a few times before the capacitors have to be charged fully again, 2-3 volts + 4.8V across the capacitors should be sufficient. Data from all LED characterization can be found in the Appendix.
- Breadboard Circuits
-
Royal Blue LED current plot
-
Simulated results
Super Capacitor Charging/Discharging Design Testing
The super capacitor charge circuit was designed to charge the capacitors quickly in order to provide the current necessary to drive a flash.
Several approaches were considered for the charging circuit. Initially, we evaluated a simple voltage source system, but the current driven into the capacitors drops off exponentially, and charging a large capacitance like we have took a prohibitive amount of time (over half an hour). The solution was a current controlled charging system.
The controlled current source works by using a transistor (MOSFET) to drive current into the capacitors. Voltage regulation is delegated to the Arduino micro-controller, which senses the voltage across the capacitors using an analog input and then disconnects the charging circuitry once the capacitors have been charged to the desired voltage.
Testing was performed using a bench-top power supply for power, and a pair of digital multimeters measuring current through and voltage across the capacitors. We found that the circuit will draw as much as 2.7 Amps when supplied with a 12V input and will charge the capacitors from 0V to a full 7V charge in under a minute. A partial recharge only takes a few seconds.
Capacitor discharge profile
Prior to testing the charging and discharging subcomponents, we wanted to have an idea of how long the capacitors will last if 1A of current is being drawn. We were able to find a current discharge profile for the 50F, 2.7V Maxwell super capacitors that were used in the design. From the figure below, this specific capacitor can last 2-4 seconds with 1.5A draw without any voltage reduction. For a 1A draw, we could estimate that there is approximately 4-6 seconds without any voltage reduction. This factor is extremely important because the MOSFETs will be in the saturation region when turned on for current to flow through the LED. From the simulations, we measured that the saturation cutoff voltage was about 4.8V and we set our firmware code to detect the turn off the MOSFET at the 5V drain-source voltage (amount of voltage across the caps).
The Arduino currently sense the voltage across the capacitors to charge them up to 7V. Since the saturation region is about 5V, there is a 2V swing that can be utilized to discharge the caps with a constant 1A. If 3 - 50F capacitors are in series, approximately 3-10 seconds since the effective capacitance is 1/3 than what the discharge profile portrays.
![](/psych221wiki/images/thumb/5/5b/Cap_discharge_profile.png/300px-Cap_discharge_profile.png)
Prototype Circuit
Videos of LED driver circuit testing can be found in the Appendix.
- Breadboard Circuits
-
LED driver circuit on breadboard
-
LED driver circuit testing
- Individual Subsystem Circuits
-
LED driver board on protoboard
-
Charging circuit on protoboard
Trade Offs
There are several trades off that needed to be considered prior and during all the circuit testing. The option to run the system off a battery and the capacitor size becomes an issue when designing around charge time, portability, and accessibility.
Battery Design Considerations
Once the super caps were tested with a bench top power supply, we decided to test the caps charging and discharging time in the same configuration but with a 9V alkaline battery. A 9V battery performance is characterized by milliamp-hours capacity. As shown in the characteristic graphs below, for an energizer max 9V alkaline battery, with a discharge of 500mA, the capacity of the battery is approximately 300mAh. With the discharge trend, a discharge of 1A would have approximately 250mAh of capacity, giving the life of the battery to less than 15 minutes for a continuous load of 1A. Realistically, the the 9V would probably only last less than a few minutes because the performance curves are for a continuous discharge to 4.8V. For our design, since we need at least a charge of 7V to fully charge the caps, a 9V would not be a feasible solution for long-term use.
Although a 9V battery makes the design more portable and compact for the user, there is a definite tradeoff between battery life and charge time. If the user wants to charge the system very quickly, then the battery will probably only last for a few full charge cycles. Charge time from a battery with the system capacitors would take a few hours because the current exponentially decreases as the cap reaches fully charged state. One possible solution is to pre-charge the capacitors with a wall adapter transformer and then finish the charge with batteries. Our system prohibits the execution of the flash sequence unless the capacitors have specific voltage across them. So a wall adapter or benchtop power supply could be used to initially charge them, and then a battery could be used to reenergize them to full capacity. Because of this tradeoff, we decided to implement the bench top supply since the user will be able to perform more flash sequences without having to wait for a long charge.
- Energizer Max 9V Alkaline Battery Performance Curves
-
9V battery mAh capacity
-
9V battery characteristic curves
Capacitor Size
Super capacitor size is problematic because they are only rated to handle a very limited voltage drop. Most super capacitors have a voltage rating of 2.5-2.7V. Since the saturation region threshold is 5V, capacitors had to be stacked in series to utilize them more efficiently and effectively. As capacitors are stacked in series, the effective capacitance decreases. Another limiting factor is that charge time for capacitance increases as capacitance size increases, so depending on the application and time of use, determining what size cap and how many in series are needed in a design is a challenging task.
Arduino Code Development
The system software allows for serial communication for triggering and system configuration, and also accepts a trigger signal as a rising edge interrupt on digital pin 2.
Although not fully implemented, there are settings that can be adjusted serially for the period in which each LED is on, delay between individual LED flashes, as well as the ability to set the PWM brightness of each LED.
The code was designed as a simple state machine. While idle, it continually checks for input on the serial port. On receiving a message, it will act appropriately, either storing a new value into the correct register or attempting to trigger the LED sequence. Note that the LED sequence will be aborted if the capacitors are not charged sufficiently to guarantee the expected LED response.
The LED sequence is a straightforward loop. The software disables the charger interrupt to guarantee table time response. It then turns each LED control pin on in sequence (the current value is 20ms) and then turns it off. After waiting a specified delay (currently 2ms) it turns on the next pin in the sequence. Once all the pins have been cycled, the system returns to the wait state.
Capacitor charge is detected asynchronously by a timer based interrupt that periodically (every 100ms) checks the voltage on the capacitor sense pin. If the voltage reaches a set threshold (about 7V) it switches out the regulator, via a digital pin controlling the relay described above, and turns on the onboard LED on the Arduino to indicate charge is ready. It also sets a flag in the software which allows the flash sequence to be triggered.
- Arduino Code Process Flow
-
Overall program flow
-
Trigger sequence
-
Voltage Sense Interrupt
The commands that can be sent to the Arduino via the serial port are as follows:
"TON_###" where ### is any integer number of milliseconds to turn on each LED.
"TINT_###" where ### is any integer number of milliseconds between turning on each LED.
"TRIG" triggers all integers sequentially.
"TSIG" triggers all integers simultaneously.
The system can also be triggered by a rising edge interrupt on pin 2.
Results of Complete System
Overall, this project met its design goals. The system is capable of driving an array of 7 LEDs at 1 Amp each, either one at a time or simultaneously. (See video:File:LED driver testing.zip), with the drive current limited by the feedback circuit. The system is fully capable of being driven to lower output levels by simply lowering the input voltage on the gate of the MOSFET of each leg.
- Final Design Test Setup
-
Final Design
The LEDs can be driven with our super capacitor charge system and when the LEDs are driven for short periods (~20ms each) See Video: File:Flash sequence current.zip
The entire array can be flashed over 100 times, before the voltage drops below a threshold that will guarantee a full amp of current through the LEDs. This limitation is due to the shallow turn on voltage / current curve of the Luxeon super bright LEDs. A threshold voltage was chosen that will ensure that all LEDs are driven at nearly the full 1 Amp rating. Once the supply voltage drops too low, the system will prevent additional flashes until the capacitors have been recharged.
See Demonstatation: File:Arduino sensing cap voltage.zip
The system is fully capable of supporting both short and long duration flashes, at a mere cost of additional energy expended:
Slow flash sequence duration (6 channels): File:Slow flash sequence.zip
Fast flash sequence (6 channels): File:Fast flash sequence.zip
Testing voltage discharge from capacitors with 10 flash sequences: File:10 flash sequences.zip
Testing how many flash sequences can be triggered within sensing range: File:20 flash sequences.zip
Conclusions
Our system implements the existing LED flash lighting circuit and improves upon it in several ways. Most obviously, it scales everything "to the max" -- increasing the drive current of the LEDs to a full 1A per channel, while maintaining the supply voltage insensitivity of the previous circuit by actively sensing supply behavior.
The circuit further improves upon the previous design by completely redesigning the supply circuit to provide several amps of output current using a regulated super capacitor charger and super capacitors to drive the individual LEDs. This circuit provides for current needs (1A for one channel at a time) and future needs (8A simultaneous discharge should pose no problem).
Finally, the flexible software design should be easy to expand upon for future needs, thanks to its modular structure.
In the course of designing and developing this cirucuit, we discovered a number of things about high current LED lighting control and operation. This includes shallow current / voltage slope relationship found in ultrabright LEDs at high currents. We also faced a challenge in developing a circuit that could drive such high currents without self destructing, and one the could reliably be used to charge and supply these large discharge currents.
We saw that careful design yields a design the exceeds expectations and can produce a surprising amount of light. That said, our design does not maximize energy efficiency. Our use of a linear regulator leads to a fairly large waste of energy in charging the capacitors. Unfortunately, extremely high power, high efficiency switching regulators that meet our current and voltage specifications are hard to come by on shot notice and remain fairly pricy.
Additionally, the current control circuit wastes several WATTS in current limiting the LEDs. An alternative drive topology could likely yield a much more energy efficient drive circuit.
We did encounter a number of challenges in assembling the circuit as well. Sourcing the LED array took a fair amount of time, and it is advised that any future team pursuing this project place an order for the array the day they decide to undertake the project. Other design considerations can wait.
In the future, we envision several improvements to the system. As discussed above, we can see how power usage can be drastically reduced. We have also begun the process of implementing pulse width modulation to control the brightness of our LEDs, but our program is modularized to allow for other methods of control. Specifically, we sourced a 12 bit, 8 channel Texas Instruments Digital to Analog Converter (part number tlv5630) which we envision using to directly drive the gate our our current control circuit. This will allow extremely precise brightness control over each LED without imposing the flicker problems created by blindly pulse width modulating the drive circuitry. This was not prioritized because higher power was described as a more important feature in the project specification.
Our circuit design demonstrates that extremely high power, super bright LED drive systems are possible and can still be precisely controlled to make extremely flexible test lighting systems.
References
Appendix I - Code and Data
Files
LTSpice code for simulated circuit: File:LED driver simulations.zip
- Need to install MOSFET and LED models to work properly
Altium Designer schematics: File:Altium Schematics.zip
LED characterization data tables: File:LED characterization data.zip
Arduino code for driving LED circuit: File:LED Driver 2 2.zip
Videos
LED driver circuit test: File:LED driver testing.zip
Super capacitor charging/discharging with Arduino voltage sensing: File:Arduino sensing cap voltage.zip
Observing current load while testing flash sequence (6 channels) : File:Flash sequence current.zip
Slow flash sequence duration (6 channels): File:Slow flash sequence.zip
Fast flash sequence (6 channels): File:Fast flash sequence.zip
Testing voltage discharge from capacitors with 10 flash sequences: File:10 flash sequences.zip
Testing how many flash sequences can be triggered within sensing range: File:20 flash sequences.zip
Appendix II - Work partition
Simulation/characterization development - David Wang
Hardware assembly - William Esposito, David Wang
Firmware development - William Esposito