diff --git a/HARDWARE.md b/HARDWARE.md index 55e756c..fc460e2 100644 --- a/HARDWARE.md +++ b/HARDWARE.md @@ -6,9 +6,13 @@ The hardware photographs in [`Part Numbers:Views/`]() are t visual authority; this file is an index, not a substitute for inspection. **Verified Hardware** is owned, photographed, measured, or electrically confirmed. -**Design Intent** is conceptual Fusion guidance only; final placement is determined -during CAD. The [reference architecture](docs/hardware/reference-architecture.md) -keeps those categories separate. +**Design Intent** fixes the Revision-1 subsystem architecture while leaving the exact +layout to Fusion. Revision 1 is an open desktop prototype: a centred stationary pan +motor directly drives a lightweight platform, and the rotating tilt motor directly +drives the AD8317/AUT carriage. It has no external bearings, separate shafts, couplers, +slip ring, sealed enclosure, or battery compartment. The +[reference architecture](docs/hardware/reference-architecture.md) keeps verified facts +and CAD choices separate. Read the hardware documentation in this order: diff --git a/Measurements/README.md b/Measurements/README.md index b03919d..aff7907 100644 --- a/Measurements/README.md +++ b/Measurements/README.md @@ -2,9 +2,10 @@ This folder is the **canonical source for every physical dimension in Radiance3D**. -The enclosure has not yet been designed. Measurements support conceptual Fusion work; -the [reference architecture](../docs/hardware/reference-architecture.md) defines the -official non-dimensioned placement baseline. +Revision 1 is an open direct-drive desktop prototype within a 220 × 220 mm maximum +base. Measurements support its Fusion layout; the +[reference architecture](../docs/hardware/reference-architecture.md) defines the fixed +subsystem architecture while Fusion determines placement. Every number here was measured with a digital caliper on the actual parts in hand and is traceable to a photograph in this folder. Hardware, mechanical, assembly, BOM and @@ -49,6 +50,7 @@ See [`fusion360-parameters.md`](fusion360-parameters.md). | BIGTREETECH TMC2209 V1.3 driver (×2) | [`tmc2209-v1.3.md`](tmc2209-v1.3.md) | IMG_5233–5240 | | ELEGOO ESP32 devkit (×1) | [`esp32-devkit.md`](esp32-devkit.md) | IMG_5241–5246 | | AD8317 EVAL BD (NWDZ V1.0) RF detector | [`ad8317.md`](ad8317.md) | IMG_5257–5262 | +| ZX-052 V2.0 buck converter (×2) | [`zx052-v2.0.md`](zx052-v2.0.md) | supplemental supplied photographs | ## CAD handoff @@ -60,39 +62,26 @@ See [`fusion360-parameters.md`](fusion360-parameters.md). | [`fusion360-build-order.md`](fusion360-build-order.md) | A step-by-step build order for modeling the pan/tilt prototype in Fusion 360 | | [`fusion360-bom-template.md`](fusion360-bom-template.md) | A starter BOM template for the mechanical, electronics, RF, and fastener parts | -## Measurements still needed +## Remaining provisional interfaces Full detail, including how to take each one, is in [`missing-measurements.md`](missing-measurements.md). Summary: -**Unclear — re-shoot:** +These do not block the component-envelope layout. Use reversible retention and named +provisional parameters where a printed feature actually depends on them: -- NEMA 17 face width across flats (decimals unreadable) -- NEMA 17 shaft diameter (second decimal unreadable) -- NEMA 17 — one completely unreadable display, and two legible values whose measured - feature cannot be identified - -**Not measured at all:** - -- NEMA 17 mounting-hole spacing and diameter — the largest remaining unknown on the - motor; every other motor-mount dimension is now measured -- NEMA 17 shaft flat length and flat depth +- NEMA 17 mounting-hole diameter/screw specification and shaft-flat axial length/start - TMC2209 heatsink length along the PCB long axis (one reading closes it) - TMC2209 PCB thickness, header pitch, header row spacing - ESP32 mounting holes and header pin length -- Bearings — inner diameter, outer diameter, width -- Shaft couplers — bores, outer diameter, length - Fasteners and heat-set inserts — sizes and pilot holes -- Antenna mount — connector, antenna body, coax diameter and bend radius -- Limit switches — body, mounting holes, lever, actuation travel -- LM2596 buck converter — outline, mounting holes, total height +- Representative interchangeable AUT clearance envelopes +- ZX-052 total installed height and mounting-hole pattern; use open edge retention - AD8317 detector — PCB thickness, mounting holes, shield-can height (outline is measured) -Bearings, couplers, fasteners, the antenna mount and the limit switches have no -measurements at all yet, so no component file has been created for them. Files will be -added when the parts are measured — empty placeholder files are deliberately not -created. +External bearings, separate shafts, couplers, and mandatory limit switches are not +Revision-1 parts. They do not block CAD and may be considered only as future upgrades. ## Source photographs diff --git a/Measurements/ad8317.md b/Measurements/ad8317.md index e9878ea..50eb9a0 100644 --- a/Measurements/ad8317.md +++ b/Measurements/ad8317.md @@ -15,9 +15,9 @@ generic dimensions found online. - Measured with: digital caliper, IP54, mm mode - Units: mm -> [!NOTE] -> No RF detector is committed to yet. This board is documented because it was -> measured, not because it is selected. +> [!IMPORTANT] +> This owned AD8317 EVAL BD / NWDZ V1.0 is selected for Revision 1. It mounts +> vertically and moves with the interchangeable direct-SMA AUT. ## Measured dimensions @@ -66,16 +66,22 @@ axes, well outside this caliper's ~0.05 mm repeatability. Do not model it as squ - **Board outline:** 36.27 × 35.72 mm. Orient the model so the 36.27 mm axis is the one the SMAs leave from. -- **Important protrusions:** the two SMA connectors, 9.78 mm per side, giving a - 55.84 mm overall envelope along that axis. They need straight coax exits and must - respect the coax bend radius, which is currently provisional. +- **Important protrusions:** the two SMA connectors, 9.78 mm per side, give a 55.84 mm + envelope. Keep both accessible; the AUT threads directly onto its SMA without coax. - **Mounting-hole layout:** four plated corner holes are visible in `IMG_5261.HEIC` but neither diameter nor spacing has been measured. See [`missing-measurements.md`](missing-measurements.md). +- **Supplemental diagonal readings:** approximately 40.37 mm spans diagonal mounting + features, but jaw contacts do not establish hole centres or board dimensions. Do not + use it as a mounting pattern. Begin with adjustable edge or strap retention and + preserve all four corner-hole regions. - **Shield can:** 17.36 mm long, roughly centred on the board. Height above the PCB is not measured, so total board height is unknown. - **Board thickness:** not measured. - **Required print clearance:** any holder should be a removable fit, not an interference fit — this board carries RF and should not be stressed. +- **Structural support:** the PCB is not the direct-drive hub. A compact carriage + retains it and a minimally intrusive, preferably nonconductive guide relieves AUT + bending load without inserting an RF cable. - **Unclear or missing dimensions:** see [`missing-measurements.md`](missing-measurements.md). diff --git a/Measurements/fusion360-assistant-prompt.md b/Measurements/fusion360-assistant-prompt.md index cb57ea7..8928cf2 100644 --- a/Measurements/fusion360-assistant-prompt.md +++ b/Measurements/fusion360-assistant-prompt.md @@ -1,290 +1,80 @@ -# Fusion 360 Assistant prompt - -The enclosure has not yet been designed. Treat all listed component locations as -conceptual only and follow [`../docs/hardware/reference-architecture.md`](../docs/hardware/reference-architecture.md) -for the official non-dimensioned placement baseline. - -Paste everything inside the code block below into Fusion 360 Assistant. It is written -to be self-contained — it carries the measured dimensions with it, so the assistant -does not need access to this repository. - -For the most recent implementation notes, also review -[`fusion360-design-spec.md`](fusion360-design-spec.md) and -[`fusion360-bom-template.md`](fusion360-bom-template.md). - -Source of the numbers: [`nema17.md`](nema17.md), [`tmc2209-v1.3.md`](tmc2209-v1.3.md), -[`esp32-devkit.md`](esp32-devkit.md), [`fusion360-parameters.md`](fusion360-parameters.md), -[`missing-measurements.md`](missing-measurements.md). - ---- - -````text -You are helping me design the first Radiance3D pan-and-tilt prototype in Fusion 360. - -Radiance3D is an antenna radiation-pattern measurement platform. The mechanism rotates -the AD8317-mounted antenna under test (AUT) in azimuth (pan) and elevation (tilt) while -an external stationary 5.8 GHz VTX transmits. The AUT threads directly onto the -vertically mounted AD8317 SMA; no RG316 jumper connects the AUT and detector. -Positioning repeatability matters more than speed, and the structure must not distort -the radiation pattern more than necessary. - -===================================================================== -NON-NEGOTIABLE RULES -===================================================================== - -1. Millimetres throughout. Never switch units. -2. Every dimension must come from a named user parameter. No hard-coded numbers in - any sketch or feature. Name parameters with a type prefix so the type is visible at - every use site: m = measured, c = calculated, d = design choice, p = provisional. - For example mMotorPilotDiameter, cMotorPilotSeatDiameter, dPrintClearance, - pBearingOuterDiameter. -2a. NEVER modify a measured value to fix a fit. A measured parameter is frozen; it - changes only if I re-measure or replace the part. Every CAD feature that touches - hardware is an expression built from a measured value plus a clearance parameter. - If a print comes out tight, the fix is dPrintClearance or dBearingFitAllowance, and - nothing else. Overwriting a measurement with a print allowance destroys the record - of what the hardware actually is. -3. The enclosure is not designed yet: all locations are conceptual, not dimensioned. - Place ESP32 and both drivers/bucks in the stationary base; place only the tilt motor, - vertically mounted AD8317, and antenna mount on the rotating platform. The pan motor - is fixed in the base and the target motion is one controlled 360° turn, not unlimited - continuous rotation. Model a managed moving harness, with lengths TBD AFTER CAD. -4. Each major part is a separate Fusion component, named as listed below. -5. The MEASURED dimensions below are the source of truth. They were taken with - calipers on the actual parts. Do not replace them with datasheet or "standard" - values, even where a standard value looks rounder or more familiar. -6. Never guess a critical fit dimension. Anything marked PROVISIONAL is a placeholder - for a measurement I have not taken yet. If a feature's fit depends on a PROVISIONAL - value, say so out loud before modelling it, and design that feature so the - parameter can change without rebuilding the part. -7. Design for PETG on a fused-filament printer: - - avoid overhangs steeper than 45 degrees where a design change can prevent them - - minimise support material; state the intended print orientation for each part - - use structural fillets at load-bearing intersections and ribs instead of thick - solid walls - - use heat-set threaded inserts wherever a fastener will be removed more than once -8. Protect the motor shafts. A motor shaft must not carry a side load or a cantilevered - mass. Every rotating axis is carried on its own bearings; the motor supplies torque - through a coupler only. -7a. Both motors have a connector on the rear end cap that stands 9.38 mm proud, with a - 16.43 mm housing. Adding cable bend clearance, that is about 21.4 mm of dead space - behind any motor. Whichever way a motor faces, this space must be modelled and the - connector must stay reachable for wiring. When you recommend a motor orientation, - state where that 21.4 mm goes and what it costs in stack height. Do not recommend an - orientation without pricing it. -9. Place the pan and tilt axes as close together as practical, and put the antenna's - active centre as close as practical to the point where the two axes intersect. - Offset between the antenna phase centre and the axis intersection is a measurement - error, not just an aesthetic issue. Report any offset you cannot eliminate. -10. Route the moving silicone harness so it never binds, stretches, or wraps through - one controlled 360° pan turn; its bend radius is a hard constraint, not a guideline. - The external VTX coax is off-scanner and there is no AUT-to-detector coax jumper. -11. Work on ONE major component at a time. Do not start the next component until I - have reviewed and approved the current one. - -===================================================================== -MEASURED DIMENSIONS - SOURCE OF TRUTH -===================================================================== - -NEMA 17 stepper motor, model 42HDB0014NC-24B, quantity 2 (one pan, one tilt): - Motor body diagonal, corner to corner 54.30 mm - Motor body length, face plate to rear face 20.84 mm (short-body / "pancake") - Overall length, boss face to rear face 22.85 mm - Overall length, shaft tip to rear face 45.18 mm (full axial envelope) - Pilot boss diameter 21.97 mm (the centring register) - Rear connector protrusion above end cap 9.38 mm - Rear connector housing length 16.43 mm (6-position housing) - Output shaft length above the pilot boss 22.39 mm - - Derived, not separately measured: - Pilot boss height 2.00 mm +/- 0.06 (22.85 - 20.84 = 2.01; - 45.18 - 22.39 - 20.84 = 1.95; - the two routes agree to 0.06 mm) - Shaft length from the face plate 24.39 mm (22.39 + 2.00) - - DATUM WARNING on the 22.39 mm shaft length: it is measured from the top face of the - raised circular boss the shaft emerges from, NOT from the motor face plate. It is - therefore not the number a vendor listing means by "shaft length". The face-plate - figure is 24.39 mm. Prefer the 22.39 mm boss datum where a feature can be dimensioned - from the boss. Do not silently treat 22.39 mm as a face-plate dimension. - -BIGTREETECH TMC2209 V1.3 driver, quantity 2, measured WITH heatsink installed: - PCB length 20.14 mm - PCB width 15.14 mm - Heatsink left edge to PCB right edge 12.21 mm - Heatsink right edge to PCB left edge 11.22 mm - Heatsink front edge to PCB back edge 13.73 mm - Overall installed height, - heatsink top to header pin tips 22.24 mm - Derived from the two width readings, not separately measured: - Heatsink width 8.29 mm (12.21 + 11.22 - 15.14) - Heatsink offset from PCB centre 0.495 mm ((12.21 - 11.22) / 2) - Heatsink front edge from PCB front edge 6.41 mm (20.14 - 13.73) - - Note: the heatsink is NOT centred on the PCB. It sits 0.495 mm off centre across the - width, so the driver is handed. Do not model a symmetric pocket. - - Note: the heatsink LENGTH is unknown. Only one reading was taken along the PCB long - axis, so the heatsink's front edge is fixed but its back edge is not. Model the - driver bay from the 22.24 mm overall height and the PCB outline only. Do not model - the heatsink footprint until the missing reading is taken. - -ELEGOO ESP32 devkit with ESP-WROOM-32, USB-C, quantity 1: - PCB length 51.47 mm - PCB width 28.23 mm - PCB thickness 1.33 mm (NOT 1.6 mm) - Board height including module 4.38 mm (excludes header pins below) - USB-C receptacle width 8.83 mm (plug overmould is wider) - -===================================================================== -PROVISIONAL VALUES - NOT MEASURED, DO NOT TRUST -===================================================================== - -I have not measured these. The values are nominal placeholders so the model can be -built and updated later. Flag every feature that depends on one. - - Motor face width across flats 42.30 mm (photo shows "42", decimals unreadable) - Motor mounting-hole spacing 31.00 mm - Motor mounting-hole diameter 3.40 mm - Motor shaft diameter 5.00 mm (photo reads "4.9?") - Bearing inner diameter 8.00 mm - Bearing outer diameter 22.00 mm - Bearing width 7.00 mm - Coupler outer diameter 19.00 mm - Coupler length 25.00 mm - Coupler bore, motor side 5.00 mm - Coupler bore, driven side 8.00 mm - Heat-set insert outer diameter 4.60 mm - Heat-set insert length 5.70 mm - Heat-set insert pilot diameter 4.00 mm - Limit switch body length 20.00 mm - Limit switch mounting-hole spacing 9.50 mm - Antenna body diameter 10.00 mm - Coax outer diameter 3.00 mm - Coax minimum bend radius 15.00 mm - -===================================================================== -DESIGN CHOICES - MINE, ADJUSTABLE -===================================================================== - - Wall thickness 3.00 mm - Base thickness 6.00 mm - dPrintClearance, slip fit PER SIDE 0.15 mm (0.30 mm total across a bore) - dBearingFitAllowance, press-fit INTERFERENCE 0.00 mm (bore AT bearing OD; the - printer's own undersizing - supplies the interference) - dBoreMouthChamfer 0.50 mm (mouth of every bore/register) - Free air above the driver heatsink 8.00 mm - Cable bend clearance behind a connector 12.00 mm - Mounting clearance 1.00 mm - Structural fillet radius 3.00 mm - Cosmetic fillet radius 1.00 mm - Rib thickness 2.40 mm - Tilt axis height above the pan platform 90.00 mm - -===================================================================== -FIT POLICY - PETG, FORGIVING -===================================================================== - -Printing in PETG on a fused-filament printer. Target is a slip fit at +0.04 mm per -side, about 0.08 mm total across a bore or slot. - -Fit classes are NOT interchangeable. Apply the right one: - - dPrintClearance slip fit, POSITIVE motor pilot register, board pockets, - card slots, general part-to-part - dBearingFitAllowance press fit, NEGATIVE bearing outer-race seats ONLY - the bore - is SMALLER than the bearing OD - dMountingClearance loose, POSITIVE fastened joints where the fastener sets - position - -Never apply dPrintClearance to a bearing seat. A bearing that slips into its housing -is a failed bearing seat. - -ELEPHANT FOOT ON SHALLOW FEATURES - this is the one that will bite: -The motor pilot register is only 2.00 mm deep. If that face is printed downward, the -entire feature lies within the first few layers, where PETG squishes outward and the -bore comes out undersized at the bottom and correct at the top. The motor then rocks. -For every part containing a shallow register, bore or locating feature, state the print -orientation explicitly and prefer printing that face UPWARD. Apply dBoreMouthChamfer at -the mouth of every bore and register regardless of orientation. - -PETG bores also print undersized by roughly 0.1-0.3 mm on diameter from die swell and -perimeter pull-in, before any clearance is applied. That is why dBearingFitAllowance is -0.00: model the bearing seat at the exact bearing OD and let the printer's own -undersizing supply the press fit. Do not stack a designed interference on top of it. - -===================================================================== -COMPONENTS TO DESIGN, IN ORDER -===================================================================== - - 1. Pan_Base Stationary base. Carries everything. - 2. Pan_Motor_Mount Holds the pan NEMA 17. Shaft down or up, your - recommendation with reasoning. - 3. Pan_Platform Rotating platform, carried on a bearing, not on the - motor shaft. - 4. Tilt_Support_Frame Rises from the pan platform. Carries the tilt axis at - both ends. - 5. Tilt_Motor_Mount Holds the tilt NEMA 17 on one side of the frame. - 6. Tilt_Bearing_Support Opposite side of the frame. Second bearing for the - tilt axis so the motor shaft carries no side load. - 7. Antenna_Cradle Rotates with the tilt axis. Holds the AUT. - 8. Antenna_Mount_Adjustable Lets the antenna's active centre be positioned onto - the axis intersection. - 9. Cable_Routing Guides, clips and strain relief through the moving - envelope. - 10. Limit_Switch_Mounts One adjustable homing switch per axis. - 11. Electronics_Tray Removable. Holds the ESP32, both TMC2209 drivers and - the buck converter. - 12. Counterweight_Mount Optional. Balances the tilt axis about its pivot. - -===================================================================== -WHAT TO DO FIRST - DO NOT SKIP TO MODELLING -===================================================================== - -Before you create any geometry, do all seven of these and stop for my approval: - - 1. Review the measured dimensions above. - 2. List every measurement you understand and what you will use it for. - 3. List every dimension that is missing or ambiguous and that you need from me - before the design can be finished. Be specific about which feature is blocked. - 4. Create the initial Fusion user-parameter table, grouped as Measured, Provisional, - Design choice and Calculated. Put the word PROVISIONAL in the comment field of - every provisional parameter. - 5. Explain your proposed pan-and-tilt architecture: bearing arrangement, how each - motor shaft is protected from side loading, how close the two axes come to - intersecting, where the antenna's active centre sits relative to that - intersection, and how the cable route stays clear through the full travel. - 6. Design fit-test coupons for the PRINTED side of each uncertain fit — the bearing - seat bore, the motor pilot boss register, the motor mounting-hole pattern and the - heat-set insert boss. These are small printable test pieces, not full parts. Tell - me what to print and what to measure on each one. - The pilot boss register coupon is the cheapest useful one, because both of its - inputs are already measured (21.97 mm diameter, 2.00 mm deep). It tests only my - printer's clearance, so start there. - A coupon measures how MY PRINTER deviates from a known number. It cannot discover - the dimension of a metal part. Do not propose a coupon to find a bearing's outer - diameter or a motor shaft's diameter — those are caliper measurements I must take - first. Tell me which metal dimensions I have to measure before each coupon is - worth printing. - 7. Only after I have reviewed that measurement review, begin Pan_Base. Model - Pan_Base only. Stop when it is complete and wait for my approval before starting - Pan_Motor_Mount. - -Do not model all twelve components in one pass. Do not substitute a standard value for -a measured one. If something is unclear, ask me instead of assuming. -```` - ---- - -## After the first component - -When Fusion Assistant reports back: - -- Check that no feature silently used a PROVISIONAL value where a real measurement - exists. -- Print the fit-test coupons before approving `Pan_Base`. A bearing seat or a motor - register that is wrong by 0.2 mm will not be visible on screen. -- Feed any newly taken measurements back into the component file in this folder first, - then update [`fusion360-parameters.md`](fusion360-parameters.md), then update the - Fusion parameter. The measurement file stays canonical. +# Autodesk Fusion handoff — Radiance3D Revision 1 + +Paste the following into Autodesk Fusion or a CAD-design agent. + +```text +Design Radiance3D Revision 1: an open PETG desktop instrument that rotates an +interchangeable 5.8 GHz Antenna Under Test for radiation-pattern measurement. Optimize +measurement repeatability, stability, RF consistency, serviceability, then appearance. + +Start with a component-envelope layout study. Do not create full structural geometry +first. Solve the smallest stable arrangement inside a hard 220 × 220 mm base boundary, +center the pan axis, determine the smallest practical lightweight pan platform, place +stationary electronics outside its swept envelope, and present dimensions, access +envelopes, and moving sweeps for approval. Use engineering judgment for reversible +prototype choices rather than repeatedly asking for noncritical dimensions. + +FIXED ARCHITECTURE +- Open base; electronics remain visible and serviceable. No sealed enclosure or battery. +- Centred stationary pan NEMA-17 directly drives a lightweight platform through a + removable clamp-style hub on its 5 mm D-shaft. +- The rotating platform carries the tilt NEMA-17, direct-drive tilt hub/carriage, + vertical AD8317, interchangeable AUT, cable guides, and moving silicone harness only. +- No external bearings, separate shafts, shaft couplers, slip ring, or mandatory limit switches. +- AD8317 EVAL BD / NWDZ V1.0 is selected. The AUT threads directly onto its SMA; no + AUT-to-detector coax. The external VTX stays stationary and off-scanner. +- Stationary base carries ESP32, two TMC2209 V1.3 drivers, two ZX-052 V2.0 converters, + external 12 V/GND entry, distribution, and open wiring. +- Power: direct 12 V to both driver VM/GND branches; Buck A gives regulated 5.0 V to + ESP32; Buck B independently gives regulated 5.0 V to AD8317. Never parallel outputs; + do not add a third converter. + +MEASURED ENVELOPES, MM +NEMA-17: 43.46 maximum face/body clearance envelope; 20.84 safe body length; +21.97 × 2.00 pilot; 31.00 × 31.00 nominal-square hole pattern; 5.00 shaft major; +4.60 flat-to-opposite thickness; 0.20 derived radial flat depth; 22.39 shaft length +from pilot face; rear connector 9.53 protrusion and 16.44 housing envelope. +TMC2209 each: 20.14 × 15.14 PCB; 22.24 installed height. +ESP32: 51.47 × 28.23 PCB; 1.33 PCB thickness; 4.38 top-side height; 8.83 USB-C shell. +ZX-052 each: 66.07 × 36.48 PCB. VIN is at one end, VOUT at the other; display, +adjuster and pushbutton face upward. The approximately 2.15 edge reading is not total height. +AD8317: 36.27 × 35.72 PCB; 55.84 SMA-tip-to-tip; 9.78 protrusion per side; +17.36 shield-can length. Approximately 40.37 diagonal feature readings are not a hole pattern. + +DIRECT DRIVE +Use removable D-profile split clamps, captive-nut clamps, or equivalent compact hubs. +Do not use a loose round PETG bore, a separate coupler, a set screw cutting into PETG, +or hard axial preload. Keep rotating mass and shaft cantilevers small, balance the tilt +load, keep fasteners accessible, and make both motors replaceable. The AD8317 PCB is +not the structural hub. Use vertical edge/strap retention plus a lightweight preferably +nonconductive guide to relieve antenna bending load without blocking SMA access. + +OPEN ELECTRONICS +Use adjustable edge clips, shallow trays, rails, straps, removable crossbars, or zip-tie +slots; missing PCB hole coordinates do not block CAD. Preserve ESP32 USB-C/buttons/OLED, +TMC2209 heatsink/VREF/header/wiring access, both buck displays/adjusters/pushbuttons/ +terminals, screwdriver and wire-insertion directions, tall-component clearance, +ventilation, and 18/22 AWG wire bends. Separate motor wiring from the AD8317 analog route. + +MOTION AND HARNESS +Pan target is one managed complete 360° turn from a neutral cable position, then return +toward neutral; never unlimited winding. Tilt target is the largest collision-free range, +desirably near −90° to +90°, with actual travel reported from CAD. Model one flexible +bundle containing four tilt phases, AD8317 +5 V, GND, VOUT, and analog return. Include +service loop, strain relief at both ends, bend clearance, guides, and protection from +the platform, hubs, and motor connectors. Exact wire lengths follow CAD. + +CAD RULES +Use mm and named parameters: m=measured/frozen, c=calculated, d=design choice, +p=provisional. Never alter m-values to tune print fit. Design PETG parts with ribs, +structural fillets, minimal support, explicit print orientation, removable modules, +open wiring, and editable M3-compatible provisional hardware. Print motor-pilot and +5.00/4.60 D-shaft clamp coupons before full hubs or platforms. Do not invent purchased parts. + +Before structural geometry, report the proposed base and platform dimensions, component +arrangement, connector/service envelopes, swept volumes, pan/tilt cantilever distances, +estimated moving mass when possible, both shaft CG offsets, achievable tilt range, +one-turn harness behavior, and any direct-drive loading concern. Prove every component +remains within 220 × 220 mm. Then design one subsystem at a time and pause for approval. +Keep every choice reversible and parameterized. +``` diff --git a/Measurements/fusion360-bom-template.md b/Measurements/fusion360-bom-template.md index e9ae284..3562380 100644 --- a/Measurements/fusion360-bom-template.md +++ b/Measurements/fusion360-bom-template.md @@ -1,45 +1,29 @@ -# Fusion 360 BOM template - -The enclosure has not yet been designed. All placements are conceptual only; use -[`../docs/hardware/reference-architecture.md`](../docs/hardware/reference-architecture.md) -as the official non-dimensioned baseline. - -Use this as the starting BOM for the first prototype. Because the relevant hardware is already in the project, this can stay as a simple mechanical checklist first; fill in part numbers and suppliers only if you want a formal procurement list. - -## Mechanical - -| Item | Qty | Description | Part number | Notes | -|---|---:|---|---|---| -| Pan motor | 1 | NEMA 17 stepper, model 42HDB0014NC-24B | TBD | Existing hardware | -| Tilt motor | 1 | NEMA 17 stepper, model 42HDB0014NC-24B | TBD | Existing hardware | -| Pan bearing | 1 | Bearing for pan axis | TBD | Measure before CAD finalization | -| Tilt bearing | 1 | Bearing for tilt axis | TBD | Measure before CAD finalization | -| Pan coupler | 1 | Flexible or rigid shaft coupler | TBD | Measure before CAD finalization | -| Tilt coupler | 1 | Flexible or rigid shaft coupler | TBD | Measure before CAD finalization | -| Fasteners | TBD | M3 / M4 fasteners for mounts and base | TBD | Measure lengths before ordering | -| Heat-set inserts | TBD | Threaded inserts for plastic bosses | TBD | Measure OD and length | - -## Electronics - -| Item | Qty | Description | Part number | Notes | -|---|---:|---|---|---| -| ESP32 board | 1 | ELEGOO ESP32 devkit | TBD | Existing hardware | -| TMC2209 driver | 2 | Stepper driver module | TBD | Existing hardware | -| Buck converter A | 1 | ZX-052 V2.0, ESP32 5 V branch | TBD | Existing hardware; stationary base | -| Buck converter B | 1 | ZX-052 V2.0, AD8317 5 V branch | TBD | Existing hardware; stationary base | - -## RF and antenna - -| Item | Qty | Description | Part number | Notes | -|---|---:|---|---|---| -| Antenna under test | 1 | Threads directly onto AD8317 SMA | TBD | Measure before direct-SMA mount finalization | -| RF detector | 1 | AD8317 evaluation board, vertically mounted | TBD | Existing hardware; rotating platform | -| External VTX | 1 | Stationary external 5.8 GHz source | TBD | Off-scanner; not an enclosure component | -| RG316 jumper, antenna to detector | 0 | Not used | — | Direct SMA connection only | - -## Miscellaneous - -| Item | Qty | Description | Part number | Notes | -|---|---:|---|---|---| -| Limit switch | 2 | One per axis | TBD | Measure before assembly | -| Cable tie / strain relief | TBD | For routing and strain relief | TBD | Depends on final cable path | +# Revision-1 prototype BOM + +## Owned hardware + +| Item | Qty | Revision-1 role | +|---|---:|---| +| YEJMKJ 42HDB0014NC-24B NEMA-17 | 2 | direct-drive pan and tilt | +| ELEGOO ESP32 DevKit | 1 | stationary controller | +| BIGTREETECH TMC2209 V1.3 | 2 | stationary pan/tilt drivers | +| ZX-052 V2.0 | 2 | stationary independent 5 V branches | +| AD8317 EVAL BD / NWDZ V1.0 | 1 | vertical rotating detector, direct-SMA AUT | +| Interchangeable 5.8 GHz AUT | 1 at a time | direct threaded SMA connection | +| External stationary 5.8 GHz VTX | 1 | off-scanner RF source | +| Silicone wire, 18/22/26 AWG | as required | power, motor, control, analog harnesses | + +## Prototype mechanical categories + +| Item | Status | +|---|---| +| PETG base, platform, motor mounts, clamp hubs, carriage, trays, guides | design in Fusion | +| M3-compatible screws/nuts/inserts | provisional and editable; coupon before final bosses | +| Edge clips, straps, crossbars, and zip ties | reversible PCB retention | +| Side/rear 12 V strain relief and distribution hardware | select during base detail design | + +## Explicitly not Revision 1 + +External bearings, separate shafts, shaft couplers, mandatory limit switches, slip +ring, LM2596 converters, third buck converter, internal battery, sealed enclosure, and +AUT-to-detector RG316 jumper. diff --git a/Measurements/fusion360-build-order.md b/Measurements/fusion360-build-order.md index 26a4af0..a6877a6 100644 --- a/Measurements/fusion360-build-order.md +++ b/Measurements/fusion360-build-order.md @@ -1,227 +1,38 @@ -# Fusion 360 build order — first prototype - -The enclosure has not yet been designed. All locations in this document are conceptual -placement intent only; use the [reference architecture](../docs/hardware/reference-architecture.md) -as the official non-dimensioned baseline before choosing CAD dimensions. - -This is the practical next-step plan for the first Radiance3D prototype. It is intentionally scoped so you can build the structure one component at a time without guessing. - -## 0. Before modeling anything - -Before you model the first part, confirm these items from the existing measurements: - -- Motor body length and pilot boss dimensions are known. -- Motor shaft length from the boss face is known. -- The rear connector envelope is known and must be preserved. -- The clearances for PETG are set as design parameters, not hard-coded. -- Any missing motor-mount dimensions are marked provisional and not silently assumed. - -## 1. Build Pan_Base first - -Create the stationary base first. This defines the envelope for everything else. - -The 12 V source is permanently off-board beneath the workbench. Do not model a battery -compartment, retention feature, or battery-weight allowance. Model only an accessible, -strain-relieved `+12V IN` / `GND IN` entry and its route to internal distribution. - -### Goals -- Provide a stable platform for the pan axis. -- Reserve space for the pan motor, bearings, and the electronics tray. -- Leave enough clearance for the rear motor connector and cable routing. -- Keep the pan/tilt axis intersection as close as practical to the antenna centre. - -### Model requirements -- Use a base plate and side walls or ribs to create a stiff structure. -- Include a mounting pocket or bracket for the pan motor. -- Add a bearing seat for the pan axis. -- Leave a defined cable path from the pan motor and the tilt assembly toward the electronics area. -- Keep the base thick enough to resist flexing under the tilt mass. - -### Review questions -- Does the pan axis sit at a sensible height for the antenna? -- Does the motor connector have clear access without blocking the axis? -- Is the base wide enough to avoid wobble from the tilt assembly? - -## 2. Build Pan_Motor_Mount second - -Once the base is reviewed, add the pan motor mount. - -### Goals -- Hold the pan motor so its shaft is aligned with the pan axis. -- Keep the motor shaft protected from side load. -- Allow the motor to be installed and serviced without breaking the structure. - -### Model requirements -- Use the measured motor pilot diameter and height. -- Create a printed register or pocket sized from the measured values plus clearance. -- Add a mounting-hole pattern only once the actual motor hole spacing and diameter are measured. -- If the motor is mounted shaft-up or shaft-down, document that decision and the reason. -- Preserve the rear connector clearance volume. - -### Review questions -- Is the motor face parallel to the pan axis? -- Is its shaft aligned with the pan bearing centreline? -- Is the connector still reachable? - -## 3. Build Pan_Platform third - -Now model the rotating platform that carries only the tilt motor, vertically mounted -AD8317 detector, and antenna mount. The AUT threads directly onto the detector SMA; -do not add an antenna-to-detector coax jumper. - -### Goals -- Create the pan platform as a bearing-supported rotating part. -- Keep the platform stiff enough that the tilt assembly does not make it flex. -- Make the platform large enough for the tilt support structure and cable routing. - -### Model requirements -- Add a bearing seat for the pan bearing. -- Provide a clear interface to the tilt support frame. -- Keep the antenna centre close to the axis intersection. -- Reserve space for the tilt motor and support structure. - -### Review questions -- Does the platform leave enough area for the tilt frame without clipping the base? -- Does the platform provide a stable interface for the next component? - -## 4. Build Tilt_Support_Frame fourth - -This is the vertical structure that raises the tilt axis above the pan platform. - -### Goals -- Raise the tilt axis to a useful antenna height. -- Keep the frame rigid and not overly tall. -- Support both ends of the tilt shaft so the motor does not carry side load. - -### Model requirements -- Create a frame that rises from the pan platform. -- Include two bearing support interfaces, one on each side of the tilt axis. -- Keep the tilt axis close to the pan axis intersection. -- Leave cable routing room through the frame. - -### Review questions -- Does the frame create an obvious, stiff load path? -- Is the tilt axis height reasonable for the antenna and receiver geometry? -- Is there enough room for a coupler and a motor mount without collision? - -## 5. Build Tilt_Motor_Mount fifth - -Add the tilt motor mount on one side of the frame. - -### Goals -- Hold the tilt motor in a way that does not twist the support frame. -- Align the motor shaft with the tilt axis. -- Keep the motor out of the path of the antenna and the cable route. - -### Model requirements -- Use the measured motor register and pilot dimensions. -- Model the motor mount from the measured hardware, not assumptions. -- Leave space for the motor connector and cable bend. - -### Review questions -- Is the motor mount sufficiently stiff? -- Does it create a clear torque path into the coupler and bearing-supported shaft? - -## 6. Build Tilt_Bearing_Support sixth - -Add the opposite support for the tilt axis. - -### Goals -- Complete the two-bearing support for the tilt axis. -- Ensure the tilt shaft is not cantilevered from the motor. -- Provide the second bearing seat needed for repeatable motion. - -### Model requirements -- Create a bearing support that matches the frame geometry. -- Ensure the tilt axis runs through the intended centreline. -- Keep the frame symmetrical enough to avoid skew. - -## 7. Build Antenna_Cradle seventh - -Now create the part that holds the antenna or DUT. - -### Goals -- Mount the antenna at the correct point in space. -- Put the antenna active centre as close as possible to the pan/tilt axis intersection. -- Keep the antenna physically stable and mechanically isolated from the frame. - -### Model requirements -- Include a place to attach the antenna body and connector. -- Leave room for the coax to route without tight bends. -- Keep the mounting feature adjustable if needed. - -### Review questions -- Is the antenna centre aligned with the intended measurement point? -- Does the fixture create unnecessary RF disturbance? -- Can the antenna be installed and removed easily? - -## 8. Build Antenna_Mount_Adjustable eighth - -Add the adjustable mount if the antenna cradle needs positional tuning. - -### Goals -- Make the antenna centre adjustable in a controlled way. -- Support calibration and alignment without reprinting the whole cradle. - -### Model requirements -- Keep the adjustment mechanism simple and printable. -- Avoid a design that depends on fragile thin features. -- Make the adjustment range explicit in the model. - -## 9. Build Cable_Routing ninth - -Cable routing should be designed as part of the structure, not added later. - -### Goals -- Prevent cable binding or stretching through motion. -- Model RF paths as RG316 50 Ω coax with a centre-and-shield envelope; model silicone - electrical harnesses separately, never as the same cable type. -- Respect the measured minimum bend radius of the RG316 coax and the bend clearance of - each silicone harness. -- Keep the cable path away from fasteners and the moving bearing faces. - -### Model requirements -- Include clips or guides in the frame and base. -- Leave generous bend radius room. -- Prevent either cabling system from wrapping around the axis as it moves. -- Label CAD routes with `RF-###` for coax and `PWR-###`, `SIG-###`, or `MTR-###` for - silicone harnesses. - -## 10. Build Limit_Switch_Mounts tenth - -Add the homing or limit switches once the structure is stable. - -### Goals -- Provide repeatable homing so the position is not lost on reset. -- Mount the switches without relying on fragile printed geometry alone. - -### Model requirements -- Keep switch mounts adjustable if needed. -- Use the measured switch dimensions once available. -- Avoid overconstraining the moving structure with the switch mount. - -## 11. Build Electronics_Tray eleventh - -Once the mechanics are settled, add the electronics tray. - -### Goals -- Hold the ESP32, both TMC2209 drivers, and the buck converter. -- Keep wiring short and serviceable. -- Preserve access to connectors and USB. - -### Model requirements -- Use the measured board dimensions. -- Include pockets or slots for boards with clearance. -- Reserve room for the USB cable and wiring harness. - -## 12. Optional Counterweight_Mount last - -Only if the tilt assembly needs it. - -### Goals -- Balance the tilt axis and reduce motor torque demand. -- Improve repeatability under acceleration. - -### Model requirements -- Make the counterweight mount adjustable. -- Keep it nonintrusive to the antenna path. +# Fusion 360 build order — Revision 1 + +Work one subsystem at a time and pause for review at each numbered stage. + +1. **Reconcile parameters.** Load the measured, calculated, design, and provisional + parameter table. Confirm measured values are frozen. +2. **Purchased-component envelopes.** Model both motors, ESP32, two TMC2209s, two + ZX-052s, and the selected AD8317 using measured envelopes and visible access faces. +3. **Component-envelope layout study.** Center the pan axis, solve platform size and + electronics placement inside 220 × 220 mm, and present dimensions and swept volumes. +4. **D-shaft coupon.** Print a 5.00/4.60 mm D-profile split-clamp coupon and tune only + `dHubProfileClearance`. +5. **Motor coupons.** Print the 21.97 mm pilot-register and 31.00 mm mounting-pattern + coupons; use provisional M3-compatible holes. +6. **Stationary base.** Create the stable open base, centred pan-motor mount, side/rear + strain-relieved power entry, distribution area, open wiring routes, and optional + future bench-fastening points. +7. **Pan hub and platform.** Create a short-cantilever clamp hub and the smallest + practical ribbed platform proven by the layout study. +8. **Open electronics retention.** Add removable rails/clips/straps/crossbars/zip-tie + slots. Verify every display, connector, adjustment, terminal, and cooling envelope. +9. **Tilt motor and hub.** Mount the tilt motor compactly, align its shaft near the pan + axis, and create a removable direct-drive clamp hub. +10. **AD8317/AUT carriage.** Add a vertical adjustable edge/strap holder, direct-SMA + AUT clearance envelope, and lightweight nonconductive bending-load guide. +11. **Harness motion study.** Model neutral cable position, service loop, strain relief, + one managed pan turn, tilt travel, and protection from hubs/platform/connectors. +12. **Engineering review.** Report base/platform dimensions, shaft cantilevers, moving + mass estimate, CG offsets, tilt range, access conflicts, and direct-drive concerns. +13. **First structural print.** Print only after coupons and layout are approved; state + PETG orientation and support strategy. +14. **Low-acceleration prototype.** Test balance, hub slip, shaft loading, cable twist, + collision clearance, and base stability. +15. **Revision.** Change clearance/design parameters only; add new measured values + without deleting historical readings. + +Do not request bearings, separate shafts, couplers, exact PCB mounting holes, or final +wire lengths before conceptual CAD. diff --git a/Measurements/fusion360-design-spec.md b/Measurements/fusion360-design-spec.md index 4169fd5..ca04691 100644 --- a/Measurements/fusion360-design-spec.md +++ b/Measurements/fusion360-design-spec.md @@ -1,135 +1,66 @@ -# Fusion 360 design spec — precision pass +# Fusion 360 design spec — Revision 1 direct-drive prototype -The enclosure has not yet been designed. All component locations are conceptual only; -the [reference architecture](../docs/hardware/reference-architecture.md) is the official -non-dimensioned placement baseline for Fusion work. +## Scope -This document is a tighter handoff for the first Radiance3D pan-and-tilt prototype. It turns the broad CAD brief into a concrete implementation plan that is easier to execute in Fusion 360 and easier to review. +Design an open PETG desktop scanner inside a 220 × 220 mm maximum base. Center the +stationary pan motor, solve the smallest stable direct-drive platform, and arrange the +open stationary electronics outside its swept envelope. Do not prescribe coordinates +or platform diameter before the layout study. -## 1. Target architecture +## Fixed architecture -The first prototype should use a two-axis, two-bearing mechanism with the motor shafts protected from side load: +- Pan motor is stationary and directly drives a lightweight platform through a + removable clamp-style hub on its measured 5 mm D-shaft. +- Tilt motor rotates with the platform and directly drives a lightweight detector/AUT + carriage through the same kind of removable hub. +- Motor internal bearings support Revision-1 loads. No external bearings, separate + shafts, couplers, or slip ring are used. +- The selected AD8317 is vertical. Interchangeable AUTs thread directly onto its SMA; + there is no detector-to-AUT coax. +- ESP32, both TMC2209s, both ZX-052 boards, 12 V entry, and distribution are stationary. +- The open base has no electronics enclosure or battery compartment. -- Pan axis: a rotating platform carried on bearings in the base, driven by the fixed - stationary-base pan motor through a coupler; target capability is one controlled 360° turn. -- Tilt axis: a tilt support frame carried on bearings and driven by the tilt motor through a coupler. -- The motor shaft should never be the primary radial support for the axis. The bearings carry the load; the motor supplies torque only. -- The antenna active centre should be placed as close as practical to the pan/tilt axis intersection. The target is $0\,\text{mm}$ offset. Any remaining offset must be recorded as a design parameter rather than hidden. -- The cable path must stay clear through full travel. The selected coax must stay above the minimum bend radius for the cable being used. +## Layout study -## 2. Design rules to preserve +Before printable geometry, Fusion must: -- Use millimetres throughout. -- Keep every dimension driven by a user parameter. No hard-coded values in sketches or features. -- Never edit a measured value to fix a fit. Use clearance parameters instead. -- Preserve the measured-vs-design distinction already documented in the repository. -- Design for PETG. Favor simple geometry, ribs, and fillets over thick solid walls. -- Print shallow register features face-up where practical. Include a chamfer at the mouth of every bore and register. -- For every removable fastener, use a proper boss and heat-set insert strategy rather than relying on a thread in plastic. +1. Model measured component envelopes in their access orientations. +2. Center the pan axis and determine the smallest practical pan platform. +3. Place stationary boards outside the platform sweep and inside 220 × 220 mm. +4. Show connector, terminal, display, adjuster, cooling, wire-bend, and service envelopes. +5. Show tilt and interchangeable-AUT collision envelopes. +6. Show the moving harness at neutral and both ends of one managed pan turn. +7. Report platform size, base size, cantilever distances, estimated moving mass when + known, both shaft CG offsets, achievable tilt range, and direct-drive concerns. -## 3. Recommended build order in Fusion +## Direct-drive hubs and carriage -Work in this order and stop after each step for review: +Use a D-profile split clamp, captive-nut clamp, or equivalent removable clamping hub. +Do not use a loose round PETG bore, a separate shaft coupler, a set screw cutting into +PETG, or hard axial preload against a motor. Keep the carriage close to the shaft and +all clamp fasteners accessible. The AD8317 PCB is retained in a vertical adjustable +edge/strap holder; it is not the hub or primary structural member. -1. Pan base -2. Pan motor mount -3. Pan platform -4. Tilt support frame -5. Tilt motor mount -6. Tilt bearing support -7. Antenna cradle -8. Antenna mount adjustment mechanism -9. Cable routing and strain relief -10. Limit switch mounts -11. Electronics tray -12. Counterweight mount (optional) +## Open electronics -Do not start the next component until the current one is reviewed. +Use reversible clips, shallow trays, rails, straps, removable crossbars, or zip-tie +slots. Missing PCB hole coordinates do not block the design. Preserve USB-C, ESP32 +buttons/OLED, TMC2209 VREF/heatsink/header access, both ZX-052 displays/adjusters/ +pushbuttons/terminals, tall-component ventilation, and 18/22 AWG wire bends. -## 4. Explicit modeling decisions to make +## Motion and harness -### 4.1 Motor orientation +Pan targets one managed 360° turn from cable neutral and returns toward neutral; it is +not unlimited rotation. Tilt targets the largest collision-free range, desirably near +−90° to +90°. Route four tilt phases, AD8317 +5 V/GND, VOUT, and analog return as one +flexible silicone bundle with service loop, strain relief, guides, and edge protection. +Keep analog wiring separated from motor VM/phase wiring where practical. -Each motor needs an explicit orientation decision, not an assumption. +## PETG construction -For each motor, the model must show: -- shaft direction (up/down) -- the location of the rear connector envelope -- the 21.4 mm connector-clearance volume behind the motor, including the 12 mm bend-clearance allowance +Use named parameters, ribs instead of unnecessary solid mass, structural fillets, +minimal supports, explicit print orientations, open wire routing, M3-compatible +provisional hardware, and removable modules. Print motor-pilot and D-shaft hub coupons +before the full platform or tilt carriage. Never edit measured values to tune fit. -The model should state whether the connector envelope is absorbed into the base, a side wall, or a rear wall. The orientation choice must be justified in the design notes. - -### 4.2 Bearing layout - -Each axis should be supported by two bearings with a defined spacing. The bearing seats must: -- be modelled from the actual bearing dimensions once available -- use a press-fit strategy for the bearing outer race -- not rely on the motor shaft for radial support - -### 4.3 Axis intersection and antenna placement - -The antenna active centre should be brought as close as practical to the pan/tilt axis intersection. If that cannot be achieved, the model must carry a non-zero offset parameter and the reason should be documented. - -### 4.4 Cable path - -The cable route should be planned before the frame is finalized. RF and electrical -cabling must be modelled as separate routes: RG316 50 Ω coax is represented with centre -conductor and shield for RF-### paths, while PWR-###, SIG-###, and MTR-### are silicone -wire harnesses. Cable routing must account for: -- bend radius of the moving silicone harness; the external VTX RG316 path is not a - scanner-mounted antenna-to-detector jumper -- connector reach -- axis travel -- strain relief -- clearance around the moving platform and frame - -## 5. Part-number placeholders - -You already have the relevant hardware in the project, so part numbers are optional for this first mechanical pass. If you want a cleaner BOM later, record them as placeholders in the model notes and in the BOM. Do not guess. - -| Item | Placeholder field | Notes | -|---|---|---| -| Pan bearing | pPanBearingPartNumber | Fill once the bearing is selected | -| Tilt bearing | pTiltBearingPartNumber | Fill once the bearing is selected | -| Pan coupler | pPanCouplerPartNumber | Fill once the coupler is selected | -| Tilt coupler | pTiltCouplerPartNumber | Fill once the coupler is selected | -| Heat-set insert | pHeatSetInsertPartNumber | Fill once the insert supplier is known | -| Limit switch | pLimitSwitchPartNumber | Fill once the switch is selected | -| Antenna mount / connector | pAntennaMountPartNumber | Fill once the antenna hardware is selected | -| Fasteners | pFastenerPartNumber | Fill once the screw sizes are confirmed | - -## 6. Measurements still required before final fit - -The following measurements should be captured before the design is considered complete for print: - -- NEMA 17 motor face width across flats -- NEMA 17 mounting-hole spacing and diameter -- NEMA 17 shaft diameter -- Bearing inner diameter, outer diameter, and width -- Coupler outer diameter, length, and bores -- Heat-set insert outer diameter, length, and pilot diameter -- Limit switch body and mounting-hole dimensions -- Antenna body, connector, and coax dimensions -- Fastener sizes and lengths - -If any of these are not available yet, leave the corresponding features parametric and mark them as provisional in the model. - -## 7. Deliverables for each component - -For each component in the build order, the Fusion model should include: -- the geometry for the part -- its mounting interfaces -- its clearances for adjacent parts -- the print orientation note -- the fastener or insert strategy -- any provisional dimensions that still need measurement - -## 8. Suggested review checklist - -Before moving on from any component, confirm: -- the part is fully parameterized -- the fit is based on the measured dimension, not a guessed one -- the print orientation is explicit -- the fastener strategy is explicit -- the connector and cable-clearance envelopes are respected -- any unresolved dimension is clearly marked as provisional +External bearing-supported axes, limit switches, and guards are future upgrades only. diff --git a/Measurements/fusion360-parameters.md b/Measurements/fusion360-parameters.md index 8963dba..2ec2749 100644 --- a/Measurements/fusion360-parameters.md +++ b/Measurements/fusion360-parameters.md @@ -1,216 +1,113 @@ -# Fusion 360 parameters +# Fusion 360 parameters — Revision 1 -The enclosure has not yet been designed. These parameters support conceptual Fusion -work only; they do not establish final component locations or enclosure dimensions. +Revision 1 is an open, direct-drive desktop prototype within a 220 × 220 mm maximum +base. Exact placement is a Fusion layout-study result. -Proposed Fusion 360 user parameters for the Radiance3D pan-and-tilt prototype. +## Naming and fit policy -Every parameter is tagged with its **type**, and the types are never mixed silently: - -| Type | Meaning | +| Prefix | Meaning | |---|---| -| **Measured** | Taken from a caliper reading traceable to a photograph in this folder | -| **Design choice** | Chosen by the designer; no physical measurement behind it | -| **Provisional** | A placeholder standing in for a measurement that has not been taken. **Must be replaced before any part is printed for fit.** | -| **Calculated** | Derived from other parameters by expression | - -All values are millimetres unless the parameter is an angle. - -> [!WARNING] -> Every **Provisional** row is a hole in the design. They are listed in -> [`missing-measurements.md`](missing-measurements.md) with instructions for taking -> the real measurement. Do not treat a provisional value as verified because it looks -> plausible. - -## The one rule: never edit a measured value to fix a fit - -Every critical dimension exists twice: - -| | Parameter | Changes when | -|---|---|---| -| **Measured value** | e.g. `mMotorPilotHeight` | Never — only if the part is re-measured or replaced | -| **CAD value** | e.g. `cMotorPilotPocketDepth` | Freely — it is an expression, and fit is tuned through the clearance term | - -```text -mMotorPilotHeight = 2.00 mm <- measured, frozen -cMotorPilotPocketDepth = mMotorPilotHeight + dPrintClearance <- CAD, tune via clearance -``` - -When a printed part comes out too tight, the fix is `dPrintClearance` or -`dBearingFitAllowance` — **never** the measured number. Editing a measured value to fix -a fit destroys the record of what the hardware actually is, and the error then -propagates silently into every other feature that references it. - -This is why the fit parameters are separate, single-purpose, and few: `dPrintClearance`, -`dBearingFitAllowance`, `dMountingClearance`, `dHeatsinkAirGap`, `dCableBendClearance`. All -tuning happens in those. - -## Naming convention - -Parameter names carry their type as a prefix, matching what Fusion Assistant generates, -so the repository and the Fusion parameter table use identical names: - -| Prefix | Type | Example | -|---|---|---| -| `m` | Measured | `mMotorPilotDiameter` | -| `c` | Calculated | `cMotorPilotSeatDiameter` | -| `d` | Design choice | `dPrintClearance` | -| `p` | Provisional | `pBearingOuterDiameter` | - -The prefix is visible at every use site, so a provisional value cannot be mistaken for -a measured one inside an expression. - -## Fit policy — PETG, forgiving - -Target fit is a slip fit at **+0.15 mm per side** (`dPrintClearance`), giving 0.30 mm -total across a bore or slot. - -**0.04 mm per side was specified, and has been overridden to 0.15 mm.** That is a -judgement call, and it is one line to revert. - -Reason: 0.04 mm per side is machining-grade, not FFF-grade. PETG bores print undersized -by roughly 0.1–0.3 mm on diameter from die swell and perimeter pull-in, *before* any -clearance is applied. The printer eats 0.04 mm before a fit exists, so the result is an -interference fit needing force or a reamer — the opposite of forgiving. 0.15 mm per -side (0.30 mm total) is a standard PETG slip fit that still assembles by hand. +| `m...` | physically measured and frozen | +| `c...` | calculated expression | +| `d...` | adjustable design choice | +| `p...` | provisional value, explicitly labelled `PROVISIONAL` | -The register coupon settles it in one print. Change `dPrintClearance`, never a -measured value. - -> [!CAUTION] -> **Shallow features sit inside the elephant-foot zone.** The motor pilot register is -> only 2.00 mm deep. Printed face-down, the whole feature is within the first few -> layers, where PETG squishes outward and shrinks the bore — tight at the bottom, -> correct at the top, and the motor rocks. Print that face **up**, or rely on -> `dBoreMouthChamfer`. State the print orientation for every part with a shallow -> register. - -Fit classes are deliberately separate, because they are not the same problem: - -| Parameter | Fit class | Sign | Applies to | -|---|---|---|---| -| `dPrintClearance` | Slip fit | Positive — adds material clearance | Motor pilot register, board pockets, card slots, general part-to-part | -| `dBearingFitAllowance` | Press fit | Zero — bore at nominal; the printer's undersizing supplies the interference | Bearing outer-race seats only | -| `dMountingClearance` | Loose | Positive, generous | Fastened interfaces where position is set by the fastener | - -Never apply `dPrintClearance` to a bearing seat. A bearing that slips into its housing -is a failed bearing seat. - ---- +Never edit a measured value to fix print fit. Tune `dPrintClearance`, +`dHubProfileClearance`, or another named design allowance. Start PETG slip fits at +0.15 mm per side and verify the motor pilot and D-shaft profiles with coupons. ## Measured -Traceable to a caliper reading and a photograph. - -| Parameter | Expression | Source | Type | Notes | -|---|---:|---|---|---| -| `mMotorBodyDiagonal` | 54.30 mm | nema17.md — IMG_5223 | Measured | Corner to corner across chamfered corners | -| `mMotorBodyLength` | 20.84 mm | nema17.md — IMG_5249 | Measured | Front face plate to rear face plate, excludes pilot boss. IMG_5231 gave 20.76 mm | -| `mMotorLengthWithBoss` | 22.85 mm | nema17.md — IMG_5248 | Measured | Pilot boss face to rear face | -| `mMotorOverallLength` | 45.18 mm | nema17.md — IMG_5250 | Measured | Shaft tip to rear face — the full axial envelope | -| `mMotorPilotDiameter` | 21.97 mm | nema17.md — IMG_5247 | Measured | Register that centres the motor. Was provisional at 22.00 mm | -| `mMotorPilotHeight` | 2.00 mm | nema17.md — derived, ±0.06 mm | Measured | Derivation gives 1.95 and 2.01 by two routes; 2.00 adopted. **Frozen — tune fit via `dPrintClearance`** | -| `mAd8317OverallWidth` | 55.84 mm | ad8317.md — IMG_5257, IMG_5258 | Measured | SMA tip to tip, along the SMA axis | -| `mAd8317PcbLength` | 36.27 mm | ad8317.md — IMG_5261 | Measured | Bare PCB, along the SMA axis | -| `mAd8317PcbWidth` | 35.72 mm | ad8317.md — IMG_5262 | Measured | Bare PCB, perpendicular. **Board is not square** | -| `mAd8317ShieldCanLength` | 17.36 mm | ad8317.md — IMG_5259, IMG_5260 | Measured | RF shield can only; mean of 17.34 / 17.38 | -| `mMotorConnectorProtrusion` | 9.38 mm | nema17.md — IMG_5226, IMG_5227 | Measured | Height of rear connector above end-cap face; two independent readings agreed | -| `mMotorConnectorLength` | 16.43 mm | nema17.md — IMG_5228 | Measured | 6-position housing on the rear end cap | -| `mMotorShaftLengthFromBoss` | 22.39 mm | nema17.md — operator measurement | Measured | **Datum is the pilot boss face, not the motor face plate.** No source photograph | -| `mDriverPcbLength` | 20.14 mm | tmc2209-v1.3.md — IMG_5234 | Measured | Bare PCB long axis | -| `mDriverPcbWidth` | 15.14 mm | tmc2209-v1.3.md — IMG_5233, IMG_5238 | Measured | Bare PCB short axis; repeat read 15.16 mm | -| `mDriverHeatsinkLeftToPcbRight` | 12.21 mm | tmc2209-v1.3.md — IMG_5235 | Measured | Heatsink left face to far PCB edge | -| `mDriverHeatsinkRightToPcbLeft` | 11.22 mm | tmc2209-v1.3.md — IMG_5236 | Measured | Heatsink right face to far PCB edge | -| `mDriverHeatsinkFrontToPcbBack` | 13.73 mm | tmc2209-v1.3.md — IMG_5237 | Measured | Heatsink front face to far PCB edge | -| `mDriverInstalledHeight` | 22.24 mm | tmc2209-v1.3.md — IMG_5239 | Measured | Heatsink top to header-pin tips; full envelope | -| `mEsp32PcbLength` | 51.47 mm | esp32-devkit.md — IMG_5241 | Measured | Bare board outline | -| `mEsp32PcbWidth` | 28.23 mm | esp32-devkit.md — IMG_5242 | Measured | Bare board outline | -| `mEsp32PcbThickness` | 1.33 mm | esp32-devkit.md — IMG_5245 | Measured | Thinner than the usual 1.6 mm assumption | -| `mEsp32BoardHeightWithModule` | 4.38 mm | esp32-devkit.md — IMG_5246 | Measured | PCB plus ESP-WROOM-32; excludes header pins below | -| `mEsp32UsbCWidth` | 8.83 mm | esp32-devkit.md — IMG_5243, IMG_5244 | Measured | Receptacle shell only; plug overmould is wider | +| Parameter | Value | Interpretation | +|---|---:|---| +| `mMotorBodyDiagonal` | 54.30 mm | chamfered-corner envelope | +| `mMotorFaceEnvelopeMax` | 43.46 mm | larger photographed outer-face envelope; clearance only | +| `mMotorBodyLengthSafe` | 20.84 mm | larger same-face reading; 20.72 mm repeat retained in `nema17.md` | +| `mMotorLengthWithBoss` | 22.85 mm | boss face to rear face | +| `mMotorOverallLength` | 45.18 mm | shaft tip to rear face | +| `mMotorPilotDiameter` | 21.97 mm | precision locating register | +| `mMotorPilotHeight` | 2.00 mm | adopted derived value, ±0.06 mm | +| `mMotorHoleSpacing` | 31.00 mm | measured one axis; nominally square pattern | +| `mMotorShaftDiameter` | 5.00 mm | D-shaft major diameter | +| `mMotorDFlatOppositeThickness` | 4.60 mm | flat surface to opposite round surface | +| `mMotorShaftLengthFromBoss` | 22.39 mm | boss-face datum | +| `mMotorConnectorProtrusionMax` | 9.53 mm | larger repeat used for clearance | +| `mMotorConnectorHousingEnvelope` | 16.44 mm | latest repeat | +| `mDriverPcbLength` | 20.14 mm | TMC2209 PCB | +| `mDriverPcbWidth` | 15.14 mm | TMC2209 PCB | +| `mDriverInstalledHeight` | 22.24 mm | heatsink top to pin tips | +| `mEsp32PcbLength` | 51.47 mm | PCB envelope | +| `mEsp32PcbWidth` | 28.23 mm | PCB envelope | +| `mEsp32PcbThickness` | 1.33 mm | bare PCB | +| `mEsp32BoardHeightWithModule` | 4.38 mm | excludes lower header pins | +| `mEsp32UsbCWidth` | 8.83 mm | receptacle shell only | +| `mZX052PcbLength` | 66.07 mm | each of two boards | +| `mZX052PcbWidth` | 36.48 mm | each of two boards | +| `mZX052EdgeThickness` | 2.15 mm | local edge only, not installed height | +| `mAd8317OverallWidth` | 55.84 mm | SMA tip to tip | +| `mAd8317PcbLength` | 36.27 mm | along SMA axis | +| `mAd8317PcbWidth` | 35.72 mm | perpendicular to SMA axis | +| `mAd8317ShieldCanLength` | 17.36 mm | shield can only | ## Calculated -Derived by expression. Fusion will keep these correct when their inputs change. - -| Parameter | Expression | Source | Type | Notes | -|---|---:|---|---|---| -| `cMotorPocketDepth` | `mMotorBodyLength + dPrintClearance` | Calculated | Calculated | Pocket for the motor body only | -| `cMotorRearClearance` | `mMotorConnectorProtrusion + dCableBendClearance` | Calculated | Calculated | Space behind the motor for the connector and its plug. 21.38 mm at current values — this decides whether the pan motor can face shaft-up | -| `cDriverBayHeight` | `mDriverInstalledHeight + dHeatsinkAirGap` | Calculated | Calculated | Never make the bay exactly `mDriverInstalledHeight`; the heatsink needs air | -| `cDriverHeatsinkWidth` | `mDriverHeatsinkLeftToPcbRight + mDriverHeatsinkRightToPcbLeft - mDriverPcbWidth` | Calculated | Calculated | 8.29 mm. Fully measured — no provisional input | -| `cDriverHeatsinkOffset` | `(mDriverHeatsinkLeftToPcbRight - mDriverHeatsinkRightToPcbLeft) / 2` | Calculated | Calculated | 0.495 mm from the PCB centre. This is why the driver is handed | -| `cDriverHeatsinkFrontEdge` | `mDriverPcbLength - mDriverHeatsinkFrontToPcbBack` | Calculated | Calculated | 6.41 mm from the PCB front edge. The heatsink's **back** edge is unknown — see `missing-measurements.md` | -| `cEsp32PocketLength` | `mEsp32PcbLength + 2 * dPrintClearance` | Calculated | Calculated | Tray pocket, removable fit | -| `cEsp32PocketWidth` | `mEsp32PcbWidth + 2 * dPrintClearance` | Calculated | Calculated | Tray pocket, removable fit | -| `cMotorFaceHalf` | `pMotorFaceWidth / 2` | Calculated | Calculated | Used to centre the motor on its mount | -| `cMotorPilotPocketDepth` | `mMotorPilotHeight + dPrintClearance` | Calculated | Calculated | The counterbore in the printed mount. Tune fit here, never in `mMotorPilotHeight` | -| `cMotorPilotSeatDiameter` | `mMotorPilotDiameter + dPrintClearance` | Calculated | Calculated | The register bore in the printed mount | -| `cDriverBayLength` | `mDriverPcbLength + 2 * dPrintClearance` | Calculated | Calculated | Driver bay footprint, removable fit | -| `cDriverBayWidth` | `mDriverPcbWidth + 2 * dPrintClearance` | Calculated | Calculated | Driver bay footprint, removable fit | -| `cEsp32SlotThickness` | `mEsp32PcbThickness + dPrintClearance` | Calculated | Calculated | Card-slot width. The board is 1.33 mm, not 1.6 mm | -| `cAd8317SmaProtrusion` | `(mAd8317OverallWidth - mAd8317PcbLength) / 2` | Calculated | Calculated | 9.78 mm per side. Normal for an edge-launch SMA, which corroborates the two readings | -| `cAd8317PocketLength` | `mAd8317PcbLength + 2 * dPrintClearance` | Calculated | Calculated | Removable holder, not an interference fit — this board carries RF | -| `cAd8317PocketWidth` | `mAd8317PcbWidth + 2 * dPrintClearance` | Calculated | Calculated | Removable holder | -| `cMotorShaftLengthFromFace` | `mMotorShaftLengthFromBoss + mMotorPilotHeight` | Calculated | Calculated | 24.40 mm — the vendor-style figure. Now fully derived from measured values | -| `cCouplerShaftEngagement` | `pCouplerLength / 2` | Calculated | Calculated | Motor-side engagement. Must stay below `mMotorShaftLengthFromBoss` (22.39 mm) | -| `cBearingSeatBore` | `pBearingOuterDiameter - dBearingFitAllowance` | Calculated | Calculated | Press-fit seat; validate with a coupon first | - -## Provisional — must be replaced before printing for fit - -These are placeholders. Each one has an entry in -[`missing-measurements.md`](missing-measurements.md). - -| Parameter | Expression | Source | Type | Notes | -|---|---:|---|---|---| -| `pMotorFaceWidth` | 42.30 mm | **Provisional** | Provisional | IMG_5221 reads `42` but decimals are unreadable. 42.30 is the NEMA 17 nominal, not a measurement | -| `pMotorHoleSpacing` | 31.00 mm | **Provisional** | Provisional | NEMA 17 nominal square pattern. Not verified on these motors | -| `pMotorHoleDiameter` | 3.40 mm | **Provisional** | Provisional | M3 clearance, assumed. Not measured | -| `pMotorShaftDiameter` | 5.00 mm | **Provisional** | Provisional | IMG_5225 reads `4.9?`. Use 5.00 nominal until the second decimal is confirmed | -| `pBearingInnerDiameter` | 8.00 mm | **Provisional** | Provisional | No bearing measured. 8 mm assumes a 608-series | -| `pBearingOuterDiameter` | 22.00 mm | **Provisional** | Provisional | No bearing measured | -| `pBearingWidth` | 7.00 mm | **Provisional** | Provisional | No bearing measured | -| `pCouplerOuterDiameter` | 19.00 mm | **Provisional** | Provisional | No coupler measured | -| `pCouplerLength` | 25.00 mm | **Provisional** | Provisional | No coupler measured; drives the tilt-assembly height | -| `pCouplerBoreMotorSide` | 5.00 mm | **Provisional** | Provisional | Assumed to match the shaft | -| `pCouplerBoreDrivenSide` | 8.00 mm | **Provisional** | Provisional | No coupler measured | -| `pInsertOuterDiameter` | 4.60 mm | **Provisional** | Provisional | Common M3 heat-set insert knurl OD. Not measured | -| `pInsertLength` | 5.70 mm | **Provisional** | Provisional | Common M3 heat-set insert length. Not measured | -| `pInsertPilotDiameter` | 4.00 mm | **Provisional** | Provisional | Pilot hole for the above. Verify against the insert supplier and a test coupon | -| `pLimitSwitchBodyLength` | 20.00 mm | **Provisional** | Provisional | No switch measured | -| `pLimitSwitchHoleSpacing` | 9.50 mm | **Provisional** | Provisional | No switch measured | -| `pAntennaBodyDiameter` | 10.00 mm | **Provisional** | Provisional | No antenna selected or measured | -| `pCoaxOuterDiameter` | 3.00 mm | **Provisional** | Provisional | No coax measured. RG316-class assumption | -| `pCoaxMinBendRadius` | 15.00 mm | **Provisional** | Provisional | Take from the coax datasheet, not by bending the cable | - -## Design choice - -Chosen deliberately. No measurement is expected behind these; they are tuning knobs. - -| Parameter | Expression | Source | Type | Notes | -|---|---:|---|---|---| -| `dWallThickness` | 3.00 mm | Design choice | Design | PETG prototype; increase for the pan base if it flexes | -| `dBaseThickness` | 6.00 mm | Design choice | Design | Stationary pan base floor | -| `dPrintClearance` | 0.15 mm | Design choice | Design | Slip fit, **per side** (0.30 mm total across a bore). PETG starting value. Was specified at 0.04 mm — see the fit-policy note | -| `dBearingFitAllowance` | 0.00 mm | Design choice | Design | Bore modelled at the exact bearing OD. FFF already undersizes holes, which supplies the interference — do not stack a second one. Never use `dPrintClearance` here | -| `dHeatsinkAirGap` | 8.00 mm | Design choice | Design | Free air above the TMC2209 heatsink. Do not reduce without a thermal test | -| `dCableBendClearance` | 12.00 mm | Design choice | Design | Space behind a motor connector for the plug and wire bend | -| `dMountingClearance` | 1.00 mm | Design choice | Design | Slack around fastened interfaces | -| `dFilletRadiusStructural` | 3.00 mm | Design choice | Design | Structural fillets at load-bearing intersections | -| `dFilletRadiusCosmetic` | 1.00 mm | Design choice | Design | Edge break | -| `dRibThickness` | 2.40 mm | Design choice | Design | Stiffening ribs; a multiple of a 0.4 mm nozzle width | -| `dBoreMouthChamfer` | 0.50 mm | Design choice | Design | Chamfer at the mouth of every bore and register, so squished first layers have somewhere to go | -| `dTiltAxisHeight` | 90.00 mm | Design choice | Design | Height of the tilt axis above the pan platform. Set for antenna swing clearance | -| `dAntennaCentreOffset` | 0.00 mm | Design choice | Design | Target: antenna active centre on the pan/tilt axis intersection. Non-zero is an RF error term | -| `dAxisIntersectionOffset` | 0.00 mm | Design choice | Design | Target: pan and tilt axes intersect. Record the real value once geometry is fixed | -| `dCounterweightMassTarget` | 0.00 mm | Design choice | Design | Placeholder. Set once the antenna and cradle mass are known | - -## How to use this table - -1. Create the **Design choice** parameters first — they have no dependencies. -2. Add the **Measured** parameters. -3. Add the **Provisional** parameters, and put the word `PROVISIONAL` in each one's - Fusion comment field so it is visible in the parameter dialog. -4. Add the **Calculated** parameters last, since they reference the others. -5. Print fit-test coupons for anything that depends on a Provisional value before - modelling around it. +| Parameter | Expression | +|---|---| +| `cMotorDFlatRadialDepth` | `(mMotorShaftDiameter - mMotorDFlatOppositeThickness) / 2` | +| `cMotorPilotSeatDiameter` | `mMotorPilotDiameter + 2 * dPrintClearance` | +| `cMotorPilotPocketDepth` | `mMotorPilotHeight + dPrintClearance` | +| `cMotorBodyClearanceEnvelope` | `mMotorFaceEnvelopeMax + 2 * dPrintClearance` | +| `cMotorRearClearance` | `mMotorConnectorProtrusionMax + dCableBendClearance` | +| `cDHubMajorProfile` | `mMotorShaftDiameter + 2 * dHubProfileClearance` | +| `cDHubFlatProfile` | `mMotorDFlatOppositeThickness + dHubProfileClearance` | +| `cDriverBayLength` | `mDriverPcbLength + 2 * dPrintClearance` | +| `cDriverBayWidth` | `mDriverPcbWidth + 2 * dPrintClearance` | +| `cDriverBayHeight` | `mDriverInstalledHeight + dHeatsinkAirGap` | +| `cEsp32TrayLength` | `mEsp32PcbLength + 2 * dPrintClearance` | +| `cEsp32TrayWidth` | `mEsp32PcbWidth + 2 * dPrintClearance` | +| `cZX052TrayLength` | `mZX052PcbLength + 2 * dPrintClearance` | +| `cZX052TrayWidth` | `mZX052PcbWidth + 2 * dPrintClearance` | +| `cAd8317SmaProtrusion` | `(mAd8317OverallWidth - mAd8317PcbLength) / 2` | +| `cAd8317TrayLength` | `mAd8317PcbLength + 2 * dPrintClearance` | +| `cAd8317TrayWidth` | `mAd8317PcbWidth + 2 * dPrintClearance` | + +## Design choices + +| Parameter | Starting value | Purpose | +|---|---:|---| +| `dBaseMaximumWidth` | 220.00 mm | hard desktop boundary | +| `dBaseMaximumDepth` | 220.00 mm | hard desktop boundary | +| `dBaseThickness` | 6.00 mm | PETG starting plate thickness | +| `dWallThickness` | 3.00 mm | trays and mounts | +| `dPrintClearance` | 0.15 mm | slip-fit clearance per side | +| `dHubProfileClearance` | 0.10 mm | coupon-tuned D-profile allowance | +| `dHubClampGap` | 1.20 mm | split-clamp starting gap | +| `dMountingClearance` | 1.00 mm | loose serviceable joints | +| `dHeatsinkAirGap` | 8.00 mm | free air above TMC2209 | +| `dCableBendClearance` | 12.00 mm | connector wire bend | +| `dBoreMouthChamfer` | 0.50 mm | PETG bore/register entry | +| `dFilletRadiusStructural` | 3.00 mm | load-bearing transitions | +| `dRibThickness` | 2.40 mm | 0.4 mm-nozzle multiple | +| `dTiltAxisHeight` | 90.00 mm | adjustable layout-study start | +| `dAntennaCentreOffset` | 0.00 mm | target phase-centre offset | +| `dAxisIntersectionOffset` | 0.00 mm | target pan/tilt-axis offset | + +Do not freeze a pan-platform diameter or electronics coordinates before the layout +study proves them. + +## Provisional, non-blocking + +| Parameter | Starting value | Use | +|---|---:|---| +| `pMotorHoleDiameter` | 3.50 mm | editable M3-compatible prototype clearance | +| `pHubEngagementLength` | 12.00 mm | adjustable; do not hard-stop on unknown flat length | +| `pInsertOuterDiameter` | 4.60 mm | optional M3 insert coupon only | +| `pInsertLength` | 5.70 mm | optional M3 insert coupon only | +| `pZX052OpenHeight` | 25.00 mm | conservative open keep-out, not a measured height | +| `pAUTClearanceDiameter` | 45.00 mm | adjustable representative envelope | +| `pAUTClearanceLength` | 160.00 mm | adjustable representative envelope | +| `pHarnessBundleDiameter` | 10.00 mm | flexible swept envelope | +| `pHarnessBendRadius` | 25.00 mm | conservative motion-study start | + +The provisional values support reversible prototype geometry. Exact PCB holes, an AUT +body, and final harness length are not prerequisites for the first CAD layout. diff --git a/Measurements/missing-measurements.md b/Measurements/missing-measurements.md index 054b75f..b2206b3 100644 --- a/Measurements/missing-measurements.md +++ b/Measurements/missing-measurements.md @@ -1,201 +1,59 @@ -# Missing and unclear measurements +# Remaining provisional measurements -Everything on this page blocks CAD work. Nothing here may be used as a dimension in -Fusion 360 until it is re-measured and recorded in the relevant component file. +Revision 1 can proceed to a component-envelope layout without the values below. Use +reasonable, reversible prototype geometry and a named `p...` parameter only when a +feature depends on an unverified value. Unknown PCB mounting holes are handled with +edge clips, shallow trays, straps, rails, removable crossbars, or zip-tie slots. -Two categories: +## Direct-drive motor interfaces -1. **Unclear** — a photo exists, but the value or the measured feature cannot be read - from it with confidence. -2. **Not measured** — no photo exists for the part or feature at all. +- **Motor hole diameter / screw:** spacing is verified at 31.00 mm nominal square; + use an editable M3-compatible clearance parameter for the prototype mount. +- **Shaft flat axial length/start:** the D-profile is verified at 5.00 mm major diameter + and 4.60 mm flat-to-opposite thickness. Keep clamp-hub engagement adjustable and + verify with a D-shaft fit coupon. Do not use the ambiguous approximately 6 mm image + as a hard axial dimension. +- **Fasteners/inserts:** use editable M3-compatible provisional parameters and a coupon + before a serviceable joint is committed. ---- +These values affect final hub or fastener fit, not the layout study. -## 1. Unclear — re-shoot or re-measure +## Open stationary electronics -### NEMA 17 — motor face width +- **ZX-052:** total installed height and mounting-hole pattern remain unknown. Model + the verified 66.07 × 36.48 mm PCB with a conservative open height envelope and + reversible edge retention. Preserve terminals, display, adjuster, pushbutton, tall + components, ventilation, and 18/22 AWG wire bends. +- **ESP32:** mounting-hole coordinates, header-pin depth, USB-C projection, and cable + overmould are unmeasured. Use measured PCB/USB envelopes with rails and an end clip. +- **TMC2209:** heatsink long-axis extent, PCB/header geometry, and final retention are + incomplete. Use the measured PCB and 22.24 mm installed-height envelope with open + cooling/access. -- **Component:** NEMA 17 stepper -- **Missing dimension:** face width across flats (the 42 mm nominal dimension), to two decimals -- **Why it matters:** every motor pocket, face plate and bolt-circle in the pan and - tilt mounts is dimensioned from this. A 0.3 mm error here shows up as a rocking or - binding motor. -- **How to measure:** caliper across two opposite flats of the face plate, not the - chamfered corners. Take it twice, rotated 90°, and record both. -- **Related picture:** `IMG_5221.jpg` — reads `42` but the photo is too low - resolution to resolve the decimals. +None of these blocks the open-base layout. -### NEMA 17 — unreadable display +## AD8317 and AUT -- **Component:** NEMA 17 stepper -- **Missing dimension:** unknown — the display is unreadable -- **Why it matters:** an entire measurement is lost. -- **How to measure:** repeat the shot with the LCD out of direct light. Tilt the - caliper so the light source is behind the camera, not reflecting off the screen. -- **Related picture:** `IMG_5224.HEIC` — LCD blown out by glare; reads `4?.??`. +- **AD8317:** PCB thickness, total component height, exact hole coordinates/diameters, + and SMA centre locations remain unverified. The approximately 40.37 mm diagonal + feature readings are not a hole pattern. Use adjustable edge/strap retention and + preserve the four corner-hole regions. +- **AUT:** Revision 1 supports interchangeable 5.8 GHz antennas. Use a parameterized + clearance envelope, adjustable detector position, and minimally intrusive support; + validate later with representative antennas. -### NEMA 17 — shaft diameter +The selected AD8317 outline, direct SMA arrangement, and vertical orientation are +sufficient for conceptual and prototype geometry. -- **Component:** NEMA 17 stepper -- **Missing dimension:** output shaft diameter, second decimal -- **Why it matters:** the shaft coupler bore and any printed hub are sized from this. - Getting it wrong by 0.1 mm is the difference between a slip fit and a press fit. -- **How to measure:** caliper across the round part of the shaft, clear of any flat. - Take three readings at 60° apart and record all three — a stepper shaft is not - perfectly round. -- **Related picture:** `IMG_5225.HEIC` — reads `4.9?`. +## Harness and prototype results -### NEMA 17 — two unidentified features +Final moving-bundle diameter, bend radius, service-loop length, pan/tilt soft limits, +rotating mass, shaft cantilever, centre-of-gravity offsets, and collision-free tilt +range are outputs of CAD and low-acceleration prototype testing. They are not reasons +to stop the initial model. -- **Component:** NEMA 17 stepper -- **Missing dimension:** the values `1.65 mm` and `4.00 mm` are legible but the photos - do not show which feature the jaws were on -- **Why it matters:** they are probably the pilot boss height and an end-cap or - connector dimension, both of which the motor mount depends on. Guessing which is - which would put a wrong number into CAD. -- **How to measure:** re-take each shot from further back so both the jaws and the - display are in the same frame, then note in the filename or a text file what was - measured. -- **Related pictures:** `IMG_5229.HEIC`, `IMG_5230.HEIC`. +## Historical items excluded from Revision 1 ---- - -## 2. Not measured — no photo exists - -> [!NOTE] -> **This is not a shopping list.** The parts below are owned or on order. What is -> missing is *caliper readings*, not the hardware. A part cannot be modelled from the -> fact that it exists — the CAD needs its dimensions. Anything listed here needs five -> minutes with calipers, not a purchase. - -### NEMA 17 — mounting-hole pattern - -> This is now the largest remaining unknown on the motor itself. Everything else on -> the pan and tilt motor mounts is measured. - -- **Missing dimension:** mounting-hole spacing (centre to centre) and hole diameter -- **Why it matters:** this is the single most important dimension for both motor - mounts. The NEMA 17 standard is 31.0 mm square with M3 clearance holes, but that is - a nominal standard, not a measurement of these motors. All four holes are visible on - the motor face in `IMG_5247.HEIC`, so this is one caliper reading away. -- **How to measure:** caliper between the outside edges of two adjacent holes, then - subtract one hole diameter, to get centre-to-centre. Measure the hole diameter with - the caliper's internal jaws. - -### NEMA 17 — shaft flat - -- **Resolved:** shaft length is measured at 22.39 mm from the pilot boss face, and the - face-plate figure derives to 24.39 mm — see [`nema17.md`](nema17.md). -- **Still missing:** flat length and flat depth on the output shaft. -- **Why it matters:** determines whether a coupler grub screw seats on the flat or - mars the round shaft, and how much the coupler can be slid along the shaft. -- **How to measure:** caliper across the shaft on the flat, compared with the round - diameter, for flat depth; caliper along the flat for its length. -- **Provenance gap:** the 22.39 mm reading has no source photograph. Every other value - in this folder is traceable to an image. A caliper photo would close that gap. - -### TMC2209 V1.3 — one reading closes the heatsink footprint - -- **Missing dimension:** heatsink **back** edge to PCB **front** edge, along the PCB - long axis — the counterpart to the 13.73 mm reading in IMG_5237 -- **Why it matters:** the width pair (12.21 and 11.22) already gives a heatsink width - of 8.29 mm and a 0.495 mm offset from the PCB centre. Along the long axis only one - reading exists, so the heatsink's front edge is known (6.41 mm from the PCB front - edge) but its length is not. Without it the heatsink footprint cannot be modelled, - only its height. -- **How to measure:** exactly as IMG_5237 was taken, but with the jaws referenced from - the opposite pair of edges. The two readings should sum to more than the 20.14 mm - PCB length; the excess is the heatsink length. -- **Related picture:** `IMG_5237.HEIC` gives the first half of the pair. - -### TMC2209 V1.3 — remaining features - -- **Missing dimensions:** PCB thickness, header pin pitch, header row spacing, header - pin length below the board -- **Why it matters:** needed to design a driver bay, a retention clip, or a socket - strip position rather than just an outer envelope. -- **How to measure:** caliper on a clear PCB edge for thickness; caliper across the - outer pins of one row and divide by the pin count minus one for pitch; caliper - between the two rows for row spacing. - -### ESP32 devkit — mounting holes and pin length - -- **Missing dimensions:** mounting-hole diameter and spacing, header pin length below - the board, USB-C connector protrusion past the board edge -- **Why it matters:** the electronics tray needs standoff positions, a clearance - depth below the board, and a correctly placed USB opening. -- **How to measure:** caliper internal jaws for hole diameter; caliper between two - hole outer edges minus one diameter for spacing; caliper depth rod for pin length. - -### Bearings — nothing measured - -- **Missing dimensions:** inner diameter, outer diameter, width, and quantity, for - both the pan bearing and the tilt bearing -- **Why it matters:** the bearing seats are the most fit-critical features in the - entire assembly. Without these there is no pan platform and no tilt support. -- **How to measure:** caliper across the outer race for OD, internal jaws in the bore - for ID, and across the race faces for width. Record the bearing's printed - designation (e.g. `608ZZ`, `6800`) as well. - -### Shaft couplers — nothing measured - -- **Missing dimensions:** bore diameters (both ends), outer diameter, overall length, - grub-screw size and position -- **Why it matters:** sets the axial distance between the motor and the driven shaft, - which sets the height of the whole tilt assembly. -- **How to measure:** caliper OD and length; internal jaws or gauge pins for each bore. - -### Fasteners — nothing measured - -- **Missing dimensions:** screw sizes and lengths for the motor mounts, the base, and - the antenna mount; heat-set insert outer diameter, length, and required pilot hole -- **Why it matters:** heat-set insert bosses cannot be modelled without the insert's - OD and length. Screw lengths determine boss depth. -- **How to measure:** caliper across the thread crest for nominal size, along the - shank for length. For inserts, caliper the knurled OD at its widest point and the - overall length, then check the manufacturer's recommended pilot diameter. - -### Antenna mount — nothing measured - -- **Missing dimensions:** connector type and thread size (SMA / RP-SMA / N), antenna - body diameter and length, required cradle clamp dimensions, coax outer diameter and - minimum bend radius -- **Why it matters:** the antenna cradle and the adjustable mount cannot be designed - at all without these. The coax bend radius also constrains the whole cable route. -- **How to measure:** caliper on the antenna body and the connector; for bend radius, - use the coax manufacturer's specification rather than bending the cable to find out. - -### Limit switches — nothing measured - -- **Missing dimensions:** switch body length, width, height, mounting-hole spacing and - diameter, lever length, actuation travel -- **Why it matters:** homing repeatability depends on rigid, repeatable switch - mounting. The switch pockets and their adjustment slots come from these numbers. -- **How to measure:** caliper on the switch body and between the mounting holes. - -### LM2596 buck converter — nothing measured - -- **Missing dimensions:** PCB length, width, thickness, mounting-hole spacing, - total height including the inductor, terminal-block height -- **Why it matters:** the buck converter shares the electronics tray with the ESP32 - and the two drivers. Two different modules are in use (SELOKY LM2596 and LYLANMO - LM2596S) and they may not share an outline — measure both. -- **How to measure:** caliper on the PCB outline and across the tallest component. - -### AD8317 RF detector — outline resolved, some features remain - -The board outline is now fully measured and photographed — 36.27 × 35.72 mm bare, -55.84 mm including both SMA connectors. The earlier axis-label conflict is resolved; -see [`ad8317.md`](ad8317.md). - -- **Still missing:** PCB thickness, mounting-hole diameter and spacing (four plated - corner holes are visible in `IMG_5261.HEIC`), shield-can height above the PCB, - total board height including components, SMA connector centre positions relative to - the board edges. -- **Why it matters:** only needed once an RF detector is actually selected. -- **How to measure:** caliper on a clear PCB edge for thickness; internal jaws for hole - diameter; between two hole outer edges minus one diameter for spacing; caliper depth - rod from the PCB surface to the can top for can height. -- **Note on IMG_5258:** the decimals are obscured by glare. The reading was reported as - 55.79 mm but only `55.` is independently legible. `IMG_5257.HEIC` (55.88 mm) is the - clear one and the adopted 55.84 mm is the mean of the two. +External bearings, separate shafts, shaft couplers, LM2596 converters, mandatory limit +switches, a slip ring, an internal battery, a sealed enclosure, and AUT-to-detector +coax are not Revision-1 requirements. Do not create provisional geometry for them. diff --git a/Measurements/nema17.md b/Measurements/nema17.md index 2838753..d69c5ac 100644 --- a/Measurements/nema17.md +++ b/Measurements/nema17.md @@ -51,14 +51,20 @@ open circuit between pairs. |---|---:|---|---| | Motor body diagonal (corner to corner) | 54.30 mm | IMG_5223.HEIC | Across two opposite chamfered corners of the face plate | | Motor body length (front face plate to rear face plate) | 20.84 mm | IMG_5249.HEIC | Excludes the front pilot boss. Earlier reading IMG_5231.HEIC gave 20.76 mm; the 0.08 mm spread is caliper repeatability | +| Motor body/rear-envelope repeat | 20.72 mm | supplemental photograph | Appears to use the same faces as 20.84 mm but the datum is not conclusive; retain both and use 20.84 mm for clearance | | Overall length including pilot boss, excluding shaft | 22.85 mm | IMG_5248.HEIC | Boss face to rear face. **Supersedes IMG_5232**, whose decimals were unreadable | | Overall length, shaft tip to rear face | 45.18 mm | IMG_5250.HEIC | The full envelope the motor occupies along its axis | | Pilot boss diameter | 21.97 mm | IMG_5247.HEIC | The raised circular register that centres the motor in its mount | | Output shaft length, from pilot boss face to shaft end | 22.39 mm | operator measurement — no photograph | Datum is the boss face, not the face plate. See below | -| Connector protrusion above end-cap face | 9.38 mm | IMG_5226.HEIC | Confirmed by a second shot at a different angle | -| Connector protrusion above end-cap face (repeat) | 9.38 mm | IMG_5227.HEIC | Independent repeat of IMG_5226; same value | -| Motor connector housing length | 16.43 mm | IMG_5228.HEIC | White 6-position polarised housing on the rear end cap | -| Motor face width (across flats) | ≈42 mm | IMG_5221.jpg | **Integer only.** Photo resolution does not resolve the decimals — see `missing-measurements.md` | +| Connector protrusion above end-cap face | 9.38 mm | IMG_5226/5227.HEIC | Earlier repeat measurements | +| Connector protrusion above end-cap face, latest | 9.53 mm | supplemental photograph | Use this larger measured envelope for CAD clearance | +| Motor connector housing envelope | 16.43 mm | IMG_5228.HEIC | Earlier measurement | +| Motor connector housing envelope, latest | 16.44 mm | supplemental photograph | Use latest value; 0.01 mm agreement is repeatability evidence | +| Motor front-face outside dimension, axis A | 43.46 mm | supplemental photograph | Use as the maximum body-clearance envelope, not a precision locator | +| Motor front-face outside dimension, other orientation | 42.43 mm | supplemental photograph | Do not average with 43.46 mm; pilot and holes provide precision location | +| Front-face mounting-hole centre spacing | 31.00 mm | supplemental photograph | Measured across one axis; use a nominally square 31.00 × 31.00 mm pattern unless later evidence differs | +| Output shaft major diameter | 5.00 mm | supplemental photograph | Measured on the owned motor | +| D-flat to opposite round surface | 4.60 mm | supplemental photograph | D-profile thickness, not flat depth | ## Derived from the measurements above @@ -72,6 +78,7 @@ so the geometry is self-consistent. | Pilot boss height (route B) | 1.95 mm | `45.18 − 22.39 − 20.84` (total, minus shaft, minus body) | | **Pilot boss height (adopted)** | **2.00 mm ±0.06** | both routes bracket it; equals the NEMA 17 nominal | | Shaft length from the **face plate** | 24.39 mm | `22.39 + 2.00` (shaft above boss, plus boss height) | +| D-flat radial depth | 0.20 mm | `(5.00 − 4.60) / 2`; derived, not separately measured | Both routes bracket 2.00 mm, which is also the NEMA 17 nominal, so 2.00 mm is adopted with a ±0.06 mm measurement tolerance. That is well inside what a PETG print can hold — @@ -94,10 +101,10 @@ directly rather than read from a caliper picture. A photo would close that gap. ## CAD notes -- **Important protrusions:** the rear connector is the dominant obstruction. It stands - 9.38 mm proud of the end-cap face and its housing is 16.43 mm long. Any pan or tilt +- **Important protrusions:** the rear connector is the dominant obstruction. Use the + larger 9.53 mm protrusion and 16.44 mm housing envelope. Any pan or tilt motor pocket must clear both, plus the mating plug and wire bend radius. With bend - clearance that is roughly 21.4 mm behind any motor, which is what decides whether a + 12.00 mm bend clearance gives 21.53 mm behind any motor, which helps decide whether a motor can face shaft-up. - **Axial envelope:** 45.18 mm shaft tip to rear face, plus the connector allowance behind it. Budget from this figure, not from the body length. @@ -106,13 +113,13 @@ directly rather than read from a caliper picture. A photo would close that gap. worth a fit-test coupon. - **Body length:** at 20.84 mm the motor is a short-body NEMA 17, matching the nameplate's 42 × 42 × 21 mm. Do not design around a 34 mm or 48 mm body. -- **Mounting-hole layout:** still not measured. The standard NEMA 17 pattern is 31.0 mm - square with M3 holes, but this has not been verified on these motors. This is now the - largest remaining unknown on the motor. See `missing-measurements.md`. -- **Shaft:** 22.39 mm stands proud of the pilot boss — ample for a standard 25 mm - coupler, which engages roughly half its length (~12.5 mm) on the motor side. - Diameter reads 4.9 mm to one decimal (nominal 5 mm); flat depth and flat length are - not measured. +- **Mounting-hole layout:** 31.00 mm centre spacing is measured on one axis. Treat the + pattern as nominally square for Revision 1; hole diameter remains provisional M3-compatible. +- **Body envelope:** use 43.46 mm plus clearance for a loose body pocket. Do not make + the outer body a locating fit; the 21.97 mm pilot and hole pattern locate the motor. +- **Shaft:** the 5.00 mm major diameter and 4.60 mm D thickness are verified. Revision 1 + uses a removable clamp-style direct-drive hub, not a coupler. The exact flat axial + length/start remains adjustable in the hub model. - **Required print clearance:** use a fit-test coupon before committing a bore or pocket. See [`fusion360-parameters.md`](fusion360-parameters.md). - **Unclear or missing dimensions:** see [`missing-measurements.md`](missing-measurements.md). diff --git a/Measurements/tmc2209-v1.3.md b/Measurements/tmc2209-v1.3.md index 747fbb1..2595c39 100644 --- a/Measurements/tmc2209-v1.3.md +++ b/Measurements/tmc2209-v1.3.md @@ -79,7 +79,7 @@ board width. male header pins set the height below it. The 22.24 mm figure is the complete envelope and is the number to design the driver bay around. - **Heatsink is offset, not centred.** The left and right offsets differ by roughly - 1 mm (12.21 vs 11.22), so the driver has a handed orientation inside an enclosure. + 1 mm (12.21 vs 11.22), so the driver has a handed orientation on the open base. Do not assume a symmetric pocket. - **Mounting-hole layout:** the StepStick form factor has no mounting holes. These modules are retained by their header sockets or by a printed clamp/bay. diff --git a/Measurements/zx052-v2.0.md b/Measurements/zx052-v2.0.md new file mode 100644 index 0000000..c7b0583 --- /dev/null +++ b/Measurements/zx052-v2.0.md @@ -0,0 +1,31 @@ +# ZX-052 V2.0 buck converter + +Physical envelope of the two identical converters selected for Radiance3D Revision 1. +These boards remain stationary and are retained by reversible edge clips, rails, straps, +crossbars, or zip ties rather than an unverified mounting-hole pattern. + +## Measured dimensions + +| Dimension | Value | Status | +|---|---:|---| +| PCB length | 66.07 mm | verified from supplied photograph | +| PCB width | 36.48 mm | verified from supplied photograph | +| Board-edge/thickness reading | approximately 2.15 mm | local edge envelope only; not installed height | + +## Orientation and access + +- Board marking: `ZX-052 V2.0`. +- VIN screw terminal is on the left end; VIN+/VIN− silkscreen is adjacent. +- VOUT screw terminal is on the right end; VOUT+/VOUT− silkscreen is adjacent. +- The three-digit display is in the lower/front region. +- The adjustment potentiometer is near the upper edge. +- The pushbutton is near the lower-right corner. +- Four large corner mounting holes are visible, but their diameter and centre coordinates + are not verified. Readings near 26.39 and 56.3 mm do not establish a hole pattern. +- Total installed height is greater than 2.15 mm because of the terminals, capacitors, + inductor, potentiometer, display, pushbutton, and regulator. Keep it as an open service + envelope; do not invent a final height. + +Buck A supplies regulated 5.0 V to the ESP32. Buck B independently supplies regulated +5.0 V to the AD8317. Preserve display, adjustment, pushbutton, terminal, wire-bend, +ventilation, and tall-component access. The boards are separate and individually removable. diff --git a/README.md b/README.md index 35c1aa5..d8d1346 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ no CAD, no printed part, and no measured antenna pattern. dimension. Measured, photographed, and traceable — 35 photos, every value citing the picture it came from. -Measured so far: the NEMA 17 motors (`42HDB0014NC-24B`), the TMC2209 V1.3 drivers with -heatsinks, the ELEGOO ESP32 devkit, and the AD8317 detector board. +Measured so far: the NEMA 17 motors (`42HDB0014NC-24B`), TMC2209 V1.3 drivers with +heatsinks, ELEGOO ESP32 devkit, two ZX-052 V2.0 converters, and the AD8317 detector. Two rules that folder enforces: @@ -56,8 +56,11 @@ Two rules that folder enforces: - **Nothing is guessed.** Values that can't be read confidently are marked unclear and listed in [`missing-measurements.md`](Measurements/missing-measurements.md). -Still missing, and blocking the CAD: bearings, shaft couplers, fasteners, the antenna -mount, and the NEMA 17 mounting-hole pattern. +Revision 1 is an open, direct-drive desktop prototype within a 220 × 220 mm base. Its +motor pilot, 31 mm mounting pattern, and 5 mm D-shaft profile are measured. Unknown PCB +hole patterns do not block CAD: Fusion uses reversible edge clips, rails, straps, or +zip-tie slots. Remaining dimensions are carried as named provisional parameters only +where a feature actually depends on them. ## CAD diff --git a/docs/hardware/assembly-order.md b/docs/hardware/assembly-order.md index b0bdce5..4aa9ac6 100644 --- a/docs/hardware/assembly-order.md +++ b/docs/hardware/assembly-order.md @@ -1,71 +1,54 @@ -# Assembly, cable routing, and commissioning +# Assembly, routing, and commissioning — Revision 1 ## Assembly order -1. Print and inspect the complete mount. -2. Install both YEJMKJ motors. -3. Install the ESP32, both TMC2209 modules, both ZX-052 modules, and AD8317 in their - designed positions; compare orientation, connectors, and heatsinks to the photo library. -4. Provide the accessible, strain-relieved `+12V IN` / `GND IN` enclosure entry and - terminate PWR-000 at the internal distribution point; do not install or allocate a battery. -5. Move pan and tilt manually through the intended ranges. -6. Route string or sacrificial silicone wire for PWR/SIG/MTR paths and sacrificial - RG316 for RF paths; add the intended service loops and record safe final lengths - before cutting any final harness. -7. Cut, terminate, label, continuity-test, and strain-relieve the final harnesses. -8. Set and meter both buck outputs at 5.0 V without electronics connected. -9. Connect electronics, inspect again, then perform powered motion testing. - -## Routing requirement - -**Design Intent — conceptual architecture only. Final placement determined during CAD.** -The moving silicone harness is intended to carry only tilt-motor and AD8317 electrical -wiring across the pan axis. A controlled 360° turn, service loop, strain relief, cable -guide, bend radius, and return strategy are CAD/commissioning requirements—not known -geometry. The external VTX and its RG316 path are stationary and off-scanner. - -Unlimited continuous pan rotation is not allowed. The intended mechanical capability is -one controlled 360° turn. Firmware limits are not changed by this documentation baseline -and remain provisional pending physical test. The required future control concept is the -**Firmware-defined return-to-home strategy to prevent cumulative cable twist**; its -implementation remains deferred. - -After an electrical test, a printed clip, cable tie, clamp, or removable hot-glue strain -relief is preferred. Adhesive must not enter connectors, adjustment points, heatsinks, -or moving surfaces; permanent cyanoacrylate is not structural retention for a serviceable -connector. +1. Approve the Fusion component-envelope and swept-volume study inside 220 × 220 mm. +2. Print and fit-test the 21.97 mm motor-pilot and 5.00/4.60 mm D-shaft clamp coupons. +3. Print the open base, centred pan-motor mount, direct-drive pan hub/platform, tilt + mount/hub, AD8317 carriage, reversible board trays, and cable guides. +4. Install both motors without forcing hubs axially against motor faces. Confirm clamp + fasteners remain accessible and both motors can be replaced. +5. Install the ESP32, two TMC2209s, and two ZX-052s in open reversible retention. + Preserve USB-C, OLED/buttons, displays, adjustments, pushbuttons, terminals, cooling, + and wire insertion directions. +6. Install the selected AD8317 vertically in its adjustable edge/strap carriage. Keep + both SMAs and electrical pads accessible; do not use the PCB as the structural hub. +7. Add the accessible, strain-relieved side/rear `+12V IN` / `GND IN` entry and internal + distribution. Do not allocate a battery. +8. Route sacrificial silicone wire through neutral pan position and the tilt range. + Adjust service loop, strain relief, guides, and limits before cutting final harnesses. +9. Cut, label, continuity-test, and strain-relieve final PWR/SIG/MTR harnesses. +10. Set both buck outputs independently to 5.0 V before attaching loads. +11. Commission at low acceleration and inspect hub slip, shaft loading, platform balance, + collision clearance, cable twist, base stability, driver cooling, and analog noise. + +## Moving harness + +The moving silicone bundle contains only four tilt-motor phases, AD8317 +5 V/GND, +VOUT, and analog return. It starts at a neutral position, uses strain relief at both +ends, and remains protected from the platform, hubs, motor connectors, and printed +edges. Final lengths follow the CAD motion study. + +**Unlimited continuous pan rotation is not allowed.** Target one managed 360° turn and +return toward cable neutral. The future firmware limits and +**Firmware-defined return-to-home strategy to prevent cumulative cable twist** follow +CAD and prototype testing. Tilt targets the largest collision-free range, desirably +near −90° to +90°. ## Commissioning checklist -- [ ] Compare each installed board and connector orientation to its repository photo. -- [ ] Verify no raw 12 V path reaches ESP32 5V/VIN, AD8317 +5V, or any GPIO. -- [ ] Confirm PWR-000 enters through an accessible strain relief and terminates at the - internal distribution point; confirm no battery compartment exists. -- [ ] Meter Buck A and Buck B independently at 5.0 V; confirm their VOUT+ terminals are not joined. -- [ ] Verify common ground continuity and motor phase mapping end to end. -- [ ] Confirm every harness has labels at both ends and a matching table row. -- [ ] Confirm RF-001 is the off-scanner VTX coax path and that no RF path is shown or - built with silicone wire. -- [ ] Confirm the AUT directly threads onto the AD8317 SMA with no RG316 jumper. -- [ ] Confirm all PWR/SIG/MTR harnesses are silicone wire, never RG316. -- [ ] Build and run simulator/repository checks before flashing. -- [ ] Verify PDN/UART communication and current settings with motors disconnected. -- [ ] Install heatsinks, connect motors while unpowered, then make a low-speed direction test. -- [ ] Verify one controlled 360° pan turn and the future Firmware-defined return-to-home - strategy to prevent cumulative cable twist after CAD and physical testing. -- [ ] Capture AD8317 raw ADC and voltage data; do not report dBm without calibration. - -## Failure modes and troubleshooting - -| Symptom | Safe first checks | -|---|---| -| ESP32 will not boot | remove motor power; check that only regulated 5 V reaches VIN and bootstrap pins are untouched | -| Motor buzzes or locks | power off; check A1→Black, A2→Yellow/Green, B1→Red, B2→Blue continuity | -| Motor skips or driver overheats | reduce current/load; verify heatsink and motion acceleration; do not increase above 800 mA RMS | -| UART diagnostics fail | power off; check PDN pin identity, address 0/1, UART topology, and common ground | -| ADC reading is unstable | separate RF/analog harness from VM/phase wiring; confirm RF 5 V and analog ground | -| Cable rubs or tightens | stop immediately; revise routing and measured soft limits before further motion | - -Unresolved bench measurements: rear OLED pin ownership; AD8317 input/output connector -labels and calibration curve; ZX-052 electrical limits; final mount travel; final cable -lengths; driver PDN/UART topology; and all physical clearances. None may be guessed. +- [ ] All hardware and swept envelopes remain within the approved 220 × 220 mm base. +- [ ] Direct-drive hubs grip the D-flat, remain removable, and apply no hard axial preload. +- [ ] Pan/tilt cantilevers and CG offsets are recorded; acceleration starts low. +- [ ] No raw 12 V reaches ESP32, AD8317, or GPIO. +- [ ] Buck A and Buck B each meter 5.0 V; their VOUT+ terminals are not connected. +- [ ] Both buck displays, adjusters, buttons, terminals, and tall components are accessible. +- [ ] Every harness is labelled at both ends and matches the wiring standard. +- [ ] Motor phase mapping is correct and no motor is connected while powered. +- [ ] AUT threads directly onto the vertical AD8317 SMA with no RG316 jumper. +- [ ] The moving bundle completes one managed turn without binding, rubbing, or snagging. +- [ ] Tilt collision-free travel is recorded rather than assumed. +- [ ] AD8317 raw ADC/voltage is stored; no dBm is reported without calibration. + +External bearings, separate shafts, couplers, mandatory limit switches, and guards are +future options only if prototype tests justify them. diff --git a/docs/hardware/gpio-map.md b/docs/hardware/gpio-map.md index a18799c..cbe8e6d 100644 --- a/docs/hardware/gpio-map.md +++ b/docs/hardware/gpio-map.md @@ -26,7 +26,7 @@ No home switch is installed or assigned. The firmware rejects a homing request u physical switches are added and documented; StallGuard is diagnostics only, not a homing substitute. Firmware limits remain intentionally provisional and are not the mechanical architecture specification. **Design Intent:** the mechanical system targets -one controlled 360° pan turn with a managed moving harness; final limits require CAD +one managed 360° pan turn from cable neutral; final limits require CAD and physical testing. GPIO39 is input-only and is used only as UART RX. GPIO36 is input-only and is used only diff --git a/docs/hardware/owned-hardware.md b/docs/hardware/owned-hardware.md index ac58e70..e9277cc 100644 --- a/docs/hardware/owned-hardware.md +++ b/docs/hardware/owned-hardware.md @@ -4,9 +4,9 @@ The JSON hardware profile is the machine-readable source of truth. Photo filenam are relative to `Part Numbers:Views/`; a missing photo is an audit finding, not an invitation to substitute a generic render. -The [conceptual Fusion reference architecture](reference-architecture.md) is the -official **Design Intent** baseline. The enclosure is not yet designed; it contains no -final dimensions or final component locations. Everything in the tables below is +The [Fusion reference architecture](reference-architecture.md) is the official +**Design Intent** baseline. Revision 1 is an open desktop prototype, not an enclosure; +Fusion determines final dimensions and component locations. Everything below is **Verified Hardware** unless explicitly labelled Design Intent. | Item | Manufacturer / model | Qty | Electrical role | Photo | Firmware / harness | @@ -14,9 +14,9 @@ final dimensions or final component locations. Everything in the tables below is | Controller | ELEGOO ESP32 DevKit-style, ESP-WROOM-32, USB-C, rear OLED | 1 | 5 V input, 3.3 V logic | `ESP-32-elegoo top view(part #EL-SM-012).jpeg` | PWR-005; SIG-001–004 | | Driver | BIGTREETECH TMC2209 V1.3 | 2 | 12 V VM, STEP/DIR/PDN_UART | `TMC2209 v1.3 top view with heatsink.jpeg` | PWR-001/002; SIG-001/002; MTR-001/002 | | Motor | YEJMKJ 42HDB0014NC | 2 | 1.0 A/phase bipolar | `NEMA-17(part #YEJMKJ).jpeg` | MTR-001, MTR-002 | -| RF detector | AD8317 EVB / module V1.0 | 1 | regulated 5 V, analog output, direct-SMA AUT interface | **Missing from photo library** | PWR-006; SIG-003 | -| Buck A | ZX-052 V2.0 | 1 | 12 V to 5.0 V digital branch | **Missing from photo library** | PWR-003, PWR-005 | -| Buck B | ZX-052 V2.0 | 1 | 12 V to 5.0 V RF branch | **Missing from photo library** | PWR-004, PWR-006 | +| RF detector | AD8317 EVAL BD / NWDZ V1.0 | 1 | regulated 5 V, analog output, direct-SMA AUT interface | Supplemental measurement photos supplied; not in repository photo path | PWR-006; SIG-003 | +| Buck A | ZX-052 V2.0, PCB 66.07 × 36.48 mm | 1 | 12 V to 5.0 V digital branch | Supplemental photos supplied; not in repository photo path | PWR-003, PWR-005 | +| Buck B | ZX-052 V2.0, PCB 66.07 × 36.48 mm | 1 | 12 V to 5.0 V RF branch | Supplemental photos supplied; not in repository photo path | PWR-004, PWR-006 | | External power interface | +12V IN / GND IN from off-board 12 V bench source | 1 | strain-relieved enclosure entry | **No photo recorded** | PWR-000 | | Cable | Model | Qty | Permitted use | Harness namespace | @@ -26,7 +26,7 @@ final dimensions or final component locations. Everything in the tables below is No fuse, switch, connector, clamp, or protection component is included in this owned-parts BOM. An inline fuse and accessible disconnect are recommended safety additions only. -The external bench source is not an enclosure component and has no internal allocation. +The external bench source is not a scanner component and has no base allocation. ## Component facts @@ -42,6 +42,11 @@ The external bench source is not an enclosure component and has no internal allo - **Design Intent:** the external stationary 5.8 GHz VTX is not mounted on the scanner. The AUT is intended to screw directly onto the AD8317 SMA; no antenna-to-detector RG316 jumper is in the baseline. +- The two motors directly drive lightweight Revision-1 loads through removable clamp + hubs on their measured 5 mm D-shafts. No external bearings, separate shafts, or + couplers are Revision-1 parts. +- Unknown PCB hole patterns do not block CAD. Use open reversible board retention and + preserve every terminal, display, adjustment, cooling, and wiring-access direction. Datasheets are external reference material: ESP32-WROOM-32 datasheet, Trinamic TMC2209 datasheet, AD8317 datasheet, and each board maker's documentation must be diff --git a/docs/hardware/power-tree.md b/docs/hardware/power-tree.md index a31ff51..e643e46 100644 --- a/docs/hardware/power-tree.md +++ b/docs/hardware/power-tree.md @@ -5,7 +5,7 @@ ```text Off-board 12 V bench power source (beneath workbench) └─ PWR-000 external two-conductor entry: +12V IN / GND IN - └─ accessible, strain-relieved enclosure entry point + └─ accessible, strain-relieved side/rear base entry point └─ 18 AWG internal distribution point (Red +12 V / Black ground) ├─ PWR-001 → TMC2209 pan VM and GND ├─ PWR-002 → TMC2209 tilt VM and GND @@ -19,7 +19,7 @@ between the two ZX-052 converters. ``` The 12 V battery is a permanent off-board laboratory source, not a Radiance3D part. -The enclosure provides no battery compartment, battery retention, or battery-weight +The open base provides no battery compartment, battery retention, or battery-weight allowance. It exposes only the accessible `+12V IN` / `GND IN` entry with appropriate strain relief before the internal distribution point. diff --git a/docs/hardware/reference-architecture.md b/docs/hardware/reference-architecture.md index 0b7b510..a443b8b 100644 --- a/docs/hardware/reference-architecture.md +++ b/docs/hardware/reference-architecture.md @@ -1,109 +1,110 @@ -# Reference architecture — CAD design intent +# Reference architecture — Revision 1 CAD design intent -## Status and terminology +## Status -**Conceptual architecture only. Final placement determined during CAD.** The enclosure -has not yet been designed, so this document identifies what connects and the intended -subsystem boundaries—not dimensions, mounting coordinates, cable lengths, or final -board orientations. +**Conceptual architecture only. Final placement determined during CAD.** Revision 1 +is an open desktop prototype within a 220 × 220 mm maximum base, not an enclosure or a +production machine. The subsystem boundaries and direct-drive mechanism are fixed; +Fusion solves the compact component layout and printed geometry. -### Verified Hardware - -Verified Hardware is physically owned, photographed or measured, or electrically -confirmed. The authoritative list, photographs, electrical facts, and harness standards -remain in [owned hardware](owned-hardware.md), [power tree](power-tree.md), and -[electrical/RF cabling standard](wire-standard.md). - -### Design Intent - -Design Intent is the planned enclosure layout, cable routing, conceptual subsystem -placement, and board orientation that Autodesk Fusion will resolve. It is not a claim -that any mechanical arrangement already exists. - -## PRIMARY DESIGN OBJECTIVE - -Radiance3D is a precision RF measurement instrument. Every mechanical decision should -prioritize, in order: +## Design priorities 1. Measurement repeatability -2. Mechanical rigidity +2. Mechanical stability 3. RF consistency 4. Calibration repeatability 5. Serviceability 6. Manufacturability -Cosmetic appearance is secondary. - -## Conceptual subsystem boundaries +## Architecture ```text - external stationary 5.8 GHz VTX - │ RF transmission through air - ▼ - AUT threads directly onto AD8317 SMA - │ - ┌───────────────────────────────────┐ - │ DESIGN INTENT: ROTATING PLATFORM │ - │ • tilt motor │ - │ • AD8317 detector │ - │ • antenna mount / AUT │ - └───────────────────────────────────┘ - │ - controlled rotation intent │ moving silicone harness only - (one 360° turn, not unlimited│ • tilt motor wiring - continuous rotation) │ • AD8317 5 V/GND and VOUT/AGND - │ - ┌───────────────────────────────────┐ - │ DESIGN INTENT: STATIONARY BASE │ - │ • fixed pan motor │ - │ • ESP32 DevKit │ - │ • TMC2209 pan + tilt drivers │ - │ • ZX-052 Buck A and Buck B │ - │ • internal 12 V distribution │ - │ • +12V IN / GND IN entry │ - └───────────────────────────────────┘ - │ - off-board 12 V bench source + external stationary 5.8 GHz VTX + │ free-space RF + ▼ + interchangeable Antenna Under Test + │ direct threaded SMA + ▼ + vertically mounted AD8317 detector + │ lightweight tilt carriage + ▼ + tilt NEMA-17 5 mm D-shaft + removable clamp hub; no coupler/bearing + │ + DIRECT-DRIVE PAN PLATFORM + │ moving silicone harness + one managed turn from cable neutral + ▼ + pan NEMA-17 5 mm D-shaft + removable clamp hub; no coupler/bearing + │ +┌──────────────────────────────────────────────────────────────┐ +│ DESIGN INTENT: STATIONARY BASE — open, maximum 220 × 220 mm │ +│ centred pan motor; ESP32; pan + tilt TMC2209; │ +│ ZX-052 Buck A + Buck B; 12 V entry/distribution │ +└──────────────────────────────────────────────────────────────┘ + │ + off-board 12 V bench source ``` -### Electrical architecture — Verified Hardware +The **DESIGN INTENT: ROTATING PLATFORM** contains only the lightweight pan platform, +tilt motor, clamp hub and carriage, vertical AD8317, interchangeable AUT, cable guides, +and moving silicone harness. -The external two-conductor 12 V input feeds internal distribution, two TMC2209 VM/GND -branches, and the two independent ZX-052 5 V branches. Grounds share one defined -reference and the two 5 V outputs are never connected together. These are electrical -rules, not enclosure-placement instructions. +## Direct drive -### RF architecture — Verified Hardware and Design Intent +Each motor's internal bearings support the Revision-1 load. Revision 1 has no external bearings, separate shafts, or shaft couplers. A removable clamp-style hub engages the +measured 5.00 mm D-shaft without hard axial preload. CAD minimizes rotating mass, +cantilever distance, mechanical shock, acceleration, and centre-of-gravity offset. +The AD8317 PCB is retained by the carriage; it is not itself the structural hub. -The external stationary 5.8 GHz VTX is not mounted on the scanner. **Design Intent:** -the AUT directly threads onto the AD8317 SMA, with no detector-to-antenna RG316 jumper. -The AD8317 `VOUT` is `SIG-003` silicone wire back to the stationary ESP32 ADC. Exact -detector orientation, AUT clearance, and VTX test geometry remain CAD/bench work. +Fusion must report pan and tilt cantilever distance, approximate rotating mass when +known, centre-of-gravity offset from both motor shafts, collision-free tilt travel, and +any direct-drive load concern. Direct drive is selected but not mechanically validated. +External bearing-supported axes are future upgrades only if prototype testing requires +them. -### Mechanical intent — Design Intent +## RF and detector -The stationary-base and rotating-platform contents above are intended subsystem -boundaries. The pan motor is intended to remain in the stationary base; the moving -harness is intended to carry only tilt-motor and AD8317 wiring. One controlled 360° -rotation is the architecture target, not unlimited continuous rotation. +The external stationary 5.8 GHz VTX remains off-scanner. The AUT directly threads onto +the AD8317 SMA; there is **no detector-to-antenna RG316 jumper**. The selected AD8317 +EVAL BD / NWDZ V1.0 is vertical and moves with the AUT. Adjustable edge/strap retention +preserves both SMA connectors, electrical pads, and corner-hole areas. A lightweight, +preferably nonconductive guide may relieve antenna bending load without inserting coax. -Final CAD determines mounting locations, enclosure form, cable-guide geometry, service -loop size, strain-relief method, bend radii, bearings, clearances, and all cable lengths. -The return-to-home behavior required to prevent cumulative cable twist is described as -the **Firmware-defined return-to-home strategy to prevent cumulative cable twist**. Its -implementation and safe limits remain deferred until physical testing. +## Stationary electronics and power -## Future CAD work +The centred pan motor, ESP32, two TMC2209s, both ZX-052 converters, power entry, and +distribution remain stationary. Boards are openly mounted with reversible trays, rails, +clips, straps, crossbars, or zip-tie slots; unknown hole coordinates do not block CAD. -Fusion design will translate this conceptual architecture into measured interfaces and -then document dimensions, hardware retention, cable routing, and service access. No -unknown geometry is validated by this repository before that work exists. +External 12 V/GND feeds both TMC2209 VM/GND branches and two separate converters: +ZX-052 Buck A supplies regulated 5.0 V to the ESP32; ZX-052 Buck B supplies regulated +5.0 V to the AD8317. Their outputs are never paralleled. There is no third converter, +internal battery, battery compartment, or sealed electronics enclosure. -## Future Expansion +## Motion and harness + +Pan targets one managed 360° turn from a neutral cable position, not unlimited +continuous rotation. The **Firmware-defined return-to-home strategy to prevent cumulative cable twist** follows the CAD motion study and prototype test. Tilt targets +the largest collision-free range; approximately −90° to +90° is desirable but not +guaranteed before CAD. + +The moving silicone bundle contains four tilt-motor phases, AD8317 +5 V, GND, VOUT, +and analog return. CAD supplies a service loop, bend clearance, strain relief at both +ends, guides, and protection from the platform, hubs, and motor connectors. Final wire +lengths remain post-CAD measurements. -### Not Required for Revision 1 +## Fusion layout obligation + +Fusion first performs a component-envelope and swept-volume study, centers the pan +axis, finds the smallest practical pan platform, places stationary electronics outside +its sweep, proves all hardware stays inside 220 × 220 mm, and preserves every connector, +display, adjustment, terminal, cooling, and wiring-access direction. Exact placement is +a CAD result, not prescribed here. + +## Future Expansion -The following are informational possibilities only. They do not change Revision 1 -hardware, firmware, GPIO, electrical architecture, or BOM: slip ring support, -alternate detector modules, alternate ESP32 variants, camera mounting, different motors, -protective covers, larger antennas, and additional sensors. +External bearings, separate shafts, couplers, limit switches, a slip ring, guards, +alternate detectors, and other sensors are optional future work. None is required for +Revision 1. diff --git a/docs/hardware/wire-standard.md b/docs/hardware/wire-standard.md index 5ca99d7..c0d6283 100644 --- a/docs/hardware/wire-standard.md +++ b/docs/hardware/wire-standard.md @@ -26,7 +26,7 @@ signal name, from/to endpoint, and labels at both ends. | Harness | Endpoints and signals | Gauge / color | Required labels | |---|---|---|---| -| PWR-000 | off-board bench source → enclosure `+12V IN` / `GND IN` entry | 18 AWG Red/Black | `+12V IN`, `GND IN`, source/enclosure | +| PWR-000 | off-board bench source → open-base `+12V IN` / `GND IN` entry | 18 AWG Red/Black | `+12V IN`, `GND IN`, source/base | | PWR-001 | distribution → pan driver VM/GND | 18 AWG Red/Black | `PWR-001 +12V`, `PWR-001 GND` | | PWR-002 | distribution → tilt driver VM/GND | 18 AWG Red/Black | `PWR-002 +12V`, `PWR-002 GND` | | PWR-003 | distribution → Buck A VIN+/VIN− | 18 AWG Red/Black | endpoint labels | diff --git a/firmware/config/radiance3d-owned-hardware.json b/firmware/config/radiance3d-owned-hardware.json index 5f224a6..16cf348 100644 --- a/firmware/config/radiance3d-owned-hardware.json +++ b/firmware/config/radiance3d-owned-hardware.json @@ -28,18 +28,22 @@ "digital_control_voltage_v": 5.0, "rf_analog_voltage_v": 5.0, "buck_converters": [ - {"model": "ZX-052 V2.0", "branch": "digital-control", "input": "internal-12V-distribution", "output": "ESP32-VIN"}, - {"model": "ZX-052 V2.0", "branch": "rf-analog", "input": "internal-12V-distribution", "output": "AD8317-5V"} + {"model": "ZX-052 V2.0", "branch": "digital-control", "input": "internal-12V-distribution", "output": "ESP32-VIN", "pcb_dimensions_mm": [66.07, 36.48]}, + {"model": "ZX-052 V2.0", "branch": "rf-analog", "input": "internal-12V-distribution", "output": "AD8317-5V", "pcb_dimensions_mm": [66.07, 36.48]} ], "outputs_paralleled": false, "common_ground_required": true }, "mechanical_architecture": { - "status": "conceptual-for-Autodesk-Fusion-design; not dimensioned", + "status": "revision-1 direct-drive open desktop prototype; final layout determined during CAD", "enclosure_designed": false, - "stationary_base": ["ESP32 DevKit", "two BIGTREETECH TMC2209 V1.3 drivers", "ZX-052 Buck Converter A", "ZX-052 Buck Converter B", "external +12V/GND input", "internal power distribution"], - "rotating_platform": ["tilt motor", "AD8317 detector", "antenna mount"], - "pan_rotation": "one controlled 360 degree rotation; not unlimited continuous rotation", + "base_maximum_mm": [220.0, 220.0], + "electronics_mounting": "open stationary base with reversible edge clips, shallow trays, straps, rails, crossbars, or zip-tie slots", + "stationary_base": ["centered pan motor", "ESP32 DevKit", "two BIGTREETECH TMC2209 V1.3 drivers", "ZX-052 Buck Converter A", "ZX-052 Buck Converter B", "external +12V/GND input", "internal power distribution"], + "rotating_platform": ["lightweight direct-drive pan platform", "tilt motor", "direct-drive tilt carriage", "vertically mounted AD8317 detector", "interchangeable antenna under test", "moving silicone-wire harness"], + "drive_architecture": "motor 5 mm D-shafts use removable clamp-style hubs; no external bearings, separate shafts, or shaft couplers", + "pan_rotation": "one managed 360 degree rotation from a neutral cable position; not unlimited continuous rotation", + "tilt_rotation": "largest practical collision-free range; approximately -90 to +90 degrees is a conceptual target pending CAD", "moving_harness": "tilt motor and AD8317 wiring only; lengths TBD AFTER CAD", "rf_measurement": "external stationary 5.8GHz VTX; AUT directly threads onto vertically mounted AD8317 SMA; no RG316 jumper" }, @@ -67,7 +71,16 @@ "rated_phase_current_a": 1.0, "phase_resistance_ohm": 3.5, "holding_torque_nm": 0.13, - "dimensions_mm": [42, 42, 21], + "dimensions_mm": [43.46, 43.46, 20.84], + "dimension_note": "43.46 mm is the larger measured face/body clearance envelope; precision location uses the 21.97 mm pilot and nominally square 31.00 mm hole pattern", + "mounting_hole_pattern_mm": [31.0, 31.0], + "shaft_major_diameter_mm": 5.0, + "shaft_flat_to_opposite_round_mm": 4.6, + "shaft_flat_radial_depth_mm": 0.2, + "pilot_diameter_mm": 21.97, + "pilot_height_mm": 2.0, + "rear_connector_maximum_protrusion_mm": 9.53, + "rear_connector_housing_envelope_mm": 16.44, "phase_wiring": {"A+": "Black", "A-": "Green", "B+": "Red", "B-": "Blue"} }, "detector": { @@ -75,6 +88,7 @@ "quantity": 1, "photo": null, "supply_voltage_v": 5.0, + "mechanical_selection": "selected for Revision 1; vertically mounted with direct-threaded AUT and adjustable edge/strap retention", "adc_pin": 36, "adc_unit": "ADC1", "filter": {"kind": "median_then_mean", "median_samples": 5, "mean_samples": 8}, diff --git a/scripts/check_repository.py b/scripts/check_repository.py index b223e8c..6bbc04a 100755 --- a/scripts/check_repository.py +++ b/scripts/check_repository.py @@ -36,6 +36,14 @@ LINK_PATTERN = re.compile(r"(? list[Path]: + """Return repository artifacts, excluding local venvs and untracked work.""" + result = subprocess.run( + ["git", "ls-files", "-z"], cwd=ROOT, check=True, capture_output=True + ) + return [ROOT / item.decode() for item in result.stdout.split(b"\0") if item] + + def check_required_paths() -> list[str]: return [ f"missing required path: {path}" @@ -46,7 +54,7 @@ def check_required_paths() -> list[str]: def check_json() -> list[str]: errors: list[str] = [] - for path in ROOT.rglob("*.json"): + for path in (item for item in tracked_files() if item.suffix == ".json"): try: json.loads(path.read_text(encoding="utf-8")) except (OSError, json.JSONDecodeError) as exc: @@ -121,7 +129,7 @@ def check_physical_firmware_has_no_arduino_dependency() -> list[str]: def check_internal_links() -> list[str]: errors: list[str] = [] - for markdown in ROOT.rglob("*.md"): + for markdown in (item for item in tracked_files() if item.suffix == ".md"): text = markdown.read_text(encoding="utf-8") for target in LINK_PATTERN.findall(text): target = target.strip().strip("<>") @@ -141,11 +149,7 @@ def check_internal_links() -> list[str]: def check_empty_files() -> list[str]: allowed = {ROOT / "software" / "src" / "radiance3d" / "py.typed"} errors: list[str] = [] - for path in ROOT.rglob("*"): - # ESP-IDF creates empty generated stamp/source placeholders under its - # ignored build directory. They are not repository artifacts. - if "build" in path.relative_to(ROOT).parts: - continue + for path in tracked_files(): if path.is_file() and path.stat().st_size == 0 and path not in allowed: errors.append(f"{path.relative_to(ROOT)}: empty file") return errors @@ -154,8 +158,8 @@ def check_empty_files() -> list[str]: def check_owned_hardware_contract() -> list[str]: """Reject production documentation/configuration that drifts from owned parts.""" errors: list[str] = [] - forbidden = re.compile(r"\b(A4988|DRV8825|TMC2208|AD8318|RX5808|Raspberry\s*Pi|Arduino|slip\s*ring)\b", re.I) - for path in ROOT.rglob("*"): + forbidden = re.compile(r"\b(A4988|DRV8825|TMC2208|AD8318|RX5808|Raspberry\s*Pi|Arduino)\b", re.I) + for path in tracked_files(): if not path.is_file() or path.suffix not in {".md", ".json", ".cpp", ".hpp", ".py"}: continue if "Measurements" in path.parts or path == Path(__file__): @@ -186,9 +190,18 @@ def check_owned_hardware_contract() -> list[str]: architecture = profile.get("mechanical_architecture", {}) if architecture.get("enclosure_designed") is not False: errors.append("owned hardware profile: enclosure must remain undesigned") - if "one controlled 360 degree rotation" not in architecture.get("pan_rotation", ""): - errors.append("owned hardware profile: pan must specify one controlled 360 degree rotation") - if "tilt motor" not in architecture.get("rotating_platform", []) or "AD8317 detector" not in architecture.get("rotating_platform", []): + if architecture.get("base_maximum_mm") != [220.0, 220.0]: + errors.append("owned hardware profile: base maximum must be 220 × 220 mm") + if "open stationary base" not in architecture.get("electronics_mounting", ""): + errors.append("owned hardware profile: Revision 1 electronics must remain open") + drive = architecture.get("drive_architecture", "") + for required in ("5 mm D-shafts", "clamp-style hubs", "no external bearings", "separate shafts", "shaft couplers"): + if required not in drive: + errors.append(f"owned hardware profile: direct-drive contract missing {required!r}") + if "one managed 360 degree rotation" not in architecture.get("pan_rotation", ""): + errors.append("owned hardware profile: pan must specify one managed 360 degree rotation") + rotating = architecture.get("rotating_platform", []) + if not any("tilt motor" in item for item in rotating) or not any("AD8317 detector" in item for item in rotating): errors.append("owned hardware profile: rotating platform must contain tilt motor and AD8317") if "no RG316 jumper" not in architecture.get("rf_measurement", ""): errors.append("owned hardware profile: direct-SMA detector mounting is required") @@ -220,17 +233,18 @@ def check_owned_hardware_contract() -> list[str]: routing = (ROOT / "docs/hardware/assembly-order.md").read_text(encoding="utf-8") if "Unlimited continuous pan rotation is not allowed." not in routing: errors.append("cable-routing contract permits unlimited pan rotation") - if "one controlled 360° turn" not in routing: - errors.append("cable-routing contract lacks controlled 360 degree pan rotation") + if "one managed 360° turn" not in routing: + errors.append("cable-routing contract lacks managed 360 degree pan rotation") power_tree = (ROOT / "docs/hardware/power-tree.md").read_text(encoding="utf-8") for required in ("Off-board 12 V bench power source", "+12V IN", "GND IN", "no battery compartment"): if required not in power_tree: errors.append(f"external-power contract missing {required!r}") reference = (ROOT / "docs/hardware/reference-architecture.md").read_text(encoding="utf-8") for required in ("DESIGN INTENT: STATIONARY BASE", "DESIGN INTENT: ROTATING PLATFORM", - "external stationary 5.8 GHz VTX", "AUT directly threads onto the AD8317 SMA", + "external stationary 5.8 GHz VTX", "AUT directly threads onto", "no detector-to-antenna RG316 jumper", "Conceptual architecture only.", - "Final placement determined during CAD.", + "Final placement determined during CAD.", "220 × 220 mm", + "no external bearings, separate shafts, or shaft couplers", "Firmware-defined return-to-home strategy to prevent cumulative cable twist"): if required not in reference: errors.append(f"reference architecture missing {required!r}")