X-Git-Url: https://git.hcoop.net/clinton/prusa3.git/blobdiff_plain/89c2bbf0a624fc13da6d22d8a82b5a8b84d44965..7b8e1e544acfb2e72b317ce27ca5523e915f9fe8:/box_frame/z-axis.scad diff --git a/box_frame/z-axis.scad b/box_frame/z-axis.scad dissimilarity index 70% index 99b3c32..45dac09 100644 --- a/box_frame/z-axis.scad +++ b/box_frame/z-axis.scad @@ -1,107 +1,229 @@ -// PRUSA iteration3 -// Z axis -// GNU GPL v3 -// Josef Průša -// Václav 'ax' Hůla -// http://www.reprap.org/wiki/Prusa_Mendel -// http://github.com/prusajr/PrusaMendel - -include - -module zmotorholder(thickness=(i_am_box == 0 ? 38 : 23), bottom_thickness=5){ - difference(){ - union(){ - // Motor holding part - difference(){ - union(){ - zrodholder(thickness=thickness, xlen=45, ylen=44, zdelta=((i_want_to_use_single_plate_dxf_and_make_my_z_weaker == 0) ? 0 : 5)); - translate([board_to_xz_distance, board_to_xz_distance, 0]) { - nema17(places=[0, 1, 1, 1], h=bottom_thickness + layer_height, $fn=23, shadow=layer_height + 2); - } - } - - // motor screw holes - translate([board_to_xz_distance, board_to_xz_distance, thickness]) { - mirror([0, 0, 1]) translate([0, 0, thickness-8]) - nema17(places=[0, 1, 1, 1], holes=true, h=bottom_thickness + 1); - //shadow=-6 + layer_height); - } - } - } - } -} - - -module zrodholder(thickness=(i_am_box == 0 ? 14 : 15), bottom_thickness=5, ylen=44, xlen=34, zdelta=0){ - holder_inner_r = 9; - holder_inner_r2 = 2; - difference(){ - union(){ - difference(){ - union(){ - //piece along the flat side of a board - cube_fillet([14, ylen, bottom_thickness], vertical=[8, 3, 0, 0]); - cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [thickness / 1.7, 0, 0, 5]); - //hole for Z axis is thru this - cube_fillet([xlen, 14, bottom_thickness], vertical=[3, 0, 0, 3]); - translate([14, 14, 0]) { - //large fillet that makes it stiffer by lot. Thanks to Marcus Wolschon - difference(){ - cube([holder_inner_r, holder_inner_r, bottom_thickness]); - translate([holder_inner_r, holder_inner_r, -0.5]) - cylinder(r=holder_inner_r, h=bottom_thickness + 1); - } - } - translate([5, 5, 0]) { - difference(){ - cube([holder_inner_r2, holder_inner_r2, thickness - 5.5]); - translate([holder_inner_r2, holder_inner_r2, -0.5]) - cylinder(r=holder_inner_r2, h=thickness + 1, $fn=20); - } - } - //piece along cut side of the board - if (i_am_box == 1) { - translate([-board_thickness, 0, 0]) - cube_fillet([board_thickness + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); - } else { - translate([-board_thickness/2, 0, 0]) - cube_fillet([board_thickness/2 + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); - } - //smooth rod insert - translate([board_to_xz_distance - z_delta, 9, 0]) - cylinder(h=bottom_thickness / 2, r=(bushing_z[0] + 5 * single_wall_width)); - } - //smooth rod hole - translate([board_to_xz_distance - z_delta, 9, -1]) cylinder_poly(h=board_thickness+20, r=bushing_z[0] + single_wall_width / 4); - //inside rouned corner - translate([0, 5, -1]) cylinder(r=0.8, h=100, $fn=8); - //side screw - //translate([-board_thickness/2, 0, thickness/2-1.5]) rotate([-90, 0, 0]) screw(h=30, r_head=4); - //front screws - if (i_am_box != 1) { - //single plate has both screws on front - translate([16, 35, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { - plate_screw(); - } - translate([16, 15, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { - plate_screw(); - } - //motor mount has third screw - translate([16, 25, bottom_thickness + 4.5 + zdelta + 20]) rotate([0, -90, 0]) { - plate_screw(); - } - } else { - translate([16, 30, bottom_thickness+4]) rotate([0, -90, 0]) { - plate_screw(); - } - //side screw - translate([-board_thickness/2, -11, thickness/2]) rotate([-90, 0, 0]) plate_screw(); - } - } - } - } -} -translate([10, -50, 0]) zmotorholder(); -translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder(); -translate([67, 14, 0]) rotate([0,0,90]) zrodholder(); -translate([77, -14, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(); +// PRUSA iteration3 +// Z axis +// GNU GPL v3 +// Josef Průša +// Václav 'ax' Hůla +// http://www.reprap.org/wiki/Prusa_Mendel +// http://github.com/josefprusa/Prusa3 + +// ThingDoc entries +/** + * @id zMotorHolder + * @name Z Axis Motor Holder + * @category Printed + */ + +/** + * @id zRodHolder + * @name Z Axis Rod Holder + * @category Printed + */ + +include + +module zmotorholder(thickness=(frame_type == frame_single ? 38 : 23), bottom_thickness=5){ + position_y = board_to_xz_distance + zaxis_delta_y - zmotor_delta_y; + position_x = board_to_xz_distance - zaxis_delta_x + zmotor_delta_x; + difference(){ + union(){ + // Motor holding part + difference(){ + union(){ + zrodholder(thickness=thickness, xlen=45 + zmotor_delta_x, ylen=44 - zmotor_delta_y, zdelta=((i_want_to_use_single_plate_dxf_and_make_my_z_weaker == 0) ? 0 : 5), bottom_x = 14 + zaxis_delta_x + zmotor_delta_x, am_top=0); + translate([position_y, position_x, 0]) { + nema17(places=[0, 1, 1, 1], h=bottom_thickness + layer_height, $fn=23, shadow=layer_height + 2); + } + } + // remove any interfering walls + translate([position_y, position_x, layer_height + 2 + 21 +3]) { + #cube([43 + zmotor_delta_x + zaxis_delta_x,43,42], center = true); + } + + // motor screw holes + + // FIXME: y = board_to_xz distance looks supicious -- + // the smooth rod is offset by a fixed amount so why + // would the motor mount be moved in both directions + // instead of just away from the frame? X-axis does + // not use this to offset the leadscrew hole either. + translate([position_y, position_x, thickness]) { + mirror([0, 0, 1]) translate([0, 0, thickness-8]) + nema17(places=[0, 1, 1, 1], holes=true, h=bottom_thickness + 1, $fn=small_hole_segments); + //shadow=-6 + layer_height); + } + } + } + } +} + + +module zrodholder(thickness=(frame_type == frame_single ? 14 : 15), bottom_thickness=5, ylen=44, xlen=34, zdelta=0, bottom_y=14, bottom_x=14, am_top=1){ + holder_inner_r = 9; + holder_inner_r2 = 2; + smooth_rod_insert_radius = bushing_z[0] + 5 * single_wall_width; + difference(){ + union(){ + difference(){ + union() { + //piece along the flat side of a board + cube_fillet([bottom_x, ylen, bottom_thickness], vertical=[8, 3, 0, 0]); + if (frame_type == frame_alu) { + top_radius = am_top ? thickness : thickness / 3; + cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [top_radius, 0, 0, 5]); + + if (am_top) { + // rear bracket + translate ([-board_thickness - 5, 0, 0]) + cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [top_radius, 5, 0, 0]); + translate ([-board_thickness, 5, 0]) + cube ([board_thickness, ylen - 6, bottom_thickness/2]); + } + } + else { + cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [thickness / 1.7, 0, 0, 5]); + } + + //hole for Z axis is thru this + cube_fillet([xlen + zaxis_delta_x, bottom_y, bottom_thickness], vertical=[3, 0, 0, 3]); + if (bottom_x < board_to_xz_distance - z_delta + zaxis_delta_y) { + translate([bottom_x, bottom_y, 0]) { + //large fillet that makes it stiffer by lot. Thanks to Marcus Wolschon + difference(){ + cube([holder_inner_r, holder_inner_r, bottom_thickness]); + translate([holder_inner_r, holder_inner_r, -0.5]) + cylinder(r=holder_inner_r, h=bottom_thickness + 1); + } + } + } + if (frame_type != frame_alu) { + translate([5, 5, 0]) { + difference(){ + cube([holder_inner_r2, holder_inner_r2, thickness - 5.5]); + translate([holder_inner_r2, holder_inner_r2, -0.5]) + cylinder(r=holder_inner_r2, h=thickness + 1, $fn=20); + } + } + } + // leadscrew bearing hole is cut from this + if (am_top) { + lead_bearing_y = board_to_xz_distance + zaxis_delta_y - zmotor_delta_y; + lead_bearing_x = board_to_xz_distance - zaxis_delta_x + zmotor_delta_x; + translate ([lead_bearing_y, lead_bearing_x, 0]) cylinder (d = bearing_608[0] + 1 + 2, h = bearing_608[2] + layer_height*4); + } + //piece along cut side of the board + if (frame_type == frame_box) { + translate([-board_thickness, 0, 0]) + cube_fillet([board_thickness + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); + } else if (frame_type == frame_alu) { + // split piece in front of and behind into separate pieces + translate([-board_thickness, 0, 0]) { + cube_fillet([board_thickness, 5.0, thickness], vertical = [0, 0, 0, 0], top = [0, 0, 0, 0]); + } + + cube_fillet([am_top ? board_to_xz_distance + zaxis_delta_y - smooth_rod_insert_radius : xlen + zaxis_delta_y , 5.0, thickness], vertical = [2, 0, 0, 0], top = [0, 0, 0, thickness]); + + // extra support along edge of smooth rod hole + radius_diff = smooth_rod_insert_radius - bushing_z[0]; + hull () { + translate([-board_thickness/3, -zaxis_delta_x/3, 0]) { + cube_fillet([board_thickness/3 + board_to_xz_distance + zaxis_delta_y - bushing_z[0] , zaxis_delta_x/3 , thickness/2], vertical = [2, 0, 4, 0], top = [0, 0, 4, thickness/2]); + } + translate([board_to_xz_distance/2, -zaxis_delta_x + radius_diff/6, 0]) { + cube_fillet([board_to_xz_distance/2 + zaxis_delta_y + smooth_rod_insert_radius*0.75, radius_diff/3 , bottom_thickness*2], vertical = [2, 0, 4, bushing_z[0] * smooth_rod_insert_radius/bushing_z[0]], top = [0, 0, 2, thickness/4]); + } + } + } else { + translate([-board_thickness/2, 0, 0]) + cube_fillet([board_thickness/2 + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); + } + //smooth rod insert + translate([board_to_xz_distance - z_delta + zaxis_delta_y, 9 - zaxis_delta_x, 0]) + cylinder(h=bottom_thickness * (am_top ? 1.75 : 1.75), r=smooth_rod_insert_radius); + } + + // === difference === + + //smooth rod hole + #translate([board_to_xz_distance - z_delta + zaxis_delta_y, 9 - zaxis_delta_x, -1]) cylinder(h=am_top ? thickness+20 : bottom_thickness, r=bushing_z[0] + single_wall_width / 4); + //inside rouned corner + if (frame_type != frame_alu) { + translate([0, 5, -1]) cylinder(r=0.8, h=100, $fn=8); + } + + // leadscrew hole + if (am_top) { + lead_bearing_y = board_to_xz_distance + zaxis_delta_y - zmotor_delta_y; + lead_bearing_x = board_to_xz_distance - zaxis_delta_x + zmotor_delta_x; + translate ([lead_bearing_y, lead_bearing_x, 0]) { + difference () { + union () { + translate ([0, 0, 1]) cylinder (d = 10.8, h = bearing_608[2]*2); + translate ([0, 0, -1]) cylinder (d = 23, h = bearing_608[2]+1); + } + #translate ([0, 0, bearing_608[2]-layer_height]) cylinder (d = 23, h = layer_height); + } + } + } + + //front screws + if (frame_type == frame_single) { + //single plate has both screws on front + translate([16, 35, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { + plate_screw(); + } + translate([16, 15, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { + plate_screw(); + } + //motor mount has third screw + translate([16, 25, bottom_thickness + 4.5 + zdelta + 20]) rotate([0, -90, 0]) { + plate_screw(); + } + } else if (frame_type == frame_alu) { + // three screws on front + translate([18, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw(); + translate([18, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw(); + translate([18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0]) + plate_screw(); + + // motor mount screw for opposite extrusion + translate([18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0]) + plate_screw(); + + // back plate + translate([-board_thickness-18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0]) + plate_screw(); + translate([-board_thickness-18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0]) + plate_screw(); + translate([-board_thickness-18, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw(); + #translate([-board_thickness-18, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw(); + + //side screws + #translate([-board_thickness/2, -13, thickness-board_thickness/2]) rotate([-90, 0, 0]) plate_screw(); + translate([-board_thickness/2, -13, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([-90, 0, 0]) plate_screw(); + } else if (frame_type == frame_box) { + translate([16, 30, bottom_thickness+4]) rotate([0, -90, 0]) { + plate_screw(); + } + //side screw + translate([-board_thickness/2, -11, thickness/2]) rotate([-90, 0, 0]) plate_screw(); + } + } + } + } +} + +if (frame_type == frame_alu) { + // 2020 aluminum frame parts are larger + translate([0, -60, 0]) zmotorholder(thickness=55, bottom_thickness=6); + translate([0, 60, 0]) mirror([0, 1, 0]) zmotorholder(thickness=55, bottom_thickness=6); + + translate([110 + board_thickness, board_thickness+10, 0]) rotate([0,0,90]) zrodholder(thickness=board_thickness * 2 + 5, ylen = board_thickness * 2 + 10, bottom_x=48, bottom_thickness=6); + translate([110 + board_thickness, -(board_thickness+10), 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(thickness=board_thickness * 2 + 5, ylen = board_thickness * 2 + 10, bottom_x=48, bottom_thickness=6); + +} +else { + translate([10, -50, 0]) zmotorholder(); + translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder(); + translate([67, 14, 0]) rotate([0,0,90]) zrodholder(); + translate([77, -14, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(); +}