ST7796S datasheet §10.8: panel rescans GRAM at 60Hz; tear-free writes require feeding the TE output back to the MCU and writing during vblank. EP-0172 prototype wires no TE, so large updates tear (small writes hide it — why MP/CP look clean). Add TE (e.g. GP4) + optional MISO to the face interconnect for the production board. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
221 lines
13 KiB
Markdown
221 lines
13 KiB
Markdown
# PM_K-1 Core Board ("brain") — design-of-record
|
||
|
||
VARASYS PolyMeter · heirloom pro-audio · modular brain/face architecture
|
||
Status: **design-of-record / pre-layout.** Component selection complete; PCB routing is the
|
||
remaining interactive step (see [Open items](#open-items)).
|
||
|
||
---
|
||
|
||
## 1. Philosophy
|
||
|
||
This is meant to be a device people hand down to their great-grandkids. The core board carries
|
||
**all the active electronics** and is specced to pro/audiophile tier with longevity and
|
||
serviceability as first-class goals. We do **not** value-engineer the audio path.
|
||
|
||
The user selects the face/enclosure/connector components; this document specs only the **core**.
|
||
|
||
## 2. Architecture — modular brain/face
|
||
|
||
- **Core ("brain"):** RP2350 + power + RTC + the full pro-audio analog chain + control logic.
|
||
One core design is reused across every form factor.
|
||
- **Face ("form factor"):** display, touch, joystick, buttons, LED, speaker, the physical
|
||
audio/MIDI connectors, panel switches, enclosure. **The core never decides connector type.**
|
||
- **Two interconnects, deliberately separate** (§7):
|
||
1. a **digital ribbon** whose pinout mirrors the Raspberry Pi Pico, so a stock Pico/Pico 2 on a
|
||
test adapter can drive any face board for bring-up;
|
||
2. an **analog interconnect** (+ a small MIDI interconnect) kept physically away from the fast
|
||
digital ribbon, because a balanced audio signal must never run parallel to the 24 MHz display SPI.
|
||
|
||
## 3. Block diagram
|
||
|
||
```
|
||
USB-C 5V ─┬─► 3V3 LDO ──────────────────────► RP2350 (core reg + ext L) + W25Q128 16MB + RV-8803 RTC(+CR2032)
|
||
│ │ I²S + low-jitter MCLK
|
||
└─► TPS65131 ±18V ─► TPS7A49/30 LDO ─► clean ±15V ▼
|
||
PCM5102A DAC ──► [summing: click + input]
|
||
│
|
||
bal IN ─[ESD/DC-block/clamp/series-R]─► [LINE/INST relay] ─┬─ THAT1240 receiver ──┘
|
||
(analog interconnect) └─ OPA1641 Hi-Z DI buffer (+gain)
|
||
│
|
||
THAT1646 balanced driver ─[47Ω build-out]─► [MUTE relay]─► bal OUT
|
||
shield ─[panel SW]─[GND-LIFT relay]─ gnd
|
||
sig/clip peak detect ─► LM393 ─► RP2350 GPIO (UI) + LED lines (interconnect)
|
||
RP2350 UART ─► [DNP: H11L1 opto IN + 74LVC14 buffer OUT] ─► MIDI interconnect (USB-MIDI = default)
|
||
```
|
||
|
||
## 4. Functional blocks
|
||
|
||
### 4.1 MCU + digital
|
||
- **RP2350A** (QFN-60, 30 GPIO). Chosen over RP2040 as the newest in-house part: dual M33+RISC-V,
|
||
520 KB RAM, secure boot, longest production runway. Firmware runs unchanged.
|
||
- **Erratum E9:** high-impedance inputs can latch — every input we read (face switches, buttons)
|
||
gets an **external pulldown**, never relies on the internal pad alone.
|
||
- Core supply via the RP2350 on-chip switched-mode regulator (external inductor); 3V3 IO from an
|
||
external LDO (AP2112K-3.3 / TLV75533).
|
||
- **Flash:** Winbond **W25Q128JV** (16 MB) — genuine part; the CircuitPython appliance bundles the
|
||
editor + tracks on a USB drive. Firmware does wear-leveling for `history.json`.
|
||
- **Crystal:** 12 MHz ±30 ppm.
|
||
- **Debug/service:** SWD 2×5 Cortex-Debug header + labeled test points (rails, I²S, audio nodes).
|
||
|
||
### 4.2 Click source (DAC)
|
||
- **TI/Burr-Brown PCM5102A** I²S DAC — reliability-first, widely stocked for future repair.
|
||
- Fed by a **dedicated low-jitter audio oscillator** (22.5792/24.576 MHz MEMS XO), **not** an MCLK
|
||
jittered out of the RP2350 PIO — jitter is audible as a raised noise floor.
|
||
|
||
### 4.3 Analog audio chain (the heart)
|
||
- **Input (balanced, switchable line/instrument):**
|
||
- **Line mode:** THAT1240 laser-trimmed balanced receiver (~high CMRR, no hand-matched resistors).
|
||
- **Instrument mode:** OPA1641 JFET Hi-Z buffer (≥1 MΩ) + ~+10–15 dB gain (active DI).
|
||
- Selected by a **gold-contact signal relay** on the core (1 GPIO; touchscreen toggle, optional
|
||
face panel switch on a separate GPIO input).
|
||
- **Protection (non-negotiable):** series DC-blocking film cap (blocks +48 V phantom — the real
|
||
input-killer), clamp diodes/TVS to the rails, series current-limit resistor. A wrong-mode plug
|
||
then only *sounds* wrong; nothing is damaged.
|
||
- **Mix:** digital/firmware (touchscreen). Analog stage at unity; click level set via the DAC.
|
||
- **Output driver:** THAT1646 balanced line driver, **47 Ω build-out per leg** for
|
||
cable-capacitance stability and short-circuit tolerance (§5.1).
|
||
- **No electrolytics in the signal path** — film coupling caps (WIMA). 0.1 % thin-film resistors.
|
||
|
||
### 4.4 Output protection / conditioning
|
||
- **Power-up/down mute relay** — fail-safe, **de-energized = muted** (shorts hot+cold to gnd). A
|
||
hardware rail supervisor + RC turn-on delay un-mutes only after ±15 V settles; on power loss the
|
||
coil drops and mutes *faster than the rails can thump*. **Not MCU-dependent.** The MCU can *also*
|
||
assert mute (for clean line/inst flips and DAC reconfig).
|
||
- **Ground-lift** — both a **face panel switch** and a **core GPIO relay**, wired in **series** in
|
||
the shield-ground path: bonded only when both closed, either opening lifts it. **Soft lift =
|
||
100 Ω ∥ 10 nF** (not a hard open) so RF/safety keeps a path.
|
||
|
||
### 4.5 RTC
|
||
- **Micro Crystal RV-8803** (integrated 32.768 kHz crystal → no second crystal near the RP2350's
|
||
own) + **CR2032 in a socketed holder**. Shares the touch I²C bus (no extra GPIO). Drift is
|
||
irrelevant for a practice-log timestamp; reliability and zero-fuss layout win.
|
||
|
||
### 4.6 MIDI (default USB, hardware optional)
|
||
- **USB-MIDI is the default** and already in firmware — IN/OUT/THRU are software routing to a
|
||
computer/tablet host. Zero extra parts.
|
||
- **Dedicated DIN/TRS MIDI is a DNP populate-option:** the RP2350 UART lines route to the MIDI
|
||
interconnect with **H11L1 opto IN + 74LVC14 buffered OUT/THRU footprints left unpopulated**.
|
||
A "stage" face can populate them for laptop-free hardware sync. (USB-MIDI can't peer-to-peer with
|
||
standalone DIN gear — the device is a USB *peripheral*, not a host — which is why the hardware
|
||
option stays available.) Analog pulse/clock sync: **not included** (MIDI only).
|
||
|
||
### 4.7 Monitor speaker
|
||
- **DNP-optional** class-D amp (PAM8302) footprint on the core; speaker +/- routed on the analog
|
||
interconnect. Populated only for form factors that want a built-in monitor.
|
||
|
||
## 5. The five remaining pro details (decided)
|
||
|
||
### 5.1 Output impedance & level calibration
|
||
- THAT1646 source impedance is near-zero; **47 Ω build-out resistors** per leg give stable driving
|
||
into long/capacitive cables and survive a shorted output.
|
||
- **Level calibration:** a 25-turn precision trimmer (Bourns 3296W) in the driver gain network,
|
||
factory-set so DAC full-scale → **+4 dBu nominal**, leaving ~**+24 dBu** peak headroom on ±15 V.
|
||
Set-and-forget on the core; not a face control.
|
||
|
||
### 5.2 Signal / clip indication
|
||
- A peak detector (Schottky + hold cap) on the input (signal-present, ~−40 dBu) and on the
|
||
driver-input/summing node (clip, within ~3 dB of rail) feeds an **LM393** dual comparator.
|
||
- Comparator outputs go to **RP2350 GPIOs** (clip/signal shown on the touchscreen) **and** are
|
||
mirrored to **SIG/CLIP LED drive lines on the digital interconnect** so a face can fit discrete LEDs.
|
||
|
||
### 5.3 ESD / EMI hardening
|
||
- **USB-C:** USBLC6-2SC6 (or TPD4E05U06) ESD array on D±/CC/VBUS; common-mode choke on the data
|
||
pair; shell bonded to chassis via RC; ferrite + TVS + bulk on VBUS.
|
||
- **Interconnects:** ~33 Ω series on fast SPI lines for edge-rate control; ESD clamp arrays on any
|
||
line reaching a user-touchable cable; interleaved ground pins; ferrite beads where 3V3/5V cross
|
||
into the analog domain.
|
||
- **Board:** full ground planes + stitching vias; the boost/inverter switcher lives in a guarded
|
||
corner away from the analog section; analog/digital grounds meet at a single **star point**.
|
||
- **Heirloom option:** conformal coating for humidity/longevity (build-time choice).
|
||
|
||
### 5.4 Chassis / strain-relief (core-side)
|
||
- 4× **M3 mounting holes** with keep-outs; a dedicated chassis-ground pad/pin.
|
||
- **Through-hole-anchored USB-C** jack (SMD-only tabs shear off with cable wiggle — unacceptable for
|
||
a 50-year device).
|
||
- **Shrouded, keyed, latching** interconnect headers (can't insert backward or vibrate loose).
|
||
- Panel strain-relief and connector mounting live on the face/enclosure.
|
||
|
||
### 5.5 Interconnect pinout — see §7.
|
||
|
||
## 6. Power tree
|
||
|
||
| Rail | Source | Part | Notes |
|
||
|---|---|---|---|
|
||
| +5 V | USB-C VBUS | — | ferrite + TVS + bulk |
|
||
| +3V3 (IO) | LDO from 5 V | AP2112K-3.3 / TLV75533 | digital domain |
|
||
| +1.1 V core | RP2350 internal SMPS | (external inductor) | per RP2350 ref |
|
||
| ±18 V (raw) | dual boost/inverter from 5 V | **TPS65131** | switcher, guarded corner |
|
||
| **±15 V (clean)** | ultra-low-noise LDO | **TPS7A4901 (+) / TPS7A3001 (−)** | feeds all audio op-amps |
|
||
|
||
## 7. Interconnect pinouts
|
||
|
||
### 7.1 Digital ribbon — 2×13 (26-pin) IDC, Pico-pinout-compatible
|
||
Grounds interleaved around SPI. A Pico/Pico 2 test adapter maps these to the listed GP.
|
||
|
||
| Pin | Signal | GP | | Pin | Signal | GP |
|
||
|----|--------|----|--|----|--------|----|
|
||
| 1 | +5V | — | | 2 | GND | — |
|
||
| 3 | +3V3 | — | | 4 | GND | — |
|
||
| 5 | SPI_SCK | GP2 | | 6 | GND | — |
|
||
| 7 | SPI_MOSI | GP3 | | 8 | LCD_CS | GP5 |
|
||
| 9 | LCD_DC | GP6 | | 10 | LCD_RST | GP7 |
|
||
| 11 | GND | — | | 12 | I2C_SDA | GP8 |
|
||
| 13 | I2C_SCL | GP9 | | 14 | GND | — |
|
||
| 15 | JOY_X (ADC0) | GP26 | | 16 | JOY_Y (ADC1) | GP27 |
|
||
| 17 | BTN_A | GP15 | | 18 | BTN_B | GP14 |
|
||
| 19 | WS2812 | GP12 | | 20 | GND | — |
|
||
| 21 | GNDLIFT_SW (in) | GP21 | | 22 | LINEINST_SW (in) | GP22 |
|
||
| 23 | SIG_LED | GP19 | | 24 | CLIP_LED | GP20 |
|
||
| 25 | GND | — | | 26 | GND | — |
|
||
|
||
*I²S (BCK/LRCK/DOUT), the relays (line/inst route GP16, mute GP18, gnd-lift GP17), and MCLK stay
|
||
on-core — they are not on the ribbon. A Pico test brain drives the digital/face I/O above but
|
||
**cannot** drive the analog chain (DAC/op-amps are core-only).*
|
||
|
||
> **Display TE line — route it on the production face.** The table above mirrors the EP-0172
|
||
> prototype, which wires only SCK/MOSI/CS/DC/RST and **no TE (tearing-effect) output**. Per the
|
||
> ST7796S datasheet §10.8, the panel rescans its frame memory to the glass at 60 Hz and the *only*
|
||
> sanctioned way to avoid tearing is to feed the **TE output back to the MCU** and write during
|
||
> vblank (`tvdh`). Without it, large updates tear and only small sub-region writes hide it (this is
|
||
> why MicroPython/CircuitPython, which draw glyph-by-glyph, look clean and the Rust full-frame blits
|
||
> don't). **Add the LCD `TE` pin to a spare GPIO (e.g. GP4)** on the face interconnect — and
|
||
> optionally LCD `MISO`/`SDO` for `GSCAN`(45h)/status reads. Then firmware can do
|
||
> `TEON`(35h)+vblank-synced writes and be fully tear-free even on full repaints.
|
||
|
||
### 7.2 Analog audio interconnect — 2×5 (10-pin), twisted/shielded, away from digital
|
||
| Pin | Signal | | Pin | Signal |
|
||
|----|--------|--|----|--------|
|
||
| 1 | AOUT_HOT | | 2 | AGND |
|
||
| 3 | AOUT_COLD | | 4 | CHASSIS/SHIELD (face side of ground-lift) |
|
||
| 5 | AIN_HOT | | 6 | AGND |
|
||
| 7 | AIN_COLD | | 8 | SPK+ (DNP) |
|
||
| 9 | AGND | | 10 | SPK− (DNP) |
|
||
|
||
### 7.3 MIDI interconnect — 1×6, only if DNP MIDI populated
|
||
| Pin | Signal |
|
||
|----|--------|
|
||
| 1 | MIDI_OUT_A (TRS-A tip/ring leg) |
|
||
| 2 | MIDI_OUT_B |
|
||
| 3 | MIDI_IN_A (to opto) |
|
||
| 4 | MIDI_IN_B |
|
||
| 5 | +5V (OUT drive) |
|
||
| 6 | GND / shield |
|
||
|
||
## 8. BOM
|
||
Full part list with manufacturer numbers and rough costs in **`hardware/BOM.csv`**. Headline parts:
|
||
RP2350A · W25Q128JV · PCM5102A · THAT1240 + THAT1646 · OPA1641 · OPA1612 · TPS65131 + TPS7A4901/3001 ·
|
||
RV-8803 · USBLC6-2SC6 · 3× Panasonic TQ2SA gold-contact relays · H11L1 (DNP).
|
||
|
||
## 9. Manufacturing
|
||
- **PCB:** ENIG (gold) finish — non-negotiable for decades of reliable contacts/solderability.
|
||
- **Assembly:** JLCPCB/PCBWay PCBA, ~5-board prototype minimum; ~$80–200 first run. Core parts cost
|
||
~$25–40/board one-off (pro op-amps + relays dominate), trending toward ~$15–20 at qty 100.
|
||
- Most expensive items are the THAT audio ICs and the relays — that's where "heirloom" lives.
|
||
|
||
## 10. Open items
|
||
- **PCB layout/routing is the interactive next step** — placement, controlled-impedance USB pair,
|
||
star ground, switcher isolation, copper pours, DRC. The KiCad project under `hardware/kicad/`
|
||
is a documented schematic canvas + design-of-record; symbol placement and wiring happen in
|
||
Eeschema. `kicad-cli` is used here for ERC and PDF export verification.
|
||
- Confirm the exact 3.5" ST7796/GT911 panel connector (FPC vs header) before finalizing the face.
|
||
- Decide MIDI connector (TRS-MIDI Type-A vs DIN-5) per form factor — face decision.
|