Skip to content

[family-assembly] Add three_jaw_scroll_chuck - #82

Open
jiashunwu1030-oss wants to merge 5 commits into
BenchCAD-org:mainfrom
jiashunwu1030-oss:codex/issue-81-three-jaw-scroll-chuck
Open

[family-assembly] Add three_jaw_scroll_chuck#82
jiashunwu1030-oss wants to merge 5 commits into
BenchCAD-org:mainfrom
jiashunwu1030-oss:codex/issue-81-three-jaw-scroll-chuck

Conversation

@jiashunwu1030-oss

@jiashunwu1030-oss jiashunwu1030-oss commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Family

  • Family: three_jaw_scroll_chuckfamily-assembly
  • Closes [family-assembly] three_jaw_scroll_chuck #81
  • A nine-body parametric RÖHM DURO-M geared scroll chuck: one-piece body, rear cover, scroll plate (Archimedean spiral thread on the face, straight-bevel crown ring on the back), three outward-stepped BB jaws engaged in the spiral through underside arc teeth, and three straight-bevel radial drive pinions meshing the crown ring.

Official manufacturer references — copied from Family Issue #81

Only the two primary review references are reproduced here; the complete reference set remains in Issue #81.

RÖHM DURO-M product and cutaway reference (the cutaway on the right page shows the drive train this PR models: key → radial bevel pinion → bevel ring on the scroll back → spiral → jaw teeth)

RÖHM DURO-M product and cutaway reference

Primary DIN 6350 dimensional drawing and table

RÖHM DURO-M primary dimensional drawing and table


Generated — benchmark views (what the model sees)

Image below — preview_views.png: four benchmark viewing directions used by the model.

Benchmark views


Generated — easy / medium / hard samples

Image below — preview.png: easy samples are the top row, medium samples are the middle row, and hard samples are the bottom row.

Easy medium hard samples


Extremes — smallest & largest sampled instances

Image below — preview_extremes.png: the smallest sampled instance is the top row, and the largest sampled instance is the bottom row.

Sampled extremes


Three-view + iso — hard example

Image below — preview_hard_zoom.png: front/side/top/iso of a hard example (the benchmark views are all diagonal isos).

Hard example three-view


Per-part renders (assembly evidence)

Image below — preview_parts.png: every component in isolation next to the assembly — body, cover, scroll plate from both sides (spiral face / crown ring), jaw from both sides (steps / underside arc teeth), bevel pinion.

Per-part renders

