EspositoWang

From Psych 221 Image Systems Engineering
Jump to navigation Jump to search

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

  1. Should have at least 7 channels for controlling each LED
  2. 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
  3. 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
  4. 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
  5. 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

  1. LED Array of primary lights
    For the final design : 7-in-1 round assembly LED Array
  2. Arduino Uno microcontroller product
  3. A circular flat top Heat Sink Diameter ~ 2 1/4th inches
  4. A perforated circuit board (for the intermediate design) and a breadboard (for making a prototype)
  5. Circuit components
    1. 50F super capacitors product
    2. Fairchild Semiconductor FQP30N06L: N-Channel MOSFET datasheet
    3. Fairchild Semiconductor 2N3904 NPN BJT datasheet
    4. TI LM317 Adjustable Linear Regulator datasheet
    5. Ohmite RA-T2X-51E Heatsink, TO-220 product
    6. Assmann WSW Heatsinks, TO-220 product
    7. Kyoto Solid State Relay: In-32VDC max, Out-60VDC max, 4A max datasheet
    8. 1.3 Ohm 5% 3 watt power resistors feedback resistances
    9. 2.7KOhm 5% 1/4 watt resistors to connect control signals from the Arduino to the circuit.

LED Driver Circuit

Driver circuit for the LEDs

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

Capacitor Charging/Discharging Circuit

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).

Complete circuit schematic

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.


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.

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.

Charging circuit with voltage sensing from Arduino

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.

Capacitor discharge profile

Prototype Circuit

Videos of LED driver circuit testing can be found in the Appendix.


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.

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.


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.

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

2012 LED Flicker project

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