Fun and Games with LED Modules


While working on ideas for a redesign of the OpenROV Cape power supply section, I got a bit distracted by the topic of the LED Modules in use on Open ROV.

OpenROV currently uses LED modules made by Digitron. These modules come in two flavors, one regulated, and one unregulated and set up for 12V power. I believe the kits shipped with the unregulated version, while the BOM on the website shows the regulated version.

The regulated version is a bit more expensive, but what catches the eye is that the published power consumption is half that of the unregulated version. A number of people have expressed puzzlement over how this can be. I decided to tear into a regulated module and see what made it tick. If you don't want to wade through the technical details, just skip down to the conclusions at the bottom of the post.


The unregulated LED module is a Digitron LHA-06B12-N-00, sold by Jameco as part #2125763. It is rated at 87 lumens output for a 12V input at 150 mA of current.

The regulated module is a Digitron LHA-06B30-N-00, sold by Jameco as part #2113041. It can handle any input voltage from 8-30V, and draws 74 mA at 12V for a light output of 87L. This is the module that I'll talk about below.

Here's a picture of the regulated module:

Here's the schematic of the board that I traced out for reference:

On the left side of the photo there is a bridge rectifier made up of 4 Schottky rectifiers; despite the red and black input wires, the input to the module can be AC or DC. The incoming power is filtered by a tantalum capacitor on the left, and again by a large ceramic capacitor on the right of the photo.

The regulator part is a Zetex ZXLD1350 LED Driver. It uses a buck converter (Wikipedia it!) configuration to conserve power. In a nutshell, the regulator drops the input voltage down to whatever voltage is needed by the LEDs, but instead of wasting the voltage difference by dissipating power, it stores it in an inductor to be saved. You actually get more LED current than you are inputting current to the board. Magic!

Inductor L1 is at the top right of the board. The regulated parameter is actually LED current, not voltage. This current is measured by a 0.82 ohm resistor on the lower right side of the board, next to the big ceramic capacitor. Diode D7 is the free-wheeling diode used by the buck converter.

There is an unpopulated set of pads hooked to the ADJ (Adjust) pin of the regulator, labelled as C3.

The LEDs are three strings of 2 LED packages in series. Each LED package actually has 3 separate LEDs in it. The 24.9 ohm resistors are to help balance the current load between the LED strings, caused by mismatch of LED voltage.

Here's a plot of the performance of the module as a function of input voltage:

The blue trace is the input current to the board. Note how the input current decreases as input voltage increases, as the buck regulator is trying to hold LED current, and thus power consumption, relatively constant. The green line is the LED current, calculated by measuring the voltage drop across the 0.82 ohm sense resistor. The regulator does a fair job of maintaining constant LED current over a wide input operating range. Note the difference between the blue and green lines, that's the power that's being saved by using a buck regulator as opposed to a linear regulator. LED current is a rough indicator of the output light level of the module.

The pink line is the input power, voltage*current. Note how it has the same shape as the LED current- the power consumption of the board is reasonably well correlated with the LED current, and thus the light output. The orange trace at the top is a crude measure of the efficiency of the board, comparing the LED current to the board input power.

Note that as input voltage drops below 8V, the buck converter basically shuts down and becomes merely a closed pass transistor. The input current and LED current are identical below ~8V input. Below about 7.25V input voltage, the module will start dimming noticeably below normal.

This above point is important, since what I really want to do is run the module off of raw battery power (Vbat on the Cape schematic), as opposed to the Cape 12V regulated power. The 12V regulator takes up a lot of real estate on the Cape, wastes power, and is of minimal utility if you are just using it to drive one of these regulated modules. Unfortunately, if the battery voltage drops below 7.25 V, such as when running the motors hard, the LED module will dim.

One obvious patch to this is to get rid of the input bridge rectifier on the LED module, which is dropping about 500mV at typical module input currents. You would lose any protection from a reversed input voltage, but since we're in control of the voltage being provided to the board, I don't see that this is a major issue- just make sure you wire the red and black wires up appropriately.

Here's a second picture of the LED module, with two of the Schottky diodes removed and replaced with jumpers:

In the photograph you see the 30AWG fly-wires that I use for testing. The red and grey wires attached to the ceramic capacitor on the lower right allow measurement of the voltage input to the Zetex controller. The white wire on the 0.82 ohm resistor is used with the red wire to measure LED current. The white wire on the C3 pad will be used below to control module intensity.

Here's a plot of the performance of the modified module:

Performance looks very similar to the stock LED module, but note that normal LED current is maintained down to about 6.75V (as opposed to 7.25V on the stock board). Also note the relative efficiency plot- since we're not burning up any energy in the bridge rectifier, the board is slightly more power efficient, especially at lower input voltages.

In looking at the Zetex controller chip, I noted that it had an Adjust input pin, which is to be used for dimming control, either with Pulse-Width Modulation (PWM) or an analog voltage. When you PWM this module by cutting the power in and out, as is currently done on OpenROV, you are repeatedly turning the switching regulator on and off in a manner that it is not optimized for. I decided to compare the current method of PWM vs. using the ADJ pin on the Zetex controller.

Here's a chart showing the PWM behavior of the board, using the current OpenROV PWM scheme:

Several items can be noted here. At relatively high PWM settings (<230 or so), the board is essentially at full power, since the input capacitor on the board holds the voltage up long enough that the regulator never fully shuts down. There is a loss of energy involved in this process, so you actually draw less input current if you just set the PWM at 255 (full on) and leave it there.

At low PWM settings, efficiency falls way off since you're wasting energy by starting up the switching regulator and then rapidly shutting it back off.

I attached a wire to the ADJ pin of the Zetex regulator, and drove it via the open collector of a transistor hooked to a PWM output of an Arduino. This inverts the sense of the PWM value, so the PWM value that is plotted is actually in software (255 - PWM). Here's the performance of the board:

Note that the response is much more linear at high PWM values, and that the module can be dimmed all the way down to very low light levels. Also note that the relative efficiency values are higher than the previous case at all PWM values, but especially so at lower light levels.


So, what does all this mean? Here are my conclusions:

- If you got the unregulated modules with the kit, they will work just fine. In fact they may actually be a bit brighter than the regulated modules. The regulated modules run the LEDs at about 116 mA for a 12V input voltage. The unregulated modules are spec'd for 150 mA, though I don't actually have one lying around to measure and compare.

- If you want to save some power, switch your LED modules over to the regulated kind. You'll save around 0.5-1 Watt per board, 1-2 Watts total. This won't revolutionize battery life, but will help some.

- You can save a bit more power by rewiring the PWM output of the OpenROV Cape to put out battery voltage, instead of +12V, and then disabling the +12V supply. This will probably save on the order of 200mW or so with the lights running, since you won't have the loss due to the conversion efficiency of the +12V switcher (probably about 90%). The only drawback here is that when you are drawing heavy motor loads, the LEDs might dim. Of course, you should probably be shedding loads by this point in time anyway, to keep the BeagleBone from shutting down.

- You can minimize this dimming effect by removing the input bridge recifier on the LED modules, and replacing it with jumpers in the appropriate places. This lowers the input voltage requirement on the regulated modules by about 0.5 Volts, and improves their efficiency marginally.

- We should seriously consider removing the +12V power supply on the BB Cape, to make room for new circuitry like a lithium battery regulator. The PWM outputs could then be battery power or whatever. There's already an item in GitHub to address the PWM output voltage.

- If you really want to squeeze every last bit of efficiency out of the module, consider controlling the module brightness via the ADJ pin on the Zetex controller, rather than switching the input voltage. This is totally over the top for 99% of OpenROV users, but I thought I'd keep it in here for amusement sake.





Really nice breakdown of the LED's in the kit.

When i recieved these modules myself i tought of doing the same as you have done with going directly to the adjusting pin.

I also purchased a 10W led in a watertight housing that contained a similar driver as the zetex. this also had the ADJ pin available.(

I totally agree with you in regards to the 12V_REG rail on the cape. remove it and use the space for either battery management or something else.

the Aux outputs can easily be adapted to either switch a 5V signal or the battery power. similar as the P13 jumper between 5V and servo voltage.

for expansion one could hook up a i2c pwm expander and/or a GPIO chip, these is often adressable so you can hook up several sensors and features on the I2C bus.

I've used the PCA9535 ( to drive some HITFET transistors(BSP78 in example) for coils and actuators on a different project. this combination works really good and is fairly compact compared to traditional relays.


Walt or Thomas

I will be using the following Led's & Recom Led Power Supply.

My Question: The PWM outputs on the Cape are these Pulse width Modulation?

I don't have a scope to check these just a DVM. The Led PS I am using can use either PWM or Analog and I just needed to figure out how I should hook the PWM out on the Cape up to the LED Power Supply I am using. From the Schematics I see it using +12V rail so I am assuming the output on the PWM is switched 0V to 12v. I will be running the two LED's I have in series.


Yes, they are. They range from 0-100percent in relative to the 0-255 range on the arduino. Looking at the datasheet of the driver it looks that this uses a inverted switching. Meaning that 0percent on the cockpit will be 100percent on the driver.
Its correct that the output is 0-12v switched on the cape. You can get 0-5v with removing a resistor and moving it to the sheild outputs on the cape, and hooking up you pwm wire there. I dont have the schematics available now to give you the resistor numbers.


Thanks Thomas that is what I needed to know much appreciated.




Hi Again Thomas sorry to keep asking you questions.

I would like to change the code for the LED's to invert the signal to match the LED driver I am using. +12V High turns the led off and 0V turns it on. I suspect I just need to change a variable 0 to 1 or visa versa.

Could you point me to the file I would need to change to do this. I have been poking around in the Arduino code and found this but I am thinking I may have to make changes on the BB, I know enough to get around but need to get up to speed to be able to understand and change code.

Thanks for any assistance you can provide.

- 189: { //- (brightness down)
+ 79: { //o (brightness down)
command: 'light',
value: -1
var KeyPad = function() {
+ var power = .5; //default to mid power
+ var vtrim = 0; //default to no trim
+ var ttrim = 0;
var kp = {};
var servoTiltHandler = function(value){};
var brightnessHandler = function(value){};
@@ -64,6 +106,24 @@ var KeyPad = function() {


The ArduinoPhyiscs.js contains a mapper that takes the 0..10 and translates it to the 0..255 signal sent to the LEDs.

Line 60:

physics.mapLight = function (value) {
return mapA(value, 0,10,0,255);
This is the spot to switch around whatever values you think should be sent to the LED instead. So if I followed in the quick glance above, something like:
physics.mapLight = function (value) {
return mapA(value, 0,10,255,0);


Hi Brian

Hope all is going well in your world.

I noticed that the new software has limited the movement of the Camera Servo and I wanted to get the full rage of 180deg in my build. If I look at the ArduinoPhysics.js code

physics.mapTiltServo = function (value) {
value= limit(value,-.7,.7);
return mapA(value,-1,1,1000,2000);

what value would I change, is it the limit -.7,.7

or the return map values? I am thinking that if I set the limit values to -1,1 that this may do it for me.