aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Chevalier <perso@denischevalier.fr>2026-08-10 22:32:38 +0200
committerDenis Chevalier <perso@denischevalier.fr>2026-08-10 22:32:38 +0200
commitb28f97f3526859633fde603764b827389279d10f (patch)
treeef483985fc0be4237f98b2ad7dd0682b160b4cef
parent32d3f3d945002c1413490449aa08522c78f4dcad (diff)
downloadsame-b28f97f3526859633fde603764b827389279d10f.tar.gz
same-b28f97f3526859633fde603764b827389279d10f.tar.bz2
same-b28f97f3526859633fde603764b827389279d10f.zip
extract figures in separate files
-rw-r--r--charts/capacitor-dielectric-absorption-noise-typical-magnitude.typ98
-rw-r--r--charts/crosstalk-mathematical-model.typ63
-rw-r--r--charts/opamp-voltage-noise-typical-magnitudes.typ57
-rw-r--r--charts/power-supply-noise-coupling-typical-magnitude.typ68
-rw-r--r--diagrams/backplane-connector-diagram.typ127
-rw-r--r--diagrams/cassette-external-dimensions.typ221
-rw-r--r--diagrams/cassette-ventilation.typ364
-rw-r--r--diagrams/chassis-dimensional-requirements.typ477
-rw-r--r--diagrams/db-25-connector-cutout.typ297
-rw-r--r--diagrams/front-panel.typ252
-rw-r--r--diagrams/l-channel-chassis.typ422
-rw-r--r--diagrams/panels-grid.typ342
-rw-r--r--diagrams/u-channel-cover.typ197
-rw-r--r--electrical-specifications.typ266
-rw-r--r--listings/example-calibration-log.typ12
-rw-r--r--mechanical-specifications.typ3264
-rw-r--r--module-design.typ743
-rw-r--r--tables/backplane-connector.typ22
-rw-r--r--tables/capacitor-dielectric-absorption-noise-typical-magnitude.typ15
-rw-r--r--tables/cassette-construction-parameters.typ12
-rw-r--r--tables/cassette-external-dimensions.typ32
-rw-r--r--tables/cassette-internal-dimensions.typ12
-rw-r--r--tables/cassette-ventilation.typ18
-rw-r--r--tables/chassis-capacity.typ14
-rw-r--r--tables/chassis-cassette-rails-geometry.typ18
-rw-r--r--tables/chassis-cassette-rails-retention.typ12
-rw-r--r--tables/chassis-compliance.typ10
-rw-r--r--tables/chassis-cooling-method.typ10
-rw-r--r--tables/chassis-emi-shielding.typ15
-rw-r--r--tables/chassis-front-panel-elements.typ33
-rw-r--r--tables/chassis-grounding.typ13
-rw-r--r--tables/chassis-mains-isolation.typ13
-rw-r--r--tables/chassis-material.typ13
-rw-r--r--tables/chassis-module-interface-dimensions.typ17
-rw-r--r--tables/chassis-ventilation.typ14
-rw-r--r--tables/circuit-and-component-parameters.typ32
-rw-r--r--tables/crosstalk-typical-magnitude.typ16
-rw-r--r--tables/db-25-connector-cutout.typ26
-rw-r--r--tables/drift-rate-derivation.typ14
-rw-r--r--tables/electrical-quantities.typ21
-rw-r--r--tables/error-and-precision-quantities.typ28
-rw-r--r--tables/error-budgeting-introduction.typ14
-rw-r--r--tables/examples-of-error-gates.typ12
-rw-r--r--tables/fundamental-constants.typ13
-rw-r--r--tables/inductor-losses-and-parasitic-effects-typical-magnitude.typ30
-rw-r--r--tables/loading-error.typ13
-rw-r--r--tables/mathematical-operators-and-functions.typ22
-rw-r--r--tables/noise-quantities.typ23
-rw-r--r--tables/opamp-current-noise-typical-magnitude.typ14
-rw-r--r--tables/opamp-voltage-noise-typical-magnitudes.typ16
-rw-r--r--tables/out-of-domain-handling-strategies.typ16
-rw-r--r--tables/panels-geometry.typ15
-rw-r--r--tables/panels-grid-component-placement-rules.typ14
-rw-r--r--tables/panels-grid-origin.typ15
-rw-r--r--tables/panels-grid-positions.typ25
-rw-r--r--tables/panels-jacks-color-coding.typ16
-rw-r--r--tables/panels-labbeling.typ17
-rw-r--r--tables/panels-zones.typ14
-rw-r--r--tables/pcb-board-stackup.typ28
-rw-r--r--tables/pcb-earth-ring-geometry.typ13
-rw-r--r--tables/pcb-electrical-testing-requirements.typ15
-rw-r--r--tables/pcb-ground-planes-agnd-plane.typ13
-rw-r--r--tables/pcb-ground-planes-dgnd-zone.typ13
-rw-r--r--tables/pcb-interconnect-zones-zone-a-pin-assignment.typ21
-rw-r--r--tables/pcb-interconnect-zones-zone-a.typ19
-rw-r--r--tables/pcb-interconnect-zones-zone-b.typ14
-rw-r--r--tables/pcb-keep-out-zones-mounting-holes-keep-out.typ11
-rw-r--r--tables/pcb-keep-out-zones-perimeter-keep-out.typ13
-rw-r--r--tables/pcb-mounting-strategy-mounting-holes-pattern.typ14
-rw-r--r--tables/pcb-mounting-strategy-mounting-holes-positions.typ13
-rw-r--r--tables/pcb-mounting-strategy.typ13
-rw-r--r--tables/pcb-power-planes.typ16
-rw-r--r--tables/pcb-silkscreen-requirements-l1.typ14
-rw-r--r--tables/pcb-silkscreen-requirements-l4.typ12
-rw-r--r--tables/pcb-standard-dimensions.typ16
-rw-r--r--tables/pcb-surface-finish.typ18
-rw-r--r--tables/potentiometer-wiper-noise-and-wear-typical-magnitude.typ30
-rw-r--r--tables/power-distribution-board-functions.typ24
-rw-r--r--tables/power-distribution-board-power-entry.typ14
-rw-r--r--tables/power-supply-noise-coupling-typical-magnitude.typ12
-rw-r--r--tables/precision-measurements-conditions-summary.typ30
-rw-r--r--tables/precision-tiers-summary.typ23
-rw-r--r--tables/protective-earth.typ13
-rw-r--r--tables/selv-circuits.typ12
-rw-r--r--tables/snr-and-noise-floor-resolution.typ12
-rw-r--r--tables/thermal-quantities.typ22
-rw-r--r--tables/time-domain-and-modulation-quantities.typ17
-rw-r--r--tables/unit-prefixes.typ17
-rw-r--r--tables/voltage-and-current-subscript-conventions.typ22
89 files changed, 4339 insertions, 4174 deletions
diff --git a/charts/capacitor-dielectric-absorption-noise-typical-magnitude.typ b/charts/capacitor-dielectric-absorption-noise-typical-magnitude.typ
new file mode 100644
index 0000000..d15bfb4
--- /dev/null
+++ b/charts/capacitor-dielectric-absorption-noise-typical-magnitude.typ
@@ -0,0 +1,98 @@
+#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, 9),
+ y-mode: "log",
+ x-label: [Time $t$ ($unit("s")$)],
+ y-label: [Residual Voltage $V_upright("DA")$ ($unit("mV")$)],
+ x-min: 0.001,
+ x-max: 9,
+ y-min: 0.01,
+ y-max: 500,
+ x-grid: "minor",
+ y-grid: "minor",
+ {
+ // 200 uV (0.2 mV) Metrologic systematic error budget limit
+ plot.add(
+ ((0.001, 0.2), (10, 0.2)),
+ style: (
+ stroke: (paint: luma(120), thickness: 0.8pt, dash: "dash-dotted"),
+ ),
+ label: [Budget limit ($qty(200, "uV")$)],
+ )
+ // Ceramic X7R (DA = 2.5%, 10 V step -> 250 mV initial soakage peak)
+ plot.add(
+ style: (stroke: (dash: "solid")),
+ label: [Ceramic (X7R / Class 2)],
+ domain: (0.001, 10),
+ samples: 10000,
+ t => (
+ 250
+ * (
+ 0.5 * calc.exp(-t / 0.01) + 0.3 * calc.exp(-t / 0.1) + 0.2 * calc.exp(-t / 1.0)
+ )
+ ),
+ )
+ // Polypropylene PP (DA = 0.05%, 10 V step -> 5 mV initial soakage peak)
+ plot.add(
+ style: (stroke: (dash: "dotted")),
+ label: [Polypropylene (PP)],
+ domain: (0.001, 10),
+ samples: 10000,
+ t => (
+ 5
+ * (
+ 0.5 * calc.exp(-t / 0.01) + 0.3 * calc.exp(-t / 0.1) + 0.2 * calc.exp(-t / 1.0)
+ )
+ ),
+ )
+ // Polystyrene PP (DA = 0.002, 10 V step -> 2 mV initial soakage peak)
+ plot.add(
+ style: (stroke: (dash: "dashed")),
+ label: [Polystyrene (PS)],
+ domain: (0.001, 10),
+ samples: 10000,
+ t => (
+ 2
+ * (
+ 0.5 * calc.exp(-t / 0.01) + 0.3 * calc.exp(-t / 0.1) + 0.2 * calc.exp(-t / 1.0)
+ )
+ ),
+ )
+ // Teflon PTFE (DA = 0.001, 10 V step -> 1 mV initial soakage peak)
+ plot.add(
+ style: (stroke: (dash: "dash-dotted")),
+ label: [Teflon (PTFE)],
+ domain: (0.001, 10),
+ samples: 10000,
+ t => (
+ 1
+ * (
+ 0.5 * calc.exp(-t / 0.01) + 0.3 * calc.exp(-t / 0.1) + 0.2 * calc.exp(-t / 1.0)
+ )
+ ),
+ )
+ // Class 1 C0G/NP0 Ceramic (DA = 0.005%, 10 V step -> 0.5 mV initial soakage peak)
+ plot.add(
+ style: (stroke: (dash: (6pt, 2pt, 2pt, 2pt))),
+ label: [Class 1 (C0G/NP0)],
+ domain: (0.001, 10),
+ samples: 10000,
+ t => (
+ 0.5
+ * (
+ 0.5 * calc.exp(-t / 0.01) + 0.3 * calc.exp(-t / 0.1) + 0.2 * calc.exp(-t / 1.0)
+ )
+ ),
+ )
+ },
+ )
+ }),
+ caption: [Capacitor dielectric absorption residual voltage relaxation ($V_upright("DA")$) over time following a $qty(10, "V")$ step voltage reset, comparing dielectric classes against the $qty(200, "uV")$ systematic error budget],
+) <figure-capacitor-dielectric-absorption-noise-typical-magnitude>
diff --git a/charts/crosstalk-mathematical-model.typ b/charts/crosstalk-mathematical-model.typ
new file mode 100644
index 0000000..7701ed9
--- /dev/null
+++ b/charts/crosstalk-mathematical-model.typ
@@ -0,0 +1,63 @@
+#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-mode: "log",
+ x-label: [Frequency $f$ ($unit("Hz")$)],
+ y-label: [Coupled Voltage $V_"coupled"$ ($unit("mV")$)],
+ x-min: 10,
+ x-max: 100000,
+ y-min: 0.001,
+ y-max: 65,
+ x-grid: "minor",
+ y-grid: "minor",
+ {
+ // 20 kHz System Bandwidth limit vertical reference line
+ plot.add(
+ ((20000, 0.001), (20000, 100)),
+ style: (
+ stroke: (paint: luma(120), thickness: 0.8pt, dash: "dashed"),
+ ),
+ label: none,
+ )
+
+ // Unshielded PCB trace: C_mutual = 1 pF, Z_victim = 10 kOhm
+ plot.add(
+ style: (stroke: (dash: "solid")),
+ label: [Unshielded trace \
+ ($qty(1, "pF"), qty(10, "kilo ohm")$)],
+ domain: (10, 100000),
+ samples: 8000,
+ f => 2 * calc.pi * f * 1e-12 * 10000 * 10 * 1000, // in mV
+ )
+
+ // Low-impedance node: C_mutual = 1 pF, Z_victim = 1 kOhm
+ plot.add(
+ style: (stroke: (dash: "dashed")),
+ label: [Low-impedance node \
+ ($qty(1, "pF"), qty(1, "kilo ohm")$)],
+ domain: (10, 100000),
+ samples: 8000,
+ f => 2 * calc.pi * f * 1e-12 * 1000 * 10 * 1000, // in mV
+ )
+
+ // Guard trace shielding: C_mutual = 0.05 pF, Z_victim = 10 kOhm
+ plot.add(
+ style: (stroke: (dash: "dotted")),
+ label: [Guard trace shielded \
+ ($qty(0.05, "pF"), qty(10, "kilo ohm")$)],
+ domain: (10, 100000),
+ samples: 8000,
+ f => 2 * calc.pi * f * 0.05e-12 * 10000 * 10 * 1000, // in mV
+ )
+ },
+ )
+ }),
+ caption: [Capacitive crosstalk coupled voltage ($V_"coupled"$) vs. frequency across different PCB layout conditions, demonstrating the $qty(20, "decibel per decade")$ slope up to the $qty(20, "kHz")$ system bandwidth boundary],
+) <figure-crosstalk-mathematical-model>
diff --git a/charts/opamp-voltage-noise-typical-magnitudes.typ b/charts/opamp-voltage-noise-typical-magnitudes.typ
new file mode 100644
index 0000000..2e926dd
--- /dev/null
+++ b/charts/opamp-voltage-noise-typical-magnitudes.typ
@@ -0,0 +1,57 @@
+#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-mode: "log",
+ x-label: [Frequency $f$ ($unit("Hz")$)],
+ y-label: [$e_n(f)$ ($unit("nano volt per shertz")$)],
+ x-min: 0.1,
+ x-max: 100000,
+ y-min: 0.5,
+ y-max: 50,
+ x-grid: "minor",
+ y-grid: "minor",
+ {
+ // General purpose (TL072): e_white = 18 nV/sqrt(Hz), fc = 200 Hz
+ plot.add(
+ style: (stroke: (dash: "solid")),
+ label: [TL07x],
+ domain: (0.1, 100000),
+ samples: 8000,
+ f => 18 * calc.sqrt(1 + 200 / f),
+ )
+ // Low noise (OPA211): e_white = 1.1 nV/sqrt(Hz), fc = 10 Hz
+ plot.add(
+ style: (stroke: (dash: "dashed")),
+ label: [OPA211],
+ domain: (0.1, 100000),
+ samples: 8000,
+ f => 1.1 * calc.sqrt(1 + 10 / f),
+ )
+ // Precision low noise (LT1028): e_white = 0.85 nV/sqrt(Hz), fc = 3.5 Hz
+ plot.add(
+ style: (stroke: (dash: "dotted")),
+ label: [LT1028],
+ domain: (0.1, 100000),
+ samples: 8000,
+ f => 0.85 * calc.sqrt(1 + 3.5 / f),
+ )
+ // Chopper stabilized (LTC2057): e_white = 7 nV/sqrt(Hz), fc = 1 Hz
+ plot.add(
+ style: (stroke: (dash: "dash-dotted")),
+ label: [LTC2057],
+ domain: (0.1, 100000),
+ samples: 8000,
+ f => 7 * calc.sqrt(1 + 1 / f),
+ )
+ },
+ )
+ }),
+ caption: [Comparison of operational amplifier voltage noise spectral density curves across frequency],
+) <figure-opamp-voltage-noise-mathematical-model>
diff --git a/charts/power-supply-noise-coupling-typical-magnitude.typ b/charts/power-supply-noise-coupling-typical-magnitude.typ
new file mode 100644
index 0000000..6a3a8d8
--- /dev/null
+++ b/charts/power-supply-noise-coupling-typical-magnitude.typ
@@ -0,0 +1,68 @@
+#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-mode: "log",
+ y-mode: "linear",
+ x-label: [Frequency $f$ ($unit("Hz")$)],
+ y-label: [$upright("PSRR")(f)$ ($unit("dB")$)],
+ x-min: 1,
+ x-max: 1000000,
+ y-min: 0,
+ y-max: 140,
+ x-grid: "minor",
+ y-grid: "minor",
+ {
+ // 500 kHz PWAM Carrier vertical reference line
+ plot.add(
+ ((500000, 0), (500000, 140)),
+ style: (stroke: (paint: luma(120), thickness: 0.8pt, dash: "dashed")),
+ label: none,
+ )
+ // General purpose (TL07x): PSRR_DC = 100 dB, fp1 = 1 kHz, fp2 = 100 kHz
+ plot.add(
+ style: (stroke: (dash: "solid")),
+ label: [TL07x],
+ domain: (1, 1000000),
+ samples: 8000,
+ f => (
+ 100
+ - 10 * calc.log(1 + calc.pow(f / 1000, 2), base: 10)
+ - 10 * calc.log(1 + calc.pow(f / 100000, 2), base: 10)
+ ),
+ )
+ // Low noise (OPA211): PSRR_DC = 130 dB, fp1 = 300 Hz, fp2 = 50 kHz
+ plot.add(
+ style: (stroke: (dash: "dotted")),
+ label: [OPA211],
+ domain: (1, 1000000),
+ samples: 8000,
+ f => (
+ 130
+ - 10 * calc.log(1 + calc.pow(f / 300, 2), base: 10)
+ - 10 * calc.log(1 + calc.pow(f / 50000, 2), base: 10)
+ ),
+ )
+ // Precision low noise (LT1028): PSRR_DC = 120 dB, fp1 = 300 Hz, fp2 = 100 kHz
+ plot.add(
+ style: (stroke: (dash: "dashed")),
+ label: [LT1028],
+ domain: (1, 1000000),
+ samples: 8000,
+ f => (
+ 120
+ - 10 * calc.log(1 + calc.pow(f / 300, 2), base: 10)
+ - 10 * calc.log(1 + calc.pow(f / 100000, 2), base: 10)
+ ),
+ )
+ },
+ )
+ }),
+ caption: [Power supply rejection ratio ($upright("PSRR")$) degradation across frequency, highlighting the reduced rejection at the $qty(500, "kHz")$ PWAM carrier frequency],
+) <figure-power-supply-noise-coupling-mathematical-model>
diff --git a/diagrams/backplane-connector-diagram.typ b/diagrams/backplane-connector-diagram.typ
new file mode 100644
index 0000000..0b2d254
--- /dev/null
+++ b/diagrams/backplane-connector-diagram.typ
@@ -0,0 +1,127 @@
+#import "../lib/unify.typ": qty
+#import "@preview/cetz:0.5.2"
+
+#figure(
+ cetz.canvas({
+ import cetz.draw: *
+
+ let dx = 1.0
+ let top-y = 0.55
+ let bot-y = -0.55
+
+ // Outer mounting flange / metal ears
+ rect(
+ (-2.0, -1.4),
+ (14.0, 1.4),
+ rx: 0.2,
+ fill: luma(245),
+ stroke: 1pt + luma(100),
+ )
+
+ // Left and right chassis mounting screw holes
+ circle((-1.3, 0), radius: 0.35, fill: luma(220), stroke: 1pt + luma(120))
+ circle((-1.3, 0), radius: 0.20, fill: white, stroke: 0.8pt + luma(100))
+ circle((13.3, 0), radius: 0.35, fill: luma(220), stroke: 1pt + luma(120))
+ circle((13.3, 0), radius: 0.20, fill: white, stroke: 0.8pt + luma(100))
+
+ // D-Sub trapezoidal shroud outline
+ line(
+ (-0.7, 1.15),
+ (12.7, 1.15),
+ (12.2, -1.15),
+ (-0.2, -1.15),
+ close: true,
+ fill: luma(230),
+ stroke: 1.5pt + black,
+ )
+
+ // Shell Earth ground connection reference
+ line((-0.45, -1.15), (-0.45, -2.0), stroke: (
+ paint: luma(120),
+ thickness: 0.7pt,
+ dash: "dashed",
+ ))
+ content(
+ (-0.45, -2.05),
+ text(size: 7.5pt, weight: "bold")[Shell: Chassis Earth],
+ angle: -50deg,
+ anchor: "north-west",
+ )
+
+ // Top row pins (Pins 1 to 13)