From b28f97f3526859633fde603764b827389279d10f Mon Sep 17 00:00:00 2001 From: Denis Chevalier Date: Mon, 10 Aug 2026 22:32:38 +0200 Subject: extract figures in separate files --- mechanical-specifications.typ | 3264 +---------------------------------------- 1 file changed, 58 insertions(+), 3206 deletions(-) (limited to 'mechanical-specifications.typ') diff --git a/mechanical-specifications.typ b/mechanical-specifications.typ index de765f6..6e53a87 100644 --- a/mechanical-specifications.typ +++ b/mechanical-specifications.typ @@ -23,268 +23,13 @@ individual steel cassettes. We chose steel instead of aluminum, as it has better shielding properties, especially in terms of magnetic shielding. -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Material], [DC01 cold-rolled steel (EN 10130)], - [Thickness], [$qty(1.2, "mm")$], - [Finish], [Matte black powder coard (RAL 9005), all surfaces], - ), - caption: [Cassette construction parameters], -) +#include "tables/cassette-construction-parameters.typ" ==== External dimensions -#figure( - cetz.canvas({ - import cetz.draw: * - - // Scale factor: 1 mm = 0.06 drawing units - let s = 0.06 - - let h-panel = 177.8 * s // 6.223 - let h-body = 165.1 * s // 5.7785 - let h-lip = 6.35 * s // 0.22225 - let w-panel = 38.0 * s // 1.33 - let d-body = 152.4 * s // 5.334 - let t-panel = 3.0 * s // 0.105 (exaggerated slightly for visual clarity) - - let y-center = 0 - let y-top-panel = h-panel / 2 - let y-bot-panel = -h-panel / 2 - let y-top-body = h-body / 2 - let y-bot-body = -h-body / 2 - - // --- FRONT ELEVATION --- - let x-front-left = 0 - let x-front-right = w-panel - let x-front-mid = w-panel / 2 - - // View Title - content((x-front-mid, y-top-panel + 0.8), text( - size: 9pt, - weight: "bold", - )[FRONT ELEVATION]) - - // Front Panel Outline - rect( - (x-front-left, y-bot-panel), - (x-front-right, y-top-panel), - fill: luma(250), - stroke: 1.2pt + black, - ) - - // Hidden Body Transition Lines (Dashed) - line( - (x-front-left, y-top-body), - (x-front-right, y-top-body), - stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"), - ) - line( - (x-front-left, y-bot-body), - (x-front-right, y-bot-body), - stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"), - ) - - // Panel Mounting Screw Holes (Top and Bottom Lips) - circle( - (x-front-mid, y-top-panel - h-lip / 2), - radius: 0.08, - fill: white, - stroke: 0.8pt + black, - ) - circle( - (x-front-mid, y-bot-panel + h-lip / 2), - radius: 0.08, - fill: white, - stroke: 0.8pt + black, - ) - - // Dimension: Panel Width (38.0 mm) - line( - (x-front-left, y-bot-panel), - (x-front-left, y-bot-panel - 0.6), - stroke: 0.5pt + luma(120), - ) - line( - (x-front-right, y-bot-panel), - (x-front-right, y-bot-panel - 0.6), - stroke: 0.5pt + luma(120), - ) - line( - (x-front-left, y-bot-panel - 0.6), - (x-front-right, y-bot-panel - 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.12, - stroke: 0.7pt + black, - ) - content((x-front-mid, y-bot-panel - 0.9), text( - size: 7.5pt, - )[$qty(38.0, "mm")$]) - - // Dimension: Panel Height (177.8 mm / 4U) - line( - (x-front-left, y-top-panel), - (x-front-left - 0.6, y-top-panel), - stroke: 0.5pt + luma(120), - ) - line( - (x-front-left, y-bot-panel), - (x-front-left - 0.6, y-bot-panel), - stroke: 0.5pt + luma(120), - ) - line( - (x-front-left - 0.6, y-bot-panel), - (x-front-left - 0.6, y-top-panel), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.12, - stroke: 0.7pt + black, - ) - content( - (x-front-left - 0.95, y-center), - text(size: 7.5pt)[$qty(177.8, "mm")$ ($qty(4, "U")$)], - angle: 90deg, - ) - - // --- SIDE ELEVATION --- - let x-side-start = 2.8 - let x-panel-back = x-side-start + t-panel - let x-body-rear = x-panel-back + d-body - let x-side-mid = (x-side-start + x-body-rear) / 2 - - // View Title - content((x-side-mid, y-top-panel + 0.8), text( - size: 9pt, - weight: "bold", - )[SIDE ELEVATION]) - - // Cassette Steel Body - rect( - (x-panel-back, y-bot-body), - (x-body-rear, y-top-body), - fill: luma(235), - stroke: 1.2pt + black, - ) - - // Front Panel Plate Attached to Body - rect( - (x-side-start, y-bot-panel), - (x-panel-back, y-top-panel), - fill: luma(210), - stroke: 1.2pt + black, - ) - - // Rear DB-25 Connector Standoff / Bezel Projection - rect( - (x-body-rear, y-center - 0.6), - (x-body-rear + 0.25, y-center + 0.6), - fill: luma(240), - stroke: 0.8pt + black, - ) - - // Dimension: Depth (152.4 mm) - line( - (x-panel-back, y-top-panel), - (x-panel-back, y-top-panel + 0.2), - stroke: 0.5pt + luma(120), - ) - line( - (x-body-rear, y-top-panel - 0.4), - (x-body-rear, y-top-panel + 0.2), - stroke: 0.5pt + luma(120), - ) - line( - (x-panel-back, y-top-panel + 0.2), - (x-body-rear, y-top-panel + 0.2), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.12, - stroke: 0.7pt + black, - ) - content(((x-panel-back + x-body-rear) / 2, y-top-panel + 0.4), text( - size: 7.5pt, - )[$qty(152.4, "mm")$]) - - // Dimension: Body Height (165.1 mm) - line( - (x-body-rear, y-top-body), - (x-body-rear + 0.6, y-top-body), - stroke: 0.5pt + luma(120), - ) - line( - (x-body-rear, y-bot-body), - (x-body-rear + 0.6, y-bot-body), - stroke: 0.5pt + luma(120), - ) - line( - (x-body-rear + 0.6, y-bot-body), - (x-body-rear + 0.6, y-top-body), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.12, - stroke: 0.7pt + black, - ) - content( - (x-body-rear + 0.9, y-center), - text(size: 7.5pt)[$qty(165.1, "mm")$], - angle: -90deg, - ) - - // Dimension: Top Lip Height (6.35 mm) - line( - (x-panel-back, y-top-panel), - (x-body-rear + 1.8, y-top-panel), - stroke: 0.4pt + luma(160), - ) - line( - (x-panel-back, y-top-body), - (x-body-rear + 1.8, y-top-body), - stroke: 0.4pt + luma(160), - ) - line( - (x-body-rear + 1.65, y-top-body), - (x-body-rear + 1.65, y-top-panel), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.7pt + black, - ) - content( - (x-body-rear + 2.2, (y-top-panel + y-top-body) / 2), - text(size: 7.0pt)[$qty(6.35, "mm")$], - ) - }), - caption: [Cassette enclosure orthographic projections (front and side elevation) detailing external physical dimensions and lip offsets], -) - -#figure( - table( - columns: 4, - table.header([Dimension], [Value], [Tolerance], [Note]), - [Panel height], - [$qty(177.8, "mm")$ ($qty(4, "U"), qty(7, "inch")$)], - [$plus.minus qty(0.1, "mm")$], - [Full rack unit height], - - [Grid pitch], - [$qty(38.1, "mm")$ ($qty(1.5, "inch")$)], - [N/A], - [Theoretical center to center spacing. Two columns of banana jacks - ($qty(0.75, "inch")$ grid)], - - [Panel Width], - [$qty(38.0, "mm")$ ($qty(1.5, "inch")$)], - [$+0.0 "/" -0.1 "mm"$], - [Undersized to accomodate paint thickness and thermal expansion], - - [Body height], [$qty(165.1, "mm")$, ($qty(6.5, "inch")$)], [$plus.minus qty(0.1, "mm")$], [Fits between rails], - - [Body width], [$qty(38.0, "mm")$ ($qty(1.5, "inch")$)], [$+0.0 "/" -0.1 "mm"$], [Same as panel], - - [Depth], [$qty(152.4, "mm")$ ($qty(6, "inch")$)], [$plus.minus qty(0.2, "mm")$], [Front to rear], - - [Lip height], [$qty(6.35, "mm")$ ($qty(0.25, "inch")$)], [N/A], [Top and bottom], - ), - caption: [Cassette external dimensions], -) +#include "diagrams/cassette-external-dimensions.typ" + +#include "tables/cassette-external-dimensions.typ" The panel lips extend above and below the cassette body to fill the full $qty(4, "U")$ rack opening while the body fits between the chassis rails. @@ -296,425 +41,7 @@ interlocking U-shaped steel channel: ===== L-channel (chassis) -#figure( - cetz.canvas({ - import cetz.draw: * - - // Scale factor: 1 mm = 0.030 drawing units - let s = 0.030 - - let h = 165.1 * s // 4.953 - let d = 152.4 * s // 4.572 - let w = 35.7 * s // 1.071 - let f = 8.0 * s // 0.240 (8 mm flange width) - - let db25-y = 55.0 * s // 1.650 - let bnc-y = 130.0 * s // 3.900 - let db25-x = 17.85 * s // 0.5355 (centered in 35.7 mm width) - - let y-bot = 0 - let y-top = h - - // ========================================== - // 1. LEFT ELEVATION (Left Wall: 152.4 x 165.1 mm) - // ========================================== - let x-left-start = 0 - let x-left-end = x-left-start + d - let x-left-mid = (x-left-start + x-left-end) / 2 - - // View Title - content((x-left-mid, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[LEFT ELEVATION]) - - // Main Left Wall Sheet - rect( - (x-left-start, y-bot), - (x-left-end, y-top), - fill: luma(245), - stroke: 1.2pt + black, - ) - - // Folded Flanges (Top, Bottom, Front folded 90 deg inward - shown as dashed lines) - // Top Flange - line( - (x-left-start, y-top - f), - (x-left-end, y-top - f), - stroke: (paint: luma(120), thickness: 0.7pt, dash: "dashed"), - ) - // Bottom Flange - line( - (x-left-start, y-bot + f), - (x-left-end, y-bot + f), - stroke: (paint: luma(120), thickness: 0.7pt, dash: "dashed"), - ) - // Front Flange (at x-left-start) - line( - (x-left-start + f, y-bot), - (x-left-start + f, y-top), - stroke: (paint: luma(120), thickness: 0.7pt, dash: "dashed"), - ) - - // PEM Nut Press-Fit Inserts on Flanges (Representative circles) - circle( - (x-left-start + f / 2, y-bot + 12 * s), - radius: 0.06, - fill: white, - stroke: 0.6pt + black, - ) - circle( - (x-left-start + f / 2, y-top - 12 * s), - radius: 0.06, - fill: white, - stroke: 0.6pt + black, - ) - circle( - (x-left-mid, y-bot + f / 2), - radius: 0.06, - fill: white, - stroke: 0.6pt + black, - ) - circle( - (x-left-mid, y-top - f / 2), - radius: 0.06, - fill: white, - stroke: 0.6pt + black, - ) - - // Dimensions: Depth & Height - line( - (x-left-start, y-bot), - (x-left-start, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-end, y-bot), - (x-left-end, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-start, y-bot - 0.6), - (x-left-end, y-bot - 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content((x-left-mid, y-bot - 0.9), text(size: 7pt)[$qty(152.4, "mm")$]) - - line( - (x-left-start, y-bot), - (x-left-start - 0.6, y-bot), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-start, y-top), - (x-left-start - 0.6, y-top), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-start - 0.6, y-bot), - (x-left-start - 0.6, y-top), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-left-start - 0.9, (y-bot + y-top) / 2), - text(size: 7pt)[$qty(165.1, "mm")$], - angle: 90deg, - ) - - // ========================================== - // 2. REAR ELEVATION (Rear Closure: 35.7 x 165.1 mm) - // ========================================== - let x-rear-start = 5.8 - let x-rear-end = x-rear-start + w - let x-rear-mid = (x-rear-start + x-rear-end) / 2 - - // View Title - content((x-rear-mid, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[REAR ELEVATION]) - - // Main Rear Closure Plate - rect( - (x-rear-start, y-bot), - (x-rear-end, y-top), - fill: luma(235), - stroke: 1.2pt + black, - ) - - // Flanges (Top, Bottom, Right folded 90 deg inward) - line((x-rear-start, y-top - f), (x-rear-end, y-top - f), stroke: ( - paint: luma(120), - thickness: 0.7pt, - dash: "dashed", - )) - line((x-rear-start, y-bot + f), (x-rear-end, y-bot + f), stroke: ( - paint: luma(120), - thickness: 0.7pt, - dash: "dashed", - )) - line((x-rear-end - f, y-bot), (x-rear-end - f, y-top), stroke: ( - paint: luma(120), - thickness: 0.7pt, - dash: "dashed", - )) - - // DB-25 Cutout at Y = 55.0 mm (Centered) - let db25-w = 26.0 * s - let db25-h = 11.0 * s - rect( - (x-rear-start + db25-x - db25-w / 2, db25-y - db25-h / 2), - (x-rear-start + db25-x + db25-w / 2, db25-y + db25-h / 2), - fill: white, - stroke: 0.9pt + black, - ) - content((x-rear-start + db25-x, db25-y), text( - size: 5.5pt, - weight: "bold", - )[DB-25]) - - // BNC Cutout at Y = 130.0 mm (Centered, Facultative) - let bnc-r = 6.0 * s - circle( - (x-rear-start + db25-x, bnc-y), - radius: bnc-r, - fill: white, - stroke: 0.9pt + black, - ) - content((x-rear-start + db25-x, bnc-y), text( - size: 5pt, - weight: "bold", - )[BNC]) - - // Cutout Centerline Indicators & Heights - line((x-rear-start - 0.2, db25-y), (x-rear-end + 0.6, db25-y), stroke: ( - paint: luma(160), - thickness: 0.4pt, - dash: "dash-dotted", - )) - line((x-rear-start - 0.2, bnc-y), (x-rear-end + 0.6, bnc-y), stroke: ( - paint: luma(160), - thickness: 0.4pt, - dash: "dash-dotted", - )) - - // Width Dimension (35.7 mm) - line( - (x-rear-start, y-bot), - (x-rear-start, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-rear-end, y-bot), - (x-rear-end, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-rear-start, y-bot - 0.6), - (x-rear-end, y-bot - 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content((x-rear-mid, y-bot - 0.9), text(size: 7pt)[$qty(35.7, "mm")$]) - - // Height Dimensions: DB-25 (55 mm) & BNC (130 mm) - line( - (x-rear-end, y-bot), - (x-rear-end + 0.6, y-bot), - stroke: 0.4pt + luma(140), - ) - line( - (x-rear-end + 0.6, y-bot), - (x-rear-end + 0.6, db25-y), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-rear-end + 0.9, db25-y / 2), - text(size: 6.5pt)[$qty(55.0, "mm")$], - angle: -90deg, - ) - - line( - (x-rear-end + 0.6, db25-y), - (x-rear-end + 0.6, bnc-y), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-rear-end + 0.9, (db25-y + bnc-y) / 2), - text(size: 6.5pt)[$qty(130.0, "mm")$], - angle: -90deg, - ) - - // ========================================== - // 3. ISOMETRIC VIEW (3D Sheet Metal Structure) - // ========================================== - let iso-x0 = 12.5 - let iso-y0 = -1 - - // Helper function for isometric projection - // X = Width (0..35.7 mm), Y = Height (0..165.1 mm), Z = Depth (0..152.4 mm) - let p(x-mm, y-mm, z-mm) = { - let px = iso-x0 + (x-mm * 0.866 - z-mm * 0.866) * s - let py = iso-y0 + (y-mm + x-mm * 0.5 + z-mm * 0.5) * s - return (px, py) - } - - // View Title - content((iso-x0, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[ISOMETRIC VIEW]) - - // Left Wall Outer Face (Z=0..152.4, Y=0..165.1, X=0) - line( - p(0, 0, 0), - p(0, 0, 152.4), - p(0, 165.1, 152.4), - p(0, 165.1, 0), - close: true, - fill: luma(240), - stroke: 1pt + black, - ) - - // Rear Closure Outer Face (X=0..35.7, Y=0..165.1, Z=0) - line( - p(0, 0, 0), - p(35.7, 0, 0), - p(35.7, 165.1, 0), - p(0, 165.1, 0), - close: true, - fill: luma(225), - stroke: 1pt + black, - ) - - // Folded Inward Flanges (8 mm width) - // Left Wall Top Flange - line( - p(0, 165.1, 0), - p(0, 165.1, 152.4), - p(8.0, 165.1, 152.4), - p(8.0, 165.1, 0), - close: true, - fill: luma(210), - stroke: 0.8pt + black, - ) - - // Left Wall Front Flange - line( - p(0, 0, 152.4), - p(0, 165.1, 152.4), - p(8.0, 165.1, 152.4), - p(8.0, 0, 152.4), - close: true, - fill: luma(215), - stroke: 0.8pt + black, - ) - - // Rear Wall Bottom Flange - line( - p(0, 0, 0), - p(0, 0, 8.0), - p(35.7, 0, 8.0), - p(35.7, 0, 0.0), - close: true, - fill: luma(200), - stroke: 0.8pt + black, - ) - - // Left Wall Bottom Flange - line( - p(0, 0, 0), - p(0, 0, 152.4), - p(8.0, 0, 152.4), - p(8.0, 0, 8), - close: true, - fill: luma(210), - stroke: 0.8pt + black, - ) - - // Rear Wall Right Flange - line( - p(35.7, 0, 0), - p(35.7, 165.1, 0), - p(35.7, 165.1, 8.0), - p(35.7, 0, 8.0), - close: true, - fill: luma(200), - stroke: 0.8pt + black, - ) - - // Rear Wall Top Flange - line( - p(0, 165.1, 0), - p(0, 165.1, 8.0), - p(35.7, 165.1, 8.0), - p(35.7, 165.1, 0.0), - close: true, - fill: luma(200), - stroke: 0.8pt + black, - ) - - // DB-25 Cutout on Rear Face (Z=0) - let db-w2 = 13.0 - let db-h2 = 5.5 - line( - p(17.85 - db-w2, 55.0 - db-h2, 0), - p(17.85 + db-w2, 55.0 - db-h2, 0), - p(17.85 + db-w2, 55.0 + db-h2, 0), - p(17.85 - db-w2, 55.0 + db-h2, 0), - close: true, - fill: white, - stroke: 0.8pt + black, - ) - - // BNC Cutout on Rear Face (Z=0) - line( - p(17.85 - 4.5, 130.0 - 4.5, 0), - p(17.85 + 4.5, 130.0 - 4.5, 0), - p(17.85 + 4.5, 130.0 + 4.5, 0), - p(17.85 - 4.5, 130.0 + 4.5, 0), - close: true, - fill: white, - stroke: 0.8pt + black, - ) - - // PEM Nut Threaded Insert Points (Visual markers on top/front flanges) - circle(p(4.0, 165.1, 30.0), radius: 0.05, fill: black) - circle(p(4.0, 165.1, 120.0), radius: 0.05, fill: black) - circle(p(4.0, 0, 30.0), radius: 0.05, fill: black) - circle(p(4.0, 0, 120.0), radius: 0.05, fill: black) - circle(p(4.0, 30.0, 152.4), radius: 0.05, fill: black) - circle(p(4.0, 135.0, 152.4), radius: 0.05, fill: black) - circle(p(35.7 - 4.0, 30.0, 0), radius: 0.05, fill: black) - circle(p(35.7 - 4.0, 135.0, 0), radius: 0.05, fill: black) - circle(p(17.85, 165.1, 4.0), radius: 0.05, fill: black) - circle(p(17.85, 0, 4.0), radius: 0.05, fill: black) - - // Masked Unpainted Area Callout Annotation - line( - p(4.0, 165.1, 75.0), - (iso-x0 + 1.2, y-top), - stroke: 0.5pt + black, - ) - content( - (iso-x0 + 1.25, y-top - 0.3), - text(size: 6.5pt)[Unpainted EMI flange \ - contact area (PEM nuts \ - fitted)], - anchor: "south-west", - ) - }), - caption: [Cassette L-Channel structural spine technical drawings showing orthographic projections (left and rear elevations) and 3D isometric sheet metal form], -) +#include "diagrams/l-channel-chassis.typ" / Role: Structural spine. Holds the PCB and Front Panel. / Geometry: @@ -743,200 +70,7 @@ interlocking U-shaped steel channel: ===== U-channel (cover) -#figure( - cetz.canvas({ - import cetz.draw: * - - // Scale factor: 1 mm = 0.060 drawing units - let s = 0.060 - - let h = 165.1 * s // 4.953 mm - let d = 152.4 * s // 4.572 mm - let w = 35.7 * s // 1.071 mm - let f = 8.0 * s // 0.240 mm (8 mm flange overlap) - let t = 1.2 * s // Sheet metal thickness (1.2 mm) - - let y-bot = 0 - let y-top = h - - // ========================================== - // 1. FRONT ELEVATION (U-Profile End View: 35.7 x 165.1 mm) - // ========================================== - let x-front-start = 0 - let x-front-end = x-front-start + w - let x-front-mid = (x-front-start + x-front-end) / 2 - - // View Title - content((x-front-mid, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[FRONT ELEVATION]) - - // U-Channel Sheet Metal Cross-Section Outline - // Top Limb - rect( - (x-front-start, y-top - t), - (x-front-end, y-top), - fill: luma(210), - stroke: 0.8pt + black, - ) - // Right Side Wall - rect( - (x-front-end - t, y-bot), - (x-front-end, y-top), - fill: luma(230), - stroke: 0.8pt + black, - ) - // Bottom Limb - rect( - (x-front-start, y-bot), - (x-front-end, y-bot + t), - fill: luma(210), - stroke: 0.8pt + black, - ) - - // Inner Cavity Hatch/Indicator Line - line( - (x-front-start, y-bot + t), - (x-front-end - t, y-bot + t), - (x-front-end - t, y-top - t), - (x-front-start, y-top - t), - stroke: (paint: luma(140), thickness: 0.5pt, dash: "dotted"), - ) - - // Front Width Dimension (35.7 mm) - line( - (x-front-start, y-bot), - (x-front-start, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-end, y-bot), - (x-front-end, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-start, y-bot - 0.6), - (x-front-end, y-bot - 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content((x-front-mid, y-bot - 0.9), text(size: 7pt)[$qty(35.7, "mm")$]) - - // Front Height Dimension (165.1 mm) - line( - (x-front-start, y-bot), - (x-front-start - 0.6, y-bot), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-start, y-top), - (x-front-start - 0.6, y-top), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-start - 0.6, y-bot), - (x-front-start - 0.6, y-top), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-front-start - 0.9, (y-bot + y-top) / 2), - text(size: 7pt)[$qty(165.1, "mm")$], - angle: 90deg, - ) - - // ========================================== - // 2. RIGHT ELEVATION (Inner Face View: 152.4 x 165.1 mm) - // ========================================== - let x-right-start = 3.5 - let x-right-end = x-right-start + d - let x-right-mid = (x-right-start + x-right-end) / 2 - - // View Title - content((x-right-mid, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[RIGHT ELEVATION (INNER FACE)]) - - // Main Right Wall Sheet Metal Surface - rect( - (x-right-start, y-bot), - (x-right-end, y-top), - fill: luma(245), - stroke: 1.2pt + black, - ) - - // Masked Unpainted Perimeter Area (8mm border where it mates with L-channel flanges) - rect( - (x-right-start + f, y-bot + f), - (x-right-end - f, y-top - f), - fill: luma(230), - stroke: (paint: luma(130), thickness: 0.7pt, dash: "dashed"), - ) - content( - (x-right-mid, (y-bot + y-top) / 2), - text(size: 7.5pt, fill: luma(100))[Painted Central Surface], - ) - - // Countersunk Through-Holes (Crosshair + concentric circles for 90-deg countersink) - let draw-csink(cx, cy) = { - circle((cx, cy), radius: 0.10, fill: white, stroke: 0.6pt + black) - circle((cx, cy), radius: 0.05, fill: luma(180), stroke: 0.4pt + black) - line((cx - 0.13, cy), (cx + 0.13, cy), stroke: 0.3pt + luma(120)) - line((cx, cy - 0.13), (cx, cy + 0.13), stroke: 0.3pt + luma(120)) - } - - // Top & Bottom Edge Countersunk Hole Pattern (matching top/bottom flanges) - draw-csink(x-right-start + 30.0 * s, y-top - f / 2) - draw-csink(x-right-start + 122.4 * s, y-top - f / 2) - draw-csink(x-right-start + 30.0 * s, y-bot + f / 2) - draw-csink(x-right-start + 122.4 * s, y-bot + f / 2) - - // Front & Rear Edge Countersunk Hole Pattern - draw-csink(x-right-start + f / 2, y-bot + 30.0 * s) - draw-csink(x-right-start + f / 2, y-top - 30.0 * s) - draw-csink(x-right-end - f / 2, y-bot + 30.0 * s) - draw-csink(x-right-end - f / 2, y-top - 30.0 * s) - - // Depth Dimension (152.4 mm) - line( - (x-right-start, y-bot), - (x-right-start, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-right-end, y-bot), - (x-right-end, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-right-start, y-bot - 0.6), - (x-right-end, y-bot - 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content((x-right-mid, y-bot - 0.9), text(size: 7pt)[$qty(152.4, "mm")$]) - - // Masked Border Callout Annotation - line( - (x-right-start + f / 2, y-top - 15.0 * s), - (x-right-start - 0.5, y-top - 1.0), - stroke: 0.5pt + black, - ) - content( - (x-right-start - 0.5, y-top), - text(size: 6.5pt)[Masked unpainted perimeter \ - (8 mm EMI contact area)], - anchor: "south-east", - angle: 90deg, - ) - }), - caption: [Cassette U-Channel cover technical drawings showing Front Elevation (profile) and Right Elevation (inner face showing masked unpainted EMI perimeter and countersunk hole grid)], -) +#include "diagrams/u-channel-cover.typ" / Role: EMI Shielding and Protection. / Geometry: @@ -949,255 +83,8 @@ interlocking U-shaped steel channel: ===== Front panel -#figure( - cetz.canvas({ - import cetz.draw: * - - // Scale factor: 1 mm = 0.050 drawing units - let s = 0.050 - - let h-total = 177.8 * s // 8.890 mm - let h-body = 165.1 * s // 8.255 mm - let h-lip = 6.35 * s // 0.3175 mm (6.35 mm top/bottom lips) - let w = 38.0 * s // 1.900 mm (panel width) - let f = 8.0 * s // 0.400 mm (8 mm L-channel flange overlap) - - let y-bot = 0 - let y-lip-bot = h-lip - let y-lip-top = h-total - h-lip - let y-top = h-total - - // Helper: Draw M3 clearance hole (3.2 mm diameter) - let draw-m3-hole(cx, cy) = { - circle((cx, cy), radius: 1.6 * s, fill: white, stroke: 0.8pt + black) - line((cx - 2.5 * s, cy), (cx + 2.5 * s, cy), stroke: 0.3pt + luma(120)) - line((cx, cy - 2.5 * s), (cx, cy + 2.5 * s), stroke: 0.3pt + luma(120)) - } - - // Helper: Draw M3 countersunk hole (concentric circles + crosshair) - let draw-csink(cx, cy) = { - circle((cx, cy), radius: 3.0 * s, fill: white, stroke: 0.8pt + black) - circle((cx, cy), radius: 1.6 * s, fill: luma(200), stroke: 0.5pt + black) - line((cx - 4.0 * s, cy), (cx + 4.0 * s, cy), stroke: 0.3pt + luma(120)) - line((cx, cy - 4.0 * s), (cx, cy + 4.0 * s), stroke: 0.3pt + luma(120)) - } - - // ========================================== - // 1. FRONT ELEVATION (38.0 x 177.8 mm) - // ========================================== - let x-front-start = 0 - let x-front-end = x-front-start + w - let x-front-mid = (x-front-start + x-front-end) / 2 - - // View Title - content((x-front-mid, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[FRONT ELEVATION]) - - // Main Panel Outer Boundary - rect( - (x-front-start, y-bot), - (x-front-end, y-top), - fill: luma(245), - stroke: 1.2pt + black, - ) - - // Lip Limit Boundary Indicators (Dashed horizontal lines at 6.35 mm from top/bottom) - line( - (x-front-start, y-lip-bot), - (x-front-end, y-lip-bot), - stroke: (paint: luma(110), thickness: 0.7pt, dash: "dashed"), - ) - line( - (x-front-start, y-lip-top), - (x-front-end, y-lip-top), - stroke: (paint: luma(110), thickness: 0.7pt, dash: "dashed"), - ) - - // Centered M3 Panel Mounting Holes in Top and Bottom Lips - draw-m3-hole(x-front-mid, h-lip / 2) - draw-m3-hole(x-front-mid, h-total - h-lip / 2) - - // L-Channel Attachment Countersunk Holes (X = 4.0 mm, Y = 30.0 mm and 135.0 mm from body start) - let y-hole-lower = y-lip-bot + 30.0 * s - let y-hole-upper = y-lip-bot + 135.0 * s - let x-hole-lchannel = x-front-start + 4.0 * s - - draw-csink(x-hole-lchannel, y-hole-lower) - draw-csink(x-hole-lchannel, y-hole-upper) - - // Dimension: Panel Width (38.0 mm) - line( - (x-front-start, y-bot), - (x-front-start, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-end, y-bot), - (x-front-end, y-bot - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-start, y-bot - 0.55), - (x-front-end, y-bot - 0.55), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content((x-front-mid, y-bot - 0.85), text(size: 7pt)[$qty(38.0, "mm")$]) - - // Dimension: Total Height (177.8 mm / 4U) - line( - (x-front-start, y-bot), - (x-front-start - 0.6, y-bot), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-start, y-top), - (x-front-start - 0.6, y-top), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-start - 0.55, y-bot), - (x-front-start - 0.55, y-top), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-front-start - 0.85, (y-bot + y-top) / 2), - text(size: 7pt)[$qty(177.8, "mm")$ ($qty(4, "U")$)], - angle: 90deg, - ) - - // Dimension: Lip Height (6.35 mm) - line( - (x-front-end, y-top), - (x-front-end + 0.6, y-top), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-end, y-lip-top), - (x-front-end + 0.6, y-lip-top), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-end + 0.55, y-lip-top), - (x-front-end + 0.55, y-top), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content( - (x-front-end + 1.2, (y-lip-top + y-top) / 2), - text(size: 6.5pt)[$qty(6.35, "mm")$], - ) - - // Dimension: Body Height (165.1 mm) - line( - (x-front-end, y-lip-bot), - (x-front-end + 0.6, y-lip-bot), - stroke: 0.4pt + luma(140), - ) - line( - (x-front-end + 0.55, y-lip-bot), - (x-front-end + 0.55, y-lip-top), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-front-end + 0.85, (y-lip-bot + y-lip-top) / 2), - text(size: 7pt)[$qty(165.1, "mm")$], - angle: -90deg, - ) - - // ========================================== - // 2. REAR ELEVATION (INNER FACE: 38.0 x 177.8 mm) - // ========================================== - let x-rear-start = 4.5 - let x-rear-end = x-rear-start + w - let x-rear-mid = (x-rear-start + x-rear-end) / 2 - - // View Title - content((x-rear-mid, y-top + 0.8), text( - size: 8.5pt, - weight: "bold", - )[REAR ELEVATION (INNER FACE)]) - - // Painted Central Surface Area - rect( - (x-rear-start, y-bot), - (x-rear-end, y-top), - fill: luma(225), - stroke: 1.2pt + black, - ) - - // Masked Unpainted Area 1: Top Lip (6.35 mm full width) - rect( - (x-rear-start, y-lip-top), - (x-rear-end, y-top), - fill: luma(250), - stroke: (paint: luma(120), thickness: 0.6pt, dash: "dashed"), - ) - - // Masked Unpainted Area 2: Bottom Lip (6.35 mm full width) - rect( - (x-rear-start, y-bot), - (x-rear-end, y-lip-bot), - fill: luma(250), - stroke: (paint: luma(120), thickness: 0.6pt, dash: "dashed"), - ) - - // Masked Unpainted Area 3: L-Channel Front Flange Contact Strip (8 mm along right side in rear view) - rect( - (x-rear-end - f, y-lip-bot), - (x-rear-end, y-lip-top), - fill: luma(250), - stroke: (paint: luma(120), thickness: 0.6pt, dash: "dashed"), - ) - - // Center Painted Label - content( - (x-rear-start + (w - f) / 2, (y-lip-bot + y-lip-top) / 2), - text(size: 7.5pt, fill: luma(100))[Painted Surface], - ) - - // M3 Lip Holes in Rear View - draw-m3-hole(x-rear-mid, h-lip / 2) - draw-m3-hole(x-rear-mid, h-total - h-lip / 2) - - // L-Channel Attachment Holes in Rear View (X = 38.0 - 4.0 = 34.0 mm in rear view) - let x-hole-rear = x-rear-end - 4.0 * s - draw-m3-hole(x-hole-rear, y-hole-lower) - draw-m3-hole(x-hole-rear, y-hole-upper) - - // Masked Contact Area Callout Annotations - line( - (x-rear-mid, y-top - h-lip / 2), - (x-rear-end + 0.5, y-top + 0.3), - stroke: 0.5pt + black, - ) - content( - (x-rear-end + 0.55, y-top + 0.3), - text(size: 6.5pt)[Masked unpainted lip (chassis grounding)], - anchor: "south-west", - ) - - line( - (x-rear-end - f / 2, y-hole-upper + 10.0 * s), - (x-rear-end + 0.5, y-hole-upper + 10.0 * s), - stroke: 0.5pt + black, - ) - content( - (x-rear-end + 0.55, y-hole-upper + 10.0 * s), - text(size: 6.5pt)[Masked 8 mm flange contact strip], - anchor: "west", - ) - }), - caption: [Cassette Front Panel technical drawings showing Front Elevation (with countersunk L-channel attachment holes and lip mounting holes) and Rear Elevation (inner face detailing masked unpainted EMI contact areas)], -) +#include "diagrams/front-panel.typ" + / Geometry: $qty(177.8, "mm") times qty(38.0, "mm")$, body section $qty(165.1, "mm")$ / Holes: Features Countersunk Through-Holes corresponding to the L-Channel's @@ -1238,722 +125,22 @@ will fail, degrading the SNR below the $qty(90, "dB")$ target. ==== Internal dimensions -#figure( - table( - columns: 2, - table.header([Dimension], [Value]), - [Height], [$qty(162.7, "mm")$], - [Width], [$qty(35.6, "mm")$], - [Depth], [$qty(150, "mm")$], - ), - caption: [Cassette internal dimensions], -) +#include "tables/cassette-internal-dimensions.typ" ==== Ventilation Top and bottom faces include ventilation slots for convective cooling while maintaining EMI shielding. -#figure( - cetz.canvas({ - import cetz.draw: * - - // Scale factor: 1 mm = 0.045 drawing units - let s = 0.045 - - let face-d = 152.4 * s // Depth = 152.4 mm - let face-w = 35.7 * s // Width = 35.7 mm - - // Slot parameters - let slot-w = 2.5 * s // Slot width = 2.5 mm - let slot-l = 10.0 * s // Slot length = 10.0 mm - let slot-r = slot-w / 2 // Full corner radius = 1.25 mm - let row-pitch = 5.0 * s // 5 rows across width - let col-pitch = 12.0 * s // 12 columns across depth - - // Calculate array offsets to center slots on face - let row-start = (face-w - (4 * row-pitch)) / 2 - let col-start = (face-d - (11 * col-pitch + slot-l)) / 2 - - // ========================================== - // 1. TOP / BOTTOM FACE VENTILATION PATTERN (152.4 mm x 35.7 mm) - // ========================================== - let x-top-start = -0.5 - let y-top-start = 5.2 - let x-top-end = x-top-start + face-d - let y-top-end = y-top-start + face-w - let x-top-mid = (x-top-start + x-top-end) / 2 - let y-top-mid = (y-top-start + y-top-end) / 2 - - // View Title - content((x-top-mid, y-top-end + 0.7), text( - size: 9pt, - weight: "bold", - )[TOP / BOTTOM FACE VENTILATION PATTERN]) - content((x-top-mid, y-top-end + 0.35), text( - size: 7pt, - fill: luma(90), - )[(60 Slots per face: $5$ rows $times 12$ columns)]) - - // Main Plate Outline - rect( - (x-top-start, y-top-start), - (x-top-end, y-top-end), - fill: luma(250), - stroke: 1.2pt + black, - ) - - // 5 Rows x 12 Columns Slot Array with Full Corner Radius - for r in range(0, 5) { - let sy = y-top-start + row-start + r * row-pitch - for c in range(0, 12) { - let sx = x-top-start + col-start + c * col-pitch - rect( - (sx, sy - slot-w / 2), - (sx + slot-l, sy + slot-w / 2), - radius: slot-r, - fill: white, - stroke: 0.5pt + black, - ) - } - } - - // Depth Dimension (152.4 mm) - line( - (x-top-start, y-top-start), - (x-top-start, y-top-start - 0.5), - stroke: 0.4pt + luma(140), - ) - line( - (x-top-end, y-top-start), - (x-top-end, y-top-start - 0.5), - stroke: 0.4pt + luma(140), - ) - line( - (x-top-start, y-top-start - 0.45), - (x-top-end, y-top-start - 0.45), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content((x-top-mid, y-top-start - 0.75), text( - size: 7.5pt, - )[$qty(152.4, "mm")$]) - - // Width Dimension (35.7 mm) - line( - (x-top-end, y-top-start), - (x-top-end + 0.5, y-top-start), - stroke: 0.4pt + luma(140), - ) - line( - (x-top-end, y-top-end), - (x-top-end + 0.5, y-top-end), - stroke: 0.4pt + luma(140), - ) - line( - (x-top-end + 0.45, y-top-start), - (x-top-end + 0.45, y-top-end), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.10, - stroke: 0.6pt + black, - ) - content( - (x-top-end + 0.75, y-top-mid), - text(size: 7.5pt)[$qty(35.7, "mm")$], - angle: -90deg, - ) - - // Column Pitch Indicator (12.0 mm) - let c0-x = x-top-start + col-start + slot-l / 2 - let c1-x = c0-x + col-pitch - line((c0-x, y-top-start), (c0-x, y-top-start - 1.2), stroke: ( - paint: luma(140), - thickness: 0.4pt, - dash: "dashed", - )) - line((c1-x, y-top-start), (c1-x, y-top-start - 1.2), stroke: ( - paint: luma(140), - thickness: 0.4pt, - dash: "dashed", - )) - line( - (c0-x, y-top-start - 1.15), - (c1-x, y-top-start - 1.15), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.5pt + black, - ) - content(((c0-x + c1-x) / 2, y-top-start - 1.35), text( - size: 6.5pt, - )[Column pitch: $qty(12.0, "mm")$ ($12$ cols)]) - - // Row Pitch Indicator (5.0 mm) - let r0-y = y-top-start + row-start - let r1-y = r0-y + row-pitch - line((x-top-start, r0-y), (x-top-start - 0.8, r0-y), stroke: ( - paint: luma(140), - thickness: 0.4pt, - dash: "dashed", - )) - line((x-top-start, r1-y), (x-top-start - 0.8, r1-y), stroke: ( - paint: luma(140), - thickness: 0.4pt, - dash: "dashed", - )) - line( - (x-top-start - 0.75, r0-y), - (x-top-start - 0.75, r1-y), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.5pt + black, - ) - content( - (x-top-start - 0.85, (r0-y + r1-y) / 2), - text(size: 6.5pt)[Row pitch: $qty(5.0, "mm")$ ($5$ rows)], - anchor: "east", - ) - - // ========================================== - // 2. SINGLE SLOT GEOMETRY DETAIL (Enlarged View) - // ========================================== - let x-detail-center = -1.0 - let y-detail-center = 1.8 - let detail-l = 2.8 // Magnified length (10.0 mm) - let detail-w = 0.7 // Magnified width (2.5 mm) - let detail-r = detail-w / 2 // Full radius (1.25 mm) - - let sx1 = x-detail-center - detail-l / 2 - let sx2 = x-detail-center + detail-l / 2 - let sy1 = y-detail-center - detail-w / 2 - let sy2 = y-detail-center + detail-w / 2 - - // View Title - content((x-detail-center, y-detail-center + 1.2), text( - size: 8.5pt, - weight: "bold", - )[SINGLE SLOT GEOMETRY DETAIL]) - content((x-detail-center, y-detail-center + 0.85), text( - size: 7pt, - fill: luma(90), - )[(Enlarged view: $qty(2.5, "mm") times qty(10.0, "mm")$ slot)]) - - // Centerlines - line( - (sx1 - 0.4, y-detail-center), - (sx2 + 0.4, y-detail-center), - stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), - ) - line( - (x-detail-center, sy1 - 0.4), - (x-detail-center, sy2 + 0.4), - stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), - ) - - // Magnified Rounded Stadium Slot Contour - rect( - (sx1, sy1), - (sx2, sy2), - radius: detail-r, - fill: white, - stroke: 1.2pt + black, - ) - - // Slot Length Dimension (10.0 mm) - line((sx1, sy1), (sx1, sy1 - 0.5), stroke: 0.4pt + luma(140)) - line((sx2, sy1), (sx2, sy1 - 0.5), stroke: 0.4pt + luma(140)) - line( - (sx1, sy1 - 0.45), - (sx2, sy1 - 0.45), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content((x-detail-center, sy1 - 0.7), text( - size: 7pt, - )[$qty(10.0, "mm")$ (parallel to depth)]) - - // Slot Width Dimension (2.5 mm) - line((sx2, sy1), (sx2 + 0.5, sy1), stroke: 0.4pt + luma(140)) - line((sx2, sy2), (sx2 + 0.5, sy2), stroke: 0.4pt + luma(140)) - line( - (sx2 + 0.45, sy1), - (sx2 + 0.45, sy2), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content( - (sx2 + 0.55, y-detail-center), - text(size: 7pt)[$qty(2.5, "mm")$], - anchor: "west", - ) - - // Full Corner Radius Callout (R = 1.25 mm) - let arc-px = sx1 + detail-r * 0.29 - let arc-py = y-detail-center + detail-r * 0.71 - line( - (arc-px - 0.8, arc-py + 0.3), - (arc-px, arc-py), - mark: (end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content( - (arc-px - 0.85, arc-py + 0.35), - text(size: 6.5pt)[$R = qty(1.25, "mm")$], - anchor: "east", - ) - - // ========================================== - // 3. CONVECTIVE COOLING & EMI SHIELDING CONCEPT - // ========================================== - let x-phys-center = 6.5 - let y-phys-center = 1.8 - let phys-w = 3.6 - let phys-t = 0.12 - - // View Title - content((x-phys-center, y-phys-center + 1.2), text( - size: 8.5pt, - weight: "bold", - )[CONVECTIVE COOLING & EMI SHIELDING]) - content((x-phys-center, y-phys-center + 0.85), text( - size: 7pt, - fill: luma(90), - )[(Cross-sectional thermal & RF attenuation concept)]) - - // Top Face Metal Plate with 4 Slot Openings - let top-y = y-phys-center + 0 - rect( - (x-phys-center - phys-w / 2, top-y), - (x-phys-center + phys-w / 2, top-y + phys-t), - fill: luma(220), - stroke: 0.8pt + black, - ) - - // Bottom Face Metal Plate with 4 Slot Openings - let bot-y = y-phys-center - 1.2 - rect( - (x-phys-center - phys-w / 2, bot-y - phys-t), - (x-phys-center + phys-w / 2, bot-y), - fill: luma(220), - stroke: 0.8pt + black, - ) - - // Slot Apertures Cut into Plates - let ap-offsets = (-1.2, -0.4, 0.4, 1.2) - for dx in ap-offsets { - rect( - (x-phys-center + dx - 0.15, top-y - 0.02), - (x-phys-center + dx + 0.15, top-y + phys-t + 0.02), - fill: white, - stroke: none, - ) - rect( - (x-phys-center + dx - 0.15, bot-y - phys-t - 0.02), - (x-phys-center + dx + 0.15, bot-y + 0.02), - fill: white, - stroke: none, - ) - - // Convective Natural Airflow Lines (Dashed Vertical Lines) - line( - (x-phys-center + dx, bot-y - 0.4), - (x-phys-center + dx, top-y + 0.4), - stroke: (paint: black, thickness: 0.8pt, dash: "dashed"), - mark: (end: "stealth"), - mark-size: 0.08, - ) - } - - // Plate Labels - content( - (x-phys-center + phys-w / 2 + 0.15, top-y + phys-t / 2), - text(size: 6.5pt, weight: "bold")[Top face], - anchor: "west", - ) - content( - (x-phys-center + phys-w / 2 + 0.15, bot-y - phys-t / 2), - text(size: 6.5pt, weight: "bold")[Bottom face], - anchor: "west", - ) - - // Convective Airflow Center Annotation - content((x-phys-center, y-phys-center - 0.6), text( - size: 7pt, - weight: "bold", - )[Natural convection airflow]) - - // Incident RF Wave Attenuation Annotation (Wave Bouncing off Metal Face) - let wave-x0 = x-phys-center - 1.5 - line( - (wave-x0, top-y - 0.2), - (wave-x0 + 0.15, top-y - 0.4), - (wave-x0 + 0.3, top-y - 0.2), - (wave-x0 + 0.45, top-y - 0.4), - (wave-x0 + 0.6, top-y - 0.25), - stroke: 0.8pt + black, - ) - line( - (wave-x0 + 0.6, top-y - 0.25), - (wave-x0 + 0.3, top-y - 0.05), - stroke: 0.8pt + black, - mark: (end: "stealth"), - mark-size: 0.07, - ) - content( - (wave-x0 - 0.1, top-y - 0.1), - text(size: 6pt, weight: "bold")[Incident RF wave], - anchor: "east", - ) - content( - (wave-x0 - 0.1, top-y - 0.35), - text(size: 5.5pt, fill: luma(100))[(Attenuated $> qty(20, "dB")$)], - anchor: "east", - ) - }), - caption: [Cassette ventilation system details detailing full $5 times 12$ slot top elevation array, magnified single slot geometry with $R = qty(1.25, "mm")$ corner radius, and cross-sectional natural convective cooling / RF electromagnetic shielding concept], -) - -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Slot size], [$qty(2.5, "mm") times qty(10, "mm")$], - [Slot orientation], [Length parallel to cassette depth], - [Rows], [$5$], - [Row pitch], [$qty(5, "mm")$], - [Columns], [$12$], - [Column pitch], [$qty(12, "mm")$], - [Slots per face], [$60$], - [Open area], [$approx qty(28, "percent")$], - [Shielding effectiveness], [$gt qty(20, "dB") "to" qty(1, "GHz")$], - ), - caption: [Cassette ventilation specifications], -) +#include "diagrams/cassette-ventilation.typ" + +#include "tables/cassette-ventilation.typ" ==== DB-25 connector cutout -#figure( - cetz.canvas({ - import cetz.draw: * - - // Scale factor: 1 mm = 0.06 drawing units - let s = 0.06 - - let panel-w = 35.7 * s // 1.6065 units - let panel-h = 165.1 * s // 7.4295 units - let cx-panel = panel-w / 2 - let cy-panel = panel-h / 2 // 82.5 mm from top/bottom - - // DB-25 Cutout Dimensions (Scale for Detail View) - let ds = 0.12 // Magnified detail scale - - let d-width = 33.3 * ds // Overall cutout width (33.3 mm) - let d-height = 12.5 * ds // Cutout height (12.5 mm) - let hole-spacing = 24.99 * ds // Mounting hole spacing from center / pitch - let hole-r = (3.2 / 2) * ds // 3.2 mm diameter (1.6 mm radius) - - // ========================================== - // 1. REAR PANEL CUTOUT PLACEMENT VIEW (35.7 mm x 165.1 mm) - // ========================================== - let x-panel-start = 0 - let y-panel-start = 0 - - // View Title - content((cx-panel, panel-h + 0.8), text( - size: 8.5pt, - weight: "bold", - )[REAR PANEL PLACEMENT]) - content((cx-panel, panel-h + 0.45), text( - size: 7pt, - fill: luma(90), - )[(Centered Position)]) - - // Rear Closure Plate Outline - rect( - (x-panel-start, y-panel-start), - (x-panel-start + panel-w, y-panel-start + panel-h), - fill: luma(245), - stroke: 1.2pt + black, - ) - - // Centerlines on Rear Panel - line( - (x-panel-start - 0.4, cy-panel), - (x-panel-start + panel-w + 0.4, cy-panel), - stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), - ) - line( - (cx-panel, y-panel-start - 0.4), - (cx-panel, y-panel-start + panel-h + 0.4), - stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), - ) - - // Small DB-25 D-Sub Cutout Representation in Center - let sm-w = 26.0 * s - let sm-h = 11.0 * s - rect( - (cx-panel - sm-w / 2, cy-panel - sm-h / 2), - (cx-panel + sm-w / 2, cy-panel + sm-h / 2), - fill: white, - stroke: 0.8pt + black, - ) - circle( - (cx-panel - 12.5 * s, cy-panel), - radius: 1.6 * s, - fill: white, - stroke: 0.6pt + black, - ) - circle( - (cx-panel + 12.5 * s, cy-panel), - radius: 1.6 * s, - fill: white, - stroke: 0.6pt + black, - ) - - // Center X Dimension Callout (17.85 mm) - line( - (x-panel-start, y-panel-start), - (x-panel-start, y-panel-start - 0.5), - stroke: 0.4pt + luma(140), - ) - line( - (cx-panel, y-panel-start), - (cx-panel, y-panel-start - 0.5), - stroke: 0.4pt + luma(140), - ) - line( - (x-panel-start, y-panel-start - 0.45), - (cx-panel, y-panel-start - 0.45), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content((cx-panel / 2, y-panel-start - 0.7), text( - size: 6.5pt, - weight: "bold", - )[$qty(17.85, "mm")$]) - - // Center Y Dimension Callout (82.5 mm) - line( - (x-panel-start, y-panel-start), - (x-panel-start - 0.5, y-panel-start), - stroke: 0.4pt + luma(140), - ) - line( - (x-panel-start, cy-panel), - (x-panel-start - 0.5, cy-panel), - stroke: 0.4pt + luma(140), - ) - line( - (x-panel-start - 0.45, y-panel-start), - (x-panel-start - 0.45, cy-panel), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content( - (x-panel-start - 0.75, cy-panel / 2), - text(size: 6.5pt, weight: "bold")[$qty(82.5, "mm")$], - angle: 90deg, - ) - - // ========================================== - // 2. MAGNIFIED DB-25 CUTOUT GEOMETRY DETAIL - // ========================================== - let x-det-center = 6.2 - let y-det-center = cy-panel - - // View Title - content((x-det-center, y-det-center + 2.2), text( - size: 8.5pt, - weight: "bold", - )[CUTOUT GEOMETRY DETAIL]) - content((x-det-center, y-det-center + 1.85), text( - size: 7pt, - fill: luma(90), - )[(Standard D-Shaped DB-25 Profile)]) - - // Centerlines - line( - (x-det-center - 2.5, y-det-center), - (x-det-center + 2.5, y-det-center), - stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), - ) - line( - (x-det-center, y-det-center - 1.5), - (x-det-center, y-det-center + 1.5), - stroke: (paint: luma(120), thickness: 0.4pt, dash: "dash-dotted"), - ) - - // D-Sub Trapezoidal Shroud Profile (Closed Path) - let tw = 25.0 * ds // Top wider width - let bw = 22.5 * ds // Bottom narrower width - let hh = d-height / 2 - - line( - (x-det-center - tw / 2, y-det-center + hh), - (x-det-center + tw / 2, y-det-center + hh), - (x-det-center + bw / 2, y-det-center - hh), - (x-det-center - bw / 2, y-det-center - hh), - close: true, - fill: white, - stroke: 1.2pt + black, - ) - - // Mounting Holes (Left & Right, Diameter 3.2 mm) - let hole-left-x = x-det-center - hole-spacing / 2 - let hole-right-x = x-det-center + hole-spacing / 2 - - circle( - (hole-left-x, y-det-center), - radius: hole-r, - fill: white, - stroke: 0.8pt + black, - ) - circle( - (hole-right-x, y-det-center), - radius: hole-r, - fill: white, - stroke: 0.8pt + black, - ) - - // Hole Center Crosshairs - line( - (hole-left-x - 0.2, y-det-center), - (hole-left-x + 0.2, y-det-center), - stroke: 0.3pt + luma(120), - ) - line( - (hole-left-x, y-det-center - 0.2), - (hole-left-x, y-det-center + 0.2), - stroke: 0.3pt + luma(120), - ) - line( - (hole-right-x - 0.2, y-det-center), - (hole-right-x + 0.2, y-det-center), - stroke: 0.3pt + luma(120), - ) - line( - (hole-right-x, y-det-center - 0.2), - (hole-right-x, y-det-center + 0.2), - stroke: 0.3pt + luma(120), - ) - - // Overall D-Opening Width Dimension (33.3 mm) - let x-left-edge = x-det-center - d-width / 2 - let x-right-edge = x-det-center + d-width / 2 - - line( - (x-left-edge, y-det-center + hh), - (x-left-edge, y-det-center + hh + 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-right-edge, y-det-center + hh), - (x-right-edge, y-det-center + hh + 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-edge, y-det-center + hh + 0.6), - (x-right-edge, y-det-center + hh + 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content((x-det-center, y-det-center + hh + 0.3), text( - size: 7pt, - )[Opening width: $qty(33.3, "mm")$]) - - // D-Opening Height Dimension (12.5 mm) - line( - (x-left-edge, y-det-center - hh), - (x-left-edge - 0.5, y-det-center - hh), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-edge, y-det-center + hh), - (x-left-edge - 0.5, y-det-center + hh), - stroke: 0.4pt + luma(140), - ) - line( - (x-left-edge - 0.5, y-det-center - hh), - (x-left-edge - 0.5, y-det-center + hh), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content( - (x-left-edge - 0.75, y-det-center), - text(size: 7pt)[$qty(12.5, "mm")$], - angle: 90deg, - ) - - // Mounting Hole Spacing Dimension (24.99 mm) - line( - (hole-left-x, y-det-center - hh), - (hole-left-x, y-det-center - hh - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (hole-right-x, y-det-center - hh), - (hole-right-x, y-det-center - hh - 0.6), - stroke: 0.4pt + luma(140), - ) - line( - (hole-left-x, y-det-center - hh - 0.6), - (hole-right-x, y-det-center - hh - 0.6), - mark: (start: "stealth", end: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content((x-det-center, y-det-center - hh - 0.9), text( - size: 7pt, - )[Hole pitch: $qty(24.99, "mm")$]) - - // Hole Diameter Callout (diameter 3.2 mm) - line( - (hole-right-x, y-det-center + hole-r), - (hole-right-x + 0.6, y-det-center + 1.1), - mark: (start: "stealth"), - mark-size: 0.08, - stroke: 0.6pt + black, - ) - content( - (hole-right-x + 0.65, y-det-center + 1.15), - text(size: 6.5pt)[$2 times diameter qty(3.2, "mm")$ holes], - anchor: "west", - ) - }), - caption: [Cassette DB-25 connector cutout technical drawing showing rear panel placement coordinates and magnified CAD geometry dimensions], -) - -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Shape], [D-shaped (standard DB-25 profile)], - - [D-opening width], [$qty(33.3, "mm")$], - - [D-opening height], [$qty(12.5, "mm")$], - - [Mounting hole spacing], [$qty(24.99, "mm")$], - - [Mounting hole size], [$diameter qty(3.2, "mm")$], - - [Center X], [$qty(17.85, "mm")$ from either edge], - - [Center Y], [$qty(82.5, "mm")$ from top/bottom (centered on $qty(165.1, "mm")$)], - - [Connector assembly], [Panel mount with solder cups], - - [Position], [Centered on rear closure], - ), - caption: [Cassette DB-25 connector cutout specifications], -) +#include "diagrams/db-25-connector-cutout.typ" + +#include "tables/db-25-connector-cutout.typ" ==== PCB dimensions @@ -2041,73 +228,20 @@ connector. ==== Standard dimensions -#figure( - table( - columns: 4, - table.header([Parameter], [Value], [Tolerances], [Notes]), - [Height], [$qty(155.0, "mm")$], [$plus.minus qty(0.2, "mm")$], [Vertical dimension when mounted], - - [Depth], [$qty(125.0, "mm")$], [$plus.minus qty(0.2, "mm")$], [Front-to-rear dimension], - - [Thickness], [$qty(1.6, "mm")$], [$plus.minus qty(0.15, "mm")$], [Standard 4-layer stackup], - - [Corner radius], [$qty(3.0, "mm")$], [$plus.minus qty(0.5, "mm")$], [All four corners, for insertion clearance], - ), - caption: [PCB standard dimensions], -) +#include "tables/pcb-standard-dimensions.typ" ==== Board stackup All SAME module PCBs shall use a 4-layer stackup: This allows proper ground management, while remaining easy to solder with standard equipment. -#figure( - table( - columns: 4, - table.header([Layer], [Function], [Copper weight], [Notes]), - [L1 (top)], - [Signal + components], - [$qty(1, "oz")$ ($qty(35, "um")$)], - [Component side faces right (toward U-channel)], - - [L2 (inner 1)], - [Ground plane], - [$qty(1, "oz")$ ($qty(35, "um")$)], - [Continuous AGND plane, split for DGND if needed], - - [L3 (inner 2)], - [Power plane], - [$qty(1, "oz")$ ($qty(35, "um")$)], - [Split for $plus.minus qty(15, "V")$, $plus.minus qty(5, "V")$ rails], - - [L4 (bottom)], - [Signal + earth ring], - [$qty(1, "oz")$ ($qty(35, "um")$)], - [Faces left wall (mounting side), digital traces if needed], - ), - caption: [PCB board stackup], -) +#include "tables/pcb-board-stackup.typ" / Dielectric: FR-4, $"Tg" gt.eq qty(135, "dC")$ ==== Surface finish -#figure( - table( - columns: 2, - table.header([Parameter], [Specification]), - [Finish], [ENIG (Electroless Nickel Immersion Gold)], - - [Nickel thickness], [$qtyrange(3, 5, "um")$], - - [Gold thickness], [$qtyrange(0.05, 0.1, "um")$ ($qtyrange(1, 2, "micro inch")$)], - - [Solder mask], [Matte black (both sides)], - - [Silkscreen], [White (both sides)], - ), - caption: [PCB surface finish], -) +#include "tables/pcb-surface-finish.typ" ===== Rationale @@ -2126,17 +260,7 @@ to drain to chassis earth rather than coupling into signal traces. ===== Geometry -#figure( - table( - columns: 3, - table.header([Parameter], [Value], [Notes]), - [Width], [$qty(3.0, "mm")$], [Continuous copper pour], - [Clearance from edge], [$qty(0.5, "mm")$], [Manufacturing tolerance], - [Clearance to inner circuitry], [$qty(2.0, "mm")$], [Isolation gap], - [Layer], [L4 (bottom) only], [Faces mounting wall], - ), - caption: [PCB earth ring geometry], -) +#include "tables/pcb-earth-ring-geometry.typ" ===== Connection @@ -2155,17 +279,7 @@ The four mounting holes shall be: ===== AGND plane -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Layer], [L2 (inner 1)], - [Coverage], [Minimum $qty(85, "percent")$ of signal area], - [Splits], [Only if DGND zone required], - [Connection], [Via stitching to AGND traces & pads on L1 and L4], - ), - caption: [PCB AGND plane], -) +#include "tables/pcb-ground-planes-agnd-plane.typ" The AGND plane provides: - Low-impedance return path for analog signals, @@ -2174,36 +288,13 @@ The AGND plane provides: ===== DGND zone (if needed) -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Location], [Defined zone on L2], - [Separation], [$qty(2, "mm")$ gap from AGND plane], - [Connection], [To the DGND pins of the power distributor], - [Via stitching], [Only within DGND zone], - ), - caption: [PCB DGND zone], -) +#include "tables/pcb-ground-planes-dgnd-zone.typ" ==== Power planes Layer 3 is divided into power distribution zones: -#figure( - table( - columns: 3, - table.header([Zone], [Rail], [Typical area]), - [Zone 1], [$plus qty(15, "V")$], [$qtyrange(30, 40, "percent")$], - - [Zone 2], [$qty(-15, "V")$], [$qtyrange(30, 40, "percent")$], - - [Zone 3], [$plus qty(5, "V")$ (if needed)], [$qtyrange(10, 15, "percent")$], - - [Zone 4], [$qty(-5, "V")$ (if needed)], [$qtyrange(10, 15, "percent")$], - ), - caption: [PCB power planes], -) +#include "tables/pcb-power-planes.typ" Design rules: - Miminum $qty(2, "mm")$ clearance between power zones, @@ -2215,138 +306,44 @@ Design rules: The PCB mounts to the L-channel left wall via four standoffs. -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Standoff thread], [$M 3$], - [Standoff height], [$qty(6, "mm")$], - [Standoff type], [Female threaded, swaged or welded to L-channel], - [Mounting screw], [$M 3 times qty(8, "mm")$ pan head], - ), - caption: [PCB mounting strategy: standoffs], -) +#include "tables/pcb-mounting-strategy.typ" ===== Mounting holes pattern -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Pattern], [Rectangular, $4$ holes], - [Horizontal spacing (X)], [$qty(105.0, "mm")$], - [Vertical spacing (Y)], [$qty(155.0, "mm")$], - [Hole diameter], [$diameter qty(3.2, "mm")$ ($M 3$ clearance)], - [Hole plating], [Unplated, isolated], - ), - caption: [PCB mounting strategy: mounting holes], -) +#include "tables/pcb-mounting-strategy-mounting-holes-pattern.typ" ====== Positions -#figure( - table( - columns: 3, - table.header([Hole], [X], [Y]), - [1 (bottom-left)], [$qty(10.00, "mm")$], [$qty(10.00, "mm")$], - [2 (bottom-right)], [$qty(115.00, "mm")$], [$qty(10.00, "mm")$], - [3 (top-left)], [$qty(10.00, "mm")$], [$qty(145.00, "mm")$], - [4 (top-right)], [$qty(115.00, "mm")$], [$qty(145.00, "mm")$], - ), - caption: [PCB mounting strategy: mounting holes positions], -) +#include "tables/pcb-mounting-strategy-mounting-holes-positions.typ" ==== Keep-out zones ===== Perimeter keep-out -#figure( - table( - columns: 3, - table.header([Parameter], [Value], [Notes]), - [Width], [$qty(5.0, "mm")$], [All four edges], - [Applies to], [Components and tall traces], [Solder mask and silkscreen allowed], - - [Reason], [Clearance for cassette walls and earth ring], [], - ), - caption: [PCB keep-out zones: perimeter keep-out], -) +#include "tables/pcb-keep-out-zones-perimeter-keep-out.typ" ===== Mounting holes keep-out -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Radius], [$qty(0.5, "mm")$ from hole center], - [Applies to], [Components, traces, planes (except earth ring)], - ), - caption: [PCB keep-out zones: mounting holes keep-out], -) +#include "tables/pcb-keep-out-zones-mounting-holes-keep-out.typ" ==== Interconnect zones ===== Zone A: power and master oscillator entry (rear) -#figure( - table( - columns: 2, - table.header([Parameter], [Value]), - [Location], [Rear $qty(20, "mm")$ of PCB ($Y = qtyrange(0, 20, "mm")$)], - - [Function], [Connection to DB-25 backplane connector and rear BNC], - [Connector], - [ - / Power: pluggable terminal block (e.g. Phoenix Contact MSTB $qty(3.5, "mm")$ or latching header (e.g Molex KK $qty(3.96, "mm")$). - / Master oscillator (optional): The rear BNC connects to the PCB via a short ($lt qty(50, "mm")$) $qty(50, "ohm")$ coaxial pigtail (RG-174 or RG-316) soldered to dedicated RF pads or a u.FL/SMA connector on the PCB edge. - ], - - [Wire gauge], [$qtyrange(22, 24, "AWG")$ for power, $qty(26, "AWG")$ for signals], - ), - caption: [PCB interconnect zones: zone A], -) +#include "tables/pcb-interconnect-zones-zone-a.typ" ====== Pin assignment The PCB connector shall provide access to all power rails in a logical grouping: -#figure( - table( - columns: 3, - table.header([Position], [Signal], [Reco