Shield to drive LEDs with 3 voltage levels

I'm looking for a recommendation for a shield that can drive 40 strands of LEDs (3V, 15ma each strand), with three output states: +3V, -3V, and 0V (GND). When 3V is applied to a strand, the even-numbered LEDs will light, and when -3V is applied, the odd-numbered LEDs will light. I will code the arduino to send constant voltage, or quickly alternating +/- 3V so that all of the LEDs on the strand appear to be illuminated. I am open to any shield recommendations, and based on the one I select I will then decide which Arduino controller to use. If there is no suitable shield, then any recommendations on a circuit that I could build onto a proto shield would be helpful -- for example two power transistors in a "totem pole" circuit for each strand (?). If necessary I could drop the "alternating LED" requirement, ditch these LED strands and use traditional strands which would only require 3V / 0V as their input. (I'm new to Arduino but experienced in embedded systems design & coding and digital electronics, although my last significant digital project was in the 90s :slight_smile: Thanks in advance for any recommendations.

Are these preconfigured strands? Or are you custom wiring them that way? Sounds very unusual.

CrossRoads:
Are these preconfigured strands? Or are you custom wiring them that way? Sounds very unusual.

Yes they are christmas tree strands, each with its own controller that I am discarding as I want centralized control of the 40 strands via Arduino. They are advantageous for this project in a number of ways -- the quality & gauge of the wiring, the light "temperature", and while the even/odd arrangement is unusual it means that I can have additional lighting effects without 2X the wiring. But if it's too painful to get these to work I will use normal LED strands instead.

You need a push pull driver circuit with a split power supply ( ± ).

There should be thought given to ‘shoot through’ and current limiting.

Most 'dumb' strands (non-addressable LEDs) are expecting 5V, or 12V supplies.
I have a board that will sink up to 150mA from a 50V sources for driving strings of LEDs using 12 TPIC6B595 shift registers.
It has a 328P on in that I bootload as an Arduino.
If you connect 3V strands to it, then a 1 shifted in will turn on an output and turn on an LED that is supplied with 3V.

It uses SPI for the interface to the shift registers, so you can update the outputs at really fast rates, like 20KHz if you wanted. 30 Hz is probably fast enough tho, above that the eye just sees them as on.

So I think you're basically saying a board to do 40 channels of this, with current limit resistors built into the strand somewhere.
The 15mA seems very low for a strand, parallel LEDs could draw 5, 10, 15mA each unless they were limited individually to be drawing less.
There are MOSFETs that will turn on with low control voltages and could work in this situation, FDN327N for N-channel and DMP2045UQ-7 for P-channel for example.
https://www.digikey.com/en/products/detail/on-semiconductor/FDN327N/976839?
https://www.digikey.com/en/products/detail/diodes-incorporated/DMP2045UQ-7/10674156?

Thanks for the replies, Larryd and Crossroads. I decided to ditch these LED strands and buy new ones that are easier to work with. I’ll start browsing for standard shields / breakout boards to drive those.

My board above will drive up to 96 outputs. That can be single color strands, RGB or RGBW strands.
I have another board with 32 PWM outputs that can drive my 32-MOSFET board for higher currents.
The PWM board uses two SX1509s that are controlled by I2C from an Arduino. 328P based, 1284P based, 2560 based, whatever can support I2C.

Or, you can use addressable LED strips, WS2812B based (or, WS2813, WS2815, there are several varieties these days), you send data to them via Neopixel library from Adafruit or the FastLed.h library found on Github.

The PWM board uses two SX1509s

what's the DIL ic beside the SX1509 breakouts and why is it needed?