High Power RGB LED Shield

There seems confusion about PWM frequency for high power LED dimming. I saw posts in forums about LED flickering especially at low PWM %. Some think they are seeing this problem due to low PWM frequency when they are driving high power LEDs. I want to point out that is highly unlikely the case. Here is why.

The PWM is a great way of dimming LEDs by adjusting ratio of on/off quickly. How quickly? The rule of thumb is higher than 100Hz frequency PWM make human can not see the flickering. When you see a movie, you are seeing 24Hz flickering. People barely tell it is flickering. When light is completely turn on/off, you need higher frequency than that. That’s about 100Hz. You can find more information about that by searching “flicker fusion threshold”

There are some cases where you want to have higher frequency PWM than 100Hz for LED. When you or your lighting source is moving, you may notice flickering at 100Hz due to the movements. Some very high current output LED driver or weird board design make you to hear PWM noise due to capacitor or something else ringing. Some people hear noises when they are driving motors with audible PWM frequency. That is a very rare case for PWM LED dimming.

Those two may be the only reasons why you need to use high PWM frequency for LED. Here are why you should avoid high PWM frequency for LED dimming for high power LED driver. When switching LED driver handle PWM signal, it is essentially turn on/off switching supply based on PWM signal. However it can not turn on/off at very high speed. Regular LED driver takes about 10-50us for on/off. Now let’s do a simple calculation. If PWM frequency is 100 Hz, each full PWM pulse is 10ms (1sec / 100). For 8 bit PWM dimming, each pulse need to divide into 256. So 1/255 pulse will be 40us. Now you are start to see a potential problem. Since some LED driver takes 50us to turn on/off, 40us pulse of PWM is not enough time. Now what you are start to see is half way on/off which result in flickering LED. Because most good LED drivers have on/off time close to 10-15us, you don’t see this kind of problem with 8 bit PWM with 100Hz frequency.

The problem is that Arduino has a two different default PWM frequencies (500Hz and 1000Hz) depending on pins. Now you see why some people saw these flicking like effect at low PWM duty cycle. If LED driver is connected to 1KHz PWM pin, LED driver need to turn on/off LED within 4us which is too short time even for the good LED driver. You may see flicking LED at low % PWM. To make this on/off time faster, some LED driver designs include additional transistors or mosfets which make LED driver to on/off less than 1us. My high power RGB LED driver shield also has mosfets even though it is not quite necessary.

There are PCB mount LED driver module like popular Luxdrive BuckPucks or some switching LED drivers from China. These may not be good even for 8 bit PWM dimming. For example, the BuckPuck has total 30us on/off time (15us each). They are recommending 50us. I know these are maximum values. Still they are barely OK for 8 bit PWM at 100Hz. If you use Arduino default frequency, they are definitely start to flickering at low PWM duty cycle (below 13/255 at 1KHz). You want to use low PWM frequency with those drivers not default frequency. It is not Luxdrive’s fault at all. Majority of LED drivers and modules are actually designed that way. Assuming that their drivers have flicker-less operation and 8 bit PWM dimming at 100-200Hz.

So you don’t want to use regular high power LED drivers with high PWM frequency and higher than 8 bit resolution PWM unless you know what you are doing. Naturally, analog dimming has no flickering problem, since you are not on/off LEDs.