aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTING.md8
-rw-r--r--LICENSE.md2
-rw-r--r--LLM-POLICY.md (renamed from LLM_POLICY.md)0
-rw-r--r--README.md33
-rw-r--r--charts/ratio-stability-principle.typ78
-rw-r--r--module-design.typ121
-rw-r--r--tables/resistor-tempco-typical-magnitude.typ37
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
diff --git a/LICENSE.md b/LICENSE.md
index d4674a7..eb4201c 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -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
diff --git a/README.md b/README.md
index 67ae748..790e82e 100644
--- a/README.md
+++ b/README.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>