#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.