From a0a42cd84e4aec42f97cba849683cab5d49de4e1 Mon Sep 17 00:00:00 2001 From: Denis Chevalier Date: Mon, 10 Aug 2026 16:21:38 +0200 Subject: generate figure 1 (db-25 backplane connector) using cetz --- electrical-specifications.typ | 127 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 124 insertions(+), 3 deletions(-) (limited to 'electrical-specifications.typ') diff --git a/electrical-specifications.typ b/electrical-specifications.typ index 320ec1e..2a9ec15 100644 --- a/electrical-specifications.typ +++ b/electrical-specifications.typ @@ -1,4 +1,5 @@ #import "lib/unify.typ": qty, qtyrange +#import "@preview/cetz:0.5.2" = Electrical specifications @@ -573,9 +574,129 @@ the cassette to the power distribution board. D-sub connectors are ubiquitous, sturdy and shielded. #figure( - image("pictures/db-25-backplane-connector.svg"), - caption: [DB-25 backplane connector], -) + 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( table( -- cgit