1
0
mirror of https://github.com/nophead/Mendel90.git synced 2025-08-30 00:10:13 +02:00

Added rounded corners to some parts to make them easier to print.

Filled some gaps in the X ends to make them faster to print.
D motor bracket lid now one piece again, as PCB now clears it.
Calibration object now includes horizontal nut traps.
Add c14n_stl.py to canonicalise the STL files.
Corrected PLA sample diameter.
Removed feed tube connector, works fine without it.
Removed tube jig as not required in the kit.
Manual updated with new part renders.
This commit is contained in:
Chris Palmer
2013-03-24 18:48:03 +00:00
parent dddbaabaca
commit 9345a5b85a
495 changed files with 3272243 additions and 3208293 deletions

View File

@@ -219,18 +219,26 @@ module atx_brackets_stl() {
atx_short_bracket_stl();
}
module atx_brackets_x2_stl() {
atx_brackets_stl();
translate([-offset * 2 + 8, 2, 0])
rotate([0, 0, 180])
color("blue") atx_brackets_stl();
}
module atx_brackets_x4_stl() {
atx_brackets_x2_stl();
translate([0, 41, 0])
atx_brackets_x2_stl();
squeeze = 2 * (sb_base_width - sb_frame_offset - 1);
for(i = [0: 1]) {
translate([0, i * 2 * (atx_bracket_width + 2), 0]) {
translate([offset, 0, 0])
rotate([0, 0, 180])
atx_long_bracket_stl();
translate([-offset, 2, 0])
atx_long_bracket_stl();
}
translate([sb_corner_offset + sb_frame_width - i * (2 * sb_corner_offset + 2 * sb_frame_width + sb_base_offset + 1 - squeeze) - squeeze / 2,
-(atx_bracket_width + 2), 0]) {
translate([0, sb_corner_offset - sb_base_width - 2, 0])
rotate([0, 0, 180])
atx_short_bracket_stl();
translate([sb_base_offset + 1, -sb_corner_offset - sb_base_width , 0])
atx_short_bracket_stl();
}
}
}
if(1)

View File

@@ -27,20 +27,36 @@ function bearing_holder_width(bearing) = bearing[1] + wall * 2;
function bearing_ziptie_radius(bearing) = bearing[1] / 2 + wall + eta;
module bearing_holder(bearing, bar_height, populate = false) {
module bearing_holder(bearing, bar_height, populate = false, rad = 0) {
bearing_length = bearing[0];
bearing_dia = bearing[1];
below = 5 * bearing_dia / 15;
height = bar_height + bearing_dia/2 - below;
offset = below + height / 2 - bearing_dia / 2;
fence = 2.5;
fence_width = sqrt(bearing_dia * bearing_dia - 4 * below * below) + eta;
width = bearing_holder_width(bearing);
length = bearing_holder_length(bearing);
fence_offset = bearing_dia / 2 - fence + (fence + 1) /2;
union(){
difference() {
translate([0, 0, -offset]) // Basic shape
cube(size = [width, length, height], center = true);
translate([0, 0, -offset]) // Basic shape
if(rad)
hull() {
rounded_rectangle([width, length, height], center = true, r = rad);
translate([-width / 2, length / 2 - 1, -height / 2])
cube(1);
translate([width / 2 - 1, -length / 2, -height / 2])
cube(1);
translate([0, 0, height / 2])
cube([width, length, eta], center = true);
}
else
cube(size = [width, length, height], center = true);
rotate([90,0,0]) {
cylinder(h = length + 1, r = bearing_dia / 2, center=true); // Bearing Cutout
cylinder(h = length / 2, r = bearing_dia / 2 + relief, center=true);// releave the center so does not rock
@@ -49,12 +65,12 @@ module bearing_holder(bearing, bar_height, populate = false) {
}
}
translate([0, (length - end_wall)/ 2, -fence_offset]) cube(size = [width,end_wall,fence + 1], center = true); // Blocks at the end to keep the bearing from sliding out
translate([0, -(length - end_wall)/ 2, -fence_offset]) cube(size = [width,end_wall,fence + 1], center = true);
translate([0, (length - end_wall)/ 2, -fence_offset]) cube(size = [fence_width,end_wall,fence + 1], center = true); // Blocks at the end to keep the bearing from sliding out
translate([0, -(length - end_wall)/ 2, -fence_offset]) cube(size = [fence_width,end_wall,fence + 1], center = true);
}
if(populate)
rotate([0,0,90])
linear_bearing(bearing);
}
bearing_holder(LM8UU, 20);
bearing_holder(LM8UU, 20, rad = 7);

View File

@@ -14,7 +14,7 @@ module cal_stl() {
union() {
cube([10,40,5]);
cube([40,10,6]);
cube([20,20,10]);
cube([25,25,10]);
translate([10, 10])
cylinder(r = 10, h = 15);
}
@@ -25,9 +25,16 @@ module cal_stl() {
rotate([0,0,90])
nut_trap(M3_clearance_radius, M3_nut_radius, M3_nut_trap_depth);
translate([0, 18, 5])
rotate([90,0, 90])
nut_trap(M3_clearance_radius, M3_nut_radius, M3_nut_trap_depth, true);
translate([30,5,6])
nut_trap(M4_clearance_radius, M4_nut_radius, M4_nut_trap_depth);
translate([18, 0, 5])
rotate([90, 0, 0])
nut_trap(M4_clearance_radius, M4_nut_radius, M4_nut_trap_depth, true);
}
}

View File

@@ -94,9 +94,6 @@ module d_motor_bracket_lid_stl(motor = NEMA17, nuts = true) {
translate([screw_x, side * screw_y, 0])
rotate([0, 0, -side * 360 / 20])
poly_cylinder(r = No2_clearance_radius, h = 100, center = true);
if(pcb && nuts)
cube([100, slot_width, 100], center = true);
}
}

View File

@@ -850,26 +850,10 @@ module frame_assembly(show_gantry = true) {
right_stay_x - fixing_block_height() / 2 - sheet_thickness(frame) / 2])
explode2([0, 0, -4])
translate([side, 0, -sheet_thickness(base)]) {
color("silver") render() difference() {
translate([0, 0, -tube_height(AL_square_tube) / 2])
rotate([90, 0, 0])
square_tube(AL_square_tube, base_depth - 2 * AL_tube_inset);
for(end = [-1,1])
translate([0, end * (base_depth / 2 - fixing_block_width() / 2 - base_clearance), -tube_height(AL_square_tube)]) {
base_screw_hole();
cylinder(r = screw_head_radius(base_screw) + 0.5, h = tube_thickness(AL_square_tube) * 2 + 1, center = true);
}
}
if(show_jigs)
translate([0, (base_depth / 2 - AL_tube_inset), -tube_height(AL_square_tube) - tube_jig_base_thicnkess() - eta])
if(side > 0)
rotate([0, 0, -90])
color("lime") render()
tube_jig_stl();
color("silver") render() base_tube();
for(end = [-1, 1])
translate([0, end * (base_depth / 2 - AL_tube_inset + tube_cap_base_thicnkess() + eta), -tube_height(AL_square_tube) / 2])
translate([0, end * (base_depth / 2 - AL_tube_inset + tube_cap_base_thickness() + eta), -tube_height(AL_square_tube) / 2])
rotate([90, 0, 90 - 90 * end])
explode([0, 0, -20])
color("lime") render()
@@ -988,6 +972,9 @@ module frame_stays_dxf() {
frame_right_dxf();
}
echo("Width: ", base_width, " Depth: ", base_depth, " Height: ", height + sheet_thickness(base));
total_height = height + sheet_thickness(base) + (base_nuts ? tube_height(AL_square_tube) : 0);
spool_height = total_height - height + spool_z + spool_diameter(spool) / 2;
echo("Width: ", base_width, " Depth: ", base_depth, " Height: ", total_height, " Spool Height:", spool_height);
echo("X bar: ", X_bar_length, " Y Bar 1: ", Y_bar_length, " Y Bar 2: ", Y_bar_length2, " Z Bar: ", Z_bar_length);

View File

@@ -84,3 +84,5 @@ psu_top = psu_z + psu_length(psu) / 2 + (atx_psu(psu) ? 0 : mains_inlet_depth())
controller_z = (height + psu_top) / 2 - controller_length(controller) / 2;
controller_y = (base_depth / 2 + gantry_Y + sheet_thickness(frame)) / 2 - controller_width(controller) / 2;
spool_z = height - gantry_thickness + spool_diameter(spool) / 2 + 10;

View File

@@ -153,16 +153,22 @@ module ribbon_clamp_26_44_stl() ribbon_clamp_stl(26, M4_cap_screw);
module ribbon_clamp_26_44N_stl() ribbon_clamp_stl(26, M4_cap_screw, nutty = true);
module ribbon_clamps_stl() {
gap = 2;
y1 = ribbon_clamp_width(cap_screw) / 2 + ribbon_clamp_width(base_screw) / 2 + gap;
y2 = y1 + ribbon_clamp_width(base_screw) / 2 + ribbon_clamp_width(frame_screw) / 2 + gap;
y3 = y2 + ribbon_clamp_width(frame_screw) / 2 + ribbon_clamp_width(cap_screw) / 2 + gap;
y4 = y3 + ribbon_clamp_width(cap_screw) / 2 + ribbon_clamp_width(M3_cap_screw) / 2 + gap;
y5 = y4 + ribbon_clamp_width(M3_cap_screw) / 2 + ribbon_clamp_width(M3_cap_screw) / 2 + gap;
rotate([0, 0, 90]) {
translate([0,1, 0]) ribbon_clamp_stl(bed_ways, cap_screw, nutty = true);
translate([0,13,0]) ribbon_clamp_stl(bed_ways, base_screw, nutty = (cnc_sheets && base_nuts));
translate([0,27,0]) ribbon_clamp_stl(x_end_ways, frame_screw, nutty = (cnc_sheets && frame_nuts));
translate([0,40,0]) ribbon_clamp_stl(bed_ways, cap_screw);
translate([0,51,0]) ribbon_clamp_stl(x_end_ways, M3_cap_screw);
translate([0,62,0]) ribbon_clamp_stl(extruder_ways, M3_cap_screw);
translate([0,0, 0]) ribbon_clamp_stl(bed_ways, cap_screw, nutty = true);
translate([0,y1,0]) ribbon_clamp_stl(bed_ways, base_screw, nutty = (cnc_sheets && base_nuts));
translate([0,y2,0]) ribbon_clamp_stl(x_end_ways, frame_screw, nutty = (cnc_sheets && frame_nuts));
translate([0,y3,0]) ribbon_clamp_stl(bed_ways, cap_screw);
translate([0,y4,0]) ribbon_clamp_stl(x_end_ways, M3_cap_screw);
translate([0,y5,0]) ribbon_clamp_stl(extruder_ways, M3_cap_screw);
}
}
if(1) {
if(0) {
ribbon_clamp_assembly(20, M4_cap_screw, 16, 4, nutty = true);
translate([0, -15, 0]) ribbon_clamp_assembly(20, frame_screw, frame_screw_length, sheet_thickness(frame), nutty = false);

View File

@@ -25,7 +25,6 @@ hook_r = 3;
left = left_stay_x + sheet_thickness(frame) / 2;
right = right_stay_x - sheet_thickness(frame) / 2;
spool_x = (left + right) / 2;
spool_z = height - gantry_thickness + spool_diameter(spool) / 2 + 10;
spool_y = gantry_Y + sheet_thickness(frame) + 10 + spool_height(spool) / 2;
holes = psu_hole_list(psu);
@@ -154,31 +153,6 @@ module dust_filter_stl() {
}
}
function feed_tube_connector_width() = 15;
module feed_tube_connector_stl() {
stl("feed_tube_connector");
feed_tube_wall = 2;
w = feed_tube_connector_width();
difference() {
union() {
translate([0, 0, feed_tube_wall / 2])
rounded_rectangle([w, w, feed_tube_wall], r = 3);
translate([0, 0, eta])
cylinder(r = feed_tube_tape_rad + feed_tube_wall, h = feed_tube_tape + feed_tube_wall);
}
translate([0, 0, -eta]) {
poly_cylinder(r = feed_tube_tape_rad, h = feed_tube_tape);
translate([0, 0, feed_tube_tape + layer_height + eta])
poly_cylinder(r = feed_tube_rad, h = 100);
}
}
}
screw_tab = screw_boss_diameter(frame_screw);
tab_thickness = part_base_thickness + ((frame_nut_traps) ? nut_trap_depth(nut) : 0);
@@ -414,15 +388,12 @@ module spool_assembly(show_spool = true) {
cylinder(r = 40, h = 5);
}
color(plastic_part_color("red")) render()
translate([0, 0, -truncated + tube_length / 2])
feed_tube_connector_stl();
}
}
}
vitamin("PLA3020: PLA sample 0.3mm ~20m");
vitamin("PLA3020: PLA sample 3mm ~20m");
end("spool_holder_assembly");
}
@@ -433,41 +404,41 @@ module spool_holder_holes()
rotate([0, 90, 0])
frame_screw_hole();
//
// A pair laid out for building
// All four laid out for building
//
module spool_holder_brackets_stl() {
gap = max(wall + 2 * tube_r + feed_clip_thickness + feed_tube_tape_rad + sponge_height / 2 + wall, sheet_thickness(frame) + hook ) + 2;
spool_bracket_female_stl();
translate([2 * bracket_width + gap, hook, 0])
rotate([0, 0, 180])
spool_bracket_female_stl();
translate([bracket_width + tube_r + wall, -bracket_height +hook + hook_overlap + tube_r + feed_clip_thickness + tube_spacing + 2, 0])
rotate([0, 0, -90])
dust_filter_stl();
translate([bracket_width - feed_tube_connector_width() / 2 - frame_bar_width - 2, feed_tube_connector_width(), 0])
feed_tube_connector_stl();
w = top_tube_y - bottom_tube_y;
gap = 2 * tube_r + 2;
h = w / 2 + gap / sqrt(2);
x = h - top_tube_x;
for(i = [0:3]) assign(odd = i % 2)
rotate([0, 0, i * 90])
translate([x, (odd ? -1 : 1) * (top_tube_y + bottom_tube_y) / 2,0])
if(odd)
spool_bracket_female_stl();
else
spool_bracket_male_stl();
}
module spool_holder_tall_brackets_stl() {
spool_bracket_male_stl();
module spool_holder_tall_brackets_x4_stl() {
translate([2 * bracket_width + 2, hook_overlap + 2, 0])
rotate([0, 0, 180])
spool_bracket_male_stl();
w = top_tube_y - bottom_tube_y;
gap = 2 * tube_r + 2;
h = w / 2 + gap / sqrt(2);
x = h - top_tube_x;
for(i = [0:3])
rotate([0, 0, i * 90])
translate([x, (top_tube_y + bottom_tube_y) / 2,0])
spool_bracket_male_stl();
}
if(1)
if(0)
translate([0, 0, - spool_z])
spool_assembly();
else
if(0)
spool_holder_tall_brackets_stl();
else
spool_holder_brackets_stl();
spool_holder_brackets_stl();

View File

@@ -11,31 +11,56 @@ include <conf/config.scad>
include <positions.scad>
wall = 3;
clearance = 0.25;
boss = washer_diameter(M3_washer) + 1;
punch = 3;
base_screw_offset = fixing_block_width() / 2 + base_clearance - AL_tube_inset;
length = wall + base_screw_offset + 10;
width = tube_width(AL_square_tube) + 2 * wall + clearance;
function tube_cap_base_thicnkess() = 3 * layer_height;
function tube_jig_base_thicnkess() = wall;
function tube_cap_base_thickness() = 3 * layer_height;
function tube_jig_base_thickness() = wall;
module tube_jig_stl() {
module tube_jig(open) {
stl("tube_jig");
punch = 3;
clearance = 0.25;
h = tube_height(AL_square_tube);
w = tube_width(AL_square_tube);
W = w + 2 * wall + clearance;
base_screw_offset = fixing_block_width() / 2 + base_clearance - AL_tube_inset;
l = wall + base_screw_offset + 10;
translate([-wall, - W / 2, 0])
translate([-wall, - width / 2, 0])
difference() {
cube([l, W, h + tube_jig_base_thicnkess()]);
translate([wall, wall + clearance / 2, tube_jig_base_thicnkess()])
cube([l, w + clearance, h + tube_jig_base_thicnkess()]);
union() {
cube([length, width, h + tube_jig_base_thickness()]);
hull()
for(side = [-1, 1])
translate([length / 2, side * (width + boss) / 2 + width / 2, 0])
cylinder(r = boss / 2, h = wall);
}
translate([open ? -eta : wall, wall + clearance / 2, tube_jig_base_thickness()])
cube([length + 1, w + clearance, h + tube_jig_base_thickness()]);
translate([wall + base_screw_offset, W / 2, -1])
translate([wall + base_screw_offset, width / 2, -1])
poly_cylinder(r = punch / 2, h = h);
for(side = [-1, 1])
translate([length / 2, side * (width + boss) / 2 + width / 2, 0])
poly_cylinder(r = M3_clearance_radius, h = 100, center = true);
}
}
module base_tube() {
difference() {
translate([0, 0, -tube_height(AL_square_tube) / 2])
rotate([90, 0, 0])
square_tube(AL_square_tube, base_depth - 2 * AL_tube_inset);
for(end = [-1,1])
translate([0, end * (base_depth / 2 - fixing_block_width() / 2 - base_clearance), -tube_height(AL_square_tube)]) {
base_screw_hole();
cylinder(r = screw_head_radius(base_screw) + 0.5, h = tube_thickness(AL_square_tube) * 2 + 1, center = true);
}
}
}
module tube_cap_stl() {
stl("tube_cap");
w = tube_height(AL_square_tube);
@@ -43,7 +68,7 @@ module tube_cap_stl() {
t = tube_thickness(AL_square_tube);
clearance = 0.3;
base_thickness = tube_cap_base_thicnkess();
base_thickness = tube_cap_base_thickness();
w_outer = w - 1;
h_outer = h - 1;
@@ -66,6 +91,48 @@ module tube_cap_stl() {
}
}
tube_cap_stl();
translate([20, 0, 0])
tube_jig_stl();
module tube_jig_base() {
w = tube_width(AL_square_tube) + 2 * wall + clearance + 2 * boss + 2;
difference() {
sheet(DiBond, base_depth, w, [5,5,5,5]);
for(end = [-1,1]) {
translate([end * (base_depth / 2 - fixing_block_width() / 2 - base_clearance), 0, 0])
cylinder(r = punch / 2, h = 100, center = true);
for(side = [-1, 1])
translate([end * (base_depth / 2 - AL_tube_inset - length / 2 + wall), side * (width / 2 + boss / 2), 0])
cylinder(r = M3_clearance_radius, h = 100, center = true);
}
}
}
module tube_jig_dxf() projection(cut = true) tube_jig_base();
module tube_jig_assembly() {
translate([0, 0, -tube_height(AL_square_tube) - wall - sheet_thickness(DiBond) / 2])
rotate([0, 0, 90])
tube_jig_base();
base_tube();
for(end = [-1, 1])
translate([0, end * (base_depth / 2 - AL_tube_inset), -tube_height(AL_square_tube) - tube_jig_base_thickness() - eta])
rotate([0, 0, -90 * end])
color("lime") render()
tube_jig(end == -1);
}
module tube_jigs_stl() {
tube_jig(true);
translate([25, 0, 0])
tube_jig(false);
}
if(0)
tube_jig_dxf();
else
if(1)
tube_jig_assembly();
else
tube_jigs_stl();

View File

@@ -7,33 +7,51 @@
// For making heat shields to prevent corner warping, see http://hydraraptor.blogspot.co.uk/2010/09/some-corners-like-it-hot.html
//
shield_thickness = 1;
shield_base_thickness = 4;
shield_base_height = 5;
shield_base_thickness = 5;
shield_base_height = 3;
shield_clearance = 1;
module L(w,h,t) {
translate([-t,-t,0])
difference() {
cube([w,w,h]);
translate([t,t,-1]) cube([w,w,h+2]);
}
module shield_corner(w, h, r) {
linear_extrude(height = h, convexity = 5)
hull() {
intersection() {
translate([r, r])
circle(r);
square([r + 1,r + 1]);
}
translate([w - 1, 0])
square([1, w]);
translate([0, w - 1])
square([w, 1]);
}
}
module corner_shield(w,h) {
color([0,1,0])union() translate([-shield_clearance, -shield_clearance, 0]) {
L(w,h,shield_thickness);
L(w + shield_base_thickness - shield_thickness, shield_base_height, shield_base_thickness);
}
module L(w, h, t, r) {
translate([-t, -t, 0])
difference() {
shield_corner(w, h, r + t);
translate([t, t, -1]) shield_corner(w, h + 2, r);
}
}
module corner_shield(w, h, r) {
color([0,1,0])union() translate([-shield_clearance, -shield_clearance, 0]) {
L(w, h, shield_thickness, r + shield_clearance);
L(w + shield_base_thickness - shield_thickness, shield_base_height, shield_base_thickness, r + shield_clearance);
}
}
module side_shield(w,h) {
translate([-w/2, -shield_thickness, 0])
color([0,1,0]) union() {
cube([w, shield_thickness, h]);
translate([0,shield_thickness - shield_base_thickness, 0])
cube([w, shield_base_thickness, shield_base_height]);
}
translate([-w/2, -shield_thickness, 0])
color([0,1,0]) union() {
cube([w, shield_thickness, h]);
translate([0,shield_thickness - shield_base_thickness, 0])
cube([w, shield_base_thickness, shield_base_height]);
}
}
//corner_sheild(20, 15);
//corner_shield(20, 15, 7);

View File

@@ -125,12 +125,10 @@ module wades_block_stl() {
teardrop(r = extension_rad, h = extension + 1, center = true);
}
}
*translate([92,base_thickness + 1,-1])
rotate([0,0,45])
cube([10,9,30]); // chamfer on fillet
translate([-11,-1,30]) rotate([0,60,0]) cube([30, base_thickness + 2, 60]); // slope on base
translate([filament_x, 20, filament_z])
rotate([90,0,0])
teardrop(h = 70, r=4/2, center=true); // filament
@@ -179,7 +177,18 @@ module wades_block_stl() {
translate([motor_x - 40 + motor_leeway / 2 + 6, motor_y, -1])
cube([40, 32, 7]);
translate([-5,-1,-1]) cube([16,60,30]); // truncates tail
translate([-1,-1,-1]) cube([12,60,30]); // truncates tail
translate([11, 0, -1])
fillet(4, 30);
translate([11, motor_y - NEMA_big_hole(NEMA17), -1])
rotate([0, 0, -90])
fillet(4, 30);
translate([motor_x + motor_leeway / 2 + 6, height, -1])
rotate([0, 0, -90])
fillet(4, 30);
//
// hole for hobbed bolt
@@ -196,7 +205,7 @@ module wades_block_stl() {
//
translate([driven_x, driven_y, width - 7]) b608(8); // top bearing socket
translate([filament_x + 8, driven_y, filament_z - 4]) b608(8); // clearance for idler
translate([driven_x, driven_y, -1]) b608(8); // bottom bearing socket
translate([driven_x, driven_y, -1 + eta]) b608(8); // bottom bearing socket
//
// Hole for hot end
@@ -274,9 +283,14 @@ module wades_big_gear_stl() {
module wades_small_gear_stl() {
stl("wades_small_gear");
color(wades_small_gear_color)
color(wades_small_gear_color) difference() {
translate([-10, -10, 0])
import("../imported_stls/wades_gear.stl");
import("../imported_stls/wades_gear.stl", convexity = 10);
translate([0, 0, 4])
rotate([90, 0, -24 + 180])
teardrop_plus(r = M3_clearance_radius, h = 100);
}
}
module small_gear_assembly() {

View File

@@ -105,6 +105,7 @@ idler_back = idler_front + idler_depth;
idler_width = ceil(2 * (M4_nut_radius + wall));
mbracket_thickness = 4;
mbracket_corner = 7;
motor_angle = 45;
motor_w = ceil(min(max(sin(motor_angle) + cos(motor_angle)) * NEMA_width(X_motor), NEMA_radius(X_motor) * 2) + 1);
mbracket_width = motor_w + 2 * mbracket_thickness;
@@ -137,11 +138,12 @@ ribbon_nut_trap_depth = nut_trap_depth(ribbon_nut);
ribbon_pillar_depth = 12;
ribbon_pillar_thickness = wall + ribbon_nut_trap_depth;
ribbon_clamp_x = back - ribbon_pillar_depth;
ribbon_clamp_y = mbracket_front + washer_diameter(screw_washer(ribbon_screw)) / 2 + 2;
//ribbon_clamp_z = x_carriage_offset() + extruder_connector_height();
ribbon_clamp_y = mbracket_front + washer_diameter(screw_washer(ribbon_screw)) / 2 + mbracket_corner + eta;
ribbon_clamp_z = mbracket_height + ribbon_clamp_length(extruder_ways, ribbon_screw) / 2 - thickness / 2 + 0.5;
ribbon_pillar_width = nut_radius(ribbon_nut) * 2 + 2 * wall + 0.5;
ribbon_pillar_top = ribbon_clamp_z + ribbon_clamp_length(extruder_ways, ribbon_screw) / 2;
mbracket_rim_width = max(ribbon_pillar_depth + eta, 15 * NEMA_width(X_motor) / NEMA_width(NEMA17));
mbracket_rim_inner_rad = 5;
function anti_backlash_height() = 24 + thickness / 2;
anti_backlash_radius = Z_nut_radius + 0.2;
@@ -171,9 +173,15 @@ module x_end_bracket(motor_end, assembly = false){
//
// Anti-backlash nut holder
//
translate([-z_bar_offset(), 0, thickness / 2 - eta])
cylinder(r = anti_backlash_radius + anti_backlash_wall, h = anti_backlash_height() - thickness / 2, $fn = 6);
translate([-z_bar_offset(), 0, thickness / 2 - eta]) union() {
cylinder(r = anti_backlash_radius + anti_backlash_wall, h = anti_backlash_height() - thickness / 2 - eta, $fn = 6);
translate([0, -(bearing_width - 2 * wall + 1) / 2, 0])
cube([z_bar_offset() - bearing_depth + eta, bearing_width - 2 * wall + 1, anti_backlash_height() - thickness / 2]);
if(motor_end)
translate([back + z_bar_offset(), -(bearing_width - 2 * wall + 1) / 2, 0])
cube([-back - z_bar_offset(), bearing_width - 2 * wall + 1, mbracket_height - thickness - eta]);
}
//
// Webs from bearing holder
//
@@ -293,17 +301,26 @@ module x_end_bracket(motor_end, assembly = false){
union() {
translate([back - mbracket_width / 2 + eta, mbracket_centre, mbracket_height / 2 - thickness / 2]) {
difference() {
cube([mbracket_width, mbracket_depth, mbracket_height], center = true); // outside
rounded_rectangle([mbracket_width, mbracket_depth, mbracket_height], center = true, r = mbracket_corner); // outside
translate([0, 0, -mbracket_thickness])
difference() {
cube([mbracket_width - 2 * mbracket_thickness, // inside
mbracket_depth - 2 * mbracket_thickness, mbracket_height], center = true);
if(!assembly)
cube([mbracket_width - 30 + 4 * filament_width, // support tube
mbracket_depth - 30 + 4 * filament_width, mbracket_height + 1], center = true);
if(!assembly) union() {
rounded_rectangle([mbracket_width - 2 * mbracket_rim_width + 4 * filament_width, // support tube
mbracket_depth - 2 * mbracket_rim_width + 4 * filament_width, mbracket_height + 1],
r = mbracket_rim_inner_rad + 2 * filament_width);
translate([0, 0, - mbracket_height / 2 + mbracket_thickness + layer_height])
rounded_rectangle([mbracket_width - 2 * mbracket_rim_width + 8 * filament_width, // support base
mbracket_depth - 2 * mbracket_rim_width + 8 * filament_width,
layer_height * 2], r = mbracket_rim_inner_rad + 4 * filament_width);
}
}
translate([0, 0, (mbracket_height - mbracket_thickness) / 2 + layer_height])
cube([mbracket_width - 30, mbracket_depth - 30, true ? 100: mbracket_thickness], center = true); // open top
rounded_rectangle([mbracket_width - 2 * mbracket_rim_width,
mbracket_depth - 2 * mbracket_rim_width, 100], r = mbracket_rim_inner_rad); // open top
}
//
@@ -311,7 +328,7 @@ module x_end_bracket(motor_end, assembly = false){
//
translate([-mbracket_width / 2 + mbracket_thickness - eta, 0, -mbracket_height / 2])
rotate([90, 0, 0])
right_triangle(width = 4, height = 4, h = mbracket_depth - eta, center = true);
right_triangle(width = 4, height = 4, h = mbracket_depth - mbracket_thickness, center = true);
}
//
// ribbon clamp pillar
@@ -381,11 +398,8 @@ module x_end_bracket(motor_end, assembly = false){
for(z = NEMA_holes(X_motor))
rotate([0, motor_angle, 0])
translate([x,0,z])
rotate([90, -motor_angle, 0]) {
rotate([90, -motor_angle, 0])
teardrop_plus(r = M3_clearance_radius, h = 2 * mbracket_thickness + 1, center = true);
translate([0, 0, mbracket_thickness])
teardrop_plus(r = (washer_diameter(M3_washer) + 1) / 2, h = 2 * (mbracket_thickness - 3.999), center = true);
}
}
//
// ribbon clamp holes
@@ -558,7 +572,7 @@ module x_motor_bracket_stl() {
translate([0, 0, thickness / 2]) mirror ([1,0,0]) x_end_bracket(true);
for(side = [-1, 1])
translate([-back + mbracket_width, mbracket_centre + side * mbracket_depth / 2, 0])
rotate([0, 0, 135 + side * 45]) corner_shield(20, 20);
rotate([0, 0, 135 + side * 45]) corner_shield(20, mbracket_height - 1 - 2 * eta, mbracket_corner);
}
module x_idler_bracket_stl()
@@ -567,10 +581,30 @@ module x_idler_bracket_stl()
module x_ends_stl() {
x_motor_bracket_stl();
translate([-4, bearing_width / 2, 0])
translate([-5, bearing_width / 2, 0])
x_idler_bracket_stl();
}
module x_motor_bracket_x2_stl() {
translate([back - mbracket_width / 2 - 1, -mbracket_centre + mbracket_depth / 2 + 1, thickness / 2]) mirror ([1,0,0]) x_end_bracket(true);
translate([mbracket_width / 2 - 1, mbracket_depth + 1, 0])
rotate([0, 0, 180])
corner_shield(20, mbracket_height - 1 - 2 * eta, mbracket_corner);
translate([mbracket_width / 2 - back, mbracket_centre - mbracket_depth / 2 - 1, thickness / 2]) rotate([0, 0, 180]) mirror ([1,0,0]) x_end_bracket(true);
translate([-mbracket_width / 2, -mbracket_depth - 1, 0])
corner_shield(20, mbracket_height - 1 - 2 * eta, mbracket_corner);
}
module x_idler_bracket_x2_stl() {
for(a = [0, 180])
rotate([0, 0, a])
translate([-x_idler_offset() + 1, 0, 0])
x_idler_bracket_stl();
}
if(0)
x_ends_stl();
else

View File

@@ -17,7 +17,7 @@ nutty = cnc_sheets;
slot = nutty ? 0 : 2;
tab_length = bearing_clamp_tab + slot;
function bearing_mount_width(bearing) = bearing_holder_width(bearing) + 2 * tab_length;
function bearing_mount_width(bearing) = bearing_holder_width(bearing) + 2 * tab_length;
function bearing_mount_length(bearing) = bearing_holder_length(bearing);
module tab() {
@@ -46,30 +46,34 @@ module bearing_mount(bearing, height) {
endstop_w = bar_clamp_switch_x_offset() + microswitch_thickness() / 2 - bearing_holder_width(bearing) / 2;
endstop_d = 3;
endstop_h = 3; //height - bar_clamp_switch_z_offset() + microswitch_thickness() / 4;
endstop_h = 3;
endstop_inset = bearing_holder_width(bearing) / 2 - bearing_radius(bearing);
rad = 7;
endstop_root_inset = (1 - sqrt(0.5)) * rad;
stl("y_bearing_mount");
color(y_bearing_mount_color) union() {
bearing_holder(bearing, height);
bearing_holder(bearing, height, rad = rad);
for(end = [-1, 1])
translate([end * (bearing_holder_width(bearing) / 2 - eta), -end * (bearing_holder_length(bearing) - bearing_clamp_tab)/2, -height])
difference() {
rotate([0, 0, 90 - end * 90])
tab();
if(nutty)
translate([end * (tab_length / 2 + nut_offset), 0, bearing_clamp_tab_height + nut_trap_depth(nut)])
nut_trap(screw_clearance_radius, nut_radius, nut_trap_depth(nut));
}
hull() {
translate([-(bearing_holder_width(bearing) / 2 + endstop_w / 2 - eta),
translate([-(bearing_holder_width(bearing) / 2 + endstop_w / 2 - endstop_inset / 2 - eta),
-(bearing_holder_length(bearing) / 2 - endstop_d / 2),
-bar_clamp_switch_z_offset()])
cube([endstop_w, endstop_d, endstop_h], center = true);
cube([endstop_w + endstop_inset, endstop_d, endstop_h], center = true);
translate([-(bearing_holder_width(bearing) / 2 - eta),
-(bearing_holder_length(bearing) / 2 - endstop_d / 2),
- height + 3])
cube([eta, endstop_d, eta], center = true);
translate([-(bearing_holder_width(bearing) / 2 - endstop_root_inset - eta),
-(bearing_holder_length(bearing) / 2 - endstop_root_inset - eta),
- height + bearing_clamp_tab_height])
cube(1);
}
}
}
@@ -115,7 +119,7 @@ module y_bearing_mounts_stl()
translate([-(bearing_mount_width(Y_bearings) - tab_length + 2), 0, 0]) y_bearing_mount_stl();
}
if(1)
if(0)
y_bearing_assembly(Y_bearing_holder_height);
else
y_bearing_mounts_stl();

View File

@@ -61,6 +61,11 @@ module y_motor_bracket() {
for(y = NEMA_holes(Y_motor))
translate([x,y,0])
poly_cylinder(r = M3_clearance_radius, h = 2 * thickness + 1, center = true);
for(side = [-1,1])
translate([side * (width / 2 - tab), height / 2, 0])
rotate([0, 0, -135 - side *45])
fillet(r = 3, h = 100);
//
// mounting screw holes
//
@@ -104,6 +109,12 @@ module y_motor_assembly() {
module y_motor_bracket_stl() translate([0, 0, thickness]) rotate([0,180,0]) y_motor_bracket();
module y_motor_bracket_x2_stl()
for(i = [0:1])
translate([0, -(y_motor_bracket_height() + 2) * i, 0])
rotate([0, 0, i * 180])
y_motor_bracket_stl();
if(1)
y_motor_assembly();
else

View File

@@ -182,11 +182,23 @@ module z_motor_bracket_lhs_stl() z_motor_bracket(gantry_setback,
module z_motor_bracket_rhs_stl() mirror([1,0,0]) z_motor_bracket(gantry_setback, true);
module z_motor_brackets_stl() {
translate([length + 2, 0, 0]) z_motor_bracket_lhs_stl();
z_motor_bracket_rhs_stl();
translate([ length / 2 + 1, 0, 0]) z_motor_bracket_lhs_stl();
translate([-length / 2 - 1, 0, 0]) z_motor_bracket_rhs_stl();
}
module z_motor_bracketsX2_stl() {
translate([0, -gantry_setback - 1, 0])
z_motor_brackets_stl();
rotate([0, 0, 180])
translate([0, -gantry_setback - 1, 0])
z_motor_brackets_stl();
}
if(0)
z_motor_brackets_stl();
if(1)
z_motor_brackets_stl();
else
z_motor_bracketsX2_stl();
else
z_motor_assembly(gantry_setback, false);