How it's parameterized

  • catalog_index is discrete and maps one-to-one to all 12 official DIN 6350 cylindrical-centre-mount catalogue rows, sizes 74–630.
  • Parameters carry the drawing symbol (repo convention [docs] dimension-table columns must be named physical-quantity + drawing symbol (height_G, not G) #100): chuck outer_dia_A, register_dia_B, register_depth_C, height_D, bore_E, bolt_circle_F, mount_thread_G, key_square_K; jaw BB jaw_length_Ajaw_step_H, including the previously unused BB rows jaw_serration_D (drives the scroll thread pitch) and jaw_tongue_E (drives the T-flange height).
  • refine() copies the selected row's values verbatim; no dimensions are mixed across rows.
  • jaw_open_fraction is the only continuous operating-state parameter: clamp_d = grip_min_A1 + jaw_open_fraction × (grip_max_A1 − grip_min_A1).
  • Easy covers indices 0–3, medium 4–7 and hard 8–11; coverage enforces all 12 rows.
  • The internal drive train derives per row in part.py:_layout (mirrored in check()): crown tooth count Z_w solves the axial budget and rounds up to a multiple of 3 (so all three pinion meridians are in phase), module m = 2·R_ring/Z_w, tan δ_wheel = Z_w/Z_p with Z_p = 12, shared pitch-cone apex on the chuck axis. Z_w ranges 45–84, δ_wheel ≈ 75–82° across the rows. Details and every proportion: NOTES.md.
  • check() also bounds nose collision (clamp_d ≥ 0.16·jaw_width_B), guideway engagement (≥ 30 % of jaw length) and spiral engagement (≥ 2 pitches); all 12 rows stay feasible over their full published A1 range.

Engagement verification (all 12 rows × A1 extremes)

Measured with OCC boolean/extrema probes on every row at jaw_open_fraction 0.15 and 0.85:

  • 9 solids everywhere, each compound member exactly one solid;
  • pairwise intersection volume = 0 for all 36 body pairs (no interpenetration);
  • spiral ↔ jaw-teeth interleave gap = the design running clearance (0.20–0.54 mm by size);
  • crown ↔ pinion mesh backlash 0.18–1.6 mm (≈ 0.2–0.4 module);
  • jaws overhang the body OD only at large A1 openings, which the catalogue's own chucking ranges imply.

bench2 validate three_jaw_scroll_chuck → PASS (12-row coverage, distinct difficulties, 9 non-degenerate solids per instance).

Visible modeling simplifications and constraints

  • Exact catalogue data: 12 coupled product rows, chuck A/B/C/D/E/F/G/K dimensions, mounting-hole count, BB jaw A/B/C/D/E/F/G/H envelopes and published A1 gripping ranges.
  • Bevel teeth are straight with planar flanks and computed backlash (no involute/octoid curvature); the scroll thread is rectangular in section; jaw teeth are concentric arc segments at the local spiral gap radii (the arc-vs-spiral deviation is inside the side clearance, per size).
  • The rear DIN 6350 register is a recess cut into the back (per the catalogue section view); mounting holes are blind from the back, so the front face stays clean.
  • G threads are nominal cylindrical holes; no false helical detail.
  • Cover screws, pinion retaining details, lubrication features and edge breaks below catalogue resolution are not modelled. NOTES.md lists every derived proportion.

Checklist

  • bench2 validate three_jaw_scroll_chuck passes locally
  • preview.png, preview_views.png, preview_extremes.png, preview_hard_zoom.png, preview_parts.png regenerated from the current geometry and manually inspected
  • family.json declares "solids": 9; every sampled body is non-degenerate
  • all 12 official catalogue rows are reachable and remain coupled
  • every PARAM_SPEC.source and check() rule cites the catalogue or an honest proportion/operating-state derivation
  • the family directory contains exactly the package deliverables (source + NOTES.md + 5 renders)
  • final commits are DCO-signed and the PR diff touches only designs/three_jaw_scroll_chuck/

Sources used

Signed-off-by: 吴嘉顺 <jiashunwu1030@gmail.com>
@github-actions

Copy link
Copy Markdown

Welcome, and thanks for the family PR! Three things that answer most questions:

  • No checks running? A maintainer must click Approve workflows once for your first PR — pending, not ignored.
  • Red gate? The message tells you the fix: click Details, or read the bench2 validate report comment posted after each run. Reproduce locally with uv sync && uv run bench2 validate <family> (debug help).
  • Scope: designs/<family>/ holds only the package files (reference drawings/photos go in the family issue), and the PR checklist must be fully ticked. Not done yet? Mark the PR as a Draft.

中文:红 ✗ 点 Details 或看 validate 报告评论;本地 uv run bench2 validate <family> 复现;参考图放 issue 不放 PR;没做完用 Draft。入门 → GETTING_STARTED.zh

@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown

bench2 validate

three_jaw_scroll_chuck

  ✓ family.json: keys + base_plane valid
  ✓ pieces: build(24 params) + PARAM_SPEC + check present
  ✓ PARAM_SPEC: 24 params, all entries complete
  ✓ easy: 4/4 seeds sample+check+build+execute clean
  ✓ medium: 4/4 seeds sample+check+build+execute clean
  ✓ hard: 4/4 seeds sample+check+build+execute clean
  ✓ coverage: catalog_index reaches all 12 declared values (standard table fully covered)
  ✓ difficulty separation: difficulties produce distinct programs
  ✓ geometry novelty: 12/12 unique shapes (0% duplicate)
  ✓ solids: every instance non-degenerate, 9 solid(s) each (declares solids=9)
PASS — designs/three_jaw_scroll_chuck

Previews: the previews artifact on this run.

@jiashunwu1030-oss
jiashunwu1030-oss marked this pull request as ready for review July 28, 2026 13:09

@HaozheZhang6 HaozheZhang6 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Superseded — all findings (including the jaw-to-jaw collision bound, the OD overhang, and the missing NOTES.md) are consolidated into my changes-requested review of 07-30 below. Act on that one.

@HaozheZhang6 HaozheZhang6 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(Consolidates my 07-29 comment review — one review to act on.)

  • Dimension check — does every spec.py number trace to the cited datasheet? Yes: all 12 rows match the DIN 6350 table cell-for-cell (catalogue p.3048 — the same drawing attached in this PR), including jaw length A = its H row. What's wrong is the typed table in issue #81: it contradicts the drawing attached right above it — "height" (50…260) appears in no row of that table (D is 32.5…135), "bolt circle" is off on all 12 rows (58 vs 63 … 580 vs 586), "center bore" on 7 of 12 (12 vs 15 at size 74 … 210 vs 240 at 630). Fix the issue body; keep the spec, and name its columns physical-quantity + symbol per #100 (height_D, bore_E). Also ship NOTES.md — REVIEWING.md §4 requires it on a table-driven family.

  • Assembly validity check — the 9 bodies are separate parts: they may touch, but no two may share volume, so I measured every pairwise intersection volume (must be 0). Non-zero at every size:

    • body∩jaw 4,876–73,401 mm³ (~12–15 % of a jaw): the guideway .box() at part.py:252-256 keeps the default centered=True, which centres z too — the slots span z ∈ [−1.5·guide_depth, −0.5·guide_depth], buried inside the body, never opening the front face (also why your front views show no radial slots). You already use centered=(True,True,False) correctly at part.py:74 — single slip. Also bound travel vs slot length in check(): at size 400 clamp 191 the jaw overruns the slot's outer end.
    • body∩scroll 1,122–105,941 mm³: scroll ID max(1.12E, 0.19A) < cavity ID max(E+0.08A, 0.22A) on all 12 rows (E/A ≤ 0.38), so the plate always overlaps the central sleeve.
    • scroll∩pinion ≤753 mm³ (the 12-gon's +Z vertex pierces the plate underside); at 630, body∩cover = 78,612 mm³ — register B=545 exceeds the cover disc 0.84·A=529 (B/A runs 0.70–0.865, so the proportion doesn't dominate the catalog column; assert it in check()).
    • jaw∩jaw at small opening: check() bounds jaw_open_fraction to [0,1] but never relates clamp_d to jaw_width — jaws collide when clamp_d ≤ 0.577·jaw_width (reachable in hard, row 8 f ≲ 0.105: 6,170 mm³ measured). At the other end the jaws overhang the chuck OD (your own bbox column: 425.5 on a 400 chuck). Bound both in check().
  • Mechanism check — a scroll chuck works as: square key turns a pinion → its bevel teeth mesh a crown ring on the scroll's back → scroll rotates → the Archimedean spiral on its front engages rack teeth under each jaw → three jaws feed radially in their guideways together. So each interface must exist and be engaged (interleaved or touching — not floating, not fused). None is:

    • scroll→jaw: four concentric broken rings vs six straight grooves pitched by jaw_length, floating 0.6–4.9 mm apart — concentric rings give zero radial feed. Make it one coarse spiral + concentric-arc grooves at the same pitch, interleaved 1–2 mm.
    • pinion→scroll: the scroll's back is smooth, nothing to mesh — add a toothed ring at the pinion radius, tangent with clearance.
    • retention: jaws sit in open slots with nothing holding them axially (needs a two-tier slot + T-foot); the scroll floats 33–80 mm from the cover that should sandwich it; pinions have 1.3–6 mm radial air, no journal fit.

Enclosed scroll/pinions are invisible in all four benchmark views — whether internals should be scored bodies is a maintainer call.

@HaozheZhang6

Copy link
Copy Markdown
Collaborator

Recommend take 1min to read: https://en.wikipedia.org/wiki/Lathe

BenchCAD added 2 commits July 31, 2026 03:03
The scroll plate now carries a true Archimedean thread on its face
(pitch from the BB jaw table's D band) and a straight-bevel crown ring
on its back; the three radial pinions are straight-bevel gears meshing
that ring with a shared pitch-cone apex on the chuck axis
(tan(delta) = Zw/Zp, Zw solved per row and kept a multiple of 3 so all
three pinions stay in phase). Jaw undersides carry arc teeth at the
local spiral gap radii, giving the real 1/3-pitch stagger between the
three jaws. Guideways are two-tier T-slots open through the face, the
scroll is axially sandwiched with running clearance, pinions seat in
stepped journal bores, the DIN register is a rear recess, and mounting
holes are blind from the back. Params renamed to quantity+symbol (BenchCAD-org#100)
with jaw table D/E added as catalog rows; NOTES.md documents the symbol
map and every derived proportion.

Measured on all 12 catalog rows at both A1 extremes: 9 solids, zero
pairwise intersection volume, spiral-jaw interleave gap = design
clearance, crown-pinion backlash 0.18-1.6 mm. bench2 validate passes.

Signed-off-by: BenchCAD <benchcad@users.noreply.github.com>
@BenchCAD

Copy link
Copy Markdown
Collaborator

Pushed a rework of the internals (and updated the body to match). The previous scroll plate carried four broken concentric rings on a smooth-backed disc, and the pinion was a 12-sided prism — concentric rings give zero radial feed and there was nothing anywhere to mesh, so the modelled chuck could not work. On a real scroll chuck the drive is: key → radial bevel pinion → bevel crown ring on the scroll's back → flat Archimedean spiral on its face → arc teeth under each jaw (the DURO-M cutaway on catalogue p.3035 shows exactly this; a scroll-plate spare part shows the two faces well: https://www.carbideanddiamondtooling.com/Scroll-Plate-for-3-Inch-Scroll-Chuck--ID-658-7-887-303_p_423521.html).

What changed: the scroll face is now a true Archimedean thread (pitch taken from the BB jaw table's D band), its back carries a straight-bevel crown ring, and the pinions are straight-bevel gears meshing it with the shared pitch-cone apex on the chuck axis (tan δ = Z_w/Z_p; Z_w solves the axial budget per row and rounds to a multiple of 3 so all three pinions are in phase — Z_w 45–84, δ ≈ 75–82° across the 12 sizes). Jaw undersides carry arc teeth at the local spiral gap radii, which reproduces the real ⅓-pitch stagger between jaws 1/2/3. Also fixed from the earlier review: guideways are two-tier T-slots that actually open through the face (the old cut was z-centred and buried inside the body), the scroll is sandwiched with running clearance instead of floating tens of mm, pinions seat in stepped journal bores, the DIN register is a recess rather than a boss, mounting holes are blind from the back so the front face stays clean, and the jaw noses are narrowed per the BB plan view — which is also what lets three jaws meet at clamp_d = 2 mm without touching.

Measured on all 12 rows at both A1 extremes: 9 solids each, zero pairwise intersection volume across all 36 body pairs, spiral↔jaw interleave gap equal to the design running clearance (0.20–0.54 mm by size), crown↔pinion backlash 0.18–1.6 mm. bench2 validate passes. Spec params renamed to quantity+symbol per #100 (outer_dia_A, bore_E, …) with the BB jaw D/E rows added, and NOTES.md now documents the symbol map and every derived proportion. The old instance-map/exploded/jaw-motion attachments showed the ring-track internals, so I removed those sections; they can be regenerated from the new geometry if wanted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[family-assembly] three_jaw_scroll_chuck

3 participants