diff options
| -rw-r--r-- | CONTRIBUTING.md | 8 | ||||
| -rw-r--r-- | LICENSE.md | 2 | ||||
| -rw-r--r-- | LLM-POLICY.md (renamed from LLM_POLICY.md) | 0 | ||||
| -rw-r--r-- | README.md | 33 | ||||
| -rw-r--r-- | charts/ratio-stability-principle.typ | 78 | ||||
| -rw-r--r-- | module-design.typ | 121 | ||||
| -rw-r--r-- | tables/resistor-tempco-typical-magnitude.typ | 37 |
7 files changed, 250 insertions, 29 deletions
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 331d51e..641bd1b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,7 +44,7 @@ $ V_("noise","excess") & approx qty(5, "V") times 10^(-15/20) times sqrt(20000) dot 10^-6 \ V_("noise","excess") & approx qty(5, "V") times 0.1778 times num("141.4e-6") approx qty(125.74, "uV") $ -`````` +``` If you modify a foundational parameter (e.g. system bandwidth or reference voltages), Typst must re-evaluate all downstream derivations. **If any assertion @@ -66,7 +66,7 @@ fails, the PDF build will halt.** cd same ``` -2. **Enable git hooks:** To automatically inject required SPDX license headers +1. **Enable git hooks:** To automatically inject required SPDX license headers on newly created `.typ` files: ```bash @@ -74,7 +74,7 @@ fails, the PDF build will halt.** git config core.hooksPath .githooks ``` -3. **Run a live watch build:** +1. **Run a live watch build:** ```bash typst watch preamble.typ specification.pdf @@ -82,7 +82,7 @@ fails, the PDF build will halt.** *If your edits break an assertion metrology check anywhere in the 90+ pages, Typst will throw an immediate compiler error in your terminal.* -4. **Perform a clean release compile:** +2. **Perform a clean release compile:** ```bash typst compile preamble.typ specification.pdf @@ -66,7 +66,7 @@ licenses (`CC-BY-SA-4.0`, `CERN-OHL-S-2.0+`, `GPL-3.0-or-later`). strong copyleft, attribution, and source-sharing requirements of the respective licenses. * **Contributor AI Policy:** For rules regarding human contributor usage of AI - tools during submission, refer to [`LLM_POLICY.md`](LLM_POLICY.md). + tools during submission, refer to [`LLM-POLICY.md`](LLM-POLICY.md). ## Summary of SPDX Identifiers diff --git a/LLM_POLICY.md b/LLM-POLICY.md index ecee3bc..ecee3bc 100644 --- a/LLM_POLICY.md +++ b/LLM-POLICY.md @@ -36,31 +36,24 @@ rigorous topological error compensation. ## Repository Structure -```text -. -├── charts/ # Vector charts built with CeTZ-plot -├── diagrams/ # Vector technical drawings & CAD layouts (CeTZ / Zap) -├── lib/ # Executable Typst helper functions & test harness -│ ├── apply-prefix.typ # SI prefix mathematical helper -│ ├── assert-aeq.typ # Float tolerance assertion library -│ └── unify.typ # Curried unit formatting wrappers -├── listings/ # Code examples and calibration log templates -├── tables/ # Modular specification data tables -├── electrical-specifications.typ -├── mechanical-specifications.typ -├── module-design.typ # Theoretical error budgeting & compensation -├── introduction.typ -├── preamble.typ # Document entry point & main layout -└── LICENSE.md # Comprehensive tri-license legal breakdown -└── LICENSES # Actual licences text -``` +* [`README.md`](README.md): This file +* [`CONTRIBUTING.md`](CONTRIBUTING.md): Contribution guidelines +* [`CODE-OF-CONDUCT.md`](CODE-OF-CONDUCT.md): Contributors code of conduct +* [`LLM-POLICY.md`](LLM-POLICY.md): LLM usage policy on the repo +* [`LICENSE.md`](LICENSE.md): Comprehensive tri-license legal breakdown +* `LICENSES/`: Actual licenses text +* `*.typ`: Core text of the specification, one file per level 1 heading +* `charts/`: Vector charts built with CeTZ-plot +* `diagrams/`: Vector technical drawings & CAS layouts (CeTZ) +* `tables/`: Modular specification data tables +* `lib/`: Executable Typst helper functions & test harness ## Compiling the Specification ### Prerequisites -- [Typst CLI](https://github.com/typst/typst) (v0.15.1 or newer) -- Fonts: standard system serif ans sans-serif fonts +* [Typst CLI](https://github.com/typst/typst) (v0.15.1 or newer) +* Fonts: standard system serif ans sans-serif fonts ### Building the PDF diff --git a/charts/ratio-stability-principle.typ b/charts/ratio-stability-principle.typ new file mode 100644 index 0000000..28e334c --- /dev/null +++ b/charts/ratio-stability-principle.typ @@ -0,0 +1,78 @@ +// SAME Analog Modular Ecosystem +// +// / SPDX-FileCopyrightText: 2026 Denis Chevalier <perso@denischevalier.fr> +// / SPDX-License-Identifier: CC-BY-SA-4.0 +// / SPDX-License-Identifier: CERN-OHL-S-2.0+ +// / SPDX-License-Identifier: GPL-3.0-or-later +// +// The prose, explanatory text, rendered figures, tables, and mathematical +// content of this specification are licensed under CC BY-SA 4.0. If a later +// version of CC BY-SA is published, the author grants permission to distribute +// this work under that later version as well. +// +// Hardware designs contained herein (schematics, PCB layouts, mechanical +// drawings, and CAD models) are licensed under CERN-OHL-S-2.0+. +// +// All executable code, helper libraries (`lib/*`), metrology assertions, and +// embedded verification scripts throughout the source documents are licensed +// under the GNU General Public License v3.0 or later (GPL-3.0-or-later). + +#import "../lib/unify.typ": qty, unit +#import "@preview/cetz:0.5.2" +#import "@preview/cetz-plot:0.1.4": plot + +#figure( + cetz.canvas({ + import cetz.draw: * + + plot.plot( + size: (12, 6), + x-label: [Temperature variation $Delta T$ ($unit("celsius")$)], + y-label: [Ratio / gain drift $Delta G / G_0$ ($unit("ppm")$)], + x-min: 0, + x-max: 10, + y-min: 0, + y-max: 100, + x-grid: "minor", + y-grid: "minor", + { + // 10 ppm Metrologic Error Budget Limit + plot.add( + ((0, 10), (10, 10)), + style: ( + stroke: (paint: luma(120), thickness: 0.8pt, dash: "dash-dotted"), + ), + label: [Metrologic budget limit], + ) + + // Unmatched Discrete Resistors (Delta alpha = 50 ppm/°C) + plot.add( + domain: (0, 10), + samples: 1000, + style: (stroke: (paint: black, thickness: 1.5pt, dash: "solid")), + label: [Unmatched discrete], + t => 50 * t, + ) + + // Matched Discrete Pair (Delta alpha = 1 ppm/°C) + plot.add( + domain: (0, 10), + samples: 1000, + style: (stroke: (paint: black, thickness: 1.5pt, dash: "dashed")), + label: [Matched discrete pair], + t => 1 * t, + ) + + // Monolithic Thin-Film Network (Delta alpha = 0.1 ppm/°C) + plot.add( + domain: (0, 10), + samples: 1000, + style: (stroke: (paint: black, thickness: 1.5pt, dash: "dotted")), + label: [Monolithic thin-film], + t => 0.1 * t, + ) + }, + ) + }), + caption: [Gain drift $Delta G / G_0$ as a function of ambient temperature variation $Delta T$, comparing unmatched discrete resistors, matched discrete pairs, and monolithic thin-film networks against the $qty(10, "ppm")$ Metrologic systematic error budget], +) <figure-resistor-ratio-tracking-drift> diff --git a/module-design.typ b/module-design.typ index 5fcb363..c295094 100644 --- a/module-design.typ +++ b/module-design.typ @@ -2068,10 +2068,123 @@ dynamic and independent. Mitigation requires strict structural and layout rule: ==== Drift sources <drift-sources> -Drift sources contribute to the systematic error budget over time. Unlike noise, -drift is deterministic: it has identifiable physical causes and can be -compensated through appropriate topologies. Drift determines the useful -computation duration before recalibration is required. +Drift sources contribute to the systematic error budget over time +($dv(epsilon, t)$). Unlike random noise, drift is deterministic: it has +identifiable physical causes and can be compensated through appropriate +topologies. Drift determines the useful maximum duration of continuous +computation before recalibration or zero-nulling is required. + +===== Resistor temperature coefficient <resistor-temperature-coefficient> + +====== Physical mechanism <resistor-tempco-physical-mechanism> + +The resistance of a conductor changes with temperature due to two competing +atomic effects: + +/ Lattice scattering: In pure metals and alloys, increased thermal vibration of + the crystal lattice impedes electron-phonon collisions, impeding charge flow + and raising resistance with temperature (positive temperature coefficient, + PTC), +/ Carrier concentration: In semiconductors and certain metal oxides, thermal + energy liberates additional charge carriers into the conduction band, + decreasing resistance with temperature (negative temperature coefficient, + NTC). + +Precision resistors utilize carefully controlled foil or thin-film alloys +(typically nickel-chromium / NiCr) where these effects partially cancel, +yielding exceptionally low net temperature coefficients. + +====== Mathematical model <resistor-tempco-mathematical-model> + +The resistance $R(T)$ as a function o temperature $T$ is modeled via a Taylor +expansion around reference temperature $T_0$ (typically $qty(25, "dC")$): + +$ R(T) = R_0 dot [1 + alpha_1 (T - T_0) + alpha_2 (T - T_0)^2 + ...] $ + +Where: +- $R_0$ is the nominal resistance at reference temperature $T_0$, +- $alpha_n$ is the $n$th-order temperature coefficient ($(unit("ppm per celsius"))^n$). + +Over normal operating temperature ranges, the linear term dominates: + +$ (Delta R) / R_0 approx alpha_1 dot Delta T $ + +====== Typical magnitude <resistor-tempco-typical-magnitude> + +#include "tables/resistor-tempco-typical-magnitude.typ" + +For SAME environmental specification ($plus.minus qty(2, "celsius per hour")$ +variation), an uncompensated discrete $qty(25, "ppm per celsius")$ resistor +contributes: + +#let delta_r_r0 = 25 * 2 +#assert.eq(delta_r_r0, 50) +$ (Delta R)/R_0 = 25 times 2 = qty(50, "ppm per hour") $ + +This single drift component alone exceeds the Metrologic drift budget +($qty(0.014, "ppm per hour")$) by a factor of $approx 3570$. + +====== Where it enters <resistor-tempco-where-it-enters> + +/ Gain-setting resistor ratios: A operational amplifier stages, closed-loop gain + is $G = (-R_f)/R_"in"$. Drift in either resistor directly alters stage gain + unless ratios are matched and coupled, +/ Absolute voltage references: A resistor divider scaling the + $plus.minus qty(10.0000, "V")$ reference experience output drift proportional + to the tempco of the individual resistors, +/ Integrator time constants: The integration rate $1 / tau = 1 /(R C)$ depends on + absolute resistance; resistor drift directly alters state trajectory + integration speed. + +====== The ratio stability principle <resistor-tempco-ratio-stability-principle> + +/ Critical insight: In many analog computing topologies, mathematical operations + predominantly depend on resistor _ratios_ ($R_A / R_B$) rather than absolute + resistance values. + +for two resistors with tempcos $alpha_A$ and $alpha_B$: + +$ + (R_A (T)) / (R_B (T)) = (R_(A 0) (1 + alpha_A Delta T)) / (R_(B 0) (1 + alpha_B Delta T)) approx (R_(A 0))/(R_(B 0) [ 1 + (alpha_A - alpha_B) Delta T]) +$ + +The net ratio tempco is the tracking mistmatch $Delta alpha = alpha_A - alpha_B$. +When matched resistors from the same batch are placed in close thermal +proximity on the PCB, their tracking mismatch drops would be +$lt qty(1, "ppm per celsius")$ even if individual tempcos are +$qty(25, "ppm per celsius").$ + +Furthermore, monolithic thin-film resistor networks (multiple laser-trimmed +resistors on a single ceramic substrate) achieve ratio tracking tempcos +$lt qty(0.2, "ppm per celsius")$ ($qty(200, "ppb per celsius")$). + +#include "charts/ratio-stability-principle.typ" + +====== Scaling law <resistor-tempco-scaling-law> + +- Absolute single-ended resistance drift scales linearly with temperature + variation $Delta T$ and absolute tempco $alpha_1$. +- In ratiometric feedback configurations, effective gain drift scales with the + tracking mismatch $Delta alpha_upright("TC") = |alpha_A - alpha_B|$, reducing + thermal drift sensitivity by $25 times$ to $100 times$ relative to uncoupled + discrete resistors. +- Cumulative drift accumulates linearly with time during monotonic ambient + temperature ramps. + +====== Compensation strategy <resistor-tempco-compensation-strategy> + +- Use monolithic matched resistor networks (e.g. LT5400 series or thin-film + networks) for all critical gain-setting and attenuator ratios, +- Isothermal layout: Place critical matched discrete pairs physically adjacent, + in identical physical orientation, on common ground plane copper away from + localized heat sources, +- DC servo loops: Implement active offset/gain servos to continuously null drift + below the computational frequency band, +- Auto-calibration against $plus.minus qty(10.0000, "V")$ reference: + Periodically correct baseline gains against the system reference standard, + which is ovenized to eliminate reference tempco effects. + +===== Resistor aging and load life <resistor-aging-and-load-life> == Error compensation strategies <error-compensation-strategies> diff --git a/tables/resistor-tempco-typical-magnitude.typ b/tables/resistor-tempco-typical-magnitude.typ new file mode 100644 index 0000000..bc94803 --- /dev/null +++ b/tables/resistor-tempco-typical-magnitude.typ @@ -0,0 +1,37 @@ +// SAME Analog Modular Ecosystem +// +// / SPDX-FileCopyrightText: 2026 Denis Chevalier <perso@denischevalier.fr> +// / SPDX-License-Identifier: CC-BY-SA-4.0 +// / SPDX-License-Identifier: CERN-OHL-S-2.0+ +// / SPDX-License-Identifier: GPL-3.0-or-later +// +// The prose, explanatory text, rendered figures, tables, and mathematical +// content of this specification are licensed under CC BY-SA 4.0. If a later +// version of CC BY-SA is published, the author grants permission to distribute +// this work under that later version as well. +// +// Hardware designs contained herein (schematics, PCB layouts, mechanical +// drawings, and CAD models) are licensed under CERN-OHL-S-2.0+. +// +// All executable code, helper libraries (`lib/*`), metrology assertions, and +// embedded verification scripts throughout the source documents are licensed +// under the GNU General Public License v3.0 or later (GPL-3.0-or-later). + +#import "../lib/unify.typ": qtyrange + +#figure( + table( + columns: 3, + table.header([Resistor type], [Tempco ($alpha_1$)], [Notes]), + [Carbon film], [$plus.minus qtyrange(200, 500, "ppm per celsius")$], [Unsuitable for precision], + + [Metal film (standard)], [$plus.minus qtyrange(50, 100, "ppm per celsius")$], [Educational tier], + + [Metal film (precision)], [$plus.minus qtyrange(15, 25, "ppm per celsius")$], [Industrial tier], + + [Thin film], [$plus.minus qtyrange(5, 10, "ppm per celsius")$], [Metrologic tier], + + [Bulk metal foil (Vishay)], [$plus.minus qtyrange(0.2, 2, "ppm per celsius")$], [Reference circuits], + ), + caption: [Resistor temperature coefficient typical magnitudes], +) <table-resistor-tempco-typical-magnitude> |
