Commit | Line | Data |
---|---|---|
2159eed1 VAH |
1 | // PRUSA iteration3 |
2 | // Z axis | |
3 | // GNU GPL v3 | |
4 | // Josef Průša <josefprusa@me.com> | |
5 | // Václav 'ax' Hůla <axtheb@gmail.com> | |
6 | // http://www.reprap.org/wiki/Prusa_Mendel | |
8e93419f | 7 | // http://github.com/josefprusa/Prusa3 |
2159eed1 | 8 | |
65a72cd5 T |
9 | // ThingDoc entries |
10 | /** | |
11 | * @id zMotorHolder | |
12 | * @name Z Axis Motor Holder | |
13 | * @category Printed | |
14 | */ | |
15 | ||
16 | /** | |
17 | * @id zRodHolder | |
18 | * @name Z Axis Rod Holder | |
19 | * @category Printed | |
20 | */ | |
21 | ||
3506b70b VAH |
22 | include <configuration.scad> |
23 | ||
cec35279 | 24 | module zmotorholder(thickness=(frame_type == frame_single ? 38 : 23), bottom_thickness=5){ |
51dbb82b CE |
25 | position_y = board_to_xz_distance + zaxis_delta_y - zmotor_delta_y; |
26 | position_x = board_to_xz_distance - zaxis_delta_x + zmotor_delta_x; | |
3506b70b VAH |
27 | difference(){ |
28 | union(){ | |
29 | // Motor holding part | |
30 | difference(){ | |
31 | union(){ | |
51dbb82b CE |
32 | 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); |
33 | translate([position_y, position_x, 0]) { | |
cec35279 | 34 | nema17(places=[0, 1, 1, 1], h=bottom_thickness + layer_height, $fn=23, shadow=layer_height + 2); |
3506b70b VAH |
35 | } |
36 | } | |
846248f3 | 37 | // remove any interfering walls |
51dbb82b CE |
38 | translate([position_y, position_x, layer_height + 2 + 21 +3]) { |
39 | #cube([43 + zmotor_delta_x + zaxis_delta_x,43,42], center = true); | |
846248f3 | 40 | } |
d3618a65 | 41 | |
3506b70b | 42 | // motor screw holes |
cec35279 CE |
43 | |
44 | // FIXME: y = board_to_xz distance looks supicious -- | |
45 | // the smooth rod is offset by a fixed amount so why | |
46 | // would the motor mount be moved in both directions | |
47 | // instead of just away from the frame? X-axis does | |
48 | // not use this to offset the leadscrew hole either. | |
51dbb82b | 49 | translate([position_y, position_x, thickness]) { |
5e8013bd | 50 | mirror([0, 0, 1]) translate([0, 0, thickness-8]) |
f65db3cb | 51 | nema17(places=[0, 1, 1, 1], holes=true, h=bottom_thickness + 1, $fn=small_hole_segments); |
854f95f0 | 52 | //shadow=-6 + layer_height); |
3506b70b VAH |
53 | } |
54 | } | |
55 | } | |
56 | } | |
d3618a65 | 57 | } |
3506b70b VAH |
58 | |
59 | ||
cec35279 | 60 | 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){ |
5cae2970 | 61 | holder_inner_r = 9; |
0f6ec51a | 62 | holder_inner_r2 = 2; |
846248f3 | 63 | smooth_rod_insert_radius = bushing_z[0] + 5 * single_wall_width; |
3506b70b VAH |
64 | difference(){ |
65 | union(){ | |
3506b70b | 66 | difference(){ |
cec35279 | 67 | union() { |
3506b70b | 68 | //piece along the flat side of a board |
cec35279 CE |
69 | cube_fillet([bottom_x, ylen, bottom_thickness], vertical=[8, 3, 0, 0]); |
70 | if (frame_type == frame_alu) { | |
71 | top_radius = am_top ? thickness : thickness / 3; | |
846248f3 | 72 | cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [top_radius, 0, 0, 5]); |
cec35279 CE |
73 | |
74 | if (am_top) { | |
75 | // rear bracket | |
76 | translate ([-board_thickness - 5, 0, 0]) | |
77 | cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [top_radius, 5, 0, 0]); | |
78 | translate ([-board_thickness, 5, 0]) | |
79 | cube ([board_thickness, ylen - 6, bottom_thickness/2]); | |
80 | } | |
81 | } | |
82 | else { | |
83 | cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [thickness / 1.7, 0, 0, 5]); | |
84 | } | |
85 | ||
86 | //hole for Z axis is thru this | |
846248f3 | 87 | cube_fillet([xlen + zaxis_delta_x, bottom_y, bottom_thickness], vertical=[3, 0, 0, 3]); |
cec35279 | 88 | translate([bottom_x, bottom_y, 0]) { |
5cae2970 VAH |
89 | //large fillet that makes it stiffer by lot. Thanks to Marcus Wolschon |
90 | difference(){ | |
0f6ec51a | 91 | cube([holder_inner_r, holder_inner_r, bottom_thickness]); |
5cae2970 VAH |
92 | translate([holder_inner_r, holder_inner_r, -0.5]) |
93 | cylinder(r=holder_inner_r, h=bottom_thickness + 1); | |
94 | } | |
95 | } | |
cec35279 CE |
96 | if (frame_type != frame_alu) { |
97 | translate([5, 5, 0]) { | |
98 | difference(){ | |
99 | cube([holder_inner_r2, holder_inner_r2, thickness - 5.5]); | |
100 | translate([holder_inner_r2, holder_inner_r2, -0.5]) | |
101 | cylinder(r=holder_inner_r2, h=thickness + 1, $fn=20); | |
102 | } | |
103 | } | |
0f6ec51a | 104 | } |
3506b70b | 105 | //piece along cut side of the board |
cec35279 CE |
106 | if (frame_type == frame_box) { |
107 | translate([-board_thickness, 0, 0]) | |
108 | cube_fillet([board_thickness + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); | |
109 | } else if (frame_type == frame_alu) { | |
846248f3 | 110 | // split piece in front of and behind into separate pieces |
cec35279 | 111 | translate([-board_thickness, 0, 0]) { |
846248f3 CE |
112 | cube_fillet([board_thickness, 5.0, thickness], vertical = [0, 0, 0, 0], top = [0, 0, 0, 0]); |
113 | } | |
114 | ||
51dbb82b | 115 | 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]); |
846248f3 CE |
116 | |
117 | // extra support along edge of smooth rod hole | |
118 | radius_diff = smooth_rod_insert_radius - bushing_z[0]; | |
119 | hull () { | |
120 | translate([-board_thickness/3, -zaxis_delta_x/3, 0]) { | |
121 | 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]); | |
122 | } | |
123 | translate([board_to_xz_distance/2, -zaxis_delta_x + radius_diff/6, 0]) { | |
124 | 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]); | |
125 | } | |
cec35279 | 126 | } |
5e8013bd | 127 | } else { |
eb40b77a | 128 | translate([-board_thickness/2, 0, 0]) |
0f6ec51a | 129 | cube_fillet([board_thickness/2 + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); |
5e8013bd VAH |
130 | } |
131 | //smooth rod insert | |
846248f3 | 132 | translate([board_to_xz_distance - z_delta + zaxis_delta_y, 9 - zaxis_delta_x, 0]) |
1ebfb5d4 | 133 | cylinder(h=bottom_thickness * (am_top ? 1.75 : 1.75), r=smooth_rod_insert_radius); |
3506b70b VAH |
134 | } |
135 | //smooth rod hole | |
1ebfb5d4 | 136 | #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); |
3506b70b | 137 | //inside rouned corner |
cec35279 CE |
138 | if (frame_type != frame_alu) { |
139 | translate([0, 5, -1]) cylinder(r=0.8, h=100, $fn=8); | |
140 | } | |
141 | ||
5e8013bd | 142 | //front screws |
cec35279 CE |
143 | if (frame_type == frame_single) { |
144 | //single plate has both screws on front | |
145 | translate([16, 35, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { | |
146 | plate_screw(); | |
147 | } | |
148 | translate([16, 15, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { | |
149 | plate_screw(); | |
150 | } | |
151 | //motor mount has third screw | |
152 | translate([16, 25, bottom_thickness + 4.5 + zdelta + 20]) rotate([0, -90, 0]) { | |
153 | plate_screw(); | |
154 | } | |
155 | } else if (frame_type == frame_alu) { | |
156 | // three screws on front | |
04ddc678 CE |
157 | translate([18, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw(); |
158 | translate([18, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw(); | |
159 | translate([18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0]) | |
cec35279 CE |
160 | plate_screw(); |
161 | ||
162 | // motor mount screw for opposite extrusion | |
04ddc678 | 163 | translate([18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0]) |
cec35279 CE |
164 | plate_screw(); |
165 | ||
166 | // back plate | |
04ddc678 | 167 | translate([-board_thickness-18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0]) |
cec35279 | 168 | plate_screw(); |
04ddc678 | 169 | translate([-board_thickness-18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0]) |
cec35279 | 170 | plate_screw(); |
04ddc678 CE |
171 | translate([-board_thickness-18, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw(); |
172 | #translate([-board_thickness-18, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw(); | |
cec35279 CE |
173 | |
174 | //side screws | |
04ddc678 CE |
175 | #translate([-board_thickness/2, -13, thickness-board_thickness/2]) rotate([-90, 0, 0]) plate_screw(); |
176 | translate([-board_thickness/2, -13, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([-90, 0, 0]) plate_screw(); | |
cec35279 CE |
177 | } else if (frame_type == frame_box) { |
178 | translate([16, 30, bottom_thickness+4]) rotate([0, -90, 0]) { | |
179 | plate_screw(); | |
180 | } | |
5e8013bd | 181 | //side screw |
0f6ec51a | 182 | translate([-board_thickness/2, -11, thickness/2]) rotate([-90, 0, 0]) plate_screw(); |
b32bbd0f | 183 | } |
3506b70b VAH |
184 | } |
185 | } | |
186 | } | |
d3618a65 | 187 | } |
1422dcbd CE |
188 | |
189 | if (frame_type == frame_alu) { | |
190 | // 2020 aluminum frame parts are larger | |
191 | translate([10, -50, 0]) zmotorholder(thickness=55); | |
192 | translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder(thickness=55); | |
193 | translate([120, 30, 0]) rotate([0,0,90]) zrodholder(thickness=board_thickness * 2 + 5, ylen = 50); | |
194 | translate([120, -30, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(thickness=board_thickness * 2 + 5, ylen = 50); | |
195 | } | |
196 | else { | |
197 | translate([10, -50, 0]) zmotorholder(); | |
198 | translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder(); | |
199 | translate([67, 14, 0]) rotate([0,0,90]) zrodholder(); | |
200 | translate([77, -14, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(); | |
201 | } |