180 lines
5.0 KiB
Plaintext
180 lines
5.0 KiB
Plaintext
![]() |
// A 320mm vented brake disc (rotor), with straight vanes, 30mm thick. The disc bell should accommodate 5 M12 wheel studs on a 114.3mm pitch circle diameter.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
@settings(defaultLengthUnit = mm)
|
||
|
|
||
|
// Define parameters.
|
||
|
dDisc = 320
|
||
|
dPitchCircle = 114.3
|
||
|
dBore = 64
|
||
|
nStuds = 5
|
||
|
dStudDrilling = 12.5 // M12
|
||
|
hFrictionSurface = 60
|
||
|
tDiscHalf = 10
|
||
|
|
||
|
// Vent parameters.
|
||
|
tVent = 10
|
||
|
wVent = 6
|
||
|
rVentFillet = 2
|
||
|
nVentBosses = 36
|
||
|
|
||
|
// Drilling parameters.
|
||
|
dDrillDia = 6
|
||
|
aBase = 90
|
||
|
aSweep = 30
|
||
|
nArcs = 12
|
||
|
|
||
|
// Bell parameters.
|
||
|
aDraftBell = 5
|
||
|
tBell = 5 // Wall thickness.
|
||
|
hBellAboveDiscFace = 40
|
||
|
hBellSubflush = 4
|
||
|
wUndercut = 8
|
||
|
|
||
|
fn drillHole(activeSketch, t) {
|
||
|
// Sketch a vent hole at line parameter value t on an arc drawn across the disc surface.
|
||
|
rInner = dDisc / 2 - hFrictionSurface
|
||
|
rOuter = dDisc / 2
|
||
|
|
||
|
aStart = aBase
|
||
|
aEnd = aBase - aSweep
|
||
|
|
||
|
// Linear interpolation of radius.
|
||
|
rCurrent = rInner + t * (rOuter - rInner)
|
||
|
|
||
|
// Linear interpolation of angle.
|
||
|
aCurrent = aStart + t * (aEnd - aStart)
|
||
|
|
||
|
// Calculate position.
|
||
|
xCenter = rCurrent * cos(aCurrent)
|
||
|
yCenter = rCurrent * sin(aCurrent)
|
||
|
|
||
|
// Draw.
|
||
|
drillCircle = circle(activeSketch, center = [xCenter, yCenter], radius = dDrillDia / 2)
|
||
|
return drillCircle
|
||
|
}
|
||
|
|
||
|
fn createDiscHalf(plane, dDiscParam, hFrictionSurfaceParam, tDiscHalfParam) {
|
||
|
// Create a disc half with a vent hole pattern.
|
||
|
sketchFace = startSketchOn(plane)
|
||
|
profileFace = circle(sketchFace, center = [0, 0], radius = dDiscParam / 2)
|
||
|
|> subtract2d(tool = circle(sketchFace, center = [0, 0], radius = dDiscParam / 2 - hFrictionSurfaceParam))
|
||
|
|
||
|
// Create three circles at t = 0, 0.5, and 1
|
||
|
hole1 = drillHole(activeSketch = sketchFace, t = 0.2)
|
||
|
hole2 = drillHole(activeSketch = sketchFace, t = 0.5)
|
||
|
hole3 = drillHole(activeSketch = sketchFace, t = 0.8)
|
||
|
|
||
|
// Pattern and cut.
|
||
|
holes = patternCircular2d(
|
||
|
[hole1, hole2, hole3],
|
||
|
instances = nArcs,
|
||
|
center = [0, 0],
|
||
|
arcDegrees = 360,
|
||
|
rotateDuplicates = true,
|
||
|
)
|
||
|
profileDrilled = subtract2d(profileFace, tool = holes)
|
||
|
|
||
|
// Extrude.
|
||
|
discHalf = extrude(profileFace, length = tDiscHalfParam)
|
||
|
return discHalf
|
||
|
}
|
||
|
|
||
|
// ---------------------------------------------------------------------------------------------------------------------
|
||
|
|
||
|
// Create inboard half.
|
||
|
discInboard = createDiscHalf(
|
||
|
plane = XY,
|
||
|
dDiscParam = dDisc,
|
||
|
hFrictionSurfaceParam = hFrictionSurface,
|
||
|
tDiscHalfParam = tDiscHalf,
|
||
|
)
|
||
|
|
||
|
// Create vents.
|
||
|
planeVent = offsetPlane(XY, offset = tDiscHalf)
|
||
|
sketchVent = startSketchOn(planeVent)
|
||
|
profileVent = startProfile(sketchVent, at = [-wVent, dDisc / 2])
|
||
|
|> angledLine(angle = 0, length = wVent, tag = $rectangleSegmentA001)
|
||
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = hFrictionSurface, tag = $seg02)
|
||
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg03)
|
||
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01)
|
||
|
|> close()
|
||
|
|
||
|
ventPad = extrude(profileVent, length = tVent)
|
||
|
|> fillet(
|
||
|
radius = rVentFillet,
|
||
|
tags = [
|
||
|
getCommonEdge(faces = [seg01, rectangleSegmentA001]),
|
||
|
getCommonEdge(faces = [seg02, rectangleSegmentA001]),
|
||
|
getCommonEdge(faces = [seg01, seg03]),
|
||
|
getCommonEdge(faces = [seg03, seg02])
|
||
|
],
|
||
|
)
|
||
|
ventSet = patternCircular3d(
|
||
|
ventPad,
|
||
|
instances = nVentBosses,
|
||
|
axis = [0, 0, 1],
|
||
|
center = [0, 0, tDiscHalf],
|
||
|
arcDegrees = 360,
|
||
|
rotateDuplicates = true,
|
||
|
)
|
||
|
|
||
|
// Create outboard half.
|
||
|
planeOutboard = offsetPlane(XY, offset = tDiscHalf + tVent)
|
||
|
discOutboard = createDiscHalf(
|
||
|
plane = planeOutboard,
|
||
|
dDiscParam = dDisc,
|
||
|
hFrictionSurfaceParam = hFrictionSurface,
|
||
|
tDiscHalfParam = tDiscHalf,
|
||
|
)
|
||
|
|
||
|
// Now create bell.
|
||
|
rCenter = dDisc / 2 - hFrictionSurface - wUndercut
|
||
|
rBore = dBore / 2
|
||
|
lDraftExterior = hBellAboveDiscFace / tan(90 - aDraftBell)
|
||
|
lDraftInterior = (hBellAboveDiscFace - tBell) / tan(90 - aDraftBell)
|
||
|
|
||
|
// Inner and outer radius of outboard face of disc bell.
|
||
|
rOuter = rCenter - lDraftExterior - rBore
|
||
|
rInner = rOuter + lDraftExterior - (tBell + lDraftInterior)
|
||
|
|
||
|
sketchDiscBell = startSketchOn(-YZ)
|
||
|
bodyDiscBell = startProfile(
|
||
|
sketchDiscBell,
|
||
|
at = [
|
||
|
-dDisc / 2 + hFrictionSurface,
|
||
|
tDiscHalf * 2 + tVent
|
||
|
],
|
||
|
)
|
||
|
|> arc(
|
||
|
%,
|
||
|
angleStart = -180,
|
||
|
angleEnd = 0,
|
||
|
radius = wUndercut / 2,
|
||
|
)
|
||
|
|> line(end = [lDraftExterior, hBellAboveDiscFace])
|
||
|
|> xLine(length = rOuter, tag = $seg04)
|
||
|
|> yLine(length = -tBell)
|
||
|
|> xLine(length = -rInner)
|
||
|
|> line(end = [-lDraftInterior, -hBellAboveDiscFace])
|
||
|
|> line(end = [0, -2]) // Wall thickness.
|
||
|
|> xLine(length = -1 * (tBell + wUndercut))
|
||
|
|> close(%)
|
||
|
|> revolve(axis = Y)
|
||
|
|
||
|
// Drill lug holes.
|
||
|
sketchLugs = startSketchOn(bodyDiscBell, face = seg04)
|
||
|
profileStud = circle(sketchLugs, center = [0, dPitchCircle / 2], radius = dStudDrilling / 2)
|
||
|
|> patternCircular2d(
|
||
|
%,
|
||
|
instances = nStuds,
|
||
|
center = [0, 0],
|
||
|
arcDegrees = 360,
|
||
|
rotateDuplicates = true,
|
||
|
)
|
||
|
|
||
|
clearance = 2 // Some margin on negative extrude.
|
||
|
lugs = extrude(profileStud, length = -1 * (tBell + clearance))
|