z-axis: add leadscrew constraint on top holders
[clinton/prusa3.git] / box_frame / z-axis.scad
index 363ce04..bd1861e 100644 (file)
@@ -85,14 +85,16 @@ module zrodholder(thickness=(frame_type == frame_single ? 14 : 15), bottom_thick
 
                    //hole for Z axis is thru this
                     cube_fillet([xlen + zaxis_delta_x, bottom_y, bottom_thickness], vertical=[3, 0, 0, 3]);
-                    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 (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(){
@@ -102,6 +104,12 @@ module zrodholder(thickness=(frame_type == frame_single ? 14 : 15), bottom_thick
                              }
                         }
                     }
+                   // 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])
@@ -130,15 +138,33 @@ module zrodholder(thickness=(frame_type == frame_single ? 14 : 15), bottom_thick
                     }
                     //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.0), r=smooth_rod_insert_radius);
+                        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=board_thickness+20, r=bushing_z[0] + single_wall_width / 4);
+                #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
@@ -154,26 +180,26 @@ module zrodholder(thickness=(frame_type == frame_single ? 14 : 15), bottom_thick
                     }
                 } else if (frame_type == frame_alu) {
                     // three screws on front
-                    translate([16, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw();
-                    translate([16, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw();
-                    translate([16, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0])
+                    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([16, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0])
+                    translate([18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0])
                          plate_screw();
 
                     // back plate
-                    translate([-board_thickness-17, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0])
+                    translate([-board_thickness-18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0])
                          plate_screw();
-                    translate([-board_thickness-17, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0])
+                    translate([-board_thickness-18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0])
                          plate_screw();
-                    translate([-board_thickness-17, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw();
-                    translate([-board_thickness-17, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) 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, -11, thickness-board_thickness/2]) rotate([-90, 0, 0]) plate_screw();
-                    translate([-board_thickness/2, -11, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([-90, 0, 0]) plate_screw();
+                    #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();
@@ -185,7 +211,17 @@ module zrodholder(thickness=(frame_type == frame_single ? 14 : 15), bottom_thick
         }
     }
 }
-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();
+
+if (frame_type == frame_alu) {
+     // 2020 aluminum frame parts are larger
+     translate([10, -50, 0]) zmotorholder(thickness=55);
+     translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder(thickness=55);
+     translate([120, 30, 0]) rotate([0,0,90]) zrodholder(thickness=board_thickness * 2 + 5, ylen = 50);
+     translate([120, -30, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(thickness=board_thickness * 2 + 5, ylen = 50);
+}
+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();
+}