My project is a “breathing” white 12v LED strip controlled by an esp32 on a dev board, and switched with an IFLZ44N mosfet.
In my video you can see it working but also hear the power supply complaining.
I’m using the LEDC Arduino library which allows me to select the frequency and resolution for PWM.
If I set the frequency too low the whine is extreme, but at this setting it’s the best I’ve been able to achieve, which is about 9000Hz. Unfortunately you can still hear the sound from across the room!
It is a cheapo solid state power supply that claims it can output 12v up to 25A. I tried my desktop supply and it emits some whine too, so I don’t think replacing the power will totally fix this.
Is there a technique for tuning the frequency or even just masking it somehow?
Interesting suggestions, I would not have tried such low frequencies except based on your suggestion and it turns out that going very low, below 1000Hz and even down to 100Hz causes the power supply whine to almost entirely go away. I also have a 470uF capacitor in between the power rails now too.
This range is a usable - there is no visible flickering even at very low duty cycles.
From what I understand in the reference guides the LEDC library attaches directly to the 80mhz or 40mhz esp32 hardware clock for PWM. Intuitively I’d have guessed that higher frequency would always mean less discernable audible feedback, but seems not in this case.
Before deciding on the frequency, and then mounting the strip in a position where the LEDs are directly observable, you should try moving the LEDs fast relative to your eyes. Eg. take the end of the strip and wave it from side to side. You may notice flicker at frequencies below 200Hz.
Ok, good thinking. I settled on 1000Hz and also made it something in remotely reconfigure should the need arise. That combined with the other suggestions, and getting a better power supply has made the system whisper quiet now.