Controlling LED Dimmer/Driver with external 3.3V PWM input

I am putting together a controller for some aquarium lighting, and I am trying to interface with some LED Drivers that are internal to some of my lights. The LED drivers are powered by a 12VDC power supply, but they accept a 3.3V PWM input signal from an external device for dimming control. The PWM does not directly power the LEDs obviously, but instead it provides control input to whatever IC or MOSFETS are feeding the actual output power to the LED panels. Will I have any issues using 5V PWM output from an Arduino to feed this input? I understand that the Arduino PWM is a 5V pulse with a varying duty cycle to adjust the "output voltage" seen by an end device, but my concern/question is will I need to use a PWM signal that has a 3.3V pulse instead? If so, could I just use a typical 5V to 3.3V logic level converter to achieve this?

I am not sure if this makes a difference or not, but I am planning to use something like a PCA9685 to achieve 12-bit PWM output for better control of the LED driver. I am thinking my wiring will need to be as follows:

Arduino I2C ---> PCA9685 I2C input

PCA9685 PWM outputs ---> Logic Level Converter (5V input)

Logic Level Converter (3.3V output) ---> LED Driver PWM Input

Does this seem correct, or is the logic level conversion not needed?

Thanks for any help

Dont forget the GND direct from LED driver to Arduino

What led Drivers are this to see Datasheet

bmbbsr:
Dont forget the GND direct from LED driver to Arduino

What led Drivers are this to see Datasheet

The LED drivers are built in to the enclosure and came with the light fixture, so I haven’t been able to locate any information to search for a datasheet. I am hoping to take them apart later this week to see if I can find markings on the PCB or ICs. I just know that it is marked as 3.3v PWM for dimming control input.

PCA9685 PWM outputs ---> Logic Level Converter (5V input)

No. You are no longer talking about logic levels but an LED driver. The output of the PCA chip has an open collector output that can drive an LED.

Grumpy_Mike:
The output of the PCA chip has an open collector output that can drive an LED.

The PCA9685 defaults AFAIK to totempole (10mA source, 25mA sink), and can be set to open collector (open drain).

CaptCarl7:
I understand that the Arduino PWM is a 5V pulse with a varying duty cycle...

Depends on which Arduino you're talking about.
There are also 3.3volt models, that output a 3.3volt PWM signal.
Or maybe you can lower the signal with a 1:2 voltage divider.
(330 ohm from Arduino pin to driver input, and 680 ohm from driver input to ground)

Another option could be a WeMos D1 mini, or nodeMCU, or other ESP8266 or ESP32 board (all 3.3volt logic).
Then you have the option to add WiFi/BT control at a later stage.
Leo..

Wawa:
The PCA9685 defaults AFAIK to totempole (10mA source, 25mA sink), and can be set to open collector (open drain).
Depends on which Arduino you're talking about.
There are also 3.3volt models, that output a 3.3volt PWM signal.
Or maybe you can lower the signal with a 1:2 voltage divider.
(330 ohm from Arduino pin to driver input, and 680 ohm from driver input to ground)

Another option could be a WeMos D1 mini, or nodeMCU, or other ESP8266 or ESP32 board (all 3.3volt logic).
Then you have the option to add WiFi/BT control at a later stage.
Leo..

I was planning to use a Mega, as I already have it controlling everything else on the aquarium.

But if I understand correctly, the Totem output mode should work for what I am trying to do? It seems like the totem mode would drive a logic level (0V/5V) PWM output, which could then be reduced to a 3.3V PWM output by the logic level converter and sent to the LED driver IC.

I guess another option would be to just abandon the existing LED driver, and use some MOSFETs to power the LED panel directly. I was just hoping to interface with them as is so I don't have to start ripping my new lights apart.

You could also power the PCA9685 module from the 3.3volt pin of the Mega.
And use an I2C level shifter between Mega and PCA.
Then the PCA will output 3.3volt logic.

Did you already try the voltage divider?
That would be the easy way out, although the Mega's default 8-bit PWM is rather course for dimming.
The PCA9685 has 12-bit PWM, and that gives a smoother control in the low light area.

How many LED channels are we talking about?
Leo..

Wawa:
You could also power the PCA9685 module from the 3.3volt pin of the Mega.
And use an I2C level shifter between Mega and PCA.
Then the PCA will output 3.3volt logic.

Did you already try the voltage divider?
That would be the easy way out, although the Mega’s default 8-bit PWM is rather course for dimming.
The PCA9685 has 12-bit PWM, and that gives a smoother control in the low light area.

How many LED channels are we talking about?
Leo…

I just realized I did not mention this earlier, but my main reason for using the PCA is to get 12 bit PWM for smoother fading of the LEDs. Otherwise, I would have just used the built in Arduino PWM outputs. It will be feeding 0-3.3V PWM input to a total of 6 LED Drivers for now.

I won’t have a chance to work on this until Friday, so I haven’t tried a voltage divider yet. I do like the idea of powering the PCA with 3.3V and using the level shifter between the Mega and PCA I2C lines. That seems like it may be the cleanest solution.

An I2C level shifter is not needed if you use an Uno.
You can disable internal pull up in software, right after the wire.begin() call.
But a Mega has fixed 10k pull up resistors to 5volt.
Not sure if the PCA likes that, so maybe better to use an I2C level shifter.
Leo..