LED Flicker and Dimming Compatibility Guide
Driver Architectures, Flicker Metrics, TRIAC and 0-10 V Dimming, and Specification Strategies
1. Introduction — Why LED Lighting Flickers and Why Dimmers Misbehave
An LED is a current-driven device with a nearly linear light output versus current and a turn-on time measured in nanoseconds. That means the light output follows the drive current almost instantaneously, including every ripple and every switching edge the driver produces. Where an incandescent lamp’s thermal mass averaged away the mains ripple and hid the switching artefacts, an LED faithfully reproduces them. The result is that flicker and dimmer incompatibility are the two most common complaints about LED lighting systems, and both are engineering properties of the driver, not of the LED itself. This guide explains how flicker is generated, how it is quantified (percent flicker, flicker index, frequency and the stroboscopic effects that matter for safety), which driver architectures produce which artefacts, why phase-cut (TRIAC) dimmers are the hardest load to satisfy and how to design or specify for them, how 0–10 V, DALI and PWM dimming differ in flicker and depth, how to verify a system before installation, and a complete worked example of a 12 W downlight with a TRIAC dimmer. It complements the LED array design and LED resistor guides on this site.
2. Where Flicker Comes From
Four mechanisms cover almost every real case:
| Mechanism | Frequency | Typical depth | Cause |
|---|---|---|---|
| Mains ripple on the DC bus | 100/120 Hz | 10–100% | Insufficient bulk capacitance; a single-stage driver with a small output cap |
| Driver switching ripple | 20 kHz–1 MHz | small, but visible on cameras | Output capacitor ESR and the current loop’s bandwidth |
| PWM dimming | 100 Hz–30 kHz | up to 100% | The dimming method itself: chopping the current on and off |
| Phase-cut (TRIAC) conduction gaps | 100/120 Hz + sub-harmonics | Erratic, load-dependent | The dimmer’s thyristor drops out below its holding current |
The first is by far the most common in low-cost bulbs: a driver with a small output capacitor lets the 100 Hz bus ripple modulate the LED current. The second is usually invisible to the eye but appears as banding on a phone camera or a video recording, which is often the actual client complaint. The third is a deliberate design choice; PWM is the easiest way to get deep dimming and accurate colour, but if the PWM frequency is low enough to be perceived (below roughly 1–2 kHz for peripheral vision, and definitely at hundreds of hertz) it produces stroboscopic effects. The fourth is the dimmer compatibility problem, discussed in section 5.
3. Quantifying Flicker
Three metrics are used in specifications and standards:
Percent flicker = 100 · (max − min) / (max + min)
Flicker index = (area above mean) / (total area of one period)
Modulation depth (IEEE 1789) = (max − min) / (max + min)
Percent flicker is the metric in most datasheets and the one that is easiest to measure with a photodiode and an oscilloscope. The flicker index weights the waveform shape and is more closely related to perceived annoyance. IEEE 1789 introduced a recommended practice that plots acceptable modulation depth against frequency: below 90 Hz almost no modulation is acceptable; between 90 Hz and 3 kHz the limit follows a curve (roughly 0.025 × frequency for the “low-risk” boundary, which gives 2.5% at 100 Hz and 25% at 1 kHz — commonly quoted as 0.08 × frequency for the “no-observable-effect” region and 0.025 × frequency for low risk); above about 3 kHz the limit is effectively “as low as practical”. The practical reading for a product specification is: keep 100 Hz ripple modulation below a few percent (which requires a large bulk/output capacitor or a two-stage driver), keep PWM dimming above 3 kHz for architectural and camera-visible applications, and never accept visible flicker at the lowest dimming level — the low end is where most drivers behave worst because the current loop becomes discontinuous and the control loses resolution. The power-side capacitors that determine the 100 Hz ripple are the same ones a designer sizes for the driver’s output stage; the electrolytic-versus-ceramic trade-off is analysed in the decoupling capacitor article, and the capacitor’s ripple current rating is checked with the ripple current calculator.
4. Driver Architectures and Their Flicker Behaviour
| Architecture | Flicker at 100 Hz | Dimming method | Notes |
|---|---|---|---|
| Single-stage, small output cap (low-cost bulb) | High (30–100%) | Usually none, or TRIAC | Cheapest; fails camera and IEEE 1789 guidance |
| Single-stage with large output cap (“flicker-free” marketing) | Low (1–10%) | TRIAC or analogue | Bulk capacitance costs volume and lifetime at high temperature |
| Two-stage (PFC + DC-DC) | Very low (<2%) | Analogue or PWM | Best flicker performance; higher cost and size |
| Linear regulator driver | Low (mains ripple only) | Analogue (current set-point) | Simple, low EMI, but efficiency drops with headroom |
| PWM-driven constant-current | Depends on the PWM frequency | PWM | Deep dimming and good colour; needs >3 kHz to avoid stroboscopic effects |
Two practical points. First, the “flicker-free” claim in a datasheet should always be tied to a measurement condition; a driver that is flicker-free at full load can have large modulation at 5% dimming, because the control loop’s bandwidth and the output capacitor’s impedance both change. Second, the lifetime of the large electrolytic capacitor used to kill the 100 Hz ripple is itself a reliability driver: at the elevated internal temperature of a sealed downlight, its life can become the limiting factor for the whole product, so a two-stage design with a smaller high-temperature capacitor is often the better long-term choice. The thermal side of that trade (capacitor and LED junction temperatures inside a sealed fixture) is analysed in section 7 with the thermal calculator.
5. Phase-Cut (TRIAC) Dimming Compatibility
TRIAC dimmers were designed for incandescent lamps: a resistive load that draws a substantial current from the moment the dimmer conducts, which keeps the thyristor above its holding current and provides the timing reference for the phase-cut angle. An LED driver is the opposite load — a switching converter with a capacitive input that only draws current in short pulses around the mains peak, and whose minimum current can fall below the dimmer’s holding current. The consequences are the classic symptoms: the lamp buzzes, flickers, refuses to dim below 20–30%, flashes at turn-on, or flickers when several lamps share one dimmer. Design measures that actually work:
- Bleeder / load resistor: a resistor (or an active bleeder switched in when the input voltage rises) draws a minimum current to keep the TRIAC latched at low conduction angles. The cost is a few watts of wasted power and heat in the fixture.
- Damping network (RC snubber): damps the LC resonance between the dimmer’s inductor and the driver’s input capacitor, which is the source of the buzzing and the false triggering at turn-on. The snubber and EMI filter articles on this site give the component sizing method.
- Wide-input, active-PFC front end: an active power-factor-correction stage draws a smoother current and reduces the peak-to-average ratio, which makes the dimmer behave more predictably; it also fixes the power factor, which matters for installations with many lamps on one circuit.
- Dimmer compatibility lists: because the interaction depends on the specific dimmer’s holding current, its minimum load specification and its internal inductor, manufacturers publish tested compatibility lists; specifying a driver without such a list for a project with existing dimmers is the single largest source of callbacks.
- Minimum load and mixing: if a single dimmer controls several LED lamps, the dimmer’s minimum load may not be met at low dimming levels; either load the dimmer with a permanent bleeder or keep the number of lamps and their drivers identical to what was tested.
- Neutral-less dimmers: some two-wire dimmers rely on a small leakage current through the load to power themselves; an LED driver that does not present a low-impedance path at all times can cause the dimmer to reset or the lamp to flash periodically when “off”. The fix is a bleeder or a dimmer that requires a neutral.
The design target for a dimmable LED driver is therefore not only “dims to 5%” but “dims to 5% with the specific dimmer models on the compatibility list, without buzzing, flashing or dropping out”; those are different specifications and only the second one survives contact with a real installation.
6. Analogue, Digital and Wireless Dimming
| Interface | Dimming range | Flicker behaviour | Wiring / limits |
|---|---|---|---|
| 0–10 V | 1–100% typical | Analogue set-point: low flicker if the driver regulates current | Two extra wires, per-driver or per-zone, polarity matters |
| 1–10 V (sinking) | 1–100% | As above | Different control convention; not interchangeable with 0–10 V |
| DALI | 0.1–100% | Digital set-point; flicker fixed by the driver | Addressable, bus-powered, two wires, 64 addresses per line |
| DMX512 | 0–100% | PWM-based; frequency set by the fixture | Entertainment lighting; needs >1–3 kHz PWM to be camera-safe |
| Mains phase-cut (TRIAC) | 5–100% typical | Highest risk of all | Existing wiring, no extra conductors |
| Wireless (Zigbee/BLE/Wi-Fi) | 0.1–100% | Determined by the driver’s dimming method | Convenient; adds a control path that can fail |
For architectural and broadcast environments, PWM frequency is a specification item: a camera’s rolling shutter, a 50/60 Hz frame rate and a PWM frequency that is not an integer multiple of it will produce banding that no amount of optical filtering removes. The practical minimum for camera-visible spaces is 3 kHz, and for high-speed or slo-mo capture far higher. Where deep dimming and accurate colour are needed, high-frequency PWM is the right answer; where the dimming range requirement is modest, analogue current control gives the lowest flicker for the same cost. A hybrid scheme — analogue down to about 10% and PWM below that — is a common way to get both a wide range and low flicker at the top end, at the price of a dimming curve that must be calibrated to avoid a visible step at the transition.
7. Worked Example — 12 W Dimmable Downlight
Target: a 12 W, 36 V, 350 mA downlight in a sealed fixture, TRIAC-compatible, minimum dimming 10%, IEEE 1789 low-risk compliance at 100 Hz, no visible banding on a phone camera, ambient 30 °C.
- Flicker budget at 100 Hz: with a 22 µF output capacitor and a 350 mA load at 100 Hz, the capacitor must supply about I/(2πf·C) = 0.35/(628 × 22e-6) ≈ 25 mV of ripple — the ideal calculation, but the ripple current (0.35 A RMS) and the ESR dominate in practice. A 100 µF low-ESR electrolytic reduces the modulation to roughly (ΔV/V) × loop gain; target <5% by design, verified on a prototype with a photodiode. If the measurement shows more, the first suspect is the capacitor’s ESR at 100 Hz, not its nominal capacitance.
- Driver architecture: a two-stage design (low-cost PFC plus a buck DC-DC) rather than a single-stage; the PFC front end improves the dimmer’s behaviour and the second stage makes the flicker target reachable with a smaller, cooler capacitor.
- TRIAC measures: a bleeder that draws about 8 mA at low dimming (≈1.8 W of the fixture’s 12 W budget — significant, but the alternative is a lamp that drops out at 30%), an RC snubber across the input (22 Ω + 100 nF, rated for the AC line), and a compatibility test against at least three dimmer brands at 10%, 30% and 100% settings, with two lamps on a single dimmer.
- Thermal: the bleeder’s 1.8 W plus the driver’s losses raise the internal temperature of a sealed fixture. Using the thermal calculator, check that the capacitor’s core temperature stays within its rated life curve (typically the life halves for every 10 °C above rated) and that the LED board’s junction temperature stays below its limit; a sealed 12 W fixture with 6 W of total internal loss is a genuinely tight thermal case, and the bleeder’s contribution cannot be ignored.
- Dimming curve: set the minimum at 10% (36 mA) rather than 1%, because the low end is where the dimmer’s holding current and the driver’s control resolution both fail; a 10% floor is what most TRIAC installations actually achieve in the field.
- Verification: percent flicker and frequency measured at 100%, 50% and 10% dimming; a camera test (60 fps video of the lamp) for banding; a dimmer sweep for buzzing and drop-out; an in-fixture thermal soak at the worst dimming level (which is often not full power — the bleeder’s loss matters most at low dimming, and the driver’s efficiency is often worst there).
8. Measurement, Compliance and Design Verification
Flicker and dimmer compatibility are both measurable, and measuring them early is far cheaper than discovering them in a customer complaint. The essential quantities are the modulation depth, the frequency and — for the flicker perceptibility question — the duty-cycle-dependent metric. Percent flicker and flicker index are easy to compute from a captured waveform:
"""Flicker metrics from a captured light-output waveform.
waveform: list of samples of relative light output (e.g. from a photodiode),
uniformly sampled over at least 10 modulation periods.
"""
def flicker_metrics(waveform):
maxv, minv = max(waveform), min(waveform)
mean = sum(waveform) / len(waveform)
# Percent flicker (modulation depth), the classic simple metric
percent_flicker = 100.0 * (maxv - minv) / (maxv + minv) if (maxv + minv) else 0.0
# Flicker index: area above the mean / total area (IEEE 1789 style)
above = sum(v - mean for v in waveform if v > mean)
total = sum(abs(v - mean) for v in waveform)
flicker_index = above / total if total else 0.0
return percent_flicker, flicker_index
# Example: 30% depth sine at 100 Hz vs a PWM signal with narrow pulses
import math, random
sine = [0.85 + 0.15 * math.sin(2 * math.pi * i / 50) for i in range(500)]
pf, fi = flicker_metrics(sine)
print(f"sine, 30% depth : percent_flicker={pf:5.1f}% flicker_index={fi:4.3f}")
pwm = [1.0 if (i % 50) < 5 else 0.0 for i in range(500)] # 5/50 duty, 100 Hz
pf, fi = flicker_metrics(pwm)
print(f"PWM, 10% duty : percent_flicker={pf:5.1f}% flicker_index={fi:4.3f}")
The comparison is instructive: the PWM waveform has 90% percent flicker even though its average brightness is low, and its flicker index is much worse than the "equivalent" analogue dimming sine. This is why duty-cycle-dependent metrics exist, and why a driver that looks acceptable at full output can fail perceptibility criteria when dimmed to 5% — the same absolute amount of modulation represents a much larger fraction of the mean output at low levels. Practical guidance that follows from the data: keep the modulation frequency above about 3 kHz whenever the output can be dimmed below roughly 30%, or reduce the modulation depth as the duty cycle falls (a hybrid scheme that holds the current constant and lengthens the off-time while keeping the frequency high is the usual implementation).
The dimmer-compatibility test is a different measurement with a similar philosophy: it must be conducted with the actual dimmer model installed in the actual two-wire circuit, at low, medium and high settings, and with the load at the extremes of what the product claims to support. The observations to record are (1) the stable dimming range, expressed as the percentage of the load at which flicker, drop-out or visible stepping appears; (2) the minimum load at which the dimmer starts reliably; (3) the inrush current at switch-on with the dimmer's triac conducting at an arbitrary phase; and (4) the audible noise of the inductor, choke or ceramic capacitor at each dimmer setting — a magnetostrictive buzz that is inaudible on the bench and intolerable in a bedroom. If the design uses an active bleeder, verify that it does not overheat when the dimmer is left at full conduction (its worst-case dissipation), and verify that the bleeder does not cause the dimmer to stay on when it should be off, which happens when the bleeder current exceeds the triac's holding current. Finally, test at least three units of the dimmer model across its production spread and, where the market demands it, at the two extremes of the mains-input tolerance — flicker and compatibility margins disappear quickly with ±10% line variation.
9. Common Mistakes
- Quoting "flicker-free" without a measurement condition: the specification must state the load, the dimming level and the metric; a driver can pass at 100% and fail at 5%.
- Choosing a single-stage driver to hit a cost target and then adding a bleeder: the combination can be larger, hotter and less reliable than a two-stage design.
- Ignoring the bleeder's heat: the bleeder runs continuously and sits in the hottest part of a sealed fixture.
- Assuming a dimmer is compatible because it is on a "works with LEDs" label: only a tested compatibility list for the specific driver and dimmer pair is meaningful.
- Low-frequency PWM for deep dimming: the cheapest way to get 1% dimming is also the way to produce visible stroboscopic effects and camera banding.
- One driver per dimmer with no minimum load considered: the dimmer's minimum load specification is a system requirement, not a driver requirement.
10. FAQ
Q: Is 100 Hz ripple visible? A: Direct perception of 100 Hz flicker varies between people and with the modulation depth, but the guidance is to keep it below a few percent; the more reliable reason to reduce it is that cameras and high-speed video will show it.
Q: What flicker metric should I put in a specification? A: Percent flicker at a defined frequency, plus the measurement conditions (dimming level, load, temperature); add IEEE 1789 low-risk compliance if the project is a workplace or a broadcast environment.
Q: Why does my LED lamp buzz with a dimmer? A: The dimmer's inductor and the driver's input capacitor form an LC circuit excited at every phase cut; an RC snubber and a damped input filter are the standard cure.
Q: Can I use a 0–10 V dimmer with a driver that expects 1–10 V? A: No, the control conventions differ and the result is usually no dimming or incorrect behaviour at the extremes; match the interface exactly.
Q: Does dimming reduce LED lifetime? A: Dimming lowers the LED's junction temperature and generally increases lifetime; the components that suffer are the bleeder, the driver's capacitor and, in poorly designed products, the driver itself at low output.
11. Conclusion
LED flicker and dimmer compatibility are properties of the driver, and both are specified, measurable and designable. Keep the 100 Hz bus ripple small with adequate capacitance and a stable control loop, choose the dimming method according to the required range and the environment (analogue for low flicker, high-frequency PWM for deep dimming and camera-visible spaces), treat TRIAC compatibility as a system problem with bleeders, snubbers and tested dimmer lists, and verify the whole system at the worst dimming level, not at full power. Lighting is judged by how it looks and how it behaves in service, and both are decided by these details.