Skip to content

Instantly share code, notes, and snippets.

@twitchyliquid64
Last active September 9, 2023 04:52
Show Gist options
  • Save twitchyliquid64/cf19bd503c6bd69a18d310135f9b9ca8 to your computer and use it in GitHub Desktop.
Save twitchyliquid64/cf19bd503c6bd69a18d310135f9b9ca8 to your computer and use it in GitHub Desktop.
bearing_raceway.scad
// Successful test on 0.3mm with 4.5mm balls:
// ball_r = 4.5/2,
// center_ext_p = 0.25,
// vert_ext_p = 0.2,
// ball_slop_r = 0.15
//
// The two halfs were super close, could stand to increase
// clearance a lil.
//
// cutoff_angle = 35;
// vert_ext = ball_r * vert_ext_p;
// r = ball_r + ball_slop_r;
// center_ext = ball_r * center_ext_p / 2;
// start_angle = asin(center_ext) / ball_r;
module raceway_profile (
ball_r = 4.5/2,
center_ext_p = 0.25,
vert_ext_p = 0.2,
ball_slop_r = 0.15)
{
cutoff_angle = 35;
vert_ext = ball_r * vert_ext_p;
r = ball_r + ball_slop_r;
// Calculate starting angle to reduce y by center_ext
center_ext = ball_r * center_ext_p / 2;
start_angle = asin(center_ext) / ball_r;
echo(start_angle);
polygon([
for (a = [cutoff_angle-180 : -90-start_angle])
[ center_ext + r * cos(a), r * sin(a) ],
for (a = [-90+start_angle : -cutoff_angle])
[ -center_ext + r * cos(a), r * sin(a) ],
[vert_ext+r, 0],
for (a = [cutoff_angle : 90-start_angle])
[ -center_ext + r * cos(a), r * sin(a) ],
for (a = [90+start_angle : 180-cutoff_angle])
[ center_ext + r * cos(a), r * sin(a) ],
[-vert_ext-r, 0],
]);
}
module circular_raceway(center_radius) {
rotate_extrude($fn = 6 * center_radius)
translate([center_radius, 0, 0])
rotate([0, 0, 90])
raceway_profile();
}
module thrust_bearing(outer_r = 13, inner_r = 7, track_r = 10) {
h = 7;
difference() {
difference() {
cylinder(r=outer_r, h=h, center=true, $fn = 6 * outer_r);
cylinder(r=inner_r, h=h+1, center=true, $fn = 6 * inner_r);
}
circular_raceway(track_r);
translate([0, 0, h/2])
cylinder(r=outer_r+1, h=h, center=true, $fn = 6 * outer_r);
}
}
module ball_cage(
n = 12, track_r = 10, outer_r = 13, inner_r = 7,
ball_r = 4.5/2, ball_slop_r = 0.12,
h = 0.3) {
intersection() {
difference() {
difference() {
cylinder(r=outer_r, h=h, center=true, $fn = 6 * outer_r);
cylinder(r=inner_r, h=h+1, center=true, $fn = 6 * inner_r);
}
// balls
for (i = [0 : n])
translate([track_r * cos(i * 360 / n), track_r * sin(i * 360 / n), 0])
sphere(r = ball_r + ball_slop_r, $fn = 20);
}
// truncate the cage towards the edge
cylinder(r=inner_r + (outer_r-inner_r)/8*6, h=h+1, center=true, $fn = 6 * outer_r);
}
}
thrust_bearing();
translate([0, 0, 12])
rotate([90, 90, 180])
union() {
raceway_profile();
color("grey")
translate([0,0,0.1])
circle(r=4.5/2, $fn = 60);
}
translate([0, 0, 0.25])
ball_cage();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment