#voron #v0 #neopixel #skr-pico #klipper #power #led #3d-printing
# Overview
Powering a large WS2812B chain on [[V0.4351]] with its [[SKR Pico GPIO Budget And Servo Control|BTT SKR Pico]] controller. At the planned 51-pixel count, full-white draw is ~2.5–2.8 A, far past what the board's onboard 5 V rail should be asked to supply. Power comes from the PSU's dedicated 25 W / 5 A 5 V rail via a fused, capacitor-buffered distribution point; **data only** stays on the board's RGB header (P6).
Core topology decision: **star the power, chain the data.** Each LED PCB gets its own 5 V/GND drop from the distribution point; only DO→DI hops between boards.
# Resources
- Board schematic: `bigtreetech/SKR-Pico` → `Hardware/BTT SKR Pico V1.0-SCH.pdf`
- Rainbow Barf Logo LED — `tanaes/whopping_Voron_mods` → `LEDs/Rainbow_Barf_Logo_LED`
- Rainbow on a Matchstick — `VoronDesign/Voron-Hardware` → `Daylight/Rainbow_on_a_matchstick`
- [MapleLeafMakers/V0_RGB_Skirt_Logo](https://github.com/MapleLeafMakers/V0_RGB_Skirt_Logo) — RGB Voron logos in the V0.2 skirts
- [MapleLeafMakers/Matchstick_Diffuser](https://github.com/MapleLeafMakers/Matchstick_Diffuser) — diffusers for matchstick strips
- [livinhack/Kirigami-PCB](https://github.com/livinhack/Kirigami-PCB) — UFO Kirigami LED PCB
- [julianschill/klipper-led_effect](https://github.com/julianschill/klipper-led_effect)
- [[V0.4351]] — printer build note, see its *Neopixel Chain* section
- [[SKR Pico GPIO Budget And Servo Control]] — what IO is left on the Pico
- [[Formbot Voron V0.2-R1 Kit Reference]]
# Design
## LED inventory
| Item | Qty | Px ea. | LED part | Total px | Full white |
|---|---|---|---|---|---|
| Rainbow Barf Logo | 3 | 8 | WS2812B-2020 (LCSC C965555) | 24 | ~0.86 A |
| Rainbow on a Matchstick | 2 | 10 | WS2812B 5050 | 20 | ~1.20 A |
| Discrete | 7 | 1 | WS2812B 5050 | 7 | ~0.42 A |
| | | | | **51** | **~2.5 A** |
Per-pixel figures used: 5050 = 20 mA/ch → 60 mA; 2020 = 12 mA/ch → 36 mA. Quiescent ≈ 1 mA/px (~50 mA chain idle).
==Worldsemi datasheet revisions disagree on the 2020 part: V1.3 says 12 mA/channel, V1.0 says 16 mA/channel. At 16 mA the total is ~2.8 A. Budget for 2.8 A until measured.==
==This inventory does not match the chain documented in [[V0.4351]], which lists UFO Front (1×) → UFO Bottom (8×) → Front Skirt Left (1×) → Front Skirt Right (1×) on the RGB port, with the matchsticks on a second GPIO and a status pixel on the V0 display. Reconcile the two before ordering wire and connectors — the real number is likely closer to 35 than 51.==
On-board passives already present:
- Barf Logo: 1× 470 R (DIN series) + 1× 100 nF per board
- Matchstick: 7× 100 nF per board, 2× JST-XH 2.54 3-pin (in/out for chaining)
## SKR Pico schematic findings
Read directly from `BTT SKR Pico V1.0-SCH.pdf`:
| Ref | Part | Note |
|---|---|---|
| U9 | **TI TPS5450** | 5.5–36 V in, 5 A cont. / 6 A peak, 500 kHz. Main 24→5 V buck. |
| U7 | **74HCT365** | Hex buffer, VCC = 5 V. GPIO24 → pin 10 (4A), out pin 9 (4Y) as `RGB_1`. |
| R83 | 100 R | Series on `RGB_1` between buffer output and P6. |
| U10 | AMS1117-3.3 | 3.3 V LDO fed from 5 V. |
| F3 | 0.35 A | Feeds AMS1117 only. |
| F4 | ~3.5 A | Feeds P5 (Pi/CB1 header). |
| P6 | RGB header | **Pin 1 = GND, Pin 2 = DATA, Pin 3 = 5 V** — data in the middle, unlike the board's other connectors. |
**The RGB port's 5 V is unfused, tapped straight off the 5 V node.**
Two consequences:
1. ==No external level shifter needed.== The 74HCT365 already translates 3.3 V RP2040 logic to a 5 V swing and adds 100 R of damping. A 74AHCT125 would be redundant here.
2. Do not stack additional series resistors per branch — the 100 R plus each Barf board's 470 R is already the whole network.
## Power budget vs. the board
Thermal, not silicon, is the binding constraint on the TPS5450 (HSOIC-8 PowerPAD, no guaranteed airflow). At 24→5 V, 2.5 A of LEDs alone is ~2 W dissipated in that package.
Practical ceilings for board-fed LEDs:
- CB1 powered separately: ~1 A (≈16× 5050 at full white)
- CB1 on P5: ~500 mA
At 51 px this is 5× over. **Inject from the PSU.**
## Why the capacitor
Not for ripple — the PSU is regulated with its own bulk. Two real reasons:
1. **Load step.** Idle (~50 mA) → full white (~2.5 A) is a 50× step in under a millisecond. LRS/RS-class supplies take ~1–2 ms to recover; the rail sags a few hundred mV. WS2812s brown out near 3.7 V and the first symptom is *corrupted color*, which reads as a data fault.
2. **Wire inductance.** ~0.5–1 µH/m of paired wire puts the PSU's own caps on the wrong side of the run. Local bulk absorbs the edge.
Target: **≥1000 µF, 16 V, low-ESR, 105 °C**, plus a 0.1 µF ceramic beside it. Mounted **at the distribution point**, not at the PSU terminals. 16 V not 6.3 V — only 20 % derating on a 5 V rail otherwise.
## Wiring topology
```text
PSU 5V rail ──[fuse 3–4 A]── 20 AWG ──┬── distribution board ──┬── 24 AWG → Barf #1
│ (1000 µF + 0.1 µF) ├── 24 AWG → Barf #2
│ ├── 24 AWG → Matchstick #1
│ └── 24 AWG → Matchstick #2
SKR Pico P6 pin 2 (DATA) ──── 26 AWG ─┘ data jumpered board-to-board (DO→DI)
SKR Pico P6 pin 1 (GND) ──── 26 AWG ─┘
SKR Pico P6 pin 3 (5V) ──── OMIT
```
**Do not daisy-chain power.** A single Matchstick at full white pulls 1.2 A; feeding a second one *through* the first puts 2.4 A on traces never laid out for pass-through. Same problem at the Barf boards.
The P6 pigtail is deliberately **26 AWG** — thin enough that the current divider strongly prefers the fat PSU return, keeping LED current out of the Pico's ground pour.
==Verify the 5 V rail DC− and the 24 V DC− are the same node.== If the 25 W rail is a separate brick rather than a second output sharing a return, the data line has no valid reference and the symptom looks exactly like a bad pixel. Bond at the PSU end if not already common.
## BOM
### Adafruit
| Item | PID | Qty | Notes |
|---|---|---|---|
| 220 µF 16 V electrolytic, pack of 10 | 2192 | 1 | 5× in parallel = 1100 µF; spares |
| 100 µF 16 V electrolytic, pack of 10 | 2193 | 1 | Optional local decoupling at each board |
| Perma-Proto half-sized PCB, single | 1609 | 1–2 | Distribution board substrate |
| 0.1 µF ceramic, pack of 10 | 753 | 1 | ==OUT OF STOCK as of 2026-08-20== |
### Sourced elsewhere
| Item | Spec | Notes |
|---|---|---|
| Inline fuse holder | 5×20 mm, 16–18 AWG leads | Not stocked by Adafruit |
| Glass fuse | 3–4 A fast-blow, 5×20 mm | Size above measured worst case, below 5 A |
| Silicone wire | 20 AWG (trunk), 24 AWG (drops), 26 AWG (data) | |
| JST-XH 2.54 3-pin housings + pins | | Matches Matchstick connectors |
| Crimper | Engineer PA-09 or IWISS SN-01BM | Barf boards are solder-pad only — see [[Connector Crimping]] |
# Configuration
All 51 pixels are the same protocol, 800 kbps, RGB (no RGBW in this mix), so a single chain works:
```ini
[neopixel sb_leds]
pin: gpio24
chain_count: 51
color_order: GRB
initial_RED: 0.0
initial_GREEN: 0.0
initial_BLUE: 0.0
```
`gpio24` is the RGB header and is already spoken for by the LED mod per [[SKR Pico GPIO Budget And Servo Control]] — no conflict, but it does mean a second chain on a different pin would have to come out of the free-GPIO budget there.
MCU load: 51 px × 24 bits @ 800 kbps ≈ 1.5 ms + 280 µs latch per full refresh. At `klipper-led_effect` default frame rate that's a few percent duty with interrupts tight on the RP2040. ==If "Timer too close" appears, drop the led_effect frame rate before hunting elsewhere.==
# Build Log
## 2026-08-20 — Research and BOM
- Pulled and parsed `BTT SKR Pico V1.0-SCH.pdf`; identified TPS5450, 74HCT365, P6 pinout, fuse map (see [[#Design]]).
- Confirmed pixel counts from upstream BOMs: Barf Logo = 8× WS2812B-2020, Matchstick = 10× WS2812B 5050.
- Established 2.5–2.8 A worst case → PSU injection required.
- Sourced Adafruit order; found two gaps (see [[#Decisions]]).
- Filed into the vault against the spec; cross-linked to [[V0.4351]] and [[SKR Pico GPIO Budget And Servo Control]]. Doing so surfaced a pixel-count conflict with the chain already documented in [[V0.4351]] — logged in [[#TODO]].
# Decisions
**2026-08-20 — Star power / serial data.** Chosen over single-feed daisy chain because the Matchstick and Barf PCB traces are not rated for downstream pass-through current. Costs four extra drops, removes the trace-current constraint entirely.
**2026-08-20 — No external level shifter.** The board's 74HCT365 already does the 3.3→5 V translation. Adding a 74AHCT125 would stack a second buffer delay and a second series resistor on a signal that's already correct.
**2026-08-20 — Bulk cap built from 5× 220 µF instead of 1× 1000 µF.** Adafruit does not stock 1000 µF (their 4700 µF, PID 1589, is out of stock). Five 220 µF 16 V in parallel = 1100 µF and *lowers* effective ESR versus a single can. Acceptable substitution.
**2026-08-20 — Fuse and holder sourced elsewhere.** ==Adafruit does not carry discrete glass fuses or fuse holders.== Ordering from Digi-Key/Mouser/Amazon alongside.
# TODO
- [ ] ==Reconcile the LED inventory here against the *Neopixel Chain* section of [[V0.4351]].== A V0.2 has one toolhead, so 2 of the 3 Barf boards are likely spares; real chain may be closer to 35 than 51, which changes the drop count and the fuse size.
- [ ] ==Decide whether the matchsticks stay on the `gpio24` chain or move to a second pin.== [[V0.4351]] sketches them on a separate GPIO; [[SKR Pico GPIO Budget And Servo Control]] says `gpio29`/`gpio22`/`gpio16` are free but `gpio29` is claimed for the nozzle-brush servo.
- [ ] ==Confirm 5 V and 24 V share a common DC− at the PSU.==
- [ ] ==Bench the full chain, run full white, measure actual draw with DMM in series on the 10 A jack.== This sizes the fuse and settles the 12 mA vs. 16 mA datasheet question for these specific 2020s.
- [ ] Source 0.1 µF ceramics (Adafruit out of stock).
- [ ] Lay out the distribution perfboard: power in, fuse, bulk cap, 4× JST-XH out with data jumpered in chain order.
- [ ] Verify P6 orientation before first power-on (data is the **middle** pin).
# References
- TPS5450 datasheet (TI): 5.5–36 V in, 5 A continuous / 6 A peak, 500 kHz
- WS2812B-2020 datasheet (Worldsemi) — note V1.0 vs. V1.3 current discrepancy
- WS2812B 5050 datasheet (Worldsemi) — 20 mA/channel
- [`klipper-led_effect`](https://github.com/julianschill/klipper-led_effect) — julianschill
- [Klipper `[neopixel]` config reference](https://www.klipper3d.org/Config_Reference.html#neopixel)
> [!note] Provenance
> Built from a chat session on 2026-08-20. Schematic values were read from the BTT PDF directly; LED counts from upstream BOM/CPL files. Adafruit stock status checked same day and will drift.