Saturday, 7 October 2017

arduino - Driving LEDs at long distance


I'm looking to drive 52 LEDs (datasheet), around a large inflatable tent. The LEDs have a forward voltage of 3.3V, at a maximum of 20mA.


I'm thinking of using the NXP SAA1064 I²C 16-channel LED controller (datasheet), which seems to be exactly what I'm looking for, since I can drive one as master and another 3 as slave, giving me a total of 64 channels. All of this will be driven by an Arduino.




Update: After reading the controller datasheet, it seems to be that it's not possible to individually control the outputs - it expects to drive a 7-seg. Is this true? If so, are there nice alternatives?




What I'm not so sure on is how to handle the distance. The tent is around 25ft long, and 10ft high, and the LEDs are placed around the dome. The controller board runs at one corner, which means that the furthest LED will be around 30ft away from the device. The cables to the LEDs have to be relatively thin, since the inflatable tent can't take a huge amount of weight. I can see resistance being a problem.


The way I figure, I'm probably going to end up with ~100Ω on the longer cables, which is going to make those LEDs all but invisible. I considered ditching the controllers for shift registers and transistors closer to the LEDs, but that means more cables, more weight, more complexity, and more cost.



Is there a nice solution to this?



Answer



If you want individual control of each LED then you will want something like this shift register LED driver. The TLC5916 chip can drive displays that are connected to a range of voltage. It also will use a constant current technique for each segment to keep brightness even for all LEDs. It may be advisable to still put some resistance in series with each LED before connecting to the TLC5916 outputs to share some of the voltage drop and reduce power dissipation in the driver chip if you are running with a higher LED drive voltage.


You can obtain the TLC5916 chips from Mouser in both DIP and SOIC package styles. The data sheet is available from there as well.


I do not think you need to worry too much about the length of the wire causing a lot of resistance. For 20mA you do not need a very big wire diameter. Even something small like 30 AWG wire can handle well over 100mA and is ~10 ohms in 100 feet.


If you use the driver chip I recommended you could use a distributed design where you run the serial data controls from chip to chip in the LED harness that goes in groups of 8 LEDs at a time. Local short wiring to each LED would be possible. The control signals, CLK, DATA and LATCH plus the sets of eight local LED wires could easily be done with small wire like 28 or 30 AWG stranded wire for flexibility. The distributed POWER and GND would need some larger wire to deal with the overall power. Your 52 LEDs at 20mA each equates to just over 1 Amp plus the total of 7 of the LED driver chips will consume approximately 15mA per chip so add on another 105mA. Seems like a 1.5A supply would work nicely for you. For the two supply leads I would recommend a slightly larger wire size such as 18 AWG. This can carry the total current required and it can run a total if 156 feet and only have 1 ohm of resistance. This particular pair of wires is important because you want to minimize the voltage drop across this part of the circuit as much as possible.


The LED driver chips want to have their VDD pins connected to +5V. You should be able to also drive the LEDs from the same 5V supply line. The driver data sheet (Fig 14) shows that when you set the constant current sink for 20mA the chip's output drop will work nicely at anything greater than about 0.5V. With the LED VF of 3.3V the driver chip would be operating with an output voltage of (5 - 3.3) = 1.7 volts. If all of the 8 LEDs for one driver were ON at the same time the output power in the part would be (1.7 x .020 x 8) = .272W. This is well within the power rating for the driver chip and no series resistors for the LEDs would be required.


Using this scheme the micro controller board would have very simple wiring using only three I/Os. The software would run the LED driver shift register chain with a slow bit-banged CLK and DATA stream for 56 pulses and then drive the LATCH signal with a single pulse to update the outputs to the LEDs.


Each of the LED drivers could be designed onto a narrow little PC board that could be covered over with a piece of white shrink wrap tubing. Three small free hanging wire harnesses with inline connectors could be left sticking out of the ends of the heat shrink tubing. One with 9-pins to connect to eight local LEDs and two others to work as daisy chain connector cables to reach to the next driver in the chain. One of the cables ends would be made long enough so that it reached to the next display driver's input connector.


You had mentioned a total length of something like 30 feet over 52 LEDs. This puts a modularity of ~4.5 feet from driver module to driver module. That would give you an idea of how long these cable stubs on each driver assembly would have to be. The wires inside the heat shrink tubing could be soldered directly to holes in the small circuit board.



No comments:

Post a Comment

arduino - Can I use TI's cc2541 BLE as micro controller to perform operations/ processing instead of ATmega328P AU to save cost?

I am using arduino pro mini (which contains Atmega328p AU ) along with cc2541(HM-10) to process and transfer data over BLE to smartphone. I...