Fixed duplicated generation of xsled geometry, added clips for belts to xsled, fixed positions of ysled idlers to be based on nominal beltline

This commit is contained in:
2022-03-05 21:05:37 +01:00
parent e6d1c55073
commit 83e6dee3f3
5 changed files with 211 additions and 93 deletions

View File

@@ -0,0 +1,8 @@
## Mechanical
* Lengthen rear corner frame holders
* Add screw holes for feet in each corner
* Add place to mount electronics (likely just an extra part)
## Electronics

View File

@@ -54,10 +54,10 @@ module xsled() {
}
module moving_parts(xpos = cur_xpos, ypos = cur_ypos) {
translate([ yrail_offset, cur_ypos, 0 ]) ysled_slider(spread = sled_ysize);
translate([ yrail_offset, cur_ypos, 0 ]) ysled_slider();
translate([ xsize - yrail_offset, cur_ypos, 0 ]) rotate([ 180, 180, 0 ])
ysled_slider(spread = sled_ysize, is_left = false);
ysled_slider(is_left = false);
translate([ yrail_offset, cur_ypos, 0 ]) if ($preview) ysled_rails();

View File

@@ -14,5 +14,5 @@ cur_ypos = 140;
echo(str("Range = ", [ xsize - xmin * 2, ysize - ymin * 2 ]));
$fn = 60;
$fn = 30;
$include_substock = true;

View File

@@ -89,12 +89,12 @@ module rail_holder(in_x) {
}
// centered on the rail.
module ysled_slider(spread, associated_parts = $preview, is_left=true) {
module ysled_slider(associated_parts = $preview, is_left=true) {
spread = sled_ysize;
bom_item(label = str("ysled_slider(", spread, ")"));
sled_len = spread + frame_size;
sled_height = frame_size;
idler_spacing = spread / 3;
idler_spacing = spread / 6 + pulley_radius(idler_nteeth);
local_idler_xoffset = pulley_sbend_offset - yrail_offset + motor_shaft_xoffset;
echo("LIX:", local_idler_xoffset)
colorize("green") translate([ 0, -sled_len / 2, 0 ])
@@ -110,7 +110,7 @@ module ysled_slider(spread, associated_parts = $preview, is_left=true) {
]) cube([ frame_size + 5, frame_size, sled_len ]);
}
for (y = [idler_spacing/2, -idler_spacing/2]) {
for (y = [idler_spacing, -idler_spacing]) {
rotate([90, 0, 0])
translate([local_idler_xoffset, sled_len/2 + y, 0])
cylinder(d=3, h = frame_size);
@@ -132,10 +132,10 @@ module ysled_slider(spread, associated_parts = $preview, is_left=true) {
// color("#f00")
translate(
[ local_idler_xoffset, 0, frame_size/2 - 1 ]) {
translate([ 0, idler_spacing / 2, 0 ]) {
translate([ 0, idler_spacing, 0 ]) {
idler_post(belt_height = belt_height1 - frame_size/2 + 1, toothed = is_left);
}
translate([ 0, -idler_spacing / 2, 0 ]) {
translate([ 0, -idler_spacing, 0 ]) {
rotate([ 0, 0, -90 ]) { idler_post(belt_height = belt_height2 - frame_size/2 + 1, toothed = !is_left); }
}
}
@@ -385,6 +385,90 @@ module xsled_frame() {
}
}
gt2_clip_meshing_dist = belt_pitch * 6;
gt2_clip_peg_diam = 8; // min 6
gt2_clip_ease_in_diam = 6;
gt2_clip_narrowing_dist = 12; // distance from center of loop peg to meshing point
gt2_clip_gap_diam = gt2_clip_peg_diam + belt_thickness * 2 + 1;
gt2_clip_thickness = (gt2_clip_peg_diam + gt2_clip_gap_diam)/2;
gt2_clip_length = gt2_clip_narrowing_dist + gt2_clip_meshing_dist + gt2_clip_peg_diam / 2 + gt2_clip_gap_diam - belt_thickness;
module gt2_clip_cutout(teeth_inside) {
dual_width = belt_thickness * 2 - tooth_height;
loop_peg_diam = gt2_clip_peg_diam; // min 6mm
gap_diam = gt2_clip_gap_diam;
narrowing_ease_diam = 6;
narrowing_dist = gt2_clip_narrowing_dist;
meshing_dist = gt2_clip_meshing_dist;
ease_out_rad = gap_diam - belt_thickness ;
out_off = teeth_inside ? 0 : dual_width - belt_thickness;
translate([
-(narrowing_dist + meshing_dist + (ease_out_rad - out_off - belt_thickness))
-(teeth_inside ? tooth_height - belt_pld : belt_backing)
,
loop_peg_diam / 2,
-1])
union() {
difference() {
hull() {
circle(d = gap_diam);
polygon([
[0, 0],
[0, gap_diam / 2],
[narrowing_dist, gap_diam / 2],
[narrowing_dist, gap_diam / 2 - dual_width]
]);
}
circle(d = loop_peg_diam);
translate([narrowing_dist, gap_diam / 2 - dual_width - narrowing_ease_diam / 2])
circle(d = narrowing_ease_diam);
}
translate([narrowing_dist, gap_diam / 2])
polygon([
[0, 0],
[meshing_dist - 1, 0],
[meshing_dist, - out_off],
[meshing_dist, - belt_thickness - out_off],
[meshing_dist - 1, - dual_width],
[0, - dual_width]
]);
translate([narrowing_dist + meshing_dist, gap_diam / 2 - ease_out_rad]) {
intersection() {
translate([0, -2])
square(ease_out_rad + 2);
difference() {
circle(ease_out_rad - out_off);
circle(ease_out_rad - out_off - belt_thickness);
}
}
}
}
}
module gt2_clip(teeth_inside) {
out_off = teeth_inside ? 0 : belt_thickness - tooth_height;
actual_thickness = gt2_clip_thickness + wall_thickness;
translate([0,-actual_thickness, -belt_width/2 - 2])
difference() {
translate([-gt2_clip_length - belt_thickness + out_off/2, 0]) {
cube([gt2_clip_length + belt_thickness * 2, actual_thickness, belt_width + 4]);
mirror([0,0,1])
translate([0, actual_thickness])
linear_extrude(height=actual_thickness * 1.5, scale=[1,0])
translate([0, -actual_thickness])
square([
gt2_clip_length + belt_thickness * 2,
actual_thickness
]);
}
translate([0,0,0])
linear_extrude(belt_width + 6)
gt2_clip_cutout(teeth_inside);
}
}
module xsled2() {
bom_item();
@@ -406,102 +490,127 @@ module xsled2() {
finger_notch_smdepth = 2;
glass_holder_points = [
[0, -tab_thickness/2],
[0, film_height + glass_thickness],
[wall_thickness, film_height + glass_thickness],
[wall_thickness, film_height],
[outside_ledge_width, film_height],
[outside_ledge_width, film_height - glass_thickness],
[ledge_width, film_height - glass_thickness],
[wall_thickness * 2, -tab_thickness / 2]
];
[0, - tab_thickness / 2],
[0, film_height + glass_thickness],
[wall_thickness, film_height + glass_thickness],
[wall_thickness, film_height],
[outside_ledge_width, film_height],
[outside_ledge_width, film_height - glass_thickness],
[ledge_width, film_height - glass_thickness],
[wall_thickness * 2, - tab_thickness / 2]
];
echo("Ledge width: ", ledge_width - outside_ledge_width);
for (xsign = [ 1, -1 ], ysign = [ 1, -1 ]) {
translate([ sled_xsize / 2 * xsign, sled_ysize / 2 * ysign, 0 ])
rotate([ 0, -90 * xsign, 0 ]) {
difference() {
union() {
cylinder(d = tab_thickness, h = tab_len);
translate(
[ -tab_thickness / 2, ysign > 0 ? -tab_thickness / 2 : 0, 0 ])
cube([ tab_thickness, tab_thickness / 2 + 1, tab_len ]);
// rail attachment points
for (xsign = [1, - 1], ysign = [1, - 1]) {
translate([sled_xsize / 2 * xsign, sled_ysize / 2 * ysign, 0])
rotate([0, - 90 * xsign, 0]) {
difference() {
union() {
cylinder(d = tab_thickness, h = tab_len);
translate(
[- tab_thickness / 2, ysign > 0 ? - tab_thickness / 2 : 0, 0])
cube([tab_thickness, tab_thickness / 2 + 1, tab_len]);
}
translate([0, 0, - 0.5]) {
cylinder(d = bushing_od, h = bushing_len + 0.5);
cylinder(d = rail_diam * 1.1, h = tab_len + 1);
}
}
translate([ 0, 0, -0.5 ]) {
cylinder(d = bushing_od, h = bushing_len + 0.5);
cylinder(d = rail_diam * 1.1, h = tab_len + 1);
if ($preview) {
bushing();
}
}
if ($preview) {
bushing();
}
}
// glass holding frame
difference() {
union() {
translate([- sled_xsize / 2, - inner_ysize / 2, 0])
rotate([0, 90, 0]) rotate([0, 0, 90]) linear_extrude(sled_xsize)
polygon(glass_holder_points);
translate([sled_xsize / 2, inner_ysize / 2, 0])
rotate([0, 90, 180]) rotate([0, 0, 90])
linear_extrude(sled_xsize) polygon(glass_holder_points);
translate([sled_xsize / 2, - inner_ysize / 2, 0])
rotate([0, 90, 90]) rotate([0, 0, 90])
linear_extrude(inner_ysize) polygon(glass_holder_points);
translate([- sled_xsize / 2, inner_ysize / 2, 0])
rotate([0, 90, - 90]) rotate([0, 0, 90])
linear_extrude(inner_ysize) polygon(glass_holder_points);
}
// cube([sled_xsize, inner_ysize, tab_thickness/2], center=true);
difference() {
union() {
translate([ -sled_xsize / 2, -inner_ysize / 2, 0])
rotate([ 0, 90, 0 ]) rotate([ 0, 0, 90 ]) linear_extrude(sled_xsize)
polygon(glass_holder_points);
translate([ sled_xsize / 2, inner_ysize / 2, 0 ])
rotate([ 0, 90, 180 ]) rotate([ 0, 0, 90 ])
linear_extrude(sled_xsize) polygon(glass_holder_points);
translate([ sled_xsize / 2, -inner_ysize / 2, 0 ])
rotate([ 0, 90, 90 ]) rotate([ 0, 0, 90 ])
linear_extrude(inner_ysize) polygon(glass_holder_points);
translate([ -sled_xsize / 2, inner_ysize / 2, 0 ])
rotate([ 0, 90, -90 ]) rotate([ 0, 0, 90 ])
linear_extrude(inner_ysize) polygon(glass_holder_points);
}
for (x = [ -1, 1],
y = [ -1, 1]) {
translate([x * (sled_xsize/2 - outside_ledge_width - inside_ledge_width / 2),
y * (inner_ysize/2 - outside_ledge_width - inside_ledge_width / 2),
film_height])
rotate([180,0,0]) {
cylinder(d=4, h = 50);
cylinder(d=5, h = 4 + glass_thickness );
// grub screw points for glass levelling
for (x = [- 1, 1],
y = [- 1, 1]) {
translate([x * (sled_xsize / 2 - outside_ledge_width - inside_ledge_width / 2),
y * (inner_ysize / 2 - outside_ledge_width - inside_ledge_width / 2),
film_height])
rotate([180, 0, 0]) {
cylinder(d = 4, h = 50);
cylinder(d = 5, h = 4 + glass_thickness);
}
}
translate([
-10, -inner_ysize / 2,
film_height - glass_thickness + 0.5 - finger_notch_smdepth + finger_notch_diam / 2
}
// finger notch
translate([
- 10, - inner_ysize / 2,
film_height - glass_thickness + 0.5 - finger_notch_smdepth + finger_notch_diam / 2
]) rotate([90, 0, 0])
cylinder(d=finger_notch_diam, h = ledge_width * 3, center=true);
}
cylinder(d = finger_notch_diam, h = ledge_width * 3, center = true);
}
// belt attachment points
idler_spacing = sled_ysize / 6;
for (params = [
[true, [-sled_xsize/2, idler_spacing, belt_height1 ]],
[false, [-sled_xsize/2, -idler_spacing, belt_height2]],
[true, [sled_xsize/2, idler_spacing, belt_height2]],
[false, [sled_xsize/2, -idler_spacing, belt_height1]]
]) {
should_mirror = params[1][0] > 0 ? params[0] : !params[0];
translate(params[1])
rotate([0,0,params[1][0] > 0 ? 90 : -90]) {
if (should_mirror ) {
mirror([1,0,0])
gt2_clip(params[0]);
} else {
gt2_clip(params[0]);
}
}
}
color("#fff3") if ($preview) {
// draw glass sheets
translate(
[ 0, 0, film_height - glass_thickness / 2 + 0.5 ])
cube(
[
sled_xsize - outside_ledge_width * 2,
inner_ysize - outside_ledge_width * 2,
glass_thickness
],
center = true);
[0, 0, film_height - glass_thickness / 2 + 0.5])
cube(
[
sled_xsize - outside_ledge_width * 2,
inner_ysize - outside_ledge_width * 2,
glass_thickness
],
center = true);
*translate(
[ 0, 0, film_height + film_thickness * 2 + glass_thickness / 2 + 0.5 ])
cube(
[
sled_xsize - wall_thickness * 2,
inner_ysize - wall_thickness * 2,
glass_thickness
],
center = true);
[0, 0, film_height + film_thickness * 2 + glass_thickness / 2 + 0.5])
cube(
[
sled_xsize - wall_thickness * 2,
inner_ysize - wall_thickness * 2,
glass_thickness
],
center = true);
}
if($preview) {
if ($preview) {
color("#0003")
translate([0, 0, film_height + 0.5]) {
cube([5*inch, 4*inch, film_thickness], center=true);
}
translate([0, 0, film_height + 0.5]) {
cube([5 * inch, 4 * inch, film_thickness], center = true);
}
}
}

View File

@@ -1,4 +1,3 @@
include <MCAD/math.scad>
include <lib.scad>
stock_color = "#aaa";
@@ -54,13 +53,14 @@ belt_pitch = 2; // 2mm tooth width for GT2 = 2mm pitch
belt_width = 6;
belt_thickness = 1.38;
belt_pld =
0.254; // distance between line of fixed length and tips of gear teeth
belt_backing = 0.63 - belt_pld;
tooth_height = 0.75;
0.254; // distance between pitch line and tips of gear teeth
belt_backing = 0.63 - belt_pld; // distance between pitch line and backing
tooth_height = 0.75; // distance from tips of belt teeth to tip of gear teeth
pulley_od = 13;
pulley_clearance_rad = pulley_od / 2 + 1.5;
function pulley_radius(nteeth) = belt_pitch * nteeth / (PI * 2);
module pulley(teeth, lrim, urim, belt_width, shaft = 5, toothed = true,
od = 0) {
bom_item(printable = false,
@@ -68,7 +68,7 @@ module pulley(teeth, lrim, urim, belt_width, shaft = 5, toothed = true,
"flange1=", min(lrim, urim), "mm, ", "flange2=",
max(lrim, urim), "mm, ", "channel=", belt_width, "mm, ",
"shaft=", shaft, "mm", ")"));
nominal_rad = belt_pitch * teeth / TAU;
nominal_rad = pulley_radius(teeth);
inner_rad = nominal_rad - belt_pld;
outer_rad = (od > 0) ? od / 2 : nominal_rad + belt_backing;
minor_rad = inner_rad - tooth_height;
@@ -108,6 +108,7 @@ module pulley(teeth, lrim, urim, belt_width, shaft = 5, toothed = true,
idler_zmargin = [ 6.4 / 2 + 1.05, 6.4 / 2 + 1.05 ];
idler_nteeth = 16;
module idler(height = 0, toothed = false) {
// pulley(20, 1.05, 1.05, 6.4, toothed=toothed, od=18);
translate([ 0, 0, height - idler_zmargin[0] ])