Voltage Injection Math for WLED
1.Why voltage sags along a strip
Addressable LED strips carry power and data down the same flexible PCB. The +5V and GND traces running the length of the strip are thin copper, typically well under 1mm² cross-section, and every LED module along the run taps current off them as it lights.
Copper has resistance. Current flowing through a resistance produces a voltage drop proportional to that current. Every LED between the feed point and a given position adds to the current the trace segments upstream of it have to carry, so the supply voltage measured at the strip decreases monotonically with distance from the feed point.
WS281x-family chips need roughly 4.5V minimum on a nominal 5V rail to run reliably. The first visible symptom of sag is color shift — blue drops out before red and green, so the tail of the strip runs yellow or pink — followed by flicker, then data corruption as the sag reaches the DIN threshold reference, then dead sections. Power injection (feeding +5V/GND at multiple points instead of just the strip's start) is the fix. This article works out where those points need to go, using the strip's actual current and resistance numbers rather than a flat spacing rule.
2.Current draw model
The design current for injection spacing is the worst case — every pixel at full white, full brightness — not the average draw of a typical animation. A single bright flash in an effect still has to clear the same voltage floor as steady-state full white.
| Condition | Per-LED current | Notes |
|---|---|---|
| Idle (data held, output off) | ~0.5–1 mA | Controller IC quiescent draw, present even with the strip logically off |
| Single channel full (R, G, or B) | ~20 mA | Each of the three internal LEDs draws independently |
| Full white, full brightness | ~60 mA | R+G+B simultaneously; use this for spacing math |
ABL is a current ceiling, not a sag compensator
WLED's automatic brightness limiter scales output down to keep total controller current under a configured mA ceiling. It protects the PSU and wiring from overcurrent. It has no model of your trace resistance and does nothing for a LED that's undervoltaged because it's far from the nearest feed point. Current limiting and sag topology are separate problems that happen to share the same Ohm's law input.
3.The distributed-load correction
The naive calculation treats the strip as one lumped resistor carrying the total current:
ΔV = I_total × R_total // overestimates the drop
This overstates the sag, because current doesn't traverse the full strip length for every LED. An LED one position from the feed point only loads the first trace segment; only the single farthest LED's current crosses the entire run. Model it properly: N LEDs, uniform per-LED current I_led, resistance R_seg per inter-LED segment (both rails, round trip). Feeding from k = 0, segment k carries the combined current of every LED from k to N:
I(k) = I_led × (N − k + 1)
total drop = R_seg × I_led × Σ(k=1..N) (N−k+1)
= R_seg × I_led × N(N+1)/2
For large N, with I_total = N·I_led and R_total = N·R_seg, this converges to a clean continuous approximation for a single end-fed run:
ΔV_one-end ≈ (1/2) × I_total × R_total
Use total current for PSU sizing, half-drop for sag budgeting
The 1/2 factor applies to voltage sag at the far end, not to how much current the supply has to source — the PSU still has to deliver I_total, just over an effectively shorter average path. Conflating the two leads to undersizing the PSU or oversizing the injection spacing, depending on which number gets carried through by mistake.
4.Two-point feed: the quarter-drop rule
Now feed a run of length L (N LEDs) from both ends with matched voltage sources. By symmetry, no net current crosses the exact midpoint — each half sources its own local load. That makes each half electrically identical to an independent one-end-fed run of length L/2 carrying N/2 LEDs. Substituting into the one-end-feed formula:
ΔV_half = (1/2) × (I_total/2) × (R_total/2)
= (1/4) × [(1/2) I_total R_total]
= ΔV_one-end / 4
Feeding the same span from both ends cuts worst-case sag to a quarter, not a half, of the single-end figure. This is the reason adding injection points has an outsized payoff compared to what "half the distance, half the drop" intuition suggests — the current path length and the current magnitude both shrink together at each end.
5.Injection spacing formula
Between two adjacent injection points spaced s meters apart, on a strip with LED density λ (LEDs/m), worst-case per-LED design current I_led, and round-trip trace resistance per meter R′, the quarter-drop result gives the sag at the midpoint:
ΔV_mid = (1/8) × λ × I_led × R′ × s²
Solving for the max spacing that stays inside a chosen drop budget ΔV_budget:
s_max = √( 8 × ΔV_budget / (λ × I_led × R′) )
Worked example
Standard 60 LED/m 5050 strip, worst-case I_led = 0.06 A, R′ ≈ 0.16 Ω/m round trip (typical for this density — measure yours; trace resistance varies with backbone width and copper weight across manufacturers). Budget ΔV_budget = 0.3V, leaving the far end near 4.7V on a clean 5.0V rail with margin left for connector and lead resistance:
s_max = √( 8×0.3 / (60 × 0.06 × 0.16) )
= √(2.4 / 0.576) ≈ 2.04 m
That lands close to the commonly cited "inject every 1–2 meters" guidance, but now it's a derived number tied to a specific density, current, and resistance rather than an assumption — plug in your strip's actual measured R′ and the spacing moves accordingly.
| LED density | I_led (worst case) | R′ (assumed) | s_max |
|---|---|---|---|
| 30/m | 60 mA | 0.16 Ω/m | ≈ 2.89 m |
| 60/m | 60 mA | 0.16 Ω/m | ≈ 2.04 m |
| 144/m | 60 mA | 0.16 Ω/m | ≈ 1.32 m |
Higher LED density means more current per meter of trace for the same resistance, so spacing has to shrink to hold the same voltage budget — the effect is strong enough that a 144/m strip needs more than double the injection density of a 30/m strip.
6.Feed wire gauge
The spacing formula covers sag inside the strip's own copper. The wire run from the PSU or distribution bus out to each injection tap is a separate, ordinary Ohm's law problem:
ΔV_lead = 2 × d × R_awg × I_seg
where d is one-way lead length, the factor of 2 accounts for the return conductor, R_awg is resistance per meter for the chosen gauge, and I_seg is the current that tap has to deliver — roughly half of each neighboring spacing's load for an interior injection point.
| AWG | Ω/m (one-way, 20°C) |
|---|---|
| 22 | 0.0530 |
| 20 | 0.0333 |
| 18 | 0.0210 |
| 16 | 0.0132 |
| 14 | 0.0083 |
| 12 | 0.0052 |
Example: an interior tap serving ~120 LEDs (one full 2m spacing's worth at 60/m) at worst case draws 120 × 0.06A = 7.2A. With a 0.5m lead on 18AWG: 2 × 0.5 × 0.021 × 7.2 ≈ 0.15V. Stacked on the 0.3V topology budget, that's 0.45V worst case — workable but tight. Dropping to 16AWG cuts it to ≈0.095V, restoring margin.
Don't reuse the strip's pigtail wires
The thin 24–26AWG leads soldered to the strip's factory input pigtail are sized for connecting to the first injection point, not for carrying multi-amp injection current over any real distance. Home-run injection leads should be sized off the segment current they're carrying, independent of what shipped on the strip.
7.Topology and grounding
Always tie GND locally at every V+ injection point
Injecting +5V without a ground reference at the same physical point forces the return current back through the strip's own ground trace over a longer path, which partially defeats the injection and can push the data line's voltage relative to the local WS281x GND pin out of spec — DIN is referenced to the chip's own ground, not the PSU's. This is a common cause of glitching that looks like a data integrity problem but is actually a power topology problem.
Home-run every injection point, don't daisy-chain power through the strip
Feeding point A, then routing through the strip's own copper to point B, forces the injected current back through the resistance the injection was meant to bypass. If the two feeds are even slightly mismatched in voltage, the mismatch drives a loop current through the strip trace between them. Each injection point needs its own pair back to the distribution bus.
Bulk capacitance at each tap
A 470–1000μF electrolytic plus a small ceramic across V+/GND at each injection point buffers the fast current transients a bright PWM update can cause. It's an energy-storage fix for transient flicker, not a resistance fix for static sag — it doesn't substitute for correct spacing, but it noticeably improves stability on top of a correctly budgeted topology.
8.WLED ABL configuration
- Maximum Current should reflect what the weakest injection point's wiring can actually deliver at worst-case brightness, not the strip's theoretical full-white maximum and not more than any single feed wire or PSU rail is rated for.
- A project split across multiple PSUs or injection zones on different rails can't be reasoned about by WLED's single global ABL value — it only throttles total controller output. Either set it to the weakest zone's headroom, or balance LED segment assignment so no single physical feed is disproportionately loaded during a bright effect.
- The mA per LED setting should match the real worst-case draw for the strip in use: ~60mA for WS2812B, higher for SK6812 RGBW (extra white channel), different again for WS2815 since it's a 12V part with per-LED constant-current regulation. The spacing math upstream assumed a specific number here — keep them consistent.
9.Design checklist
- Measure the strip's actual round-trip trace resistance rather than assuming a datasheet value — most datasheets omit it.
- Compute
s_maxfrom worst-case current, not average scene current. - Place injection points at intervals ≤
s_max; tie GND locally at every V+ tap. - Home-run each injection point back to the distribution bus — never feed one tap through another via strip copper.
- Size each feed lead to its own segment current and lead length, not a flat gauge for the whole project.
- Add bulk capacitance at each tap for transient buffering.
- Set WLED's max current and mA/LED to the weakest physical feed point, not the strip's theoretical maximum.