diff --git a/Hardware-Design-v0.1.md b/Hardware-Design-v0.1.md new file mode 100644 index 0000000..2de4094 --- /dev/null +++ b/Hardware-Design-v0.1.md @@ -0,0 +1,76 @@ +# BikeAudio — Hardware Design v0.1 (stackable, battery-powered) + +Consolidated design package from four research workstreams (power/battery, stack +connector & addressing, carrier PCB & BOM, LED). This is a **design-for-layout +package**, not CAD/Gerbers — hand to an EE / a KiCad pass. Figures are researched +estimates; **open verification items in §8**. + +## 1. Architecture & standardized hardware +- **SINK** (1): iPhone A2DP in -> decodes -> drives the shared **I2S** bus (master). GPIOs BCK=5, WS=25, DATA=23. +- **BROADCASTER** (N): reads I2S -> A2DP-streams to one speaker. GPIOs BCK=19, WS=18, DATA=22. +- **HUD** (1): ESP32-S3-Touch-LCD-1.28 round touch display; controls over **I2C** (its GPIO15=SDA / GPIO16=SCL). +- Control bus **I2C** on every audio board: SDA=GPIO32, SCL=GPIO33 (matches firmware). +- **All audio/control boards are the SAME module: ESP32-WROOM-32E.** One carrier PCB, two assembly variants (SINK vs BROADCASTER). Channels are brand-agnostic (Headset / Speaker 1 / Guest / ...). + +Builds & runtime targets: **Small** = 1 HUD + 1 SINK + 3 BROADCASTERS (>=12 h). **Beast** = +6 or +12 broadcasters (>=24 h). + +## 2. Stacking connector & bus (detail: [Stack Connector & Addressing]) +- **26-pin (2x13) 2.54 mm THT pass-through stacking header**, polarized/keyed, ~3 A/pin, **11-12 mm board pitch**; vibration-rated; grounds bracket the I2S clock/data. +- Boards self-stack into a vertical bus column; **M3 corner standoffs carry the vibration load** (not the connector). SINK at bottom, HUD ribbon-attached on top facing the rider. +- **Scale to 6/12 broadcasters via a passive backplane** with a **per-stack buffered I2S star** (don't drive one long column past ~4 boards). + +**Bus pinout (canonical):** + +| Group | Signals | +|---|---| +| Power | 5V (x2), 3V3, GND (x4-5, interleaved) | +| I2S | BCK, WS, DATA (grounds adjacent) | +| I2C | SDA(GPIO32), SCL(GPIO33) | +| UART (future) | UART_TX, UART_RX (x2 sets) | +| LED (future) | **LED_DAT, LED_CLK** (APA102 — 2 lines) + GND | +| Addressing | 4 strap lines and/or ADDR_CHAIN in/out | +| Spare | 2-4 GPIO | + +## 3. I2C addressing for identical boards +Problem: identical boards/firmware need unique addresses (SINK 0x08; broadcasters 0x10..0x1B for up to 12). +- **v1 (recommended): 4-bit solder/jumper straps** on safe GPIOs **13/14/27/26**, read at boot -> address = 0x10 | nibble. Simple, vibration-proof, supports 16. (I2C already owns 32/33, so the connector-agent's chain-on-32/33 idea is NOT usable as-is.) +- **Scale-up option: GPIO daisy-chain auto-enumeration** (zero-config; address = stack position) using 2 spare GPIOs — adopt when going to many identical broadcasters. + +## 4. Power & battery (detail: [Power and Battery]) +Per-board avg @5V: SINK ~120 mA, BROADCASTER ~130 mA (bursty BT TX, peaks ~160 mA), HUD ~70 mA. + +| Config | Boards | Avg @5V | Power | Battery (18650, 2S) | Energy | +|---|---|---|---|---|---| +| Small | HUD+SINK+3 | ~580 mA | 2.9 W | **2S3P** | ~75 Wh (>=12 h) | +| Beast-6 | HUD+SINK+6 | ~970 mA | 4.85 W | **2S8P** | ~200 Wh (>=24 h) | +| Beast-12 | HUD+SINK+12 | ~1.75 A | 8.75 W | **2S14P** | ~350 Wh (>=24 h) | + +- **18650 Li-ion** (vibration/heat tolerant) over LiPo pouch; **2S** topology (always-buck, scales). Derate to ~61% usable (efficiency x aging x 20% reserve). +- **Charger:** Small = TI **BQ25887** (2S, I2C, balancing, ~2 A); Beast = **BQ25756 + USB-PD sink (TPS25750)** for 3-5 A charge (plain 5V/3A USB-C can't charge the beast packs in reasonable time). +- **Regulation:** buck to 5 V (Small: TPS563201 3 A; Beast-6: TPS54560 5 A; Beast-12: TPS546B24A ~10 A). **Feed 5 V on Small; feed 3V3 directly on Beast** to recover ~13% LDO loss. Heavy bulk decoupling (>=470 uF bus + 100 uF/0.1 uF per board) to absorb BT TX bursts. +- **Flags:** Beast-12 = 28 cells, ~1.3 kg, **>100 Wh (air-travel restricted)** — consider modular hot-swap 2S packs. **NTC/JEITA charge profiling mandatory** (hot bike). Reverse-polarity + TVS + fuse on input; spot-welded packs (not spring clips) for vibration. + +## 5. Carrier PCB (detail: [Carrier PCB and BOM]) +- **One 4-layer PCB, ~45x45 mm**, hosts an ESP32-WROOM-32E; two assembly variants. +- **"One PCB, two roles" trick:** a 0R jumper field routes the bus I2S to either SINK GPIOs (5/25/23) or BROADCASTER GPIOs (19/18/22). +- **I2C pull-ups (4.7k, single pair) populated on ONE board only** (the SINK). EN-RC reset + IO0 boot button + 6-pin USB-UART programming header (auto-reset 2-transistor circuit). +- **ANTENNA KEEP-OUT is the #1 risk:** WROOM antenna must overhang the board edge / 15 mm copper keep-out all layers. Three WROOM 2.4 GHz antennas stacked in ~45 mm **will couple** -> mitigate by **antenna-edge overhang + rotating each board's orientation**, or use **ESP32-WROOM-32UE (external IPEX antenna)** for inner boards. +- **Cost ~$7 assembled/carrier** (module ~60%); a 3-board stack + HUD ~ $36 in parts (excl. power/battery/speakers). + +## 6. LED subsystem (future, music-reactive) (detail: [LED and Music Sync]) +- **APA102/SK9822 (clocked SPI), NOT WS2812** — WS2812's tight timing is documented to be corrupted by the BT stack (and its ISR can starve the audio). APA102 over SPI/DMA is glitch-immune. +- **Drive from the SINK** on a low-priority **Core-1** task (simple envelope/beat detect), or a **dedicated ESP32-C3** for FFT/guaranteed isolation. **Never** from a busy broadcaster. +- **Cap brightness ~25% + switchable LED rail.** 16 LEDs (small) / 30 (beast); 60 max. Uncapped full-white at 60 LEDs (~3.6 A) would dwarf the audio draw and wreck runtime. + +## 7. BOM summary +Per carrier (~$7 assembled): ESP32-WROOM-32E, 26-pin stacking pair, prog header, SH1.0 HUD header (top board), buttons, decoupling/pull-ups, 0R jumpers, strap resistors. Power (per build): 18650 cells (6/16/28), 2S BMS, charger IC (+PD on beast), buck reg, USB-C, fuse/TVS/switch (~$80/$180/$300). LED option: APA102 strip, load switch, series R, bulk cap. Full line-items on the detail pages. + +## 8. Open items for the EE (verify before tape-out) +1. **2.4 GHz antenna coupling** in the WROOM stack — overhang + rotate, or WROOM-32UE external antennas inner boards. (Highest risk.) +2. **I2S integrity:** buffer + **22-33 R series term** per line at SINK; **star fan-out** per stack (never drive 12 inputs off one GPIO). +3. **I2C:** run **100 kHz, single 2.2-4.7k pull-up pair**; add a **PCA9548A mux / P82B96 buffer** per stack for the 12-broadcaster bus. +4. **Beast-12 24 h** battery is the binding constraint (heavy, air-restricted) — consider modular packs / relax target. +5. Confirm HUD SH1.0 pin order from the Waveshare schematic; GPIO12 must stay low at boot; reconcile connector footprint between PCB & connector specs (use the 26-pin). + +--- +*Sources and full detail in the linked workstream pages. Generated by a 4-agent research/design pass.*