diff options
| -rw-r--r-- | module-design.typ | 365 |
1 files changed, 282 insertions, 83 deletions
diff --git a/module-design.typ b/module-design.typ index bcef89d..2e21425 100644 --- a/module-design.typ +++ b/module-design.typ @@ -107,10 +107,7 @@ operators. table( columns: 4, table.header([Symbol], [Definition], [Value], [Unit]), - [$k_B$], - [Boltzmann constant], - [$num("1.381e-23")$], - [$unit("joule per kelvin", per: "/")$], + [$k_B$], [Boltzmann constant], [$num("1.381e-23")$], [$unit("joule per kelvin", per: "/")$], [$T$], [Absolute temperature], [N/A], [$unit(K)$], [$e$], [Elementary charge], [$num("1.603e-19")$], [$unit(C)$], @@ -131,13 +128,9 @@ operators. [$L$], [Inductance], [$unit(H)$], [$P$], [Power], [$unit(W)$], [$f$], [Frequency], [$unit("Hz")$], - [$omega$], - [Angular frequency ($omega = 2 pi f$)], - [$unit("radian per second", per: "/")$], + [$omega$], [Angular frequency ($omega = 2 pi f$)], [$unit("radian per second", per: "/")$], - [$tau$], - [Time constant ($tau = upright("RC") "or" upright("L/R")$)], - [$unit(s)$], + [$tau$], [Time constant ($tau = upright("RC") "or" upright("L/R")$)], [$unit(s)$], [$upright("BW")$], [Bandwidth], [$unit("Hz")$], ), @@ -190,17 +183,11 @@ operators. [$upright("SR")$], [Slew rate], [$unit("volt per micro second", per: "/")$], [$upright("CMRR")$], [Common-mode rejection ration], [$unit("dB")$], [$upright("PSRR")$], [Power supply rejection ratio], [$unit("dB")$], - [$upright("TC")$], - [Temperature coefficient], - [$unit("ppm per celsius", per: "/")$], + [$upright("TC")$], [Temperature coefficient], [$unit("ppm per celsius", per: "/")$], - [$V_"CR"$], - [Voltage coefficient of resistance], - [$unit("ppm per volt", per: "/")$], + [$V_"CR"$], [Voltage coefficient of resistance], [$unit("ppm per volt", per: "/")$], - [$V_"CC"$], - [Voltage coefficient of capacitance], - [$unit("ppm per volt", per: "/")$], + [$V_"CC"$], [Voltage coefficient of capacitance], [$unit("ppm per volt", per: "/")$], [$upright("DA")$], [Dielectric absorption], [$unit("percent")$], [$S$], [Seebeck coefficient], [$unit("micro volt per celsius", per: "/")$], @@ -216,13 +203,9 @@ operators. columns: 3, table.header([Symbol], [Definition], [Typical unit]), [$epsilon$], [Error (general)], [$unit("ppm")$ or $unit("uV")$], - [$epsilon_"max"$], - [Maximum allowable error], - [$unit("ppm")$ or $unit("uV")$], + [$epsilon_"max"$], [Maximum allowable error], [$unit("ppm")$ or $unit("uV")$], - [$epsilon_"total"$], - [Total combined error], - [$unit("ppm")$ or $unit("uV")$], + [$epsilon_"total"$], [Total combined error], [$unit("ppm")$ or $unit("uV")$], [$epsilon_"systematic"$], [Systematic error component], [$unit("ppm")$], [$epsilon_"random"$], [Random error component], [$unit("uVrms")$], @@ -247,21 +230,15 @@ operators. table( columns: 3, table.header([Symbol], [Definition], [Typical unit]), - [$e_n$], - [Voltage noise spectral density], - [$unit("nano volt per shertz", per: "/")$], + [$e_n$], [Voltage noise spectral density], [$unit("nano volt per shertz", per: "/")$], [$upright(i)_n$], [Current noise spectral density], [$unit("pico ampere per shertz", per: "/")$ or $unit("femto ampere per shertz", per: "/")$], - [$e_(n,"white")$], - [White noise component], - [$unit("nano volt per shertz", per: "/")$], + [$e_(n,"white")$], [White noise component], [$unit("nano volt per shertz", per: "/")$], - [$e_(n,1/f)$], - [$1/f$ noise component], - [$unit("nano volt per shertz", per: "/")$ at $qty(1, "Hz")$], + [$e_(n,1/f)$], [$1/f$ noise component], [$unit("nano volt per shertz", per: "/")$ at $qty(1, "Hz")$], [$f_c$], [Noise corner frequency ($1/f$ to white)], [$unit("Hz")$], @@ -282,9 +259,7 @@ operators. [$f_"carrier"$], [Carrier frequency], [$unit("Hz")$], [$f_0$], [Resonant or center frequency], [$unit("Hz")$], [$phi$], [Phase], [$unit("radian")$ or $unit("degree")$], - [$Delta phi$], - [Phase error or shift], - [$unit("radian")$ or $unit("degree")$], + [$Delta phi$], [Phase error or shift], [$unit("radian")$ or $unit("degree")$], [$t_"settle"$], [Settling time], [$unit("s")$], [$t_h$], [Timing jitter], [$unit("ps")$ or $unit("ns")$], @@ -299,26 +274,16 @@ operators. columns: 3, table.header([Symbol], [Definition], [Typical unit]), [$T$], [Temperature (absolute)], [$unit("K")$], - [$delta upright(T)$], - [Temperature difference], - [$unit("celsius")$ or $unit("K")$], + [$delta upright(T)$], [Temperature difference], [$unit("celsius")$ or $unit("K")$], - [$(Delta T)/(upright(d) y)$], - [Vertical temperature gradient], - [$unit("celsius per centi meter", per: "/")$], + [$(Delta T)/(upright(d) y)$], [Vertical temperature gradient], [$unit("celsius per centi meter", per: "/")$], - [$theta_"conv"$], - [Convective thermal resistance], - [$unit("celsius per watt", per: "/")$], + [$theta_"conv"$], [Convective thermal resistance], [$unit("celsius per watt", per: "/")$], - [$theta_"cond"$], - [Conductive thermal resistance], - [$unit("celsius per watt", per: "/")$], + [$theta_"cond"$], [Conductive thermal resistance], [$unit("celsius per watt", per: "/")$], [$accent(Q, dot)$], [Heat flux], [$unit("W")$], - [$accent(m, dot)$], - [Mass flow rate], - [$unit("kilo gram per second", per: "/")$], + [$accent(m, dot)$], [Mass flow rate], [$unit("kilo gram per second", per: "/")$], [$c_p$], [Specific heat capacity], [$unit("J")/(unit("kg") dot unit("K"))$], ), @@ -778,7 +743,7 @@ thermal variation over the module's service life. Interface modules necessarily deviate from the standard SAME I/O format on their external-facing side. The external connector type is determined by the format being interfaced (BNC, XLR, DB-25, optical, etc.). However, the SAME-facing side -of an interface module must use standard 4mm banana jacks conforming to +of an interface module must use standard $qty(4, "mm")$ banana jacks conforming to @signal-standards. Interface modules must provide clear panel markings indicating which jacks @@ -796,7 +761,7 @@ specifications that enable meaningful analog computation. ==== Interface requirements <compute-modules-interface-requirements> -Compute modules must use exclusively 4mm banana jacks for all signal input and +Compute modules must use exclusively $qty(4, "mm")$ banana jacks for all signal input and output. No physical controls (potentiometers, switches, or other manual adjustment mechanisms) are permitted on compute modules. @@ -1105,13 +1070,9 @@ errors. Both must be met, but they are separate budgets: table( columns: 3, table.header([Budget], [Allocation], [Expressed as]), - [Systematic error budget], - [$qty(200, "uV")$ ($qty(10, "ppm")$)], - [Offset, drift, gain error, nonlinearity], + [Systematic error budget], [$qty(200, "uV")$ ($qty(10, "ppm")$)], [Offset, drift, gain error, nonlinearity], - [Random error budget], - [$qty(632.455, "uVrms")$ ($qty(90, "dB")$)], - [Thermal noise, $1/f$ noise, interference], + [Random error budget], [$qty(632.455, "uVrms")$ ($qty(90, "dB")$)], [Thermal noise, $1/f$ noise, interference], ), caption: [Error budgets allocation], ) <table-snr-and-noise-floor-resolution> @@ -1329,15 +1290,9 @@ servo loop. table( columns: 4, table.header([Op-amp class], [$e_(n,"white")$], [$f_c$], [Notes]), - [General purpose (TL07x)], - [$18 unit("nano volt per shertz", per: "/")$], - [$qty(200, "Hz")$], - [JFET input], - - [Low noise (OPA211)], - [$1.1 unit("nano volt per shertz", per: "/")$], - [$qty(10, "Hz")$], - [Bipolar input], + [General purpose (TL07x)], [$18 unit("nano volt per shertz", per: "/")$], [$qty(200, "Hz")$], [JFET input], + + [Low noise (OPA211)], [$1.1 unit("nano volt per shertz", per: "/")$], [$qty(10, "Hz")$], [Bipolar input], [Precision low noise (LT1028)], [$0.85 unit("nano volt per shertz", per: "/")$], @@ -1407,17 +1362,11 @@ $ V_(n,i,"rms") = i_n times Z_"source" times sqrt(upright("BW")) $ table( columns: 3, table.header([Op-amp class], [$i_n$], [Notes]), - [Bipolar (LT1028)], - [$1 unit("pico ampere per shertz", per: "/")$], - [Low voltage noise, moderate current noise], + [Bipolar (LT1028)], [$1 unit("pico ampere per shertz", per: "/")$], [Low voltage noise, moderate current noise], - [JFET (OPA627)], - [$2.5 unit("femto ampere per shertz", per: "/")$], - [Negligible], + [JFET (OPA627)], [$2.5 unit("femto ampere per shertz", per: "/")$], [Negligible], - [CMOS (LMC6001)], - [$0.13 unit("femto ampere per shertz", per: "/")$], - [Negligible], + [CMOS (LMC6001)], [$0.13 unit("femto ampere per shertz", per: "/")$], [Negligible], ), caption: [Op-amp current noise typical magnitudes], ) <table-opamp-current-noise-typical-magnitude> @@ -1485,9 +1434,7 @@ $ #figure( table( columns: 3, - table.header( - [Op-amp], [$upright("PSRR")$ (DC)], [$upright("PSRR")$ ($qty(10, "kHz")$)] - ), + table.header([Op-amp], [$upright("PSRR")$ (DC)], [$upright("PSRR")$ ($qty(10, "kHz")$)]), [TL072], [$qty(100, "dB")$], [$qty(80, "dB")$], [OPA211], [$qty(130, "dB")$], [$qty(90, "dB")$], [LT1028], [$qty(120, "dB")$], [$qty(90, "dB")$], @@ -1535,7 +1482,7 @@ $ <radiated-and-conducted-rf-interference-physical-mechanism> External electromagnetic fields induce high-frequency RF currents in unshielded -conductors (such as 4mm banana patch cables), which act as receiving antennas. +conductors (such as $qty(4, "mm")$ banana patch cables), which act as receiving antennas. When high-frequency RF energy reaches an op-amp's input terminals, non-linear semiconductor junctions (ESD diodes and input transistor B-E junctions) rectify the carrier wave. This process, known as RFI demodulation, generates an @@ -1588,7 +1535,7 @@ budget. ====== Where it enters <radiated-and-conducted-rf-interference-where-it-enters> -- Unshielded front-panel 4mm banana patch cables, +- Unshielded front-panel $qty(4, "mm")$ banana patch cables, - Unshielded PCB traces acting as slot antennas, - Power distribution wiring and DB-25 backplane harness, - High-impedance op-amp input nodes lacking local bypass capacitors. @@ -1695,6 +1642,258 @@ includes DC components. Mitigation relies on structural topology: inputs or galvanic isolation on all external-facing interface modules per @module-category-interface-modules. +===== Capacitor dielectric absorption noise +<capacitor-dielectric-absorption-noise> + +====== Physical mechanism +<capacitor-dielectric-absorption-noise-physical-mechanism> + +Dielectric absorption ($upright("DA")$, or capacitor "soakage") arises from +residual dipole polarization within the capacitor's dielectric material. When a +capacitor is rapidly charged and discharged, bound dipoles relax slowly, causing +charge to bleed back onto the plates over time. In analog integrators and +sample-and-hold circuits, this manifests as a dynamic memory effect that +corrupts initial conditions and signal history. + +====== Mathematical model +<capacitor-dielectric-absorption-noise-mathematical-model> + +$upright("DA")$ is modeled as a voltage source in series with the ideal +capacitance, decaying as a sum of exponential time constants: + +$ + V_(upright("DA")) = V_("peak") dot upright("DA")% dot sum_i A_i e^(-t/(tau_i)) +$ + +Where $upright("DA")%$ is the dielectric absorption coefficient and $tau_i$ +represents the dielectric material relaxation time constants. + +===== Typical magnitude <capacitor-dielectric-absorption-noise-typical-magnitude> + +#figure( + table( + columns: 2, + table.header([Dielectric class], [DA coefficient]), + [Ceramic (X7R / Class 2)], [$qty(2.5, "percent")$], + [Polyester (Mylar)], [$qty(0.2, "percent")$], + [Polypropylene (PP)], [$qty(0.05, "percent")$], + [Polystyrene (PS)], [$qty(0.02, "percent")$], + [Teflon (PTFE)], [$qty(0.01, "percent")$], + [Class 1 ceramic (C0G / NP0)], [$lt qty(0.01, "percent")$], + ), + caption: [Capacitor dielectric absorption coefficients], +) <table-capacitor-dielectric-absorption-noise-typical-magnitude> + +For a standard polypropylene capacitor ($qty(0.05, "percent") upright("DA")$) +step-charged charged at $qty(10, "V")$: + +$ + V_(upright("DA")) = qty(10, "V") times 0.0005 = qty(5, "mV") (qty(250, "ppm")) +$ + +This single residual term exceeds our $qty(200, "uV")$ systematic error budget +y a factor of $25$. + +====== Where it enters <capacitor-dielectric-absorption-noise-where-it-enters> + +- Feedback integration capacitors in time-domain and continuous compute cores, +- Hold capacitors in track-and-hold / sample-and-hold circuits, +- AC coupling capacitors in dynamic processing stages, +- Active filter feedback networks. + +====== Scaling law <capacitor-dielectric-absorption-noise-scaling-law> + +Dielectric absorption error scales linearly with peak applied step voltage +$V_("peak")$ and the dielectric material coefficient $upright("DA")$. It decays +logarithmically over time, making rapid reset/re-integration cycles particularly +vulnerable. + +====== Compensation strategy +<capacitor-dielectric-absorption-noise-compensation-strategy> + +Dielectric absorption cannot be cancelled electronically after charge has soaked +into the dielectric. Mitigation relies strictly on component selection and +circuit topology: +- Mandating Class 1 C0G/NP0 ceramic or PTFE/polysyrene capacitors for all + integrator feedback and sample-hold storage paths, +- Prohibiting Class 2 ceramic (X7R, X5R, Y5V) capacitors anywhere in the + precision analog signal path, +- Implementing active reset topologies that maintain zero voltage across + integrator capacitors during hold phases to allow dipole discharge. + +===== Triboelectric and piezoelectric effects +<triboelectric-and-piezoelectric-effects> + +====== Physical mechanism +<triboelectric-and-piezoelectric-effects-physical-mechanism> + +Mechanical stress on cables and components generates unwanted voltage transients +through two primary physical mechanisms: +/ Triboelectric effect: Friction and physical separation between a conductor and + its insulating dielectric strips electrons, generating parasitic charge + accumulation during cable flexing or vibration. +/ Piezoelectric effect (microphonics): Mechanical strain applied to + non-symmetrical crystalline dielectrics (particularly Class 2/3 ceramic + capacitors) generates proportional electrical charge across terminal plates. + +====== Mathematical model +<triboelectric-and-piezoelectric-effects-mathematical-model> + +Triboelectric induced noise voltage in a flexible cable is modeled as: + +$ V_("tribo") = k_("tribo") dv(L, t) $ + +Where $k_("tribo")$ is the cable's triboelectric coupling constant in +$unit("mV") / unit("meter per second", per: "/")$ and $dv(L, t)$ is the rate of mechanical +deformation. + +Piezoelectric microphonic voltage generated across a capacitor of capacitance +$C$ subjected to vibrational force $F_("vib")$ is: + +$ V_("piezo") = (d_33 dot F_("vib")) / C $ + +Where $d_33$ is the longitudinal piezoelectric charge coefficient of the +dielectric material. + +====== Typical magnitude +<triboelectric-and-piezoelectric-effects-typical-magnitude> + +For a standard PVC-insulated patch cable, +$k_("tribo") approx qty(50, "milli volt per meter per second", per: "/")$ +experiencing mild flexing ($dv(L, t) = qty(1, "milli meter per second", per: "/")$): + +$ + V_("tribo") = num("50e-3") times num ("1e-3") = qty(50, "uV") (qty(2.5, "ppm")) +$ + +Using a low-noise graphite-coated cable +($k_("tribo") approx qty(1, "milli volt per meter per second", per: "/")$): + +$ + V_("tribo") = num("1e-3") times num("1e-3") = qty(1, "uV") (qty(0.05, "ppm")) +$ + +For an X7R ceramic capacitor +($d_33 approx qty(200, "pico coulomb per newton", per: "/")$) subjected to a +$qty(1, "g")$ ($qty(0.1, "N")$) acoustic/mechanical vibration spike on a +$qty(100, "nF")$ node: + +$ + V_("piezo") = (num("200e-12") times 0.1) / num("100e-9") = qty(200, "uV") (qty(10, "ppm")) +$ + +====== Where it enters +<triboelectric-and-piezoelectric-effects-where-it-enters> + +- Front-panel $qty(4, "mm")$ banana patch cables during physical patching or + operator contact, +- Class 2/3 ceramic decoupling and coupling capacitors mounted on module PCBs, +- High-impedance amplifier nodes where tiny triboelectric charge injections $Q$ + creates large voltage offsets ($V = Q / C$). + +====== Scaling law <triboelectric-and-piezoelectric-effects-scaling-law> + +Triboelectric noise scales linearly with cable flexing velocity $dv(L, t)$ and +inversely with node capacitance. Piezoelectric microphonic voltage scales +linearly with mechanical vibration acceleration $a$ and piezoelectric +coefficient $d_33$, and inversely with total node capacitance $C$. + +====== Compensation strategy +<triboelectric-and-piezoelectric-effects-compensation-strategy> + +Triboelectric and piezoelectric noise transients are mechanical in origin and +cannot be filtered by active DC feedback loop. Mitigation requires physical +prevention: +- Mandating low-noise silicone or graphite-shielded banana patch cables per + @banana-format, +- Strictly prohibiting Class 2/3 ceramic capacitors (X7R, X5R, Y5V) in precision + signal paths, restricting selection to non-piezoelectric C0G/NP0 ceramics or + film dielectrics, +- Enforcing structural rigidity of steel cassette enclosures and PCB mounting + standoffs to damp mechanical vibration per @cassette and + @mechanical-environment. + +===== PCB leakage currents <pcb-leakage-currents> + +====== Physical mechanism <pcb-leakage-currents-physical-mechanism> + +Surface contamination (no-clean flux residue, ionic salts, airbone dust and +condensed moisture) creates parasitic resistive conduction paths across FR-4 +dielectric substrate surfaces. At high-impedance signal nodes, these parasitic +paths bleed microamperes to picoamperes of stray current from adjacent power or +signal traces into the signal path. + +====== Mathematical model <pcb-leakage-currents-mathematical-model> + +Surface leakage current $I_("leak")$ flowing from a neighboring trace at +potential $V_("trace")$ across surface insulation resistance $R_("leak")$ is: + +$ I_("leak") = V_("trace") / R_("leak") $ + +This stray current flows into the high-impedance node's equivalent source +impedance $Z_("source")$, developing a systematic error voltage: + +$ + V_("error") = I_("leak") times Z_("source") = V_("trace") dot Z_("source")/R_("leak") +$ + +====== Typical magnitude <pcb-leakage-currents-typical-magnitude> + +For a clean, dry FR-4 PCB at $qty(50, "percent") upright("RH")$, surface +resistance between adjacent traces is typically +$R_("leak") approx qty("1e12", "ohm")$. Under high ambient humidity +($qty(70, "percent") upright("RH")$) or with uncleaned flux residue, surface +resistance drops sharply to $R_("leak") approx qty("1e9", "ohm")$. + +For a $V_("trace") = qty(10, "V")$ potential adjacent to a +$Z_("source") = qty(1, "mega ohm")$ input node (white banana jack boundary): + +- On a clean PCB ($R_("leak") = qty("1e12", "ohm")$): +$ + I_("leak") & = qty(10, "V") / qty("1e12", "ohm") = qty(10, "pA") \ + V_("error") & = qty(10, "pA") times qty(1, "mega ohm") = qty(10, "uV") (qty(0.5, "ppm")) +$ +- On a contaminated PCB ($R_("leak") = qty("1e9", "ohm")$): +$ + I_("leak") & = qty(10, "V") / qty("1e9", "ohm") = qty(10, "nA") \ + V_("error") & = qty(10, "nA") times qty(1, "mega ohm") = qty(10, "mV") (qty(500, "ppm")) +$ + +Contamination increases systematic DC error by $500 times$, exceeding the total +$qty(200, "uV")$ Metrologic tier budget by a factor of $50$. + +====== Where it enters <pcb-leakage-currents-where-it-enters> + +- High-impedance front-panel input buffer nodes + ($Z_"in" gt.eq qty(1, "mega ohm")$), +- Integrator summing junctions and hold-capacitor nodes, +- Feedback resistor networks with high resistance values + ($gt.eq qty(100, "kilo ohm")$), +- Unshielded op-amp non-inverting input traces routed adjacent to power supply + rails ($plus.minus qty(15.00, "V")$). + +====== Scaling law <pcb-leakage-currents-scaling-law> + +Leakage error voltage scales linearly with source impedance $Z_"source"$ and +adjacent voltage differential $V_"trace"$, and inversely with surface +insulation resistance $R_"leak"$. $R_"leak"$ decreases exponentially with +relative humidity above $qty(60, "percent") upright("RH")$. + +====== Compensation strategy <pcb-leakage-currents-compensation-strategy> + +PCB surface leakage cannot be compensated by active servo or offset trimming +because $R_"leak"$ varies dynamically with humidity and ambient contamination. +Mitigation requires strict physical layout controls: +- Implementing driven guard rings surrounding high-impedance nodes; driving the + guard trace with a unity-gain buffer to potential $V_"guard" approx V_"node"$ + reduces voltage differential $Delta V arrow 0$, forcing $I_"leak" arrow 0$, +- Mandating ultrasonic solvent cleaning and ionic contamination testing + post-assembly, +- Applying acrylic or silicone conformal coating (per IPC-CC-830) over sensitive + analog sections to seal dielectrics against ambient humidity, +- Enforcing minimum trace clearance constraints between low-level signal traces + and high-voltage/power rails. + == Error compensation strategies <error-compensation-strategies> == Advanced compensation topologies <advanced-compensation-topologies> |
