Sourcing: EXO-410 contact board + EXO-420 controller board (JLCPCB 6-layer PCBA)
Research date: 2026-10-27. Nothing was ordered and no supplier was contacted.
Where the numbers come from. LCSC and JLCPCB stock, prices and basic/extended status were read from the JSON
endpoints behind their own product pages (wmsc.lcsc.com/ftps/wm/product/detail, jlcpcb.com/api/.../selectSmtComponentList)
on the research date. The human-readable pages are https://www.lcsc.com/product-detail/<Cxxxx>.html and
https://jlcpcb.com/partdetail/<Cxxxx>. JLC stock is JLC's own assembly stock, separate from LCSC's. Prices are USD,
at the quantity bought: 2 tiles = 2 × per-tile quantity, 16 tiles = 16 × per-tile quantity. DigiKey, Mouser and Arrow
block automated fetches. Their figures below come from one fetched page (digikey.ca) or from search-engine snapshots,
and are marked as such.
Per-tile quantities come from out/pcb/tile_circuit.json, equivalent to what exo.pcb.check writes. check was
not run, because it writes under out/pcb/. Note there are 62 op-amps per tile (60 contacts plus UR1 and UR2),
not 60. That is 124 for 2 tiles and 992 for a helmet.
Summary: what to change before ordering
| # | Issue | Severity | Fix (in exo/pcb/circuit.py, not applied) |
|---|---|---|---|
| 1 | MCP6V31UT-E/LT: 4 in stock at LCSC/JLC | blocking for LCSC-only PCBA | Keep the part and buy it through JLC Global Sourcing (DigiKey has thousands), or switch to OPA391DCKR (C2871876, same pinout, 1,641 at JLC). See §1 |
| 2 | BUF1G17 lcsc C7836 is SN74LVC1G17DBVR (SOT-23-5), but the footprint is SC70-5 |
wrong part would be placed | lcsc="C10425" (SN74LVC1G17DCKR, SC-70-5, 36,840 in stock) |
| 3 | FLASH MPN W25Q16JVSSIQ is the 208-mil SOIC-8 (C131025: "SOIC-8-208mil"), but the footprint is the 150-mil SOIC-8_3.9x4.9mm |
won't fit | mpn="W25Q16JVSNIQ", lcsc="C2456211" (150-mil SOIC-8, 35,366 in stock); footprint unchanged |
| 4 | ADS131M08 lcsc C5215173 is the IRSNT 250-pc reel with 17 in stock (need 16 / 128) |
blocking at 16 tiles | lcsc="C5124126" (ADS131M08IRSNR, 1,813 LCSC / 1,932 JLC) |
| 5 | DF40C-10DS-0.4V(51) receptacle: LCSC 0, JLC 15 (need 8 / 64) | blocking at 16 tiles | lcsc="C6601481" = DF40C-10DS-0.4V(58), 940 in stock. Same 1.5 mm DF40C series; the suffix difference is not confirmed (see §2) |
| 6 | M1.6 SMT nut SMTSO1615MTJ (C2928168): 634 at JLC, only M1.6 nut in the library | blocking at 16 tiles (960) | Fine for 2 tiles (120). For a helmet, ask LCSC/JLC to pre-order a reel (JLC Parts Pre-order) or buy from Sinhoo directly and consign |
| 7 | UL1 (TPS7A2033PDBVR, SOT-23-5, 1.45 mm max) sits on the contact board's back, inside the 1.5 mm DF40C mated gap (exo/shell_v1.py B2B_H = 1.5) |
mechanical: 0.05 mm margin | Use TPS7A2033DQNR (X2SON-4 1×1, 0.4 mm tall, C46459900, 291 LCSC / 633 JLC) for UL1, or move UL1 off the stack footprint. New footprint needed |
| 8 | CF1..8 "100nF C0G" in 0201 is not made (no 0201 C0G anywhere near 100 nF) | BOM can't be filled | 100 nF X7R 0201 (C22435929, HRE 16 V) or move to a 0402/0603 C0G of lower value if REFIN needs C0G |
| 9 | "100k 0.1%" in 0201: no 0.1 % 0201 100 k in the JLC library (the RT0201 thin-film series stocks only 10 k, 15 k, 33 k, 49.9 k and 499 Ω) | BOM can't be filled as written | RC0201FR-07100KL 1 % (C106224, 2.3 M in stock). The worst-case series R is still ≥ 198 kΩ, so the single fault is ≤ 16.7 µA (< 50 µA). Behind a follower, matching does not matter |
| 10 | PAT9125EL-TKMT: no LCSC/JLC stock (the JLC entry "PAT9125EL-TKIT" C2832657 is 0, and is a customer-supplied record) | consign | Buy from WPG Americas (PixArt distributor) and consign to JLC. See §2 |
| 11 | Contact board is 44.2 mm square: under JLC Standard PCBA's 70 × 70 mm minimum. 0201 parts force Standard PCBA | ordering | Panelize (e.g. 2×2) or add edge rails and fiducials |
Two other notes, not blockers: - The Sinhoo nut is tin-plated and the pin is gold. A gold-to-tin contact at µV signal levels is prone to fretting corrosion. Ask Sinhoo/PEM about a gold-flash or nickel-plated M1.6 SMT nut, or rely on the tin-reflowed nut as the "pad" and accept it. - The 1 µF 6.3 V X5R 0201 coupling capacitors lose roughly half their capacitance at a few volts of DC bias. The 0.07 Hz corner moves to about 0.15 Hz, which is still fine for EEG. Use a 10 V part (C2846675, FH 0201 1 µF 10 V) for margin.
1. MCP6V31U and alternatives (SC70-5, "U" pinout: 1 +IN, 2 V−, 3 −IN, 4 OUT, 5 V+)
1a. MCP6V31UT-E/LT availability
| Source | Stock | Price | URL / basis |
|---|---|---|---|
| LCSC C623527 | 4 | $1.6129 @100 (top break) | https://www.lcsc.com/product-detail/C623527.html (API) |
| JLCPCB parts C623527 | 4, extended | $1.6074 @100+ | https://jlcpcb.com/partdetail/C623527 (API) |
| DigiKey (digikey.ca, fetched) | 8,615 | CAD 1.9378 @100, CAD 1.78894 @3,000 (T&R) | https://www.digikey.ca/en/products/detail/microchip-technology/MCP6V31UT-E-LT/3177019 |
| DigiKey (US, search snapshot) | 5,885 | – | https://www.digikey.com/en/products/detail/microchip-technology/MCP6V31UT-E-LT/3177019 |
| Mouser (search snapshot, not live) | 1,076 (+6,000 on order) | – | https://www.mouser.com/ProductDetail/Microchip-Technology/MCP6V31UT-E-LT?qs=PZkJWYMe7ldtadX3Ppl32g%3D%3D |
| Arrow (search snapshot, not live) | ~2,144 | – | https://www.arrow.com/en/products/mcp6v31ut-elt/microchip-technology |
| Newark / Avnet (Findchips) | 1,148 / 1,000 | Newark $0.78–1.05 range; Avnet $1.24–1.34 | https://www.findchips.com/search/MCP6V31UT-E%2FLT |
| OnlineComponents (fetched) | 1,950, plus 21,000 at the factory | $1.22 @250, $1.20 @1,000; MOQ 250 | https://www.onlinecomponents.com/en/productdetail/microchip-technology/mcp6v31utelt-44793892.html |
DigiKey and the aggregators list the part as Active. One reseller page says "discontinued", which contradicts the others. DigiKey states a 24-week factory lead time. Microchip's product page refused automated fetches; check it by hand before committing a helmet's worth.
Price at 124 (2 tiles): about CAD 1.94 each at DigiKey (≈ US$1.4; the exchange rate is assumed, not looked up), or $1.61 from LCSC's last 4. At 1,000: about $1.20 (OnlineComponents) to CAD 1.79 (DigiKey reel of 3,000).
1b. Pin-compatible candidates (SC70-5 with the same pinout as MCP6V31U)
Pinouts were checked in each datasheet's pin table. Stock and price are JLC's.
| Part (LCSC#) | Pinout | i_n (current noise) | I_B (typ / max, 25 °C) | V_OS max | e_n | I_Q | JLC stock | $ @124 / @992 | Source |
|---|---|---|---|---|---|---|---|---|---|
| MCP6V31UT-E/LT (C623527) | match | 5 fA/√Hz | 5 pA typ | 8 µV | 50 nV/√Hz, no 1/f | 23 µA | 4 | 1.61 / 1.61 | DS20005127B, https://ww1.microchip.com/downloads/en/DeviceDoc/20005127B.pdf |
| OPA391DCKR (C2871876), e-trim, not a chopper | match (DCK: +IN 1, V− 2, −IN 3, OUT 4, V+ 5) | 30 fA/√Hz @1 kHz | ±0.01 pA / 0.8 pA | 45 µV | 60 nV/√Hz @1 kHz, 130 @10 Hz (has 1/f) | 24 µA | 1,641 | 0.89 / 0.85 | https://www.ti.com/lit/ds/symlink/opa391.pdf |
| OPA333AIDCKR (C44193), the known fallback | match (DCK) | 100 fA/√Hz @10 Hz | ±70 pA / ±200 pA | 10 µV | 55 nV/√Hz | 17 µA | 2,899 | 0.76 / 0.68 | https://www.ti.com/lit/ds/symlink/opa333.pdf |
| TLV333IDCKR (C181502) | match (DCK) | 100 fA/√Hz | ±70 pA | 15 µV | 55 nV/√Hz | 17 µA | 14,492 | 0.24 / 0.17 | https://www.ti.com/lit/ds/symlink/tlv333.pdf |
| OPA330AIDCKR (C473401) | match (DCK) | 100 fA/√Hz | ±70 / ±300 pA | 50 µV | 55 nV/√Hz | 21 µA | 1,794 | 0.83 / 0.77 | https://www.ti.com/lit/ds/symlink/opa330.pdf |
| 3PEAK TP5531U-CR (C248730) | match ("U" variant; plain TP5531 is the other pinout) | not specified | ±50 pA (±800 pA hot) | 10 µV | 55 nV/√Hz | 45 µA | 3,850 | 0.76 / 0.54 | https://datasheet.lcsc.com/szlcsc/3PEAK-TP5531U-CR_C248730.pdf |
| ST TSZ121ICT (C2058276) | pin diagram is an image in the datasheet; believed U-type, verify | not specified | 50 / 200 pA | 5 µV | ~60 nV/√Hz (JLC listing) | 28 µA | 2,143 | 1.24 / 1.17 | https://www.st.com/resource/en/datasheet/tsz121.pdf |
| OPA378AIDCKR (C2058269) | match (DCK) | 200 fA/√Hz | 150 pA | 20 µV | 20 nV/√Hz | 125 µA | 759 | 1.18 / 1.10 | https://www.ti.com/lit/ds/symlink/opa378.pdf |
| MCP6V61UT-E/LTY (C623531) | match | 5 fA/√Hz | ±1 pA | 8 µV | 26 nV/√Hz | 80 µA | 5 | 2.36 | Microchip DS (via LCSC) |
| MCP6V11UT-E/LT (C144173) | match | 4 fA/√Hz | 5 pA | 8 µV | 102 nV/√Hz | 7.5 µA | 6 | 1.52 | DS20005124B |
| ADA4051-1AKSZ-R7 (C161741) | SC70 | – | 5 pA | 2 µV (typ) | 95 nV/√Hz | 15 µA | 3 | 1.94 | JLC listing |
| ADA4528-1 / -2 | MSOP-8 / LFCSP only, no SC70 | – | 220 pA | 2.5 µV | 5.9 nV/√Hz | 1.4 mA | – | – | JLC listings C155684, C1346373 |
| MCP6V81U SC70 (C625588), MCP6V71U SC70 (C623534) | match | – | – | – | – | 0.5 mA / 0.2 mA | 0 / 0 | – | |
| SGM8551 / GS8551 / RS8551 / TP5551 | SOT-23-5 or SOIC only at JLC, 0.5–1.2 mA | – | – | – | – | – | – | – |
The SGMicro and Gainsil zero-drift parts in stock are SOT-23-5 only. Footprint and pinout differ, so they are not drop-ins.
1c. What the current noise costs (in-band 0.5–100 Hz, follower input behind 200 kΩ plus the contact)
Current noise flows through the source impedance, so it scales with R_source. These are first-order estimates:
e_n × √BW, with the OPA391's 1/f term fitted from its 10 Hz and 1 kHz values; i_n × R_s × √BW. Totals add the contact's
thermal noise, the 2 × 100 kΩ and the ADS131M08 (0.63 µV in 100 Hz) from docs/pcb.md.
| Op-amp | e_n part | i_n part, R_s = 1.2 MΩ | Total, 1 MΩ contact | i_n part, R_s = 5.2 MΩ | Total, 5 MΩ contact |
|---|---|---|---|---|---|
| MCP6V31U | 0.50 µV | 0.06 µV | 1.62 µVrms | 0.26 µV | 3.05 µVrms |
| OPA391 | ≈ 1.0 µV | 0.36 µV | 1.89 µVrms | 1.56 µV | 3.53 µVrms |
| OPA333 / TLV333 / OPA330 | 0.55 µV | 1.20 µV | 2.03 µVrms | 5.2 µV | 6.0 µVrms |
| OPA378 | 0.20 µV | 2.4 µV | 2.85 µVrms | 10.4 µV | 10.9 µVrms |
The 5 MΩ case is pessimistic, because a dry contact's impedance is partly capacitive and falls with frequency. Bias current gives I_B × 1.2 MΩ of DC offset: 84 µV for the OPA333, which the AC coupling removes. Chopper input-current spikes into a high-Z source also make intermodulation products, a further point against the 70 pA-class choppers here.
1d. Recommendation
- Keep MCP6V31UT-E/LT and buy it through JLC Global Sourcing (JLC buys from DigiKey/Mouser/Arrow for the assembly order; https://jlcpcb.com/help/article/60-how-to-use-jlcpcb-global-sourcing-parts-service), or buy it yourself and consign. DigiKey has 8,615, enough for 8 helmets. Expect Global Sourcing markup and 1–2 weeks of lead time.
- LCSC-stocked alternative: OPA391DCKR (C2871876), not OPA333. Same SC70 pinout, 24 µA, I_B 10 fA, current noise 30 fA/√Hz. It beats the OPA333 at every dry-contact impedance above about 0.4 MΩ and costs about 0.27 µV over the MCP6V31 at 1 MΩ. Its 45 µV offset and 1/f noise below 10 Hz are the trade. JLC holds 1,641, enough for one helmet (992) if bought soon. No footprint change.
- TLV333IDCKR (C181502, $0.17, 14k in stock) only for a cheap bring-up board, where the noise floor doesn't matter.
- The comment in
circuit.pythat OPA333AIDCKR is pin-compatible is correct (TI DCK pin table checked).
2. Specific parts
| Part | Status | LCSC / JLC # | Stock | Price | Recommendation |
|---|---|---|---|---|---|
| PAT9125EL-TKMT | Not at LCSC/JLC. C2832657 "PAT9125EL-TKIT" has 0 stock and is a customer-library entry. Octopart lists TKIT as a sensor board | – | WPG Americas (PixArt's distributor): MOQ 125, $5.64 (search snapshot; page fetch blocked) | $5.64 | Consign. Buy 125 from WPG Americas (https://eshop.wpgam.com/pat9125el-tkmt): 8 for 2 tiles, 64 per helmet, so 125 covers a helmet plus spares. Broker listings of "TKIT" at $2.6–11 (https://www.digipart.com/part/PAT9125EL-TKIT) are not trusted. JLC charges for consignment (USD 30 for < 20 part types from mainland China; https://jlcpcb.com/help/article/how-to-consign-parts-to-jlcpcb-from-mainland-china) |
| TPS7A2033PDBVR | ✓ | C2862740 (extended) | 146,382 JLC / 143,565 LCSC | $0.2091 @1, $0.115 @500 | Use it, but see the UL1 height issue (#7); C46459900 (TPS7A2033DQNR, X2SON) for UL1 |
| W25Q16JVSSIQ | ✓, but 208-mil | C131025 | 8,636 | $0.84 @100 | Wrong package for the footprint. Use W25Q16JVSNIQ C2456211 (150-mil SOIC-8, 35,366, $1.18 @1 / $0.72 @1k) |
| DF40C-10DS-0.4V(51) receptacle | low | C424636 | LCSC 0 / JLC 15 | $0.24 | Use C6601481 DF40C-10DS-0.4V(58) (940, $0.65 @1 / $0.47 @100). Hirose calls (51) its standard (https://faq.hirose-gl.com/ex/en/faq_detail.html?id=100056). (58) is the same DF40C series, but its exact difference (believed packaging) was not confirmed. Check Hirose's (58) drawing before ordering |
| DF40C-10DP-0.4V(51) header | ✓ | C424635 | 237 JLC / 235 LCSC | $0.27 @1 / $0.22 @100 | Use it. 64 per helmet fits, but buy before it drains |
| Stack height | 1.5 mm | – | – | – | DF40C-DS + DF40C-DP mates at 1.5 mm, which matches B2B_H = 1.5 in exo/shell_v1.py. The suffixes in circuit.py are right. The taller DF40HC receptacles are not in the JLC library |
| 12-pin FPC HC-FPC-05-10-12RLTAG | ✓ | C5213732 (extended) | 14,090 | $0.13 @1 / $0.08 @1k | Use it |
3. Every BOM line: stock for 2 and 16 tiles, basic vs extended
"Recommended LCSC#" is the code to put in circuit.py. The passives currently have none. ✓ = enough JLC stock for that
quantity. Ext = extended (loading fee per unique type), Basic = no fee.
EXO-410 contact board (per tile)
| Line | Qty/tile | Recommended LCSC# | Part | Lib | JLC stock | 2 tiles | 16 tiles | $ ea @2 / @16 tiles |
|---|---|---|---|---|---|---|---|---|
| M1.6 SMT nut | 60 | C2928168 | Sinhoo SMTSO1615MTJ | Ext | 634 | ✓ | ✗ (960) | 0.0727 |
| 100 k 0201 (RA, RB) | 120 | C106224 (was 0.1 %, see #9) | Yageo RC0201FR-07100KL | Ext | 2,331,261 | ✓ | ✓ | 0.0023 / 0.0018 |
| 2.2 M 0201 (RH) | 60 | C474576 | Yageo RC0201FR-072M2L | Ext | 28,492 | ✓ | ✓ | 0.0024 |
| 1 µF 0201 (CC) | 60 | C76930 (or 10 V C2846675) | Murata GRM033R60J105MEA2D | Ext | 3,342,824 | ✓ | ✓ | 0.0048 |
| 100 nF 0201 (CUB1/2, CSB1-4) | 6 | C22435929 (merge with CF, saves one type) | HRE 100 nF 16 V X7R | Ext | 658,082 | ✓ | ✓ | 0.0029 |
| 100 nF "C0G" 0201 (CF1-8) | 8 | C22435929 (X7R, see #8) | same | Ext | – | ✓ | ✓ | 0.0029 |
| 220 nF 0201 (CP1-8) | 8 | C18164549 | CCTC 220 nF 10 V X5R | Ext | 426,844 | ✓ | ✓ | 0.0025 |
| 1 µF 0402 (CA, CD, CR1) | 17 | C52923 | Samsung CL05A105KA5NQNC 25 V X5R | Basic | 11.2 M | ✓ | ✓ | 0.0064 |
| 4.7 µF 0402 (CSA) | 4 | C380302 | CCTC 6.3 V X5R | Ext | 912,359 | ✓ | ✓ | 0.0052 |
| 10 µF 0603 (CBULK) | 1 | C19702 | Samsung CL10A106KP8NNNC | Basic | 12.6 M | ✓ | ✓ | 0.0272 |
| 4.7 µF 0603 (CL1, CL2) | 2 | C19666 | Samsung CL10A475KO8NNNC 16 V | Basic | 3.4 M | ✓ | ✓ | 0.0169 |
| 100 k 0.1 % 0402 (RRA, RRB) | 2 | C852472 | Yageo RT0402BRD07100KL | Ext | 1,007,244 | ✓ | ✓ | 0.0256 |
| 2.2 M 0402 (RR2) | 1 | C11490 | UNI-ROYAL 0402WGF2204TCE | Ext | 19,310 | ✓ | ✓ | 0.001 |
| 10 k 0402 (RMOT) | 1 | C25744 | UNI-ROYAL 0402WGF1002TCE | Basic | 18.2 M | ✓ | ✓ | 0.0024 |
| 3.3 k 0402 (RSDIO) | 1 | C25890 | UNI-ROYAL 0402WGF3301TCE | Basic | 1.6 M | ✓ | ✓ | 0.0036 |
| ADS131M08 | 8 | C5124126 (not C5215173) | TI ADS131M08IRSNR | Ext | 1,932 | ✓ | ✓ | 7.73 / 6.62 |
| SN74LVC1G17 | 2 | C10425 (not C7836) | TI SN74LVC1G17DCKR | Ext | 37,426 | ✓ | ✓ | 0.069 |
| LDO UL1 | 1 | C2862740 (or C46459900, #7) | TPS7A2033PDBVR | Ext | 146,382 | ✓ | ✓ | 0.209 |
| DF40 receptacle | 4 | C6601481 | DF40C-10DS-0.4V(58) | Ext | 940 | ✓ | ✓ | 0.65 / 0.47 |
| Op-amp | 62 | off-LCSC (Global Sourcing) / C2871876 | MCP6V31UT-E/LT / OPA391DCKR | Ext | 4 / 1,641 | ✓ GS | ✓ GS | ~1.45 / 1.20 (MCP); 0.89 / 0.85 (OPA391) |
| Optical sensor | 4 | – (consign) | PAT9125EL-TKMT | consigned | – | ✓ | ✓ | 5.64 |
EXO-420 controller board (per tile)
| Line | Qty/tile | Recommended LCSC# | Part | Lib | JLC stock | 2 tiles | 16 tiles | $ ea |
|---|---|---|---|---|---|---|---|---|
| DF40 header | 4 | C424635 | DF40C-10DP-0.4V(51) | Ext | 237 | ✓ | ✓ | 0.27 / 0.22 |
| 100 nF 0402 | 8 | C1525 | Samsung CL05B104KO5NNNC | Basic | 34.2 M | ✓ | ✓ | 0.0035 |
| 15 pF C0G 0402 | 2 | C1548 | FH 0402CG150J500NT | Basic | 1.4 M | ✓ | ✓ | 0.0038 |
| 1 µF 0402 | 2 | C52923 | Samsung CL05A105KA5NQNC | Basic | 11.2 M | ✓ | ✓ | 0.0064 |
| 4.7 µF 0603 | 2 | C19666 | Samsung CL10A475KO8NNNC | Basic | 3.4 M | ✓ | ✓ | 0.0169 |
| LDO UL2 | 1 | C2862740 | TPS7A2033PDBVR | Ext | 146,382 | ✓ | ✓ | 0.209 |
| MCU | 1 | C2040 | RP2040 | Ext | 67,603 | ✓ | ✓ | 1.09 / 1.00 |
| Flash | 1 | C2456211 | W25Q16JVSNIQ | Ext | 35,366 | ✓ | ✓ | 1.18 / 1.03 |
| Crystal | 1 | C9002 | YXC X322512MSB4SI 12 MHz | Basic | 224,901 | ✓ | ✓ | 0.096 |
| 1 k 0402 | 1 | C11702 | UNI-ROYAL 0402WGF1001TCE | Basic | 18.4 M | ✓ | ✓ | 0.0013 |
| 10 k 0402 | 1 | C25744 | UNI-ROYAL 0402WGF1002TCE | Basic | 18.2 M | ✓ | ✓ | 0.0024 |
| FPC 12P | 1 | C5213732 | HCTL HC-FPC-05-10-12RLTAG | Ext | 14,090 | ✓ | ✓ | 0.129 |
Extended or consigned types: about 15 on EXO-410 (after merging the two 0201 100 nF lines) and 5 on EXO-420. At Standard PCBA's $1.53 per type, that is ≈ $31 per order. The 0201 parts have no basic-library equivalents, so they stay extended.
Existing codes in circuit.py checked: C2928168, C623527, C5215173 (low, wrong reel), C2040, C9002, C7836 (wrong
package), C5213732, C44193. All exist.
4. JLCPCB capabilities for this stack
| Question | Answer | Source |
|---|---|---|
| Via-in-pad, filled and capped (POFV) | Free on 6+ layers. Resin-plugged and copper-capped is the default on 6+ layers with ENIG | https://jlcpcb.com/blog/Free-Via-in-Pad-on-6-20-Layer-PCBs-with-POFV, https://jlcpcb.com/help/article/via-in-pad-pofv-guide |
| POFV minimum | Mechanical drill 0.15 mm; pad ≥ drill + 0.15 mm; annular ring 0.05 mm min (0.075 preferred); via diameter 0.15–0.55 mm | https://jlcpcb.com/help/article/via-in-pad-pofv-guide, https://jlcpcb.com/capabilities/pcb-capabilities |
| Our 0.30 mm 0201 pad with a 0.25 / 0.15 via | Allowed, exactly at the limit: 0.15 + 0.15 = 0.30, ring 0.05. No margin for drill tolerance. JLC's BGA guide recommends ≥ 0.35 mm pads for filled via-in-pad | same, plus https://jlcpcb.com/help/article/bga-design-guidelines---pcb-layout-recommendations-for-bga-packages |
| Minimum SMD pad | 0.25 × 0.25 mm | https://jlcpcb.com/capabilities/pcb-capabilities |
| 0.15 mm drill / 0.25 mm via pad | Allowed on multilayer (minimum). 0.1 / 0.2 laser vias allowed at ≤ 1.0 mm thickness with ENIG | https://jlcpcb.com/capabilities/pcb-capabilities, https://jlcpcb.com/6-layer-pcb |
| Fee for small vias | Yes: 0.1 or 0.15 mm holes add cost; the amount appears only in the live quote. A third-party tier table puts 0.15/0.25 at "cost+3" (highest), 0.2/0.3 at +2, 0.3/0.45 free | capabilities page; https://docs.jitx.com/en/4.0/_modules/jitxlib/jlcpcb/vias.html (not JLC) |
| 0.09 mm trace / space, 6 layers | Allowed: 0.09 / 0.09 mm (3.5 / 3.5 mil) on multilayer, 3 mil in BGA fan-out. No inner/outer split or fee found | https://jlcpcb.com/capabilities/pcb-capabilities |
| ENIG | Free on 6 layers | https://jlcpcb.com/events/6-layer-pcb |
| PCBA tier | 0201 forces Standard PCBA (Economic: 0402 minimum, single side). Standard minimum board 70 × 70 mm, so panelize the 44.2 mm boards | https://jlcpcb.com/capabilities/pcb-assembly-capabilities |
| PCBA fees (Standard) | Setup $25.56 per side ($51.12 double-sided); stencil $8.21 per side; extended part $1.53 per type; $0.016 + $0.0016 per joint; handling ≥ $14.93; fixtures $8.21 × 2 (1–29 pcs) | https://jlcpcb.com/help/article/pcb-assembly-price |
| Stackup | JLC06161H-2116 is the 1.6 mm stackup; our boards are 1.0 mm. The 1.0 mm options (1 oz outer, 0.5 oz inner) are JLC06101H-3313, -3313A, -1080, -1080A, -1080B, -1080C, -7628, -7628A. Those flagged with no surcharge in JLC's template data: -3313 (L1-L2 prepreg 0.0994 mm 3313, cores 0.25), -1080A, -1080B (L1-L2 0.0764 mm 1080), -1080C, -7628A. Impedance control ±10 % is offered; no price found | JLC's own https://jlcpcb.com/impedance lists only 1.2/1.6/2.0 mm for 6 layers; the 1.0 mm list comes from a May-2025 capture of JLC's template API, https://github.com/gsuberland/jlcpcb_autogenerated_stackups. Verify in the live quote |
Recommendation. Use JLC06101H-3313 (thin 0.099 mm L1-L2 prepreg, good for the L2 ground under 0201s, no surcharge), or -1080B if you want the thinnest outer prepreg. Use 0.15/0.25 vias only where they sit in 0201 pads. Elsewhere use 0.2/0.3 or larger to stay out of the highest via-fee tier. Consider 0201 pads of 0.35 mm where the placement allows, to get margin on POFV.
Not verified on a JLC page: the dollar surcharge for 0.15 mm drills, any fee for traces under 0.1 mm, the impedance control fee, and the exact 6-layer 1.0 mm board price. JLC's 6-layer page says "5 pcs from $2"; a 2024 post gives ≤ 100 × 100 mm 6-layer at $35.
5. Custom gold-plated spring ball-pins (EXO-5075 … EXO-5125)
Geometry (exo/pcb/pin.py, out/pcb/pins/pins.csv): M1.6 × 0.35 thread 1.4 long, 2.5 A/F hex collar 1.0, Ø2.0 barrel,
Ø1.3 plunger, 1.5 travel, Ø3.0 ball. Brass, Au over Ni. Six lengths, 7.5–12.5 mm. Order quantities per helmet: 207 / 362
/ 308 / 124 / 39 / 6 (1,046).
| Maker | Custom / threaded | MOQ | Rough unit price | Lead time | Source |
|---|---|---|---|---|---|
| Promax Pogo Pin (Dongguan) | Yes: "Thread Screw Pogo Pin" line, 6–26 mm; thread, head and tip to drawing; 10/40 µ" Au | Small batches of 50 mentioned; 3,000 on a catalog part | quote | samples ~2 wk, production 15–20 days | https://promaxpogopin.com/pogo-pin/thread-screw-pogo-pin/, https://promaxpogopin.com/manufacturer/custom-contact-pins/ |
| Richconn (Shenzhen) | Yes: threaded pogo pin listed, Swiss-type CNC | 100 prototype / 1,000 production | quote | ~7 days proto, 2–3 wk production | https://richconn.com/custom-pogo-pin-manufacturing/ |
| Alibaba threaded-pogo sellers: Shenzhen Sandum (M1.4/M1.6 threaded pin), Dongguan Jiagengshun (threaded round head), Xingchengnuo, Dongguan CFE | Yes | 100 (Sandum, Jiagengshun, Xingchengnuo); 10,000 (CFE listing) | $0.02–0.22 (catalog-like), $1–3 (custom) | 7–25 days typical | https://alibaba.com/showroom/pogo-pin-with-thread.html |
| Mill-Max (USA) | Custom spring pins after design review; no threaded catalog part | 1,000 per custom pin + tooling NRE | catalog 0906 ≈ $0.58–0.76; custom not published | catalog 3–4 wk | https://www.mill-max.com/engineering-notebooks/spring-loaded-pogo-pins-connectors/faqs |
| Preci-Dip (CH) | "Welcomes custom design requests" (spring contacts, e.g. 90166) | not published | not published | – | https://www.precidip.com/Htdocs/Files/v/8124.pdf/Hybrid-connectors.pdf?download=1 |
| INGUN (DE), reference only | Screw-in receptacle and probe systems, no 3 mm ball | on request | on request | – | https://ingun.com/en-US/KS-112-30-M/KS-11230M |
Harwin P70 is catalog-only (2.4–8.2 mm, Ø1.5 barrel) and does not fit. Reference prices: OpenBCI dry comb electrodes ≈ $1.50–1.70 each in 30-packs (https://shop.openbci.com/collections/all/eeg).
Recommendation. Send the RFQ to Promax, Richconn and Sandum (closest existing thread: M1.6). Ask whether one barrel plus six plunger or barrel lengths counts as one part for MOQ, since the 4- and 35-per-helmet lengths fail any per-length 1,000 MOQ. Mill-Max only if the Chinese shops fail and the helmet volume justifies 1,000 per length. Budget $0.3–1.0 per pin in production and $1–3 per pin for the 130-pc prototype lot, plus possible setup charges: ≈ $40–400 per helmet. All of this is unverified until quoted.
RFQ text (draft, not sent)
Subject: RFQ – custom threaded ball-head spring contact, 6 lengths
Hello,
We'd like a quote for a custom gold-plated spring contact (dry-electrode EEG headset). STEP files and a drawing are available on request.
Geometry: M1.6×0.35 external thread, 1.4 mm long (screws into an SMT nut); 2.5 mm A/F hex collar, 1.0 mm tall; Ø2.0 mm barrel; Ø1.3 mm plunger, 1.5 mm travel; Ø3.0 mm spherical ball head on the plunger. Lengths (thread shoulder plane to ball centre at mid-travel, +1.5 mm nut): 7.5 / 8.5 / 9.5 / 10.5 / 11.5 / 12.5 mm. Material/plating: brass body and plunger, stainless or music-wire spring; Ni 2–3 µm; hard Au ≥ 0.76 µm on the plunger and ball, Au flash elsewhere. Spring force: 50–150 gf at mid-travel (please propose options).
Quantities (mixed lengths): prototype ≈ 130 pcs; production ≈ 1,046 pcs per set (207/362/308/124/39/6), several sets per year.
Please quote: 1. Unit price per length at 130 / 1,000 / 5,000 pcs 2. MOQ per length, and tooling/NRE/setup charges (can the lengths share one barrel to reduce MOQ?) 3. Sample cost and lead time; production lead time 4. Dimensioned drawing for approval 5. Force-vs-travel curve, contact resistance (mΩ), rated cycles 6. Plating thickness certificate; RoHS/REACH 7. Any existing threaded or ball-head part we could adapt
Thank you, [name, company, address]
6. Estimated cost per tile pair (one EXO-410 + one EXO-420)
Parts only, at JLC library prices for the bought quantity. MCP6V31U through Global Sourcing at ≈ $1.45 (2 tiles) and $1.20 (16 tiles); PAT9125 at $5.64. Pins, PCBs and assembly fees are listed separately.
| 2 tiles (124 op-amps) | 16 tiles (992 op-amps) | |
|---|---|---|
| ADS131M08IRSNR × 8 | $61.84 | $52.97 |
| Op-amps × 62, MCP6V31U | $89.90 | $74.40 |
| PAT9125EL × 4 | $22.56 | $22.56 |
| SMT nuts × 60 | $4.36 | $4.36 |
| Everything else (passives, LDOs, buffers, DF40 pairs, RP2040, flash, crystal, FPC) | ≈ $7.84 | ≈ $6.62 |
| Electronic parts per tile pair | ≈ $186.50 | ≈ $160.90 |
| Same, with OPA391 instead of MCP6V31U | ≈ $151.80 | ≈ $139.10 |
| Same, plus ADS131M08IPBSR (TQFP-32 5×5, C2862610, $2.92 @1k, 9,833 in stock; needs a footprint and placement change) | – | ≈ $110 with OPA391 |
| Spring ball-pins × 60 (unquoted estimate) | ≈ $60–180 | ≈ $18–60 |
Order-level PCBA fees (Standard PCBA, estimate from the JLC fee page): two designs, each double-sided: setup 2 × $51.12, stencils 2 × $16.42 → ≈ $135 per order. Extended loading ≈ 20 types × $1.53 ≈ $31. Joints ≈ (1,295 + 176) × $0.0176 ≈ $26 per tile pair. Handling ≥ $15; fixtures ≈ $16. Plus Global Sourcing markup and the consignment fee (≈ $30). 6-layer 1.0 mm ENIG boards: quote needed (from ≈ $35 per 5 pcs ≤ 100 × 100 mm).
Rough order totals, parts plus PCBA fees, before PCBs and pins: - 2 tiles: ≈ $373 + ≈ $280 fees ≈ $650, ≈ $325 per tile pair. - 16 tiles: ≈ $2,575 + ≈ $650 fees ≈ $3,200, ≈ $200 per tile pair.
Add a few percent for JLC attrition.
Proposed circuit.py edits (for whoever owns the board; not applied)
"OPA1": ..., mpn="MCP6V31UT-E/LT", lcsc="", # Global Sourcing; LCSC alt: OPA391DCKR C2871876 (same pinout)
"ADS131M08": ..., mpn="ADS131M08IRSNR", lcsc="C5124126",
"FLASH": ..., mpn="W25Q16JVSNIQ", lcsc="C2456211", # 150-mil SOIC-8 matches SOIC-8_3.9x4.9mm
"BUF1G17": ..., mpn="SN74LVC1G17DCKR", lcsc="C10425", # C7836 is the SOT-23-5 DBV part
"LDO": ..., mpn="TPS7A2033PDBVR", lcsc="C2862740", # UL1 only: consider TPS7A2033DQNR C46459900 (1.5 mm stack)
"B2B10R": ..., mpn="DF40C-10DS-0.4V(58)", lcsc="C6601481",
"B2B10H": ..., mpn="DF40C-10DP-0.4V(51)", lcsc="C424635",
"PAT9125": ..., mpn="PAT9125EL-TKMT", lcsc="", # consigned (WPG Americas)
# passives: carry an lcsc per value (see §3); "100k 0.1%" 0201 -> 1 % C106224; "100nF C0G" 0201 -> X7R C22435929
Passing per-instance LCSC numbers for passives means adding an lcsc= argument to Circuit.add, or a value → LCSC
table read by check.py when it writes the JLC BOM.