aboutsummaryrefslogtreecommitdiff
path: root/electrical-specifications.typ
diff options
context:
space:
mode:
Diffstat (limited to 'electrical-specifications.typ')
-rw-r--r--electrical-specifications.typ266
1 files changed, 10 insertions, 256 deletions
diff --git a/electrical-specifications.typ b/electrical-specifications.typ
index 2a9ec15..743c643 100644
--- a/electrical-specifications.typ
+++ b/electrical-specifications.typ
@@ -1,5 +1,4 @@
#import "lib/unify.typ": qty, qtyrange
-#import "@preview/cetz:0.5.2"
= Electrical specifications <electrical-specifications>
@@ -60,20 +59,7 @@ While all inputs must accept bipolar signals, some mathematical functions do not
accept the full range (e.g. logarithm, division, etc.). In that case, the module
must include an out-of-domain handling strategy, and document it:
-#figure(
- table(
- columns: 3,
- table.header([Strategy], [Description], [Example use cases]),
- [Clamp], [Output held at boundary], [Logarithm],
- [Hold], [Freeze last valid output], [Integrator],
- [Fold], [Reflect at boundary], [Chaotic attractor],
- [Wrap], [Wrap around range], [Phase accumulator],
- [Oscillate], [Bounded, specified oscillation], [Implicit function solver],
- [Zero], [Output $qty(0, "V")$], [Divider],
- [Passthrough], [Input passes unchanged], [Signal conditioner],
- ),
- caption: [Out-of-domain handling stategies],
-) <table-out-of-domain-handling-strategies>
+#include "tables/out-of-domain-handling-strategies.typ"
When such a case occurs, an error gate must be fired on a dedicated error jack
output. On multiple channels modules, there should be one such error gate per
@@ -96,17 +82,7 @@ worst-case single-connection loading error is 10ppm, compatible with Metrologic
tier precision. When stacking multiple inputs on a single output via banana
jacks, the parallel input impedance must be considered:
-#figure(
- table(
- columns: 3,
- table.header([Inputs stacked], [Parallel $Z_"in"$], [Loading error]),
- [1], [$qty(1, "mega ohm")$], [$qty(10, "ppm")$],
- [4], [$qty(250, "kilo ohm")$], [$qty(40, "ppm")$],
- [10], [$qty(100, "kilo ohm")$], [$qty(100, "ppm")$],
- [40], [$qty(25, "kilo ohm")$], [$qty(400, "ppm")$],
- ),
- caption: [Loading error per inputs stacked],
-) <table-loading-error>
+#include "tables/loading-error.typ"
Module designers should document expected fan-out in module specifications. For
typical patches ($lt.eq 10$ connections per output), loading error remains a
@@ -126,18 +102,7 @@ error type per channel. Space constraints may force the module designer to
aggregate multiple error gates (OR operator). In that case, out-of-domain and
internal errors must never be aggregated.
-#figure(
- table(
- columns: 2,
- table.header([Source], [Category]),
- [Clipping], [Internal],
- [PWAM Soft Saturation], [Internal],
- [Domain Violation], [Out-of-Domain],
- [Passthrough Active], [Out-of-Domain],
- [Servo Unlock], [Internal],
- ),
- caption: [Examples of error gates],
-) <table-examples-of-error-gates>
+#include "tables/examples-of-error-gates.typ"
=== Bandwidth <bandwidth>
@@ -294,34 +259,7 @@ are met.
===== Summary <precision-measurements-conditions-summary>
-#figure(
- table(
- columns: 3,
- table.header([Parameter], [Range], [Variation]),
- [Temperature], [$plus qty(15, "dC") "to" plus qty(30, "dC")$], [$plus.minus qty(2, "celsius per hour")$],
-
- [Relative humidity], [$qtyrange(30, 79, "percent") "RH"$], [$plus.minus qty(5, "percent") "RH"$],
-
- [Atmospheric pressure], [$qtyrange(800, 1100, "hPa")$], [$plus.minus qty(50, "hecto pascal per day")$],
-
- [RF immunity], [$qty(3, "volt per meter"), qtyrange(80, 1000, "MHz")$], [N/A],
-
- [Magnetic field (DC)], [$lt qty(1, "ampere per meter")$], [N/A],
-
- [Magnetic field (AC)], [$lt qty(0.3, "ampere per meter")$], [N/A],
-
- [Vibration], [$lt qty(0.5, "g"), qtyrange(5, 500, "Hz")$], [N/A],
-
- [Shock], [$lt qty(5, "g"), qty(11, "ms")$], [N/A],
-
- [Air quality], [Indoor, filtered], [N/A],
-
- [Lighting], [No direct sunlight], [N/A],
-
- [Background radiation], [$lt qty(1, "micro sievert per hour")$], [N/A],
- ),
- caption: [Summary of the precision measurements conditions],
-) <table-precision-measurements-conditions-summary>
+#include "tables/precision-measurements-conditions-summary.typ"
Note that electrical supply requirements will be discussed in
@power-distribution.
@@ -363,27 +301,7 @@ $qty(0.014, "ppm per hour")$. We recommend daily calibration verification.
=== Summary <precision-tiers-summary>
-#figure(
- table(
- columns: 4,
- table.header([Parameter], [Educational], [Industrial], [Metrologic]),
- [Precision],
- [$qty(0.1, "percent") (qty(1000, "ppm"))$],
- [$qty(0.01, "percent") (qty(100, "ppm"))$],
- [$qty(0.00, "percent")% (qty(10, "ppm"))$],
-
- [SNR], [$qty(70, "dB")$], [$qty(80, "dB")$], [$qty(90, "dB")$],
-
- [Result validity], [$plus.minus qty(0.1, "V")$], [$plus.minus qty(10, "mV")$], [$plus.minus qty(1, "mV")$],
-
- [Maximum drift rate], [$qty(60, "ppm per hour")$], [$qty(0.6, "ppm per hour")$], [$qty(0.014, "ppm per hour")$],
-
- [Drift-free computation], [$approx qty(16, "h")$], [$approx qty(7, "day")$], [$approx qty(30, "day")$],
-
- [Calibration verification], [Before each session], [Daily], [Daily],
- ),
- caption: [Precision tiers summary],
-) <table-precision-tiers-summary>
+#include "tables/precision-tiers-summary.typ"
==== Drift rate derivation <drift-rate-derivation>
@@ -391,18 +309,7 @@ The drift rates are calculated such that total accumulated drift over the
drift-free computation period consumes approximately $qty(100, "percent")$ of
the precision budget.
-#figure(
- table(
- columns: 4,
- table.header([Tier], [Precision], [Drift rate], [Time to drift $qty(100, "percent")$ of budget]),
- [*Educational*], [$qty(1000, "ppm")$], [$qty(60, "ppm per hour")$], [$approx qty(16, "h")$],
-
- [*Industrial*], [$qty(100, "ppm")$], [$qty(0.6, "ppm per hour")$], [$approx qty(7, "day")$],
-
- [*Metrologic*], [$qty(10, "ppm")$], [$qty(0.014, "ppm per hour")$], [$approx qty(30, "day")$],
- ),
- caption: [Drift rate derivations],
-) <table-drift-rate-derivation>
+#include "tables/drift-rate-derivation.typ"
== Power distribution <power-distribution>
@@ -552,18 +459,7 @@ an ovenized crystal oscillator, the front panel must provide a standby switch,
to shut down the unit while maintaining the diode at temperature. The standby
mode power consumption should not exceed 200mA.
-#figure(
- [```
- Calibration Coarse: Position X
- Calibration Fine: Position Y
- +15.00V DIP: 0bXXXXXXXX
- -15.00V DIP: 0bXXXXXXXX
- Ambient Temperature: XX°C
- Date: YYYY-MM-DD
- Reference DMM: [model, cal date]
- ```],
- caption: "Example of calibration log",
-) <example-calibration-log>
+#include "listings/example-calibration-log.typ"
=== Backplane connector <backplane-connector>
@@ -573,151 +469,9 @@ power distribution board, a short DB-25 male to male cable is used to connect
the cassette to the power distribution board. D-sub connectors are ubiquitous,
sturdy and shielded.
-#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)
- let top-pins = (
- ("1", [$plus qty(15.00, "V")$]),
- ("2", [$plus qty(15.00, "V")$]),
- ("3", [$qty(-15.00, "V")$]),
- ("4", [$qty(-15.00, "V")$]),
- ("5", [AGND]),
- ("6", [AGND]),
- ("7", [AGND]),
- ("8", [$plus qty(10.0000, "V")$ Force]),
- ("9", [$plus qty(10.0000, "V")$ Sense]),
- ("10", [$qty(-10.0000, "V")$ Force]),
- ("11", [$qty(-10.0000, "V")$ Sense]),
- ("12", [AGND]),
- ("13", [AGND]),
- )
-
- // Bottom row pins (Pins 14 to 25)
- let bot-pins = (
- ("14", [AGND]),
- ("15", [AGND]),
- ("16", [AGND]),
- ("17", [DGND]),
- ("18", [DGND]),
- ("19", [$plus qty(5.0, "VD")$]),
- ("20", [$qty(-5.0, "VD")$]),
- ("21", [Stagger]),
- ("22", [_Reserved_]),
- ("23", [_Reserved_]),
- ("24", [_Reserved_]),
- ("25", [Chassis Earth]),
- )
-
- // Draw Top Pins (1-13)
- for (i, p) in top-pins.enumerate() {
- let x = i * dx
- let p-num = p.at(0)
- let p-sig = p.at(1)
-
- circle((x, top-y), radius: 0.26, fill: white, stroke: 1pt + black)
- content((x, top-y), text(size: 7pt, weight: "bold")[#p-num])
-
- line((x, top-y + 0.26), (x, 1.8), stroke: (
- paint: luma(120),
- thickness: 0.6pt,
- ))
- content(
- (x, 1.85),
- text(size: 7.5pt)[#p-sig],
- angle: 50deg,
- anchor: "south-west",
- )
- }
-
- // Draw Bottom Pins (14-25)
- for (j, p) in bot-pins.enumerate() {
- let x = (j + 0.5) * dx
- let p-num = p.at(0)
- let p-sig = p.at(1)
-
- circle((x, bot-y), radius: 0.26, fill: white, stroke: 1pt + black)
- content((x, bot-y), text(size: 7pt, weight: "bold")[#p-num])
-
- line((x, bot-y - 0.26), (x, -1.8), stroke: (
- paint: luma(120),
- thickness: 0.6pt,
- ))
- content(
- (x, -1.85),
- text(size: 7.5pt)[#p-sig],
- angle: -50deg,
- anchor: "north-west",
- )
- }
- }),
- caption: [DB-25 backplane connector physical pinout and signal allocation diagram.],
-) <figure-backplane-connector-diagram>
-
-#figure(
- table(
- columns: 4,
- table.header([Pin], [Signal], [Pin], [Signal]),
- [1], [$plus qty(15.00, "V")$], [14], [AGND],
- [2], [$plus qty(15.00, "V")$], [15], [AGND],
- [3], [$qty(-15.00, "V")$], [16], [AGND],
- [4], [$qty(-15.00, "V")$], [17], [DGND],
- [5], [AGND], [18], [DGND],
- [6], [AGND], [19], [$plus qty(5.0, "VD")$],
- [7], [AGND], [20], [$qty(-5.0, "VD")$],
- [8], [$plus qty(10.0000, "V")$ Force], [21], [Stagger],
- [9], [$plus qty(10.0000, "V")$ Sense], [22], [_Reserved_],
- [10], [$qty(-10.0000, "V")$ Force], [23], [_Reserved_],
- [11], [$qty(-10.0000, "V")$ Sense], [24], [_Reserved_],
- [12], [AGND], [25], [Chassis Earth],
- [13], [AGND], [Shell], [Chassis Earth],
- ),
- caption: "DB-25 backplane connector pin allocation",
-) <table-backplane-connector>
+#include "diagrams/backplane-connector-diagram.typ"
+
+#include "tables/backplane-connector.typ"
The $qty(10, "MHz")$ Master Oscillator is distributed via a dedicated rear-panel
BNC connector, not through the DB-25 backplane connector.