The connectivity comparison confirms that all 49 nets still connect the same pins. The readability check found more work in the op-amp stages and electrode-jack wiring, which I’m correcting now.
The analog stages now have drawn signal paths, but a wire-placement bug on flipped symbols is blocking part of the USB drawing. I’ll leave the affected connections labeled and finish the independent label fixes; the bug needs Contact Support.
I arranged all 78 components into eight functional blocks and added local wires and net labels. All 49 nets retain exactly the same pin connections; no electrical connections changed.
The drawing is not fully clean: wire crossings and label crowding remain, and a flipped-symbol wire-placement bug blocks the shared USB power wire. That bug needs Contact Support; the remaining drafting cleanup is still open.
The user-authorized gain redistribution is now applied: R12/R13 = 13.7k each, 0.1%, 0402; R17 = 210k and R19 = 2.43k, both 1%, 0402; R18 remains 10k. These values supersede the original 4.99k/82k/2.26k snapshot. There remain 78 components and 49 nets; topology, filters, protection and PCB were not changed. J2's obsolete USBLC6 note was corrected by the capture agent to the actual TPD2E2U06DRLR. That agent reports fresh ERC 0 errors / 1 unchanged D4 unspecified-pin-type warning; this documentation continuation did not rerun ERC or edit the live design.
Current ideal equations: RG = 27.4k; G1 = 1 + 100k/27.4k = 4.6496350365. G2 open = 22; G2 closed = 1 + 210k(1/10k + 1/2.43k) = 108.4197530864. Resistor-only totals = 102.291970803 / 504.112282599 V/V. Balanced zero-source-impedance input attenuation is 1/1.02 = 0.980392157, not an additional arbitrary gain correction.
Newly executed ideal AC (400/800 points per decade, plus exact-frequency samples): jack-to-ADC gains at 20/100/500 Hz are 71.36898/98.54068/73.04825 open and 351.7185/485.6253/359.9943 closed. Peaks are 100.5408/495.4822 V/V near 253.367 Hz; peak-relative band 19.892–506.603 Hz. Relative-to-100-Hz attenuation is 72.7269 dB at 4 kHz, 96.3984 dB at 7.5 kHz and 99.0169 dB at 8.02 kHz. These are unlimited linear models, not achievable 1 V-input output swings.
Under the explicitly assumed 3.2 V rail, 1.6 V midrail and ±1.5 V usable swing, ±250 mV jack DC plus 12 mVpk gives INA output excursion 1.194318 V, not the unloaded 1.218 V. ±100 mV plus 12 mVpk gives 0.510548 V. At 12/2.4 mVpk open/closed, U4D AC excursions are 1.206490/1.189157 V. Adding assumed U4B 500 µV Vos times G2 and 1 mV for two followers gives 1.218490/1.244367 V; capacity/demand = 1.23103/1.20543. Both meet the nominal 1.2 screen, high gain marginal; tolerances and real limits remain unqualified. INA internal outputs are VCM ∓ G1·vd/2, where vd is the loaded INA differential input, not merely the internal feedback-resistor term.
CM_SENSE nominal source Thevenin changes 2.495k → 6.85k; assumed 60 pA U5A bias gives 0.411 µV loading error. Preserve physical split RG and the corrected signed midpoint formula in the review. No new RLD phase/gain-margin or total-noise result was computed: previous AC/headroom/noise/SNR/RLD numerical results elsewhere in this guide or older notes are historical, superseded as current-state evidence by this dated addendum and the Gain Update Verification. Unchanged ideal normalized filter shape is not evidence of unchanged real loop stability or noise.
Current run evidence: 400 points/decade, 800 points/decade, exact frequencies. Vendor/internal RG fidelity, nonlinear recovery, actual ADC/noise, procurement and complete-system isolation/safety remain unresolved. Bench simulator only. No AD8232 substitution was made.
Scope, provenance and interpretation
Snapshot: 2026-10-27, STM32 Surface EMG. Read-only schematic/component-property inspection reports 78 components; complete net inspection reports 49 connected nets. This guide covers 78/78 designators: R1–R31, C1–C31, U1–U5, D1–D5, J1–J4, F1 and Y1. No circuit, BOM, symbol or package selection is changed by this document. Live topology, not the earlier architectural sketch, is authoritative. Symbol coordinates are immaterial to simulation.
Evidence used: current full schematic properties, complete 49-net membership list, targeted pin metadata and BOM descriptions; all seven existing project files (Design Notes, Project Specification, EMG Sensor Requirements, Firmware Requirements, Board Bring-Up Plan, Safety FMEA and Design History File); focused manufacturer-datasheet queries and TI model-catalog search. Values described as recorded below are project data, not independently procurement-qualified datasheet guarantees. Datasheet claims carry inline citations; calculations are explicitly calculations. Missing data is not permission to infer a guarantee.
Historical ERC read: 0 errors, 1 warning, D4 unspecified library pin types (review timestamp 2026-10-27T18:33:16.623Z); post-adoption capture reports the same counts as noted above. Warning means possibly wrong, not proof of wrong polarity; earlier design notes record manual symbol/footprint cathode verification. ERC is not an analog simulation or a safety approval. No fabrication DRC claim is made. This continuation makes documentation only. Native IEC symbol-style setting was unavailable; existing symbols remain unchanged. No GPIO insertion detector or isolated detect contact is implemented.
Bench simulator only. Neither these simulations, current-limiting calculations nor an external USB isolator constitute human-safety certification. Human connection remains blocked pending complete-system qualified isolation/leakage/fault review, including shield, SWD and instrumentation ground paths.
Signal flow and operating references
User-confirmed jack decision (2026-10-27): retain SJ-3524-SMT-TR and omit GPIO plug detection. Tip (pin 2) is EMG+, ring (pin 3) is EMG−, sleeve (pin 1) is driven reference, and tip-switch (pin 4) remains unconnected. Simulations must not add a GPIO detector, detector pull-up, or ground connection to the sleeve.
J1 tip/ring -> R6/R8 jack-side limiters -> midpoint D2/D3 clamps -> R7/R9 INA-side limiters -> INA_INP/INA_INN with R10/R11 bias returns and C18/C19/C20 RF filtering -> U3 INA333 -> C23/R16 HP -> U4B selectable noninverting gain -> U4C low-Q Sallen-Key -> U4D high-Q Sallen-Key -> R24/C28 -> U1 PA0 ADC.
R14/R15 divide actual 3V3A, C22 filters that divider, and U4A buffers it as VMID. VMID is not an independent fixed 1.650 V supply and is not GND. It biases the INA REF, both input bias returns, HP return, gain lower legs and RLD references. LP shunt capacitors C25/C27 connect to GND, not VMID. At settled DC, the LP chain passes the biased signal with unity gain.
U3 split gain-resistor midpoint CM_SENSE -> U5A buffer -> R25 -> U5B inverting feedback around VMID with R26 parallel C30 -> R27 -> D5-clamped RLD_MID -> R28 -> J1 sleeve. The sleeve is RLD_JACK, never ground. The external body/electrode network closes this loop; do not replace body common mode by an ideal grounded source during stability analysis. U5C/D are powered spare followers, not extra filters.
Power: J2 VBUS_CONN with D4 TVS -> F1 -> 5V_USB -> U2 always-enabled LDO -> 3V3 -> R1 -> 3V3A. USB2 data uses D1, R4/R5; MCU uses Y1/C16/C17, boot/reset and bench-only J3 SWD. There is no onboard power/data isolation.
Connectivity and component inventory conventions
The following inventory is a complete reconstruction appendix. Net labels are literal project names; map GND to SPICE node 0 and use a reversible alias table for punctuation in USB_D+/USB_D- and leading digits in rail names if required. Never merge VMID, VMID_DIV or GND. NC means physically unconnected, not grounded. Every R/C has pin name P1 = physical pin 1, P2 = physical pin 2; table endpoints are in that exact order.
Packages use imperial sizes: 0402 = SMD_0402_1005Metric, 0603 = SMD_0603_1608Metric, 0805 = SMD_0805_2012Metric, 1206 = SMD_1206_3216Metric. All resistor power ratings are recorded: 0.063 W for 0402, 0.66 W for the six 1206 limiters. Generic R/C tolerance entries are capture/design targets unless the selected procurement MPN is qualified; they are not automatically purchase guarantees. missing is a genuinely absent tolerance property, not 0%.
All 31 resistors
MPN generic means no exact procurement MPN recorded. Panasonic parts retain generic library symbols but do have instance MPNs.
Table
Ref
Nominal
Recorded tolerance
Package
MPN
Pin 1 net
Pin 2 net
Purpose
R1
10 ohm
1% target
0402
generic
3V3
3V3A
Analog rail RC feed
R2
10k
1% target
0402
generic
BOOT0
GND
Flash-boot pulldown
R3
10k
1% target
0402
generic
5V_USB
USB_VBUS_SENSE
VBUS divider upper
R4
0 ohm
1% recorded, unsuitable as absolute jumper bound
0402
generic
USB_DP_CONN
USB_D+
D+ series tuning position
R5
0 ohm
1% recorded, unsuitable as absolute jumper bound
0402
generic
USB_DM_CONN
USB_D-
D- series tuning position
R6
100k
1% recorded
1206
ERJ-P08F1003V
EMG_P_JACK
EMG_P_PROT
Positive jack-side limiter
R7
100k
1% recorded
1206
ERJ-P08F1003V
EMG_P_PROT
INA_INP
Positive INA-side limiter
R8
100k
1% recorded
1206
ERJ-P08F1003V
EMG_N_JACK
EMG_N_PROT
Negative jack-side limiter
R9
100k
1% recorded
1206
ERJ-P08F1003V
EMG_N_PROT
INA_INN
Negative INA-side limiter
R10
10M
1% target
0402
generic
INA_INP
VMID
Positive bias return
R11
10M
1% target
0402
generic
INA_INN
VMID
Negative bias return
R12
13.7k
0.1% target
0402
generic
INA_RG_A
CM_SENSE
INA split RG first half
R13
13.7k
0.1% target
0402
generic
CM_SENSE
INA_RG_B
INA split RG second half
R14
100k
0.1% target
0402
generic
3V3A
VMID_DIV
Midrail upper divider
R15
100k
0.1% target
0402
generic
VMID_DIV
GND
Midrail lower divider
R16
80.6k
1% target
0402
generic
HP_NODE
VMID
HP DC return
R17
210k
1% target
0402
generic
GAIN_FB
GAIN_OUT
Gain feedback
R18
10k
1% target
0402
generic
GAIN_FB
VMID
Always-present gain lower leg
R19
2.43k
1% target
0402
generic
GAIN_FB
GAIN_SEL
Jumper-enabled parallel lower leg
R20
28.7k
1% target
0402
generic
GAIN_OUT
LP1_A
LP1 first series resistor
R21
28.7k
1% target
0402
generic
LP1_A
LP1_B
LP1 second series resistor
R22
54.9k
1% target
0402
generic
LP1_OUT
LP2_A
LP2 first series resistor
R23
54.9k
1% target
0402
generic
LP2_A
LP2_B
LP2 second series resistor
R24
100 ohm
1% target
0402
generic
LP2_OUT
ADC_EMG
ADC drive isolation
R25
49.9k
1% target
0402
generic
CM_BUF
RLD_INV
RLD input resistor
R26
1M
1% target
0402
generic
RLD_INV
RLD_OUT
RLD DC feedback limit
R27
200k
1% recorded
1206
ERJ-P08F2003V
RLD_OUT
RLD_MID
Opamp-side reference limiter
R28
200k
1% recorded
1206
ERJ-P08F2003V
RLD_MID
RLD_JACK
Jack-side reference limiter
R29
5.1k
1% target
0402
generic
USB_CC1
GND
CC1 independent sink pulldown
R30
5.1k
1% target
0402
generic
USB_CC2
GND
CC2 independent sink pulldown
R31
20k
missing
0402
generic
USB_VBUS_SENSE
GND
VBUS divider lower
R12 design note records a 25 ppm/°C target; no selected MPN guarantees it. R6 note records ±100 ppm/°C for the Panasonic limiter family; this is recorded prior research, not freshly validated here, and must be confirmed for both limiter MPNs before thermal-corner claims. No other resistor TCR or voltage coefficient is provided. Recorded limiter working-voltage/pulse claims are not needed for nominal SPICE; pulse-energy qualification remains open. No resistor voltage rating is promoted here from an uncited design note.
All 31 capacitors
Dielectric in parentheses is a design-note target, rather than a populated Dielectric property. All are generic/unqualified procurement parts except C24/C26, whose selected Murata MPNs are stated. Nominal capacitance must not be silently treated as effective biased capacitance.
Table
Ref
Nominal
Recorded tolerance
Package
Recorded voltage rating
Dielectric/status
Pin 1 net
Pin 2 net
Purpose / selected MPN
C1
4.7uF
missing
0603
16V
X5R
5V_USB
GND
Input bulk; generic
C2
1uF
missing
0402
16V
X7R
5V_USB
GND
U2 input bypass; generic
C3
1uF
missing
0402
10V
X7R
3V3
GND
LDO stability capacitor; generic
C4
10uF
missing
0603
10V
X5R
3V3
GND
Digital bulk; generic
C5
10uF
missing
0603
10V
X5R
3V3A
GND
Analog RC bulk; generic
C6
100nF
missing
0402
16V
X7R
3V3A
GND
Analog HF bypass; generic
C7
100nF
missing
0402
16V
X7R
3V3
GND
U1 VDD24 bypass; generic
C8
100nF
missing
0402
16V
X7R
3V3
GND
U1 VDD36 bypass; generic
C9
100nF
missing
0402
16V
X7R
3V3
GND
U1 VDD48 bypass; generic
C10
4.7uF
missing
0603
10V
X7R
3V3
GND
MCU bulk; generic
C11
4.7uF
missing
0603
6.3V
X5R
VCAP1
GND
Core-regulator capacitor; generic
C12
1uF
missing
0402
10V
X7R
3V3A
GND
VDDA/reference bypass; generic
C13
100nF
missing
0402
16V
X7R
3V3A
GND
VDDA/reference bypass; generic
C14
100nF
missing
0402
16V
X7R
3V3
GND
VBAT bypass; generic
C15
100nF
missing
0402
16V
X7R
MCU_NRST
GND
Reset filtering; generic
C16
18pF
missing
0402
50V
C0G
HSE_IN
GND
HSE input load; generic
C17
18pF
missing
0402
50V
C0G
HSE_OUT
GND
HSE output load; generic
C18
47pF
5% target
0402
50V
(C0G)
INA_INP
INA_INN
Differential RF shunt; generic
C19
10pF
2% target
0402
50V
(C0G, match C20)
INA_INP
GND
Positive CM RF shunt; generic
C20
10pF
2% target
0402
50V
(C0G, match C19)
INA_INN
GND
Negative CM RF shunt; generic
C21
100nF
missing
0402
16V
(X7R)
3V3A
GND
U3 bypass; generic
C22
1uF
missing
0402
10V
unspecified
VMID_DIV
GND
Midrail divider filter; generic
C23
100nF
5% target
0805
50V
(C0G or PPS film, unresolved procurement)
INA_OUT
HP_NODE
HP coupling; generic
C24
12nF
5% recorded
0805
50V
(C0G)
LP1_A
LP1_OUT
LP1 feedback; GCM2195C1H123JA16D
C25
10nF
5% target
0402
50V
(C0G)
LP1_B
GND
LP1 shunt; generic
C26
15nF
5% recorded
0805
50V
(C0G)
LP2_A
LP2_OUT
LP2 feedback; GCM2195C1H153JA16D
C27
2.2nF
5% target
0402
50V
(C0G)
LP2_B
GND
LP2 shunt; generic
C28
1nF
5% target
0402
50V
(C0G)
ADC_EMG
GND
ADC charge reservoir; generic
C29
100nF
missing
0402
16V
(X7R)
3V3A
GND
U4 bypass; generic
C30
10nF
5% target
0402
50V
(C0G)
RLD_INV
RLD_OUT
RLD compensation; generic
C31
100nF
missing
0402
16V
(X7R)
3V3A
GND
U5 bypass; generic
Missing tolerance count: 22 of 62 R/C parts: R31 and C1–C17, C21, C22, C29, C31 (1 resistor + 21 capacitors). The other 40 have recorded tolerance properties; most remain unsourced design targets, not procurement guarantees. R4/R5 additionally need an absolute resistance bound for a real 0-ohm jumper; a percentage of zero does not supply one.
No part-specific effective-C versus DC-bias curve, ESR versus frequency, ESL or aging model is captured for any capacitor. In particular C4/C5 at 3.3 V and C11 near the internally regulated core voltage require selected-MPN qualification. Earlier generic estimates such as C1 retaining 40–50% are not acceptable min/max guarantees. C22 dielectric is unknown. Numeric capacitance temperature coefficients are not recorded; C0G/X7R/X5R labels alone do not specify a measured distribution or biased effective value for a chosen MPN. All unprovided numeric thermal/aging/ESR/bias ranges are TBD; an exploratory multiplier is a study assumption only.
0402 exceptions: 14 R/C parts, leaving 48/62 in 0402. C1/C4/C5/C10/C11 are 0603 for effective-C/VCAP concerns; C23/C24/C26 are 0805 for stable-dielectric capacitance availability; R6–R9/R27/R28 are 1206 for limiter voltage/energy considerations. Existing notes call C24/C26 the smallest verified C0G sourcing options, not proof that no future smaller part exists. F1 is 0805 but is not an R/C exception.
Remaining 16 components: identity, package and exact connectivity
Packages below are captured library package codes/descriptions, not new footprint qualifications.
Table
Ref
Recorded MPN / identity
Recorded package or package evidence
Purpose
U1
STM32F401CEU6
UFQFPN-48_L7.0-W7.0-P0.50-BL-EP
Recorder/ADC/USB
U2
TPS7A2033PDBVR
SOT-23-5_L2.9-W1.6-P0.95-LS2.8-BR
3V3 LDO
U3
INA333AIDGKR
SOP65P490X110-8N library code
Differential INA
U4
OPA4340UA
BOM description 14-SOIC; no Package property returned
Midrail, gain, two LP units
U5
OPA4340UA
BOM description 14-SOIC; no Package property returned
CM buffer, RLD, two spare units
D1
TPD2E2U06DRLR
SOT-553-5_L1.6-W1.2-P0.50-LS1.6-TL-1
USB two-channel ESD
D2
BAV199LT1G
SOT-23_L2.9-W1.3-P1.90-LS2.4-BR
Positive input clamp
D3
BAV199LT1G
Same SOT-23 code
Negative input clamp
D4
SMF6.0A (Liown)
SOD-123FL_L2.8-W1.9-LS3.7-RD
VBUS TVS
D5
BAV199LT1G
Same SOT-23 code
RLD midpoint clamp
F1
0805L020YR
F0805
Resettable PTC
J1
SJ-3524-SMT-TR
Manufacturer-specific SMT jack; no Package property returned
Electrode TRS
J2
CX90M-16P
USB-C-SMD_CX90M-16P
USB2 Type-C receptacle
J3
PZ254V-11-05P
HDR-TH_5P-P2.54-V-M
Bench-only SWD
J4
22284020
HDR-TH_2P-P2.54-V-M-1
Gain shunt header
Y1
X322512MSB4SI, 12 MHz
BOM SMD3225-4P
Passive HSE crystal, not powered oscillator
U3 physical pin mapping, directly from live capture: 1 RG_1=INA_RG_A; 2 VIN-=INA_INN; 3 VIN+=INA_INP; 4 V-=GND; 5 REF=VMID; 6 VOUT=INA_OUT; 7 V+=3V3A; 8 RG_2=INA_RG_B. INA333 gain equation G=1+(100kΩ/RG), RG between physical 1 and 8, is datasheet-supported. The external midpoint is real: do not collapse R12/R13 to one 27.4k resistor when studying RLD. Its common-mode behavior depends on the INA internal topology, not solely the differential output gain; the focused lookup did not independently validate a split-midpoint RLD application, so vendor-model midpoint fidelity must be tested.
Rows identify actual physical package pins; model port order must be mapped separately from the chosen .SUBCKT declaration. For both U4 and U5, physical 4 V+=3V3A and 11 V-=GND. The map below comes from the live schematic, not an assumed generic quad pin order.
Table
Device/unit
+ input pin/net
- input pin/net
Output pin/net
Connected function
U4A
3 VMID_DIV
2 VMID
1 VMID
Midrail unity buffer
U4B
5 HP_NODE
6 GAIN_FB
7 GAIN_OUT
Noninverting selectable gain
U4C
10 LP1_B
9 LP1_OUT
8 LP1_OUT
Unity LP1 follower
U4D
12 LP2_B
13 LP2_OUT
14 LP2_OUT
Unity LP2 follower/ADC drive
U5A
3 CM_SENSE
2 CM_BUF
1 CM_BUF
CM unity buffer
U5B
5 VMID
6 RLD_INV
7 RLD_OUT
Compensated inverting RLD
U5C
10 VMID
9 U5C_SPARE
8 U5C_SPARE
Spare unity follower
U5D
12 VMID
13 U5D_SPARE
14 U5D_SPARE
Spare unity follower
D1: 1 NC and 2 NC unconnected; 3 IO1=USB_DP_CONN; 4 GND=GND; 5 IO2=USB_DM_CONN. No VBUS steering pin. D2/D3/D5 each: 1 A=GND, 2 C=3V3A, 3 C/A respectively EMG_P_PROT / EMG_N_PROT / RLD_MID. Implement each dual diode as GND-anode to midpoint-cathode plus midpoint-anode to 3V3A-cathode, with correct reverse leakage/capacitance if included. D4 physical 1=VBUS_CONN, 2=GND; recorded polarity is 1 cathode / 2 anode, notwithstanding generic pin labels. F1 physical 1=VBUS_CONN, 2=5V_USB.
J1: 1 SLEEVE=RLD_JACK; 2 TIP=EMG_P_JACK; 3 RING=EMG_N_JACK; 4 TIP_SWITCH=NC. Manufacturer pin functions are verified. Pin 4 is the tip's switched contact, not electrically independent insertion detection; no GPIO detector exists. For no-plug studies open all external electrode connections; do not add a fictitious ground sleeve or detector bias. Plug insertion contact-short sequences require a separately declared test model, not an inferred schematic component.
J2: A5 CC1=USB_CC1; B5 CC2=USB_CC2; A6 DP1 and B6 DP2=USB_DP_CONN; A7 DN1 and B7 DN2=USB_DM_CONN; A4/A9/B4/B9 VBUS=VBUS_CONN; A1/A12/B1/B12 GND=GND; A8 SBU1 and B8 SBU2=NC. SHELL25/26/27/28 and MD27/28 all connect GND; the duplicate physical numbers are separate library terminal representations, not extra USB signal contacts. The shield is on the board's presumed isolated-side ground; whether external cabling preserves isolation is unknown. Capture corrected the obsolete USBLC6 wording: actual D1 is TPD2E2U06DRLR, with D4 separate on VBUS. Do not simulate the obsolete part.
J3 physical 1=3V3 reference, 2=SWCLK, 3=GND, 4=SWDIO, 5=MCU_NRST. Never treat 1 as a permitted external power input. J4 physical 1=GAIN_SEL, 2=VMID; use an open/closed shunt between these nodes. Y1 physical 1=HSE_IN, 3=HSE_OUT, 2/4=GND; it is a passive crystal despite the library display name. Exact crystal CL is unresolved: BOM description says 20pF, while the design note says exact-MPN CL is unconfirmed and uses inconsistent 12/14pF load assumptions across notes. Do not present clock pulling/startup margin as validated; confirm manufacturer ordering data first.
Every U1 physical pin
Table
Pin
Name
Net/state
1
VBAT
3V3
2
PC13
NC
3
PC14-OSC32_IN
NC
4
PC15-OSC32_OUT
NC
5
PH0-OSC_IN
HSE_IN
6
PH1-OSC_OUT
HSE_OUT
7
NRST
MCU_NRST
8
VSSAVREF-
GND
9
VDDAVREF+
3V3A
10
PA0
ADC_EMG
11
PA1
NC
12
PA2
NC
13
PA3
NC
14
PA4
NC
15
PA5
NC
16
PA6
NC
17
PA7
NC
18
PB0
NC
19
PB1
NC
20
PB2
NC
21
PB10
NC
22
VCAP1
VCAP1
23
VSS
GND
24
VDD
3V3
25
PB12
NC
26
PB13
NC
27
PB14
NC
28
PB15
NC
29
PA8
NC
30
PA9
USB_VBUS_SENSE
31
PA10
NC
32
PA11
USB_D-
33
PA12
USB_D+
34
PA13
SWDIO
35
VSS
GND
36
VDD
3V3
37
PA14
SWCLK
38
PA15
NC
39
PB3
NC
40
PB4
NC
41
PB5
NC
42
PB6
NC
43
PB7
NC
44
BOOT0
BOOT0
45
PB8
NC
46
PB9
NC
47
VSS
GND
48
VDD
3V3
49
EP
GND
49-net cross-check list
Every connected net below is represented in the component appendix; external sources/electrodes are testbench elements, not members of the 78-part BOM.
These equations are ideal-circuit calculations, not procurement guarantees or new requirements.
VMID_DIV = 3V3A × R15/(R14+R15); nominal 0.5 × 3V3A. Divider Thevenin resistance 50k and C22 1uF give 50ms time constant / 3.18Hz pole before buffer dynamics. Actual VMID includes U4A offset/loading/finite bandwidth. Opposite ±0.1% divider extremes yield ratio 0.4995–0.5005 under the recorded targets, not a certified production band.
R1/C5 alone give 1/(2π×10×10uF)=1.59kHz; actual shunt includes C6/C12/C13/C21/C29/C31 and load impedances, so use the full supply network. DC 3V3A = 3V3 − 10ohm × analog-load current. Supply current modeled implicitly by ideal voltage-controlled sources is generally zero and cannot reproduce that drop.
C18 plus equal C19/C20 has approximate differential effective C =47pF+10pF/2=52pF; differential series R≈400k gives RF pole ≈7.65kHz. Approximate common-mode RC pole 1/(2π×200k×10pF)=79.6kHz. Electrode impedance, bias resistors, clamp capacitance and board/cable parasitics modify these approximations. Do not substitute these poles for the actual connected network.
HP C23/R16: 19.75Hz and 8.06ms nominal. At DC C23 opens, so HP_NODE returns to VMID; the INA can still saturate before this capacitor. High-pass filtering does not rescue an overloaded first stage.
J4 open: R19 dead-ended at GAIN_SEL, G2 = 1 + 210k/10k = 22; ideal total G1×G2 = 102.291970803. J4 closed: R19 joins VMID, Rg = 10k ∥ 2.43k, G2 = 108.4197530864; total = 504.112282599. The user authorized this gain redistribution, not a guaranteed signal/noise envelope; 8 kS/s remains a planned sample rate. J4 is manual and unreadable by firmware in this hardware. Model finite shunt resistance only as a declared study assumption until sourced.
Each LP section is unity-gain Sallen-Key with input -> Ra -> node A -> Rb -> node B -> follower output, Cf from A to output, Cg from B to GND. Ideal denominator is 1+s·Cg(Ra+Rb)+s²RaRbCfCg. Thus f0=1/[2π√(RaRbCfCg)] and Q=√(RaRbCfCg)/[Cg(Ra+Rb)]. LP1 explicitly uses Ra=R20, Rb=R21, Cf=C24, Cg=C25, giving f0≈506Hz, Q≈0.5477. LP2 uses Ra=R22, Rb=R23, Cf=C26, Cg=C27, giving f0≈505Hz, Q≈1.3056. Target Butterworth section Qs were 0.5412/1.3066; actual LP1 is not exactly that target. They are not two Q=0.707 sections. C24/C26 do not go to ground.
For equal-R sections, Q≈0.5√(Cf/Cg): cap-ratio errors change peaking; common scaling of both caps moves f0 without changing Q. Frequency logarithmic sensitivity is −1/2 to each of Ra/Rb/Cf/Cg. Use the general Q equation when independently varying resistors. HP has −1 logarithmic sensitivity to each R16/C23. Gain changes follow resistor ratios, including INA internal gain accuracy separately from external RG tolerance.
R24/C28 alone yield 100ns and 1.59MHz, not an extra 500Hz anti-alias pole. The reservoir/kickback settling must be simulated with the ADC switch and opamp output impedance, not inferred from this corner alone.
RLD feedback relative to VMID: H(s)=−(R26/R25)/(1+sR26C30), nominal DC −20.04, feedback pole 15.92Hz, high-frequency integration-unity estimate 1/(2πR25C30)=318.95Hz. This is not actual body-loop crossover. R27+R28=400k limits drive but adds load-dependent loop phase. U5A buffer dynamics and U3 CM_SENSE transfer must remain in the loop.
VBUS sense divider R3/R31 gives 2/3 nominal: 3.167–3.500V if protected 5V_USB itself is 4.75–5.25V. F1 drop lowers it. R31 lacks recorded tolerance, so a guaranteed divider min/max cannot be calculated. Earlier design notes' opposite 1% R31 calculation is an assumption, not supported by that property. No positive-injection/ramp guarantee follows from this ratio.
Model hierarchy and vendor-model provenance
Topology/linear check: ideal resistors/capacitors and ideal amplifiers, finite testbench bias paths, a declared ideal 3V3A supply and VMID divider/buffer. Useful for nominal transfer only. Explicitly exclude rail limits, offset, noise, output current, ADC kickback, supply drop, chopper behavior, ESD and RLD safety. Do not use a single differential-output behavioral INA with floating RG pins to analyze RLD.
Behavioral study: finite open-loop gain, dominant pole, output resistance, swing/current/ slew limits and offsets, with assumptions listed. The older RLD study used a single-pole 5.5MHz opamp assumption; that is not a full OPA4340 vendor macromodel or guaranteed worst-case GBW. A behavioral INA must implement the physical split-RG common-mode path. Compare CM_SENSE versus external common mode and differential input before trusting loop gain. Do not hardwire CM_SENSE to an arbitrary constant merely to obtain convergence.
Vendor-model validation: TI datasheet states an OPA4340 SPICE macromodel is available. Catalog search on 2026-10-27 identified OPAx340 TINA-TI model Rev E, SBOM273E and INA333 PSpice Rev G SBOM382G / TINA-TI Rev E SBOM310E. These are catalog listings, not downloaded, version-pinned, inspected or executed model assets in this project. Model body revision/date/hash, license, simulator compatibility and exact pin order remain TBD; do not equate ZIP revision to the internal model revision. Download from TI, retain original archive and hash, record .SUBCKT headers/port mapping and any syntax adaptations before use. A single-channel family model may be instantiated eight times for U4/U5, but shared-supply/channel coupling must then be declared excluded unless supported. No quad-specific crosstalk simulation is claimed.
The INA333 datasheet notes its SPICE simulation requires a resistor on the RG pins (a very large value for nominal unity gain); this design already has R12/R13 and should preserve them. A model that exposes RG pins is necessary but not sufficient: validate that it gives physically meaningful midpoint/common-mode loading rather than a differential-gain abstraction. If it does not, retain a separately validated internal-topology behavioral RLD study and label that substitution.
Before vendor-model use, compare gain/phase versus gain setting and supply, input-common-mode/output envelope, offset/noise spectra at current G1 ≈ 4.65, bias/leakage versus temperature, output swing versus load, slew/recovery, PSRR and capacitive-load response against appropriate datasheet conditions. Do not apply a headline offset/noise number specified at G≥100 directly at G1 ≈ 4.65. Historical G≈11 models/results require reevaluation. Conditional device limits remain incomplete; missing values are TBD, not zero. Models may implement only typical values or omit temperature/chopping, overload recovery, input protection, power sequencing, PSRR, shared-channel coupling and package parasitics. Catalog availability is not evidence those behaviors are covered. Document supported/unsupported behavior per model file before claiming a result. Do not double-count noise or offset by adding external sources already implemented inside a model.
Power and digital simplification boundaries
For analog transfer, U1 can be replaced by an ADC input load plus static/dynamic rail-current sinks, while J2/USB/SWD/clock/reset/BOOT circuitry stays in the connectivity record but may be excluded from the SPICE solve. Explicitly state exclusions: firmware correctness, DMA/USB buffering, enumeration, PHY eye diagrams/ESD, clock startup/jitter, core regulator, boot/reset sequencing, SWD backpower, conducted/radiated coupling and digital ground bounce. These require dedicated models/tests, not an assertion that the omitted components have no effect.
For rail-sensitivity work retain R1 and all rail capacitors; use U2 vendor model or a declared source/output impedance and noise model. Draw MCU/analog supply loads explicitly because many opamp models do not consume realistic quiescent current. Prior allowances are 35mA typical / 60mA design input, not measured or complete datasheet maxima. Include F1 series resistance/thermal current dependence only when sourced; source-current-limit/inrush behavior is TBD. Nominal upstream range 4.75–5.25V is the intended normal USB supply, not a TVS-guaranteed operating range.
Do not use ideal voltage sources to prove protection: D1/D4 clamp coordination is not qualified; existing records state residual TVS clamps may exceed protected IC absolute maxima. Diode leakage/capacitance, reverse recovery and temperature model availability are unresolved. Ideal clamps are acceptable only for a labelled qualitative fault study, not ESD/surge survival. C11 is connected to an internal MCU regulator output and must not be driven by an invented external source unless a declared core-regulator approximation is being studied.
Intended firmware calculations: 12MHz HSE, M6/N168/P4/Q7 -> 84MHz SYSCLK and 48MHz USB; proposed ADC clock 21MHz with 480-cycle acquisition (~22.86us) and 8kS/s trigger (125us interval). These are plans, not executed firmware. Full conversion timing and internal ADC capacitance/resistance/charge injection must be sourced before a settling guarantee. A previously recorded ~4pF ADC-cap estimate is an unverified modeling assumption, not a guaranteed input-capacitance value. Model quantization using actual 3V3A/VREF and ground; decide and document code convention, INL/DNL/reference-noise assumptions rather than declaring an ideal quantizer to be a real 12-bit performance result.
Monte Carlo and corners: instructions for another LLM
Parameter provenance and ranges
For a recorded ±t% passive tolerance, a design-study bounded interval is x0(1−t/100) to x0(1+t/100). For generic parts call these design-target bounds, not supplier-guaranteed bounds. A tolerance gives a bound, not a probability density and not automatically ±3σ. Default exploratory draws may be uniform on that interval only if explicitly declared as a study assumption. Truncated Gaussian/lognormal alternatives and their σ/correlation need evidence or a stated study assumption. Unknown tolerance parts remain TBD; do not silently assign 5%, 10% or 20%. A nominal-only first pass is permitted but label those parts fixed and the yield estimate incomplete.
Examples calculated from current recorded targets: 100k ±1% → 99–101k; R12/R13 13.7k ±0.1% → 13.6863–13.7137k; 100k ±0.1% → 99.9–100.1k; 80.6k ±1% → 79.794–81.406k; R17 210k ±1% → 207.9–212.1k; 10k ±1% → 9.9–10.1k; R19 2.43k ±1% → 2.4057–2.4543k; 28.7k ±1% → 28.413–28.987k; 54.9k ±1% → 54.351–55.449k; 47 pF ±5% → 44.65–49.35 pF; 10 pF ±2% → 9.8–10.2 pF; C23 100 nF ±5% → 95–105 nF; C24 12 nF ±5% → 11.4–12.6 nF; C25/C30 10 nF ±5% → 9.5–10.5 nF; C26 15 nF ±5% → 14.25–15.75 nF; C27 2.2 nF ±5% → 2.09–2.31 nF; C28 1 nF ±5% → 0.95–1.05 nF. Formula above defines each remaining recorded range without guessing missing values. R4/R5 nominal 0 ohm may be shorted in the nominal analog exclusion model; do not claim physical resistance is guaranteed zero.
Do not multiply initial tolerance, thermal drift, DC-bias reduction and aging as though they were the same distribution. Separate x_eff(V,T,time) from initial manufacturing deviation, retain guaranteed combined limits where supplied, and label independence assumptions. C4/C5/C11 are priority effective-C/ESR qualification blockers. Actual temperature range of the complete design and all numeric temperature-dependent distributions remain TBD.
Correlation and sensitivity protocol
Default exploratory manufacturing draws: independent per part, including nominally identical resistors/caps, unless a matched network or vendor ratio-tracking specification exists. Notes saying “matched” for R6/R8, R7/R9, R10/R11, R12/R13, R14/R15 and C19/C20 express design intent, not guaranteed correlation. These are discrete parts, not a selected matched array.
Study both independent worst mismatch and a separately labelled common-lot/common-temperature component. Positive correlation can preserve ratios yet move absolute poles. Shared ambient temperature is correlated; self-heating and local gradients need separate assumptions. Keep supply/VMID/reference variations coupled physically, not independent random voltage sources.
Corner R12+R13 sum for INA gain; corner their mismatch and parasitic loading for CM_SENSE. Independently vary R17/R18/R19 and both J4 states. Sweep R14/R15 opposite extremes for midpoint ratio. Sweep R6–R11/C19/C20/electrode imbalance for CM-to-differential conversion. RLD tolerance includes R25, R26, C30 and both output limiters.
Sweep LP cap ratio and resistor mismatch, not only all-high/all-low frequency corners; the high-Q second section is particularly sensitive to ratio/GBW and load effects. Calculate actual f0/Q per draw, along with combined passband peak/ripple and attenuation. Tolerance corners are not guaranteed bounded system response if active parameters are omitted.
Include per-amplifier Vos, Ib±/Ios, voltage/current noise spectra, finite GBW/open-loop poles, output rail/current limits and INA gain/CMRR errors only with sourced conditional values or explicit TBD study ranges. Same-die offsets/drift are not guaranteed independent; compare shared/common and independent study cases when covariance is unknown. Never equate typical curves to absolute bounds. Noise is a time/frequency stochastic process, not simply a random DC offset.
Save random seed, sample count, distribution/ranges/provenance, temperature, supplies, electrode conditions, model hashes, simulator/options and failure logs. Increase sample count until reported quantiles stabilize to a stated study criterion; do not invent a production-yield confidence from an arbitrary run count. Report convergence failures separately, not as good draws.
Required analyses and test cases
Operating point/startup: power ramps, 3V3A load drop, divider/VMID settling, C23 charge history and both gains; plot every amplifier output, INA inputs, CM_SENSE, RLD current and ADC bias. Initial capacitor voltages must be declared. Allow enough settling relative to slowest time constant; prior firmware plan discards at least 1s, not a proven worst-case recovery bound.
AC transfer: differential excitation through finite electrode impedances, normalize to the stated source point (skin/body or jack, never interchange them). Record gain at 20/100/500Hz, peak, relative −3dB corners, f0/Q, 4kHz and 7.5kHz attenuation and phase. Repeat RLD on/off, both gains, tolerances and rails. Do not force common mode with a stiff ideal source when measuring RLD effectiveness.
Electrode/skin/cable: explicitly draw a body common-mode node; each sensing electrode gets its own interface impedance and DC half-cell source; reference electrode gets its own impedance to RLD_JACK. A simple Rs+(Rp||Cp) or R||C is an exploratory equivalent, not a validated biological model. Prior setup used 50k||47nF per electrode, 200pF cable, then 500pF cables and 200k||10nF electrode cases. Reuse only as labelled prior study cases; broader min/max, frequency-dependent skin parameters, contact mismatch, cable-to-ground/interconductor capacitance, shield termination, electrode area, motion and noise sources are TBD measurements/study inputs. A cable length does not fix capacitance. Sweep one lead and all leads independently, open/near-short contacts, asymmetric half-cell offsets, dry/high impedance and cable capacitance. Do not assume all cable capacitance goes to local board ground; define its actual return.
RLD loop stability: measure return ratio using an injection method preserving DC bias/loading, with correct feedback polarity; include U3 midpoint transfer, U5A/B, limiters, electrode/body/cable paths, input RF caps, bias resistors and clamp capacitance. Record crossover(s), phase/gain margin and probe sign convention; look for multiple crossings. Repeat electrode/cable and component/GBW/rail corners, lead-open/reconnection, U5 saturation and recovery. Closed-loop transient ringing is corroboration, not a substitute for a valid loop measurement. Acceptance margins are design targets TBD, not already certified.
Signal/DC/headroom: sweep differential offset through −100/0/+100mV as earlier design study cases, plus amplitudes around 1mVpk and previous 15mVpk low-gain/3mVpk high-gain trials. These are not confirmed user range requirements. Sweep common mode independently and inspect INA internal/headroom limits where model exposes them; increase offsets/amplitude until saturation, then remove to measure recovery. HP recentering does not prove INA linearity. Include overload artifact and mismatch-induced CM conversion.
Mains/interference: 50Hz and 60Hz common-mode coupling via explicitly declared capacitance/current source; independently vary coupling asymmetry, body return and cable paths. Prior 1Vpk through 2pF is a behavioral testbench condition, not a real-world environment limit. Report body CM, input differential artifact, ADC residual and RLD-on/off comparison. Add differential mains and out-of-band tones; ranges are TBD. Avoid reporting the RLD-only suppression ratio as the total circuit CMRR.
ADC load/aliasing: start with ideal high-Z ADC, then switched sample capacitor with sourced or labelled assumed capacitance/switch resistance, acquisition time, charge injection, reference impedance and sample timing. Sweep source load and opamp stability, verify R24/C28 settling within a declared fraction-of-LSB target (target TBD), and include parasitic cable/board loads only where physically applicable. At provisional 8kS/s Nyquist=4kHz; inject tones near n·fs±20…500Hz and integrate broadband out-of-band noise through analog response and sampling. Analog attenuation alone is not a complete alias budget: source amplitude/spectrum and acceptable aliased noise are TBD. Compare ADC time-domain sampled spectra, not only continuous AC plots. Clock jitter and actual reference noise require separate sourced inputs.
Noise/thermal/leakage: include resistor thermal noise, electrode impedances, R10/R11 noise/loading, opamp/INA voltage and current noise, clamp leakage and VMID/reference noise; integrate over a clearly stated analog/digital bandwidth. Add low-frequency drift/offset separately from broadband noise. Vendor-model .noise support must be demonstrated rather than assumed. Noise targets and temperature extremes remain unconfirmed.
Noise and SNR estimation: self-contained simulation recipe
Definitions, bandwidths and missing inputs
No numerical board noise floor or SNR is established here. Required inputs remain TBD: desired differential signal RMS amplitude and spectrum at a named source plane (body or J1), crest factor, electrode impedance/noise range and mismatch, body/cable coupling, operating temperature, real supply/reference spectra, ADC acquisition/noise/nonlinearity behavior and acceptable noise/SNR. For a sine, Vrms=Vpk/√2; a raw EMG waveform needs its actual RMS spectrum and crest factor instead. Electrode half-cell DC offset and amplifier Vos affect operating point/headroom but are not automatically integrated broadband noise. Motion artifacts and mains lines are interference, not the desired EMG signal. Report separate thermal/electronic noise, interference and distortion budgets, with a combined metric only when its denominator is defined.
Use one-sided PSD throughout this section: V²/Hz for voltage, A²/Hz for current; amplitude spectral density is the square root and has V/√Hz or A/√Hz units. For an equilibrium resistor at temperature T kelvin, series Johnson voltage PSD is S_v=4k_BTR (equivalent parallel current PSD 4k_BT/R); k_B=1.380649×10^−23 J/K. Choose one representation, not both. This equation gives thermal noise only, not thick-film excess noise, microphonics or electrode electrochemical noise. A passive equilibrium complex source impedance has thermal voltage PSD 4k_BT·Re[Z(f)] under the applicable equilibrium model; real electrodes can have excess/nonstationary noise and need separate measured or explicitly assumed spectra. Do not add both constituent resistor noise and an equivalent full-network thermal source.
Define H_sig(f)=V(ADC_EMG)/V_diff_source at the chosen source plane, with the actual electrode network, RLD and selected J4 state. Desired output signal power for a random signal is integral of |H_sig|² S_sig over its declared bandwidth; for a sine use |H_sig(f_sig)|×Vsig_in_rms. In-band 20–500Hz output noise is sqrt(integral_20^500 S_out(f) df), optionally including a specified digital filter |D(f)|². This is not total output noise. Also report full analog output noise integrated across a stated converged frequency range or physical measurement bandwidth, including frequencies below 20Hz and above 500Hz when relevant to saturation/sampling. With white input noise S0 and transfer H, ENBW=integral_0^infinity |H(f)|²df / |H_ref|² for a stated reference gain H_ref. Different injection points have different ENBWs; the 480Hz arithmetic band width is not the full-chain ENBW and cannot be used indiscriminately for every source. Integration limits and endpoint conventions must be recorded.
Source-by-source transfer through this actual circuit
For each primitive voltage noise source j, obtain the complex AC transfer H_j=V_ADC/v_j by a unit series-voltage injection at that source with all other independent AC excitations zeroed but the physical DC bias and impedances retained. For current noise, use a unit current injection and transimpedance Z_j=V_ADC/i_j. Then S_out,j=|H_j|²S_v,j or |Z_j|²S_i,j. A source injected after a filter does not see that upstream filter. Use the exact connected network, not one blanket gain×bandwidth approximation.
R6/R7/R8/R9 thermal sources sit in their own series legs and are shaped by C18–C20, R10/R11, electrode impedances and the INA input path before HP/gain/LP. R10/R11 have substantial impedance but their noise is shunted by the actual source network; do not simply RSS their open-circuit 10M noise at the INA. R12/R13 inject through the internal gain-resistor network and CM_SENSE/RLD loop; they are not external input series resistors. Validate that the INA model propagates this noise physically.
U3 input voltage/current noise needs spectra valid at current G1 ≈ 4.65, actual supply, common mode and temperature. Input-current noise flows through frequency-dependent impedances seen separately by VIN+ and VIN−; a shortcut i_n×200k misses the electrodes, 10M returns, RF caps, RLD and mismatch. Include any separate INA output-noise term with the correct gain dependence if the vendor model/specification separates input and output noise. Conditional device spectra and 1/f corners remain incomplete; earlier G≈11 lumped estimates and headline design-note numbers are not adopted as current board-level guarantees.
R16 thermal noise and U4B input noise enter at/near HP_NODE or GAIN_FB; they need their own transfer rather than assumed suppression by C23/R16's signal high pass. R17/R18 and R19 when J4 is closed contribute through the feedback impedances. U4B voltage-noise gain generally differs from signal transfer versus frequency. For J4 open, R19 is ideally dead-ended but its real parasitic path may matter at high frequency; label parasitics separately.
R20/R21 and U4C voltage/current noise act inside LP1. R22/R23 and U4D noise act inside LP2, and R24 thermal noise is generated after the two LP sections. Thus not every source is filtered by the full fourth-order response. Include C28, opamp output impedance and ADC loading in their transfers; ideal capacitors are noiseless, while modeled ESR is a dissipative noise source. Model dielectric loss only with sourced or labelled assumed parameters.
R14/R15 thermal sources are filtered by C22 then U4A. U4A's own noise is not filtered by C22 identically. VMID noise fans out simultaneously to U3 REF, R10/R11, R16/R18/J4 and U5 references. Keep this as a shared source with multiple coherent paths, not independent copies to RSS. U5A/B noise and R25/R26/R27/R28 thermal noise feed back through the reference electrode/body into sensing electrodes; common-mode conversion depends on mismatch. U5C/D may contribute shared-rail loading/coupling if the model supports it; independent channel models otherwise exclude that effect explicitly.
U2/input-source noise, R1 thermal noise, supply-current modulation and local ground/reference noise require actual PSRR/reference-path models. A 3V3A fluctuation simultaneously moves VMID, INA/opamp supplies and ADC VREF; ratiometric cancellation may be partial and frequency-dependent. Do not inject independent noise at every one of these derived nodes or claim perfect cancellation. R2/R3/R29/R30/R31 and other digital-side components may be excluded from an ideal analog-only noise solve only with supply/ground coupling explicitly excluded; in a coupled model their contributions enter via physical paths, not a fabricated direct signal connection.
For uncorrelated primitive sources, sum powers: S_out=Σ|H_j|²S_j. For correlated sources/cross-spectra, S_out=Σ_jΣ_k H_j H_k* S_jk, using a consistent cross-PSD definition; equivalently retain cross terms 2Re[H_j H_k* S_jk]. Most importantly, if a single noise source reaches the ADC through several paths, sum its complex path transfers before taking magnitude squared. Unknown covariance is TBD or a labelled sensitivity study; manufacturing-tolerance correlation is not the same as stochastic noise correlation. Do not blanket-RSS shared VMID/reference/supply contributions.
For opamp/INA white plus 1/f exploratory models one may parameterize S_e(f)=e_white²(1+f_corner/f) over a declared applicable range, similarly for current noise, but e_white/f_corner and correlations require evidence or explicit study assumptions. This form is not asserted to model zero-drift chopping or real low-frequency drift accurately. Check vendor .noise implementation first; disable internal sources only when a validated external equivalent replaces them, and never add external resistor/opamp noise already generated by the simulator/macromodel. Noise-free ideal active models must be clearly identified as incomplete. Offset Monte Carlo is separate from spectral noise analysis.
Mains, RLD and sampled ADC noise
Derive H_CM(f)=V_ADC/V_body_CM under a specified common-mode source impedance and compare to H_sig; effective system CMRR=20log10(|H_sig/H_CM|) only with compatible voltage definitions. Measure both 50/60Hz and frequency-dependent rejection with electrode/cable/resistor/cap mismatch. Report discrete line RMS amplitudes separately from integrated random noise, and label whether SNR excludes them or includes them as interference. RLD can suppress CM but can also inject its own noise, peak near loop crossover, saturate or become unstable; small-signal noise results are invalid around an unstable or clipped operating point. Never count the prior 30.6dB setup-specific RLD suppression as universal CMRR.
At U1, ideal quantizer step q=Vref/2^N, with the intended N=12 and Vref=actual 3V3A relative to VSSAVREF−. The familiar total RMS error q/√12 applies only when quantization error is approximately uniform over a step and sufficiently decorrelated from the signal, without overload. It is not a guaranteed ADC noise spec; a quiet DC input can give constant/stuck codes or periodic signal-correlated quantization error, and clipping creates distortion rather than white noise. Include actual ADC thermal noise, reference noise, INL/DNL, sample settling and timing only from evidence or labelled study parameters, avoiding double count when a measured total ADC noise model already includes them.
If quantization noise is demonstrably white over 0…fs/2, its one-sided PSD is q²/(6fs) and the assumed 20–500Hz RMS contribution before additional digital-filter shaping is (q/√12)√[(500−20)/(fs/2)]. Otherwise quantize the time-domain sampled waveform and measure its error spectrum. This formula is not a claim of actual oversampling gain. Oversampling/decimation improves in-band white uncorrelated noise only with sufficient signal/noise dithering, an appropriate digital filter, no clipping and an actual noise spectrum meeting those assumptions; it does not remove in-band mains, drift, distortion, correlated errors or pre-existing analog aliases. Document any added dither and its cost.
Analog sampled-noise aliasing must include frequencies above Nyquist. Using two-sided PSDs for the alias sum avoids a factor-of-two error: S_sampled,2(f)=Σ_m S_analog,2(f+m·fs)|A(f+m·fs)|² for a declared aperture transfer A; then convert back to one-sided baseband PSD and apply the actual digital filter. Integrate all non-negligible aliases into 20–500Hz, not merely the 20–500Hz continuous analog PSD. Opamp/ADC-driver noise generated after the LP stages can be a priority alias source. For switched/periodic circuits use transient-noise or periodic-noise methodology appropriate to the simulator; a time-invariant .noise run does not automatically include switched-capacitor noise folding. Bound numerical truncation of alias sums and show convergence with increasing modeled bandwidth.
SNR, SINAD, gain/headroom and executable-style procedure
SNR=20log10(Vsignal_rms/Vnoise_rms), with both quantities at the same node and bandwidth. Report separately: analog 20–500Hz SNR, sampled/filtered in-band SNR including aliases/ADC effects, and signal-to-noise-plus-interference if mains/artifacts are included. SINAD includes noise and distortion, using a stated tone/analysis convention; the common ENOB=(SINAD−1.76dB)/6.02 relation assumes the conventional full-scale sine ideal-ADC comparison, and is not a direct “usable EMG bits” metric for an arbitrary low-level broadband waveform. Narrowband SNR, nominal bit depth and ENOB are not interchangeable.
For a sine input, predict output RMS from the measured H_sig at that frequency for each J4 state (current nominal overall resistor gains 102.291970803/504.112282599, loaded gain frequency-dependent).
Higher gain can reduce input-referred ADC/downstream noise but does not improve upstream signal-to-noise equally and reduces available headroom. Require crest factor times signal RMS plus remaining bias/offset/transient excursions to stay within verified stage/ADC swings. Check U3 offset headroom before C23 independently of ADC centering; inspect U4B, both LP outputs and RLD in both gain states. Historical unclipped ranges are not guarantees. No numerical SNR is current without a declared signal spectrum and complete source assumptions.
Python
# Pseudocode: substitute actual simulator APIs; no numerical board result implied.snapshot = build_exact_78_part_connectivity_from_inventory()assert snapshot.connected_net_count ==49inputs = require_or_label_assumed( temperature_K, signal_rms_and_PSD, electrode_models_and_noise, supply_reference_PSD, device_noise_models, ADC_and_digital_filter)audit_noise_ownership()# exactly once: native resistor, vendor model, or external sourcefor gain_state in['J4_open','J4_closed']: circuit = set_physical_shunt(snapshot, gain_state)for corner_or_MC_draw in declared_parameter_cases: apply_parameters(circuit, corner_or_MC_draw) op = solve_DC_and_startup(circuit, electrodes, body_return) require_stable_loop_and_unclipped_all_stages(op) f = frequency_grid_resolving_HP_LP_RLD_and_noise_corners() Hsig = AC_transfer(circuit, differential_source_plane,'ADC_EMG', f) primitives, S_cross = define_noise_sources_and_cross_PSD(f, inputs)# Each primitive is injected once, allowing every physical shared path. H =[unit_voltage_or_current_transfer(circuit, src,'ADC_EMG', f)for src in primitives] Sout =sum(H[j]* conj(H[k])* S_cross[j,k]for j in primitives for k in primitives) require_real_nonnegative_PSD_within_numerical_error(Sout) noise_20_500 = sqrt(integrate(Sout,20,500)) noise_full = sqrt(integrate(Sout, declared_low, converged_high)) signal_out = sqrt(integrate(abs(Hsig)**2* Ssignal, signal_band)) report_per_source_powers_and_cross_terms_and_ENBWs() sampled_noise = fold_aliases_with_aperture_and_digital_filter(Sout, fs)# Add ADC error only under proven ownership/correlation assumptions. sampled_wave = transient_sample_and_quantize_with_actual_Vref( circuit, signal_plus_noise_and_separate_interference_cases) assert_no_clipping_and_check_PSD_normalization(sampled_wave) report_SNR_SINAD_and_headroom_for_defined_band_and_signal()save_all_seeds_models_assumptions_integration_limits_and_convergence_failures()
Practical bench comparison, simulator only
Use a shielded electrode simulator with documented source impedances and independently verified noise floor, not a human and not only a low-impedance input short. Record temperature, actual cable routing/capacitance, isolator/power setup, gain state, rail/VMID levels, fs/acquisition settings and raw samples. Measure first with balanced zero-differential input at realistic common mode after settling, then mismatched electrode impedances; repeat RLD on/off under controlled simulator conditions, both gains, and deliberate 50/60Hz coupling as a separate interference test. A jack short is a useful electronics-floor comparison but removes skin-impedance/current-noise effects and is not a complete source model.
Acquire sufficiently long stationary records to resolve low-frequency and mains structure; save duration, FFT window, coherent gain, PSD normalization, window ENBW, averaging/overlap and detrending. Remove only the declared DC mean/settling interval; do not notch mains or discard clipping silently. Integrate calibrated one-sided PSD over 20–500Hz and a separately stated full measurement bandwidth; compare against directly band-filtered RMS. Verify front-end/ADC/USB integrity and absence of clipping or missing samples. Inject a calibrated low-distortion sine of known RMS within headroom, fit its fundamental, and estimate residual noise and harmonics with clearly stated bins/bandwidth; report SNR and SINAD separately. Generator, probe and ADC measurement floors require independent characterization; subtract noise powers only for demonstrably independent contributions with adequate uncertainty, never subtract RMS amplitudes. No bench performance or safety result is claimed until those measurements exist.
Previously recorded results, not new simulations
Source: historical Design Notes and U4/U5 component notes. The table below is historical and superseded for current-state evidence by the dated adoption addendum and new run links at the top. These entries are not newly reproduced vendor-model results; new ideal AC execution is explicitly documented separately.
Table
Prior result
Recorded value
Model/qualification
Peak gain open / closed J4
99.6 / 493 V/V
Ideal chain, input loading included
Relative −3dB band
19.1–511.5Hz
Ideal chain
Attenuation at 4kHz / 7.5kHz relative to 100Hz
72.7 / 96.4dB
Ideal continuous transfer, not full alias budget
LP step
11.4% overshoot, ~3.1ms settle
U4 recorded ideal simulation note
+100mV differential DC offset
INA_OUT ~2.730V, settled ADC ~1.650V
Ideal fixed-rail study
15mVpk low gain / 3mVpk high gain on +100mV offset
C30 was previously raised from 4.7nF to the actual 10nF; old 4.7nF cases reported 53° nominal PM / 41° at 500pF and are historical comparisons, not current circuit results. No tolerance Monte Carlo, vendor-model chain/RLD verification, ESD simulation, measured hardware performance or safety qualification is recorded. Prior ~145mV combined input-offset-plus-signal headroom and alias “12-bit margin” wording must not be generalized across real supply/headroom/noise conditions.
Remaining inputs and factual blockers
Tolerance/model completeness: 22 R/C tolerance properties missing (list above); remaining generic tolerance/dielectric targets need MPN-backed qualification. R4/R5 absolute resistance, selected capacitor effective-C/ESR/aging data, resistor TCR, INA/opamp noise/offset/GBW/rail corners and their distribution/correlation remain incomplete. This blocks guaranteed statistical yield and production bounds, not a labelled nominal topology simulation.
Vendor models: candidate TI model archives identified but not fetched/hashed/inspected; RG midpoint fidelity and parameter/noise coverage unverified. This blocks calling a future run vendor-model validated until checked. Package-property gaps on U4/U5/J1 and crystal CL discrepancy require confirmation before physical release; BOM descriptions are not footprint audits.
Exact external USB isolator: make/model, power and data isolation ratings/classification, barrier capacitance/leakage, output voltage/current capacity, inrush/foldback, FS throughput, shield continuity, creepage/clearance and alternate grounds unknown. A provisional 60mA budget is not isolator qualification. Human connection is blocked.
Cable: SparkFun CAB-12970 is only the prior candidate (three surface snaps/TRS). Exact purchased model/contact-to-color map and impedance/capacitance/shield model remain unconfirmed. Continuity-map each cable tip=EMG+, ring=EMG−, sleeve=REF; no audio mating or needle-electrode compatibility. Insert/remove only with pads detached from a person. Its product links in prior records are supplemental, not a verified electrical cable model.
Performance requirements: confirmed passband target is 20–500Hz; input signal amplitude, differential/common-mode offset envelope, input impedance, noise/SNR, gain accuracy, rejection, overload recovery and alias-error targets are unconfirmed. Gain ~100/500 and 8kS/s remain provisional defaults. Numeric unsupplied ranges in this guide are TBD or explicitly study assumptions, never facts.
Before layout: board dimensions/shape, mounting, connector edge positions/access, enclosure/height/keepouts, environmental/temperature and isolation-distance requirements are unresolved. Firmware build, actual ADC timing, clock load/startup, PCB parasitics, procurement, assembly, bench validation and manufacturing release are separate work.
Reproduction checklist and report contract
Build from every endpoint above; verify 78 unique component identities and 49 circuit nets before testbench-only aliases/nodes are added. Check U3 polarity and REF, all eight quad units, LP feedback capacitors, RLD sign, VMID returns, both J4 states and J1 pin4 NC. Perform operating point before AC/transient/noise; preserve floating-body bias paths and avoid artificial testbench grounding. Record any omitted component explicitly with its identity and reason; an analog subset is not a full-board model. Save nominal/corner/Monte Carlo assumptions and model provenance, report saturation and convergence failures, and compare against the prior simplified results only under matching conditions. No new component selection or topology change is authorized by this guide.