aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--electrical-specifications.typ67
-rw-r--r--introduction.typ2
-rw-r--r--mechanical-specifications.typ29
-rw-r--r--module-design.typ152
-rw-r--r--unify.typ9
5 files changed, 123 insertions, 136 deletions
diff --git a/electrical-specifications.typ b/electrical-specifications.typ
index c4416fe..a7c5a76 100644
--- a/electrical-specifications.typ
+++ b/electrical-specifications.typ
@@ -1,4 +1,4 @@
-#import "@preview/unify:0.8.1": qty, qtyrange
+#import "unify.typ": qty, qtyrange
= Electrical specifications <electrical-specifications>
@@ -179,7 +179,7 @@ temperature gradients to stabilize, and servo loops to settle.
===== Temperature <temperature>
Measurements are made with an ambient temperature range of
-$qtyrange(15, 30, "dC", delimiter: "\"to\"")$, with an hourly variation of
+$qtyrange(15, 30, "dC")$, with an hourly variation of
maximum $plus.minus qty(2, "dC")$. Temperature is the main source of drift for
components. While designs should compensate for reasonable temperature
variations, they should expect normal temperature operation conditions,
@@ -188,7 +188,7 @@ achievable with a standard HVAC.
===== Humidity <humidity>
Measurements are made within a relative humidity range of
-$qtyrange(30, 70, "percent", delimiter: "\"to\"") upright("RH")$, with an hourly
+$qtyrange(30, 70, "percent") upright("RH")$, with an hourly
variation of maximum $plus.minus qty(5, "percent") upright("RH")$.
High humidity can cause parasitic leakage paths (nanoamps matter at high-Z
@@ -202,7 +202,7 @@ met with easy access humidity control measures and tools.
===== Atmospheric pressure <atmospheric-pressure>
Measurements are made within an atmospheric pressure range from
-$qtyrange(800, 1100, "hPa", delimiter: "\"to\"")$, with a daily variation of
+$qtyrange(800, 1100, "hPa")$, with a daily variation of
maximum $plus.minus qty(50, "hPa")$.
A low atmospheric pressure impacts convection and temperature regulation. It
@@ -216,9 +216,9 @@ to $qty(2000, "m")$ altitude, under normal atmospheric conditions.
===== Electro-magnetic environment <electro-magnetic-environment>
RF field immunity must follow EN 61000-4-3 specification (
-$qty(3, "volt per meter")$, $qtyrange(80, 1000, "MHz", delimiter: "\"to\"")$). The magnetic field
-should be below $qty(1, "ampere per meter", per: "/") upright("DC")$, and below
-$qty(0.3, "ampere per meter", per: "/") upright("AC")$ (power frequency). SAME equipment should be
+$qty(3, "volt per meter")$, $qtyrange(80, 1000, "MHz")$). The magnetic field
+should be below $qty(1, "ampere per meter") upright("DC")$, and below
+$qty(0.3, "ampere per meter") upright("AC")$ (power frequency). SAME equipment should be
at least $qty(1, "m")$ away from switching equipment such as motors, welders
etc.
@@ -243,7 +243,7 @@ SAME equipment should be operated on stable surfaces, free from significant
vibration. Vibration can induce microphonic effects in capacitors and
connectors, affecting precision at high-impedance nodes.
-Operating vibration should be below $qty(0.5, "g")$ ($qtyrange(5, 500, "Hz", delimiter: "\"to\"")$).
+Operating vibration should be below $qty(0.5, "g")$ ($qtyrange(5, 500, "Hz")$).
Shock should be below $qty(5, "g")$ ($qty(11, "ms")$ pulse).
These requirements should be met in normal laboratory or studio environments.
@@ -260,7 +260,7 @@ cassettes removed in bright light.
===== Ionizing radiation <ionizing-radiation>
SAME is designed for normal background radiation environments (below
-$qty(1, "micro sievert per hour", per: "/")$).
+$qty(1, "micro sievert per hour")$).
Operation near significant ionizing radiation sources such as medical imaging
equipment, nuclear facilities, or particle accelerators is not recommended
@@ -297,21 +297,17 @@ are met.
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", per: "/")$],
+ [Temperature], [$plus qty(15, "dC") "to" plus qty(30, "dC")$], [$plus.minus qty(2, "celsius per hour")$],
- [Relative humidity],
- [$qtyrange(30, 79, "percent", delimiter: "\"to\"") "RH"$],
- [$plus.minus qty(5, "percent") "RH"$],
+ [Relative humidity], [$qtyrange(30, 79, "percent") "RH"$], [$plus.minus qty(5, "percent") "RH"$],
- [Atmospheric pressure],
- [$qtyrange(800, 1100, "hPa", delimiter: "\"to\"")$],
- [$plus.minus qty(50, "hecto pascal per day", per: "/")$],
+ [Atmospheric pressure], [$qtyrange(800, 1100, "hPa")$], [$plus.minus qty(50, "hecto pascal per day")$],
- [RF immunity], [$qty(3, "volt per meter", per: "/"), qtyrange(80, 1000, "MHz", delimiter: "\"to\"")$], [N/A],
+ [RF immunity], [$qty(3, "volt per meter"), qtyrange(80, 1000, "MHz")$], [N/A],
- [Magnetic field (DC)], [$lt qty(1, "ampere per meter", per: "/")$], [N/A],
+ [Magnetic field (DC)], [$lt qty(1, "ampere per meter")$], [N/A],
- [Magnetic field (AC)], [$lt qty(0.3, "ampere per meter", per: "/")$], [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],
@@ -321,7 +317,7 @@ are met.
[Lighting], [No direct sunlight], [N/A],
- [Background radiation], [$lt qty(1, "micro sievert per hour", per: "/")$], [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>
@@ -337,7 +333,7 @@ entry by reducing the components costs and soldering difficulty. It is suitable
for teaching on circuit topologies and general analog computer patching. At this
level of precision, results are valid within $plus.minus qty(10, "mV")$.
-The maximum drift rate should be inferior or equal to $qty(60, "ppm per hour", per: "/")$.
+The maximum drift rate should be inferior or equal to $qty(60, "ppm per hour")$.
We recommend calibration verification before each session.
=== Industrial tier <industrial-tier>
@@ -350,7 +346,7 @@ acquisition. At this level of precision, results are valid within
$plus.minus qty(1, "mV")$.
The maximum drift rate should be inferior or equal to
-$qty(0.6, "ppm per hour", per: "/")$. We recommend daily calibration verification.
+$qty(0.6, "ppm per hour")$. We recommend daily calibration verification.
=== Metrologic tier <metrologic-tier>
@@ -362,7 +358,7 @@ operation. At this level of precision, results are valid within
$plus.minus qty(0.1, "mV")$.
The maximum drift rate should be inferior or equal to
-$qty(0.014, "ppm per hour", per: "/")$. We recommend daily calibration verification.
+$qty(0.014, "ppm per hour")$. We recommend daily calibration verification.
=== Summary <precision-tiers-summary>
@@ -379,10 +375,7 @@ $qty(0.014, "ppm per hour", per: "/")$. We recommend daily calibration verificat
[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", per: "/")$],
- [$qty(0.6, "ppm per hour", per: "/")$],
- [$qty(0.014, "ppm per hour", per: "/")$],
+ [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")$],
@@ -401,11 +394,11 @@ the precision budget.
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", per: "/")$], [$approx qty(16, "h")$],
+ [*Educational*], [$qty(1000, "ppm")$], [$qty(60, "ppm per hour")$], [$approx qty(16, "h")$],
- [*Industrial*], [$qty(100, "ppm")$], [$qty(0.6, "ppm per hour", per: "/")$], [$approx qty(7, "day")$],
+ [*Industrial*], [$qty(100, "ppm")$], [$qty(0.6, "ppm per hour")$], [$approx qty(7, "day")$],
- [*Metrologic*], [$qty(10, "ppm")$], [$qty(0.014, "ppm per hour", per: "/")$], [$approx qty(30, "day")$],
+ [*Metrologic*], [$qty(10, "ppm")$], [$qty(0.014, "ppm per hour")$], [$approx qty(30, "day")$],
),
caption: [Drift rate derivations],
) <table-drift-rate-derivation>
@@ -485,7 +478,7 @@ an initial accuracy within $plus.minus qty(7.5, "mV")$
better than $plus.minus qty(1.5, "mV")$ ($qty(0.01, "percent")$) for a
$plus.minus qty(10, "percent")$ input voltage variation. Load regulation shall
be better than $plus.minus qty(3.0, "mV")$ ($qty(0.02, "percent")$) over the
-full load range ($qtyrange(10, 100, "percent", delimiter: "\"to\"")$). Output
+full load range ($qtyrange(10, 100, "percent")$). Output
voltage ripple and noise shall not exceed $qty(500, "uVpp")$ over a
$qty(20, "MHz")$ bandwidth.
@@ -506,11 +499,11 @@ noise shall not exceed $qty(5, "mVpp")$ over a $qty(20, "MHz")$ bandwidth.
The $plus.minus qty(10.0000, "V")$ reference rails shall maintain an initial
accuracy within $plus.minus qty(20, "uV")$ ($plus.minus qty(2, "ppm")$) at
$qty(25, "dC")$. Line regulation shall be strictly less than
-$qty(2, "micro volt per volt", per: "/")$ ($qty(0.2, "ppm per volt", per: "/")$). Load regulation
-shall be strictly less than $qty(5, "micro volt per milli ampere", per: "/")$
-($qty(0.5, "ppm per milli ampere", per: "/")$). The temperature coefficient must be less
-than $qty(0.5, "ppm per celsius", per: "/")$, and low-frequency noise
-($qtyrange(0.1, 10, "Hz", delimiter: "\"to\"")$) shall not exceed
+$qty(2, "micro volt per volt")$ ($qty(0.2, "ppm per volt")$). Load regulation
+shall be strictly less than $qty(5, "micro volt per milli ampere")$
+($qty(0.5, "ppm per milli ampere")$). The temperature coefficient must be less
+than $qty(0.5, "ppm per celsius")$, and low-frequency noise
+($qtyrange(0.1, 10, "Hz")$) shall not exceed
$qty(2, "uVpp")$.
===== Master oscillator requirements <master-oscillator-requirements>
@@ -518,7 +511,7 @@ $qty(2, "uVpp")$.
The $qty(10, "MHz")$ Master Oscillator shall demonstrate frequency stability
inferior or equal to $qty(10, "ppb")$ (parts per billion) over the full
operating temperature range. Phase noise shall be inferior or equal to
-$qty(-140, "dBc per Hz", per: "/")$ at a $qty(1, "kHz")$ offset.
+$qty(-140, "dBc per Hz")$ at a $qty(1, "kHz")$ offset.
===== Grounding rules <grounding-rules>
diff --git a/introduction.typ b/introduction.typ
index 588186f..93081cf 100644
--- a/introduction.typ
+++ b/introduction.typ
@@ -1,4 +1,4 @@
-#import "@preview/unify:0.8.1": qty
+#import "unify.typ": qty
= Introduction <introduction>
diff --git a/mechanical-specifications.typ b/mechanical-specifications.typ
index 28fc178..ba257c8 100644
--- a/mechanical-specifications.typ
+++ b/mechanical-specifications.typ
@@ -1,4 +1,4 @@
-#import "@preview/unify:0.8.1": qty, qtyrange
+#import "unify.typ": qty, qtyrange
= Mechanical specifications <mechanical-specifications>
@@ -387,10 +387,9 @@ management, while remaining easy to solder with standard equipment.
table.header([Parameter], [Specification]),
[Finish], [ENIG (Electroless Nickel Immersion Gold)],
- [Nickel thickness], [$qtyrange(3, 5, "um", delimiter: "\"to\"")$],
+ [Nickel thickness], [$qtyrange(3, 5, "um")$],
- [Gold thickness],
- [$qtyrange(0.05, 0.1, "um", delimiter: "\"to\"")$ ($qtyrange(1, 2, "micro inch", delimiter: "\"to\"")$)],
+ [Gold thickness], [$qtyrange(0.05, 0.1, "um")$ ($qtyrange(1, 2, "micro inch")$)],
[Solder mask], [Matte black (both sides)],
@@ -484,13 +483,13 @@ Layer 3 is divided into power distribution zones:
table(
columns: 3,
table.header([Zone], [Rail], [Typical area]),
- [Zone 1], [$plus qty(15, "V")$], [$qtyrange(30, 40, "percent", delimiter: "\"to\"")$],
+ [Zone 1], [$plus qty(15, "V")$], [$qtyrange(30, 40, "percent")$],
- [Zone 2], [$qty(-15, "V")$], [$qtyrange(30, 40, "percent", delimiter: "\"to\"")$],
+ [Zone 2], [$qty(-15, "V")$], [$qtyrange(30, 40, "percent")$],
- [Zone 3], [$plus qty(5, "V")$ (if needed)], [$qtyrange(10, 15, "percent", delimiter: "\"to\"")$],
+ [Zone 3], [$plus qty(5, "V")$ (if needed)], [$qtyrange(10, 15, "percent")$],
- [Zone 4], [$qty(-5, "V")$ (if needed)], [$qtyrange(10, 15, "percent", delimiter: "\"to\"")$],
+ [Zone 4], [$qty(-5, "V")$ (if needed)], [$qtyrange(10, 15, "percent")$],
),
caption: [PCB power planes],
) <table-pcb-power-planes>
@@ -582,7 +581,7 @@ The PCB mounts to the L-channel left wall via four standoffs.
table(
columns: 2,
table.header([Parameter], [Value]),
- [Location], [Rear $qty(20, "mm")$ of PCB ($Y = qtyrange(0, 20, "mm", delimiter: "\"to\"")$)],
+ [Location], [Rear $qty(20, "mm")$ of PCB ($Y = qtyrange(0, 20, "mm")$)],
[Function], [Connection to DB-25 backplane connector and rear BNC],
[Connector],
@@ -629,11 +628,11 @@ harness.
table(
columns: 2,
table.header([Parameter], [Value]),
- [Location], [Front $qty(20, "mm")$ of PCB ($Y = qtyrange(135, 155, "mm", delimiter: "\"to\"")$)],
+ [Location], [Front $qty(20, "mm")$ of PCB ($Y = qtyrange(135, 155, "mm")$)],
[Function], [Connection to banana jacks and controls],
[Connector], [Pin headers, terminal blocks, or direct solder pads],
- [Wire gauge], [$qtyrange(24, 25, "AWG", delimiter: "\"to\"")$],
+ [Wire gauge], [$qtyrange(24, 25, "AWG")$],
),
caption: [PCB interconnect zones: zone B],
) <table-pcb-interconnect-zones-zone-b>
@@ -735,11 +734,11 @@ The front panel is a separate piece that attaches to the L-channel via countersu
table(
columns: 3,
table.header([Zone], [Height range], [Function]),
- [Top lip], [$qtyrange(0, 6.35, "mm", delimiter: "\"to\"")$], [Extends above cassette body],
+ [Top lip], [$qtyrange(0, 6.35, "mm")$], [Extends above cassette body],
- [Body], [$qtyrange(6.35, 171.45, "mm", delimiter: "\"to\"")$], [Jack and control area],
+ [Body], [$qtyrange(6.35, 171.45, "mm")$], [Jack and control area],
- [Bottom lip], [$qtyrange(171.45, 177.8, "mm", delimiter: "\"to\"")$], [Extends below cassette body],
+ [Bottom lip], [$qtyrange(171.45, 177.8, "mm")$], [Extends below cassette body],
),
caption: [Panels zones],
) <table-panels-zones>
@@ -989,7 +988,7 @@ A fully loaded chassis must form a continuous shielded enclosure:
table(
columns: 2,
table.header([Parameter], [Requirement]),
- [Shielding effectiveness], [$gt qty(20, "dB"), qtyrange(80, 1000, "MHz", delimiter: "\"to\"")$],
+ [Shielding effectiveness], [$gt qty(20, "dB"), qtyrange(80, 1000, "MHz")$],
[Panel joints], [Metal-to-metal contact of conductive gasket],
[Ventilation openings], [\ Maximum slot dimensions: $qty(10, "mm") times qty(2, "mm")$],
diff --git a/module-design.typ b/module-design.typ
index c9bb128..4880496 100644
--- a/module-design.typ
+++ b/module-design.typ
@@ -1,4 +1,4 @@
-#import "@preview/unify:0.8.1": num, qty, qtyrange, unit
+#import "unify.typ": num, qty, qtyrange, unit
#import "@preview/diverential:0.3.0": *
= Module design <module-design>
@@ -10,7 +10,7 @@ demanding requirements of the Metrologic tier.
The challenge is substantial. The Metrologic tier demands $qty(10, "ppm")$
precision, $qty(90, "dB")$ signal-to-noise ratio, and
-$qty(0.014, "ppm per hour", per: "/")$ drift over a DC to $qty(20, "kHz")$ bandwidth.
+$qty(0.014, "ppm per hour")$ drift over a DC to $qty(20, "kHz")$ bandwidth.
These specifications, taken together, require that a $qty(20, "V")$ signal range
be resolved to $qty(200, "uV")$, that noise remain below $qty(632.455, "uVrms")$,
and that accumulated drift not exceed $qty(10, "ppm")$ over thirty days of
@@ -107,7 +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")$],
[$T$], [Absolute temperature], [N/A], [$unit(K)$],
[$e$], [Elementary charge], [$num("1.603e-19")$], [$unit(C)$],
@@ -128,7 +128,7 @@ 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")$],
[$tau$], [Time constant ($tau = upright("RC") "or" upright("L/R")$)], [$unit(s)$],
@@ -180,18 +180,18 @@ operators.
[$Z_"in"$], [Input impedance], [$unit("ohm")$],
[$Z_"out"$], [Output impedance], [$unit("ohm")$],
[$upright("GBW")$], [Gain-bandwidth product], [$unit("Hz")$],
- [$upright("SR")$], [Slew rate], [$unit("volt per micro second", per: "/")$],
+ [$upright("SR")$], [Slew rate], [$unit("volt per micro second")$],
[$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")$],
- [$V_"CR"$], [Voltage coefficient of resistance], [$unit("ppm per volt", per: "/")$],
+ [$V_"CR"$], [Voltage coefficient of resistance], [$unit("ppm per volt")$],
- [$V_"CC"$], [Voltage coefficient of capacitance], [$unit("ppm per volt", per: "/")$],
+ [$V_"CC"$], [Voltage coefficient of capacitance], [$unit("ppm per volt")$],
[$upright("DA")$], [Dielectric absorption], [$unit("percent")$],
- [$S$], [Seebeck coefficient], [$unit("micro volt per celsius", per: "/")$],
- [$theta$], [Thermal resistance], [$unit("celsius per watt", per: "/")$],
+ [$S$], [Seebeck coefficient], [$unit("micro volt per celsius")$],
+ [$theta$], [Thermal resistance], [$unit("celsius per watt")$],
),
caption: [Circuit and component parameters],
) <table-circuit-and-component-parameters>
@@ -214,7 +214,7 @@ operators.
[$epsilon_"gain"$], [Gain error], [$unit("ppm")$],
[$epsilon_"ratio"$], [Ratio error for matched components], [$unit("ppm")$],
[$epsilon_"thermal"$], [Thermally-induced error], [$unit("ppm")$],
- [$dv(epsilon, t)$], [Drift rate], [$unit("ppm per hour", per: "/")$],
+ [$dv(epsilon, t)$], [Drift rate], [$unit("ppm per hour")$],
[$S_y^p$], [Sensitivity of $y$ to parameter $p$], [dimensionless],
[$upright("SNR")$], [Signal-to-noise ratio], [$unit("dB")$],
[$upright("RTI")$], [Referred-to-input], [$unit("uV")$],
@@ -230,15 +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")$],
[$upright(i)_n$],
[Current noise spectral density],
- [$unit("pico ampere per shertz", per: "/")$ or $unit("femto ampere per shertz", per: "/")$],
+ [$unit("pico ampere per shertz")$ or $unit("femto ampere per shertz")$],
- [$e_(n,"white")$], [White noise component], [$unit("nano volt per shertz", per: "/")$],
+ [$e_(n,"white")$], [White noise component], [$unit("nano volt per shertz")$],
- [$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")$ at $qty(1, "Hz")$],
[$f_c$], [Noise corner frequency ($1/f$ to white)], [$unit("Hz")$],
@@ -276,14 +276,14 @@ operators.
[$T$], [Temperature (absolute)], [$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")$],
- [$theta_"conv"$], [Convective thermal resistance], [$unit("celsius per watt", per: "/")$],
+ [$theta_"conv"$], [Convective thermal resistance], [$unit("celsius per watt")$],
- [$theta_"cond"$], [Conductive thermal resistance], [$unit("celsius per watt", per: "/")$],
+ [$theta_"cond"$], [Conductive thermal resistance], [$unit("celsius per watt")$],
[$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")$],
[$c_p$], [Specific heat capacity], [$unit("J")/(unit("kg") dot unit("K"))$],
),
@@ -387,8 +387,8 @@ Standard SI prefixes are used throughout:
flicker noise). Drift errors require continuous compensation or periodic
recalibration.
/ Drift Rate: The rate at which a parameter changes over time, typically
- specified in $unit("ppm per hour", per: "/")$. The SAME Metrologic tier specifies a
- maximum drift rate of $qty(0.014, "ppm per hour", per: "/")$.
+ specified in $unit("ppm per hour")$. The SAME Metrologic tier specifies a
+ maximum drift rate of $qty(0.014, "ppm per hour")$.
/ Precision: A measure of how closely repeated measurements or computations
agree with each other, expressed as the maximum acceptable deviation from the
ideal value. The SAME Metrologic tier specifies $qty(10, "ppm")$
@@ -420,7 +420,7 @@ Standard SI prefixes are used throughout:
=== Component terminology <component-terminology>
/ Temperature Coefficient (Tempco): The rate at which a component parameter
- changes with temperature, typically specified in $unit("ppm per celsius", per: "/")$.
+ changes with temperature, typically specified in $unit("ppm per celsius")$.
Lower tempco indicates greater temperature stability.
/ Voltage Coefficient of Resistance ($V_"CR"$): The rate at which
resistance changes with applied voltage, specified in $unit("ppm per volt")$
@@ -429,7 +429,7 @@ Standard SI prefixes are used throughout:
/ Voltage Coefficient of Capacitance ($V_"CC"$): The rate at which
capacitance changes with applied voltage. Class 2 ceramic capacitors (X7R,
X5R) can exhibit $V_"CC"$ of
- $qtyrange(-30, -80, "percent", delimiter: "\"to\"")$ at rated voltage, making
+ $qtyrange(-30, -80, "percent")$ at rated voltage, making
them unsuitable for signal paths.
/ Dielectric Absorption ($upright("DA")$): A memory effect in capacitors where
rapid charge/discharge cycles leave residual polarization that manifests as
@@ -441,8 +441,8 @@ Standard SI prefixes are used throughout:
exist.
/ Seebeck Coefficient: The voltage generated per degree of temperature
difference at a thermocouple junction, specified in
- $unit("micro volt per celsius", per: "/")$. Copper-to-Kovar junctions have coefficients
- around $qty(40, "micro volt per celsius", per: "/")$.
+ $unit("micro volt per celsius")$. Copper-to-Kovar junctions have coefficients
+ around $qty(40, "micro volt per celsius")$.
/ Matched Components: Components fabricated together on a common substrate or
selected to have closely tracking parameter values. Matching reduces ratio
errors even when absolute tolerances are significant.
@@ -452,8 +452,8 @@ Standard SI prefixes are used throughout:
($qty(100, "ppm")$) or better.
/ Tracking Temperature Coefficient: The difference in temperature coefficients
between matched components. Well-matched components have tracking tempcos
- below $qty(2, "ppm per celsius", per: "/")$ even when individual tempcos are
- $qty(25, "ppm per celsius", per: "/")$.
+ below $qty(2, "ppm per celsius")$ even when individual tempcos are
+ $qty(25, "ppm per celsius")$.
=== Amplifier and circuit terminology <amplifier-and-circuit-terminology>
@@ -475,7 +475,7 @@ Standard SI prefixes are used throughout:
voltage variations. $upright("PSRR")$ degrades with frequency, making
high-frequency supply noise more problematic.
/ Open-Loop Gain ($A_"OL"$): The gain of an amplifier without feedback,
- typically $106$ to $108$ ($qtyrange(120, 160, "dB", delimiter: "\"to\"")$) for precision op-amps.
+ typically $106$ to $108$ ($qtyrange(120, 160, "dB")$) for precision op-amps.
Finite open-loop gain creates closed-loop gain error proportional to
$G_"ideal"/A_"OL"$.
/ Gain-Bandwidth Product ($upright("GBW")$): The product of an op-amp's DC
@@ -483,7 +483,7 @@ Standard SI prefixes are used throughout:
single-pole op-amp, $upright("GBW")$ is constant and determines gain error at
frequency.
/ Slew Rate: The maximum rate of change of an op-amp's output voltage, typically
- specified in $unit("volt per micro second", per: "/")$. Insufficient slew rate causes
+ specified in $unit("volt per micro second")$. Insufficient slew rate causes
distortion for large, fast signals.
/ Settling Time: The time required for an amplifier output to settle within a
specified error band after a step input. Settling to $qty(10, "ppm")$
@@ -491,7 +491,7 @@ Standard SI prefixes are used throughout:
/ Chopper Stabilization: A technique that eliminates low-frequency errors by
periodically reversing signal polarity and correcting for the resulting
offset. Chopper-stabilized amplifiers achieve offset drifts below
- $qty(0.05, "micro volt per celsius", per: "/")$.
+ $qty(0.05, "micro volt per celsius")$.
/ Loop Gain: The product of forward gain $A$ and feedback factor $beta$ in a
feedback system. Loop gain determines error suppression: errors in the forward
path are divided by $(1 + A beta)$.
@@ -541,7 +541,7 @@ Standard SI prefixes are used throughout:
rail indicates whether a module should operate at $qty(0, "degree")$ or
$qty(90, "degree")$ phase relative to the Master Oscillator.
/ Phase Noise: Random fluctuations in the phase of an oscillator signal, which
- manifest as timing jitter. Low phase noise ($lt.eq qty(-140, "dBc per hertz", per: "/")$
+ manifest as timing jitter. Low phase noise ($lt.eq qty(-140, "dBc per hertz")$
at $qty(1, "kHz")$ offset) is essential for high-precision PWAM.
/ Jitter: Random variations in the timing of signal transitions. Clock jitter
converts directly to amplitude noise in PWAM systems.
@@ -552,7 +552,7 @@ Standard SI prefixes are used throughout:
matched components along lines of constant temperature to ensure identical
thermal environments.
/ Thermal Gradient: The spatial rate of change of temperature across a surface
- or volume, typically expressed in $unit("celsius per centi meter", per: "/")$. Thermal
+ or volume, typically expressed in $unit("celsius per centi meter")$. Thermal
gradients cause matched components to experience different temperatures,
degrading their matching.
/ Ovenization: The practice of enclosing a critical component (typically a
@@ -612,7 +612,7 @@ Standard SI prefixes are used throughout:
/ Shielding Effectiveness: The attenuation of electromagnetic fields provided by
a conductive enclosure, typically specified in $unit("dB")$. The SAME cassette
provides $gt qty(20, "dB")$ shielding from
- $qtyrange(80, 1000, "MHz", delimiter: "\"to\"")$.
+ $qtyrange(80, 1000, "MHz")$.
=== Module category terminology <module-category-terminology>
@@ -651,7 +651,7 @@ Standard SI prefixes are used throughout:
<manufacturing-and-assembly-terminology>
/ Burn-In: A period of powered operation (typically
- $qtyrange(168, 1000, "hour", delimiter: "\"to\"")$) that accelerates initial component
+ $qtyrange(168, 1000, "hour")$) that accelerates initial component
stabilization before final calibration.
/ Surface Insulation Resistance ($upright("SIR")$): The resistance between
adjacent conductors on a PCB surface, affected by flux residue, contamination,
@@ -700,7 +700,7 @@ Metrologic tier specifications for signals crossing that boundary.
For example, a module converting SAME signals to consumer line-level audio
(nominally $plus.minus qty(1, "V")$, with typical THD+N specifications of
-$qtyrange(0.001, 0.01, "percent", delimiter: "\"to\"")$) cannot deliver
+$qtyrange(0.001, 0.01, "percent")$) cannot deliver
$qty(10, "ppm")$ precision on the audio side regardless of the quality of the
conversion circuitry. The interface module documentation must clearly state the
precision limitations imposed by the external format.
@@ -975,7 +975,7 @@ SAME Metrologic tier specifications are achievable:
table.header([Parameter], [Requirement]),
[Precision], [$qty(10, "ppm")$ ($qty(0.001, "percent")$)],
[Signal-to-noise ratio], [$qty(90, "dB")$],
- [Drift rate], [$lt.eq qty(0.014, "ppm per hour", per: "/")$],
+ [Drift rate], [$lt.eq qty(0.014, "ppm per hour")$],
[Bandwidth], [DC to $qty(20, "kHz")$],
[Drift-free operation], [$qty(30, "day")$],
),
@@ -1090,10 +1090,10 @@ continuous computation.
==== Drift rate and long-term stability <drift-rate-and-long-term-stability>
-The drift rate specification of $qty(0.014, "ppm per hour", per: "/")$ means:
+The drift rate specification of $qty(0.014, "ppm per hour")$ means:
$
- dv(epsilon, t) lt.eq num("0.014e-6") times qty(20, "volt per hour", per: "/") = qty(280, "nano volt per hour", per: "/")
+ dv(epsilon, t) lt.eq num("0.014e-6") times qty(20, "volt per hour") = qty(280, "nano volt per hour")
$
Over 30 days (720 hours), the accumulated drift is:
@@ -1105,7 +1105,7 @@ systematic error budget. After 30 days, recalibration is required.
/ Important: The drift specification is a rate, not an absolute value. A module
may have an initial offset of $qty(5, "ppm")$ (within spec) and drift at
- $qty(0.014, "ppm per hour", per: "/")$. After 15 days, it reaches $qty(10, "ppm")$ total
+ $qty(0.014, "ppm per hour")$. After 15 days, it reaches $qty(10, "ppm")$ total
and is now at the edge of specification. To guarantee a 30-day drift-free
computation period, active compensation topologies must trim or null
$epsilon_"initial"$ to near-zero ($lt qty(0.5, "ppm")$) at $t = 0$.
@@ -1193,7 +1193,7 @@ absolute temperature $T$ is:
$ e_n = sqrt(4 k_B T R) $
Where:
-- $k_B = qty("1.381e-23", "joule per kelvin", per: "/")$ (Boltzmann constant),
+- $k_B = qty("1.381e-23", "joule per kelvin")$ (Boltzmann constant),
- $T =$ absolute temperature ($unit(K)$),
- $R =$ resistance ($unit("ohm")$).
@@ -1262,7 +1262,7 @@ Op-amp input voltage noise arises from two mechanisms:
====== Mathematical model <opamp-voltage-noise-mathematical-model>
Op-amp voltage noise is specified as a spectral density
-$e_n (f)$ in $unit("nano volt per shertz", per: "/")$:
+$e_n (f)$ in $unit("nano volt per shertz")$:
$
e_n (f) = sqrt(e_(n,"white")^2 + (e_(n,1/f)^2)/f) = e_(n,"white") sqrt(1 + f_c/f)
@@ -1290,24 +1290,18 @@ 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],
+ [General purpose (TL07x)], [$18 unit("nano volt per shertz")$], [$qty(200, "Hz")$], [JFET input],
- [Low noise (OPA211)], [$1.1 unit("nano volt per shertz", per: "/")$], [$qty(10, "Hz")$], [Bipolar input],
+ [Low noise (OPA211)], [$1.1 unit("nano volt per shertz")$], [$qty(10, "Hz")$], [Bipolar input],
- [Precision low noise (LT1028)],
- [$0.85 unit("nano volt per shertz", per: "/")$],
- [$qty(3.5, "Hz")$],
- [Bipolar input],
+ [Precision low noise (LT1028)], [$0.85 unit("nano volt per shertz")$], [$qty(3.5, "Hz")$], [Bipolar input],
- [Chopper stabilized (LTC2057)],
- [$7 unit("nano volt per shertz", per: "/")$],
- [$lt qty(1, "Hz")$],
- [No $1/f$ corner],
+ [Chopper stabilized (LTC2057)], [$7 unit("nano volt per shertz")$], [$lt qty(1, "Hz")$], [No $1/f$ corner],
),
caption: [Op-amp voltage noise typical magnitudes],
) <table-opamp-voltage-noise-typical-magnitude>
-For a precision op-amp ($1 unit("nano volt per shertz", per: "/"), f_c = qty(10, "Hz")$)
+For a precision op-amp ($1 unit("nano volt per shertz"), f_c = qty(10, "Hz")$)
over $qty(0.001, "Hz")$ to $qty(20, "kHz")$:
$
@@ -1327,7 +1321,7 @@ amplifier, output noise is $10 times$ input voltage noise.
====== Compensation strategy <opamp-voltage-noise-compensation-strategy>
-- Select low noise bipolar op-amps ($e_n < 2 unit("nano volt per shertz", per: "/")$) for
+- Select low noise bipolar op-amps ($e_n < 2 unit("nano volt per shertz")$) for
low-source-impedance nodes,
- Minimize closed-loop gain stages in initial processing stages,
- Use chopper-stabilized amplifiers where $1/f$ where drift dominates
@@ -1346,7 +1340,7 @@ due to their extremely low bias currents.
====== Mathematical model <opamp-current-noise-mechanical-model>
-Current noise spectral density $i_n$ in $unit("pico ampere per shertz", per: "/")$ flows
+Current noise spectral density $i_n$ in $unit("pico ampere per shertz")$ flows
through the source impedance $Z_"source"$ seen by the op-amp terminal,
generating an equivalent input voltage noise:
@@ -1362,16 +1356,16 @@ $ 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")$], [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")$], [Negligible],
- [CMOS (LMC6001)], [$0.13 unit("femto ampere per shertz", per: "/")$], [Negligible],
+ [CMOS (LMC6001)], [$0.13 unit("femto ampere per shertz")$], [Negligible],
),
caption: [Op-amp current noise typical magnitudes],
) <table-opamp-current-noise-typical-magnitude>
-For a bipolar op-amp ($1 unit("pico ampere per shertz", per: "/")$) with $qty(10, "kilo ohm")$
+For a bipolar op-amp ($1 unit("pico ampere per shertz")$) with $qty(10, "kilo ohm")$
source impedance over $qty(20, "kHz")$:
$
@@ -1412,7 +1406,7 @@ and $i_(n-)$ are uncorrelated shot-noise sources. Mitigation requires:
Fluctuations and high-frequency ripple on the power supply rails couple into the
signal path through finite Power Supply Rejection Ratio ($upright("PSRR")$).
Because $upright("PSRR")$ degrades with frequency at approximately
-$qty(-20, "decibel per decade", per: "/")$, high-frequency supply ripple poses a
+$qty(-20, "decibel per decade")$, high-frequency supply ripple poses a
significantly greater threat to precision than DC supply variations.
====== Mathematical model <power-supply-noise-coupling-mathematical-model>
@@ -1508,7 +1502,7 @@ $ V_(upright("DC"),"error") = alpha dot V_("induced") $
<radiated-and-conducted-rf-interference-typical-magnitude>
For a $l = qty(1, "m")$ unshielded banana patch cable in an
-$E = qty(3, "volt per meter", per: "/")$ ambient RF field (per EN-6100-4-3
+$E = qty(3, "volt per meter")$ ambient RF field (per EN-6100-4-3
specification limit) with coupling efficiency $eta = 0.1$:
$ V_("induced") = 3 times 1 times 0.1 = qty(300, "mVpp") $
@@ -1545,7 +1539,7 @@ budget.
Induced RF voltage scales linearly with electric field strength $E$ and cable
length $l$. Attenuation from passive RC low-pass filters scales at
-$qty(-20, "decibel per decade", per: "/")$ per filter pole above the cutoff
+$qty(-20, "decibel per decade")$ per filter pole above the cutoff
frequency.
====== Compensation strategy
@@ -1602,7 +1596,7 @@ $
For external equipment connections, laboratory safety ground potential
differences $Delta V_G$ typically range from
-$qtyrange(1, 100, "mV", delimiter: "\"to\"")$. Without differential rejection, a
+$qtyrange(1, 100, "mV")$. Without differential rejection, a
$qty(10, "mV")$ ground offset introduces a catastrophic $qty(10, "mV")$
($qty(500, "ppm")$) error.
@@ -1627,7 +1621,7 @@ $
Intra-chassis ground error scales linearly with module return current
$I_("return")$ and AGND copper resistance $R_(upright("AGND"))$. Inter-chassis
ground error scales inversely with Interface Module
-$upright("CMRR")_(unit("dB"))$ at $qty(20, "decibel per decade", per: "/")$.
+$upright("CMRR")_(unit("dB"))$ at $qty(20, "decibel per decade")$.
====== Compensation strategy <ground-loop-currents-compensation-strategy>
@@ -1744,7 +1738,7 @@ 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
+$unit("mV") / unit("meter per second")$ and $dv(L, t)$ is the rate of mechanical
deformation.
Piezoelectric microphonic voltage generated across a capacitor of capacitance
@@ -1759,22 +1753,22 @@ dielectric material.
<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: "/")$):
+$k_("tribo") approx qty(50, "milli volt per meter per second")$
+experiencing mild flexing ($dv(L, t) = qty(1, "milli meter per second")$):
$
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: "/")$):
+($k_("tribo") approx qty(1, "milli volt per meter per second")$):
$
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
+($d_33 approx qty(200, "pico coulomb per newton")$) subjected to a
$qty(1, "g")$ ($qty(0.1, "N")$) acoustic/mechanical vibration spike on a
$qty(100, "nF")$ node:
@@ -1942,33 +1936,25 @@ materials.
columns: 5,
table.header([Inductor type], [$upright("DCR")$], [Core loss ($qty(10, "kHz")$)], [Self-resonance], [Notes]),
[Air core],
- [High ($qtyrange(1, 100, "ohm", delimiter: "\"to\"")$)],
+ [High ($qtyrange(1, 100, "ohm")$)],
[None],
[High ($gt qty(100, "MHz")$)],
[No saturation, no core noise],
[Ferrite bead],
- [$qtyrange(0.1, 1, "ohm", delimiter: "\"to\"")$],
+ [$qtyrange(0.1, 1, "ohm")$],
[Very high],
- [$qtyrange(10, 100, "MHz", delimiter: "\"to\"")$],
+ [$qtyrange(10, 100, "MHz")$],
[Designed for loss (filtering)],
- [Ferrite inductor],
- [$qtyrange(0.1, 10, "ohm", delimiter: "\"to\"")$],
- [Moderate],
- [$qtyrange(1, 50, "MHz", delimiter: "\"to\"")$],
- [General purpose],
+ [Ferrite inductor], [$qtyrange(0.1, 10, "ohm")$], [Moderate], [$qtyrange(1, 50, "MHz")$], [General purpose],
- [Powdered iron],
- [$qtyrange(0.5, 5, "ohm", delimiter: "\"to\"")$],
- [Low],
- [$qtyrange(1, 10, "MHz", delimiter: "\"to\"")$],
- [DC bias tolerant],
+ [Powdered iron], [$qtyrange(0.5, 5, "ohm")$], [Low], [$qtyrange(1, 10, "MHz")$], [DC bias tolerant],
[Laminated steel],
- [$qtyrange(0.1, 1, "ohm", delimiter: "\"to\"")$],
+ [$qtyrange(0.1, 1, "ohm")$],
[Low at audio rate],
- [$qtyrange(0.01, 1, "MHz", delimiter: "\"to\"")$],
+ [$qtyrange(0.01, 1, "MHz")$],
[Audio transformers],
),
caption: [Inductor losses and parasitic effects typical magnitudes],
diff --git a/unify.typ b/unify.typ
new file mode 100644
index 0000000..a8ed0da
--- /dev/null
+++ b/unify.typ
@@ -0,0 +1,9 @@
+#import "@preview/unify:0.8.1": (
+ num, numrange as sys-numrange, qty as sys-qty, qtyrange as sys-qtyrange, unit as sys-unit,
+)
+
+// Set global defaults via currying
+#let unit = sys-unit.with(per: "/")
+#let qty = sys-qty.with(per: "/")
+#let numrange = sys-numrange.with(delimiter: "\"to\"")
+#let qtyrange = sys-qtyrange.with(per: "/", delimiter: "\"to\"")