* @name Z Axis Motor Holder
* @category Printed
*/
-
+
/**
* @id zRodHolder
* @name Z Axis Rod Holder
* @category Printed
*/
-
+
+// todo
+
+// - fix motor holder wall removal so it is sensible and actually
+// removes the right thing
+// - fix changing board_thickness, add way to specify # of bolts in
+// side of frame (assume even spacing for now)
+
include <configuration.scad>
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;
+ 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);
+ zrodholder(thickness=thickness, xlen=45 + zmotor_delta_x + zaxis_delta_x, ylen=48 + 5 + zmotor_delta_y + zaxis_delta_y, zdelta=((i_want_to_use_single_plate_dxf_and_make_my_z_weaker == 0) ? 0 : 5), bottom_x = 50 + zaxis_delta_x + zmotor_delta_x, bottom_y = 15 + zmotor_delta_y + zaxis_delta_y, am_top=0, bottom_thickness=bottom_thickness);
+ translate([position_x, position_y, 0]) {
+ nema17(places=[1, 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);
+ translate([position_x, position_y, layer_height + 2 + 21 +3]) {
+ cube([43 + zmotor_delta_x + zaxis_delta_x,43,42], center = true);
+ }
+
+ // motor rotor clearance
+ translate([position_x, position_y, 0]) {
+ cylinder(r=11,h=20, center = true);
}
// motor screw holes
// 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]) {
+ translate([position_x, position_y, 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);
+ #nema17(places=[1, 1, 1, 1], holes=true, h=bottom_thickness + 1, $fn=small_hole_segments);
//shadow=-6 + layer_height);
}
}
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]);
+ cube_fillet([5, ylen, thickness], vertical=[0, 0, 0, 0], top = [top_radius, 0, 0, 0]);
- if (am_top) {
+ // FIXME: make rear/top bit optional, but don't remove entirely
+ // (printer seems to make less noise with the rear bit)
+ %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]);
+ cube_fillet([5, ylen, thickness], vertical=[0, 0, 0, 0], top = [top_radius, 0, 0, 0]);
translate ([-board_thickness, 5, 0])
cube ([board_thickness, ylen - 6, bottom_thickness/2]);
}
//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) {
+ if (bottom_x < board_to_xz_distance - z_delta + zaxis_delta_x) {
translate([bottom_x, bottom_y, 0]) {
//large fillet that makes it stiffer by lot. Thanks to Marcus Wolschon
difference(){
}
}
}
+ // 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_x, lead_bearing_y, 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]);
- }
+ side_thickness = 5.0;// - zaxis_delta_y;
+
+ translate ([0, 0 /* zaxis_delta_y */, 0]) {
+ // back
+ translate([-board_thickness, 0, 0]) {
+ cube_fillet([board_thickness, side_thickness, 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]);
+ // front
+ //cube_fillet([am_top ? board_to_xz_distance + zaxis_delta_x - smooth_rod_insert_radius : xlen + zaxis_delta_x , side_thickness, thickness], vertical = [2, 0, 0, 0], top = [0, 0, 0, thickness]);
+ cube_fillet([am_top ? board_to_xz_distance + zaxis_delta_x - smooth_rod_insert_radius : xlen , side_thickness, thickness / (am_top ? 1 : 1.5)], vertical = [2, 0, 0, 0], top = [0, 0, 0, thickness]);
+
+ // extra support for motor
+ if (!am_top) {
+ translate ([0, ylen - side_thickness, 0]) cube_fillet([xlen/* board_to_xz_distance + zaxis_delta_x - smooth_rod_insert_radius */ , side_thickness, thickness/1.5], 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_thickness/3, -zaxis_delta_y/3, 0]) {
+ cube_fillet([board_thickness/3 + board_to_xz_distance + zaxis_delta_x - bushing_z[0] , -zaxis_delta_y/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]);
+ cube_fillet([board_to_xz_distance/2 + zaxis_delta_x + 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 {
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])
+ translate([board_to_xz_distance - z_delta + zaxis_delta_x, 9 + zaxis_delta_y, 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);
+ #translate([board_to_xz_distance - z_delta + zaxis_delta_x, 9 + zaxis_delta_y, -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_x, lead_bearing_y, 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*2]) cylinder (d = 23 - single_wall_width/2, h = layer_height);
+ }
+ }
+ }
+
//front screws
if (frame_type == frame_single) {
//single plate has both screws on front
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);
+ 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();