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 | */ | |
1fbe5b71 | 15 | |
65a72cd5 T |
16 | /** |
17 | * @id zRodHolder | |
18 | * @name Z Axis Rod Holder | |
19 | * @category Printed | |
20 | */ | |
1fbe5b71 CE |
21 | |
22 | // todo | |
23 | ||
1fbe5b71 CE |
24 | // - fix changing board_thickness, add way to specify # of bolts in |
25 | // side of frame (assume even spacing for now) | |
26 | ||
3506b70b VAH |
27 | include <configuration.scad> |
28 | ||
cec35279 | 29 | module zmotorholder(thickness=(frame_type == frame_single ? 38 : 23), bottom_thickness=5){ |
231035dc | 30 | // fixme: board_to_xz_distance in position_y feels iffy |
fb91eeba CE |
31 | position_y = board_to_xz_distance + zaxis_delta_y + zmotor_delta_y; |
32 | position_x = board_to_xz_distance + zaxis_delta_x + zmotor_delta_x; | |
3506b70b VAH |
33 | difference(){ |
34 | union(){ | |
35 | // Motor holding part | |
36 | difference(){ | |
37 | union(){ | |
d4f661da | 38 | 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 = 14 + zaxis_delta_x + zmotor_delta_x, bottom_y = 15 + zmotor_delta_y + zaxis_delta_y, am_top=0, bottom_thickness=bottom_thickness); |
fb91eeba | 39 | translate([position_x, position_y, 0]) { |
231035dc | 40 | nema17(places=[0, 1, 1, 1], h=bottom_thickness + layer_height, $fn=23, shadow=false/*layer_height + 2*/); |
3506b70b VAH |
41 | } |
42 | } | |
846248f3 | 43 | // remove any interfering walls |
231035dc CE |
44 | translate([5 + zaxis_delta_x + zmotor_delta_x, 5 + zaxis_delta_y + zmotor_delta_y, -42.001]) { |
45 | cube([43,43,42]); | |
fb91eeba CE |
46 | } |
47 | ||
1fbe5b71 CE |
48 | // motor rotor clearance |
49 | translate([position_x, position_y, 0]) { | |
231035dc | 50 | #cylinder(r=11,h=20, center = true); |
846248f3 | 51 | } |
d3618a65 | 52 | |
3506b70b | 53 | // motor screw holes |
cec35279 CE |
54 | |
55 | // FIXME: y = board_to_xz distance looks supicious -- | |
56 | // the smooth rod is offset by a fixed amount so why | |
57 | // would the motor mount be moved in both directions | |
58 | // instead of just away from the frame? X-axis does | |
59 | // not use this to offset the leadscrew hole either. | |
fb91eeba | 60 | translate([position_x, position_y, thickness]) { |
5e8013bd | 61 | mirror([0, 0, 1]) translate([0, 0, thickness-8]) |
231035dc | 62 | nema17(places=[1, 1, 1, 1], holes=true, h=bottom_thickness + 1, $fn=small_hole_segments); |
854f95f0 | 63 | //shadow=-6 + layer_height); |
3506b70b VAH |
64 | } |
65 | } | |
66 | } | |
67 | } | |
d3618a65 | 68 | } |
3506b70b VAH |
69 | |
70 | ||
cec35279 | 71 | 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 | 72 | holder_inner_r = 9; |
0f6ec51a | 73 | holder_inner_r2 = 2; |
d4f661da | 74 | smooth_rod_insert_radius = bushing_z[0] + 6 * single_wall_width; |
3506b70b VAH |
75 | difference(){ |
76 | union(){ | |
3506b70b | 77 | difference(){ |
cec35279 | 78 | union() { |
3506b70b | 79 | //piece along the flat side of a board |
231035dc | 80 | cube_fillet([bottom_x, ylen, bottom_thickness], vertical=[8, 3, 0, 0]); |
cec35279 CE |
81 | if (frame_type == frame_alu) { |
82 | top_radius = am_top ? thickness : thickness / 3; | |
231035dc | 83 | translate ([0, 0, -thickness + bottom_thickness]) cube_fillet([5, ylen, thickness], vertical=[0, 0, 0, 0], bottom = [top_radius, 0, 0, 0]); |
cec35279 | 84 | |
1fbe5b71 CE |
85 | // FIXME: make rear/top bit optional, but don't remove entirely |
86 | // (printer seems to make less noise with the rear bit) | |
87 | %if (am_top) { | |
cec35279 | 88 | // rear bracket |
231035dc CE |
89 | translate ([-board_thickness - 5, 0, -thickness + bottom_thickness]) |
90 | cube_fillet([5, ylen, thickness], vertical=[0, 0, 0, 0], bottom = [top_radius, 0, 0, 0]); | |
91 | translate ([-board_thickness, 5, bottom_thickness/2]) | |
cec35279 CE |
92 | cube ([board_thickness, ylen - 6, bottom_thickness/2]); |
93 | } | |
94 | } | |
95 | else { | |
96 | cube_fillet([5, ylen, thickness], vertical=[3, 3, 0, 0], top = [thickness / 1.7, 0, 0, 5]); | |
97 | } | |
98 | ||
99 | //hole for Z axis is thru this | |
846248f3 | 100 | cube_fillet([xlen + zaxis_delta_x, bottom_y, bottom_thickness], vertical=[3, 0, 0, 3]); |
fb91eeba | 101 | if (bottom_x < board_to_xz_distance - z_delta + zaxis_delta_x) { |
9865d15a CE |
102 | translate([bottom_x, bottom_y, 0]) { |
103 | //large fillet that makes it stiffer by lot. Thanks to Marcus Wolschon | |
104 | difference(){ | |
105 | cube([holder_inner_r, holder_inner_r, bottom_thickness]); | |
106 | translate([holder_inner_r, holder_inner_r, -0.5]) | |
107 | cylinder(r=holder_inner_r, h=bottom_thickness + 1); | |
108 | } | |
109 | } | |
110 | } | |
cec35279 CE |
111 | if (frame_type != frame_alu) { |
112 | translate([5, 5, 0]) { | |
113 | difference(){ | |
114 | cube([holder_inner_r2, holder_inner_r2, thickness - 5.5]); | |
115 | translate([holder_inner_r2, holder_inner_r2, -0.5]) | |
116 | cylinder(r=holder_inner_r2, h=thickness + 1, $fn=20); | |
117 | } | |
118 | } | |
0f6ec51a | 119 | } |
0802ac49 CE |
120 | // leadscrew bearing hole is cut from this |
121 | if (am_top) { | |
fb91eeba CE |
122 | lead_bearing_y = board_to_xz_distance + zaxis_delta_y + zmotor_delta_y; |
123 | lead_bearing_x = board_to_xz_distance + zaxis_delta_x + zmotor_delta_x; | |
231035dc | 124 | translate ([lead_bearing_x, lead_bearing_y, -(bearing_608[2] + layer_height * 6 - bottom_thickness)]) cylinder (d = bearing_608[0] + single_wall_width * 6, h = bearing_608[2] + layer_height*6); |
0802ac49 | 125 | } |
3506b70b | 126 | //piece along cut side of the board |
cec35279 CE |
127 | if (frame_type == frame_box) { |
128 | translate([-board_thickness, 0, 0]) | |
129 | cube_fillet([board_thickness + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99); | |
130 | } else if (frame_type == frame_alu) { | |
1fbe5b71 | 131 | side_thickness = 5.0;// - zaxis_delta_y; |
846248f3 | 132 | |
1fbe5b71 CE |
133 | translate ([0, 0 /* zaxis_delta_y */, 0]) { |
134 | // back | |
231035dc | 135 | translate([-board_thickness, 0, -thickness + bottom_thickness]) { |
1fbe5b71 CE |
136 | cube_fillet([board_thickness, side_thickness, thickness], vertical = [0, 0, 0, 0], top = [0, 0, 0, 0]); |
137 | } | |
138 | ||
139 | // front | |
231035dc CE |
140 | front_support_thickness = thickness / (am_top ? 1 : 1.5); |
141 | translate ([0, 0, -front_support_thickness + bottom_thickness]) cube_fillet([am_top ? board_to_xz_distance + zaxis_delta_x - smooth_rod_insert_radius : xlen , side_thickness, front_support_thickness], vertical = [0, 0, 0, 0], bottom = [0, 0, 0, thickness]); | |
1fbe5b71 | 142 | } |
846248f3 | 143 | |
d4f661da CE |
144 | if (zaxis_delta_x > 0 || zaxis_delta_y < 0) { |
145 | // extra support along edge of smooth rod hole, if it has been moved away from the frame | |
146 | radius_diff = smooth_rod_insert_radius - bushing_z[0]; | |
147 | hull () { | |
231035dc CE |
148 | translate([-board_thickness/3, zaxis_delta_x/3, -(thickness/2 - bottom_thickness)]) { |
149 | 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], bottom = [0, 0, 4, thickness/2]); | |
d4f661da | 150 | } |
231035dc CE |
151 | translate([board_to_xz_distance/2, zaxis_delta_y + radius_diff/6, - bottom_thickness]) { |
152 | 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]], bottom = [0, 0, 2, thickness/4]); | |
d4f661da | 153 | } |
846248f3 | 154 | } |
cec35279 | 155 | } |
5e8013bd | 156 | } else { |
eb40b77a | 157 | translate([-board_thickness/2, 0, 0]) |
0f6ec51a | 158 | 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 |
159 | } |
160 | //smooth rod insert | |
231035dc CE |
161 | rod_insert_h = bottom_thickness * (am_top ? 1.75 : 1.75); |
162 | translate([board_to_xz_distance - z_delta + zaxis_delta_x, 9 + zaxis_delta_y, -rod_insert_h + bottom_thickness]) | |
163 | cylinder(h=rod_insert_h, r=smooth_rod_insert_radius); | |
3506b70b | 164 | } |
0802ac49 CE |
165 | |
166 | // === difference === | |
167 | ||
3506b70b | 168 | //smooth rod hole |
231035dc CE |
169 | rod_insert_hole_h = am_top ? thickness+20 : bottom_thickness; |
170 | translate([board_to_xz_distance - z_delta + zaxis_delta_x, 9 + zaxis_delta_y, bottom_thickness - rod_insert_hole_h]) cylinder(h=rod_insert_hole_h + 1, r=bushing_z[0] + single_wall_width / 4); | |
3506b70b | 171 | //inside rouned corner |
cec35279 CE |
172 | if (frame_type != frame_alu) { |
173 | translate([0, 5, -1]) cylinder(r=0.8, h=100, $fn=8); | |
174 | } | |
175 | ||
0802ac49 CE |
176 | // leadscrew hole |
177 | if (am_top) { | |
fb91eeba CE |
178 | lead_bearing_y = board_to_xz_distance + zaxis_delta_y + zmotor_delta_y; |
179 | lead_bearing_x = board_to_xz_distance + zaxis_delta_x + zmotor_delta_x; | |
231035dc | 180 | translate ([lead_bearing_x, lead_bearing_y, bottom_thickness - bearing_608[2]]) { |
d4f661da | 181 | union () { |
231035dc CE |
182 | translate ([0, 0, -bearing_608[2]*2 + 1]) cylinder (d = 10.8, h = bearing_608[2]*2); |
183 | translate ([0, 0, 0]) cylinder (d = bearing_608[0], h = bearing_608[2]+1); | |
0802ac49 CE |
184 | } |
185 | } | |
186 | } | |
187 | ||
5e8013bd | 188 | //front screws |
cec35279 CE |
189 | if (frame_type == frame_single) { |
190 | //single plate has both screws on front | |
191 | translate([16, 35, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { | |
192 | plate_screw(); | |
193 | } | |
194 | translate([16, 15, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) { | |
195 | plate_screw(); | |
196 | } | |
197 | //motor mount has third screw | |
198 | translate([16, 25, bottom_thickness + 4.5 + zdelta + 20]) rotate([0, -90, 0]) { | |
199 | plate_screw(); | |
200 | } | |
201 | } else if (frame_type == frame_alu) { | |
202 | // three screws on front | |
231035dc CE |
203 | translate([18, ylen - board_thickness/2, bottom_thickness/2 - board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw(); |
204 | translate([18, 5 + board_thickness/2, bottom_thickness/2 - board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw(); | |
205 | translate([18, 5 + board_thickness/2, -thickness + bottom_thickness + board_thickness/2]) rotate([0, -90, 0]) | |
cec35279 CE |
206 | plate_screw(); |
207 | ||
208 | // motor mount screw for opposite extrusion | |
231035dc | 209 | translate([18, ylen - board_thickness/2, -thickness + bottom_thickness + board_thickness/2]) rotate([0, -90, 0]) |
cec35279 CE |
210 | plate_screw(); |
211 | ||
212 | // back plate | |
231035dc | 213 | translate([-board_thickness-18, ylen - board_thickness/2, -thickness + bottom_thickness + board_thickness/2]) rotate([0, 90, 0]) |
cec35279 | 214 | plate_screw(); |
231035dc | 215 | translate([-board_thickness-18, 5 + board_thickness/2, -thickness + bottom_thickness + board_thickness/2]) rotate([0, 90, 0]) |
cec35279 | 216 | plate_screw(); |
231035dc CE |
217 | translate([-board_thickness-18, ylen - board_thickness/2, bottom_thickness/2 - board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw(); |
218 | translate([-board_thickness-18, 5 + board_thickness/2, bottom_thickness/2 - board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw(); | |
cec35279 CE |
219 | |
220 | //side screws | |
231035dc CE |
221 | translate([-board_thickness/2, -13, bottom_thickness + board_thickness/2 - thickness]) rotate([-90, 0, 0]) plate_screw(); |
222 | translate([-board_thickness/2, -13, bottom_thickness/2 - board_thickness/2 + zdelta]) rotate([-90, 0, 0]) plate_screw(); | |
cec35279 CE |
223 | } else if (frame_type == frame_box) { |
224 | translate([16, 30, bottom_thickness+4]) rotate([0, -90, 0]) { | |
225 | plate_screw(); | |
226 | } | |
5e8013bd | 227 | //side screw |
0f6ec51a | 228 | translate([-board_thickness/2, -11, thickness/2]) rotate([-90, 0, 0]) plate_screw(); |
b32bbd0f | 229 | } |
3506b70b VAH |
230 | } |
231 | } | |
232 | } | |
d3618a65 | 233 | } |
1422dcbd CE |
234 | |
235 | if (frame_type == frame_alu) { | |
231035dc | 236 | //zmotorholder(thickness=55, bottom_thickness=6); |
1422dcbd | 237 | // 2020 aluminum frame parts are larger |
231035dc CE |
238 | rotate ([0, 180, 0]) { |
239 | translate([0, -60, 0]) zmotorholder(thickness=55, bottom_thickness=6); | |
240 | translate([0, 60, 0]) mirror([0, 1, 0]) zmotorholder(thickness=55, bottom_thickness=6); | |
7b8e1e54 | 241 | |
231035dc CE |
242 | 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=43 + zaxis_delta_x, bottom_thickness=6); |
243 | 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=43 + zaxis_delta_x, bottom_thickness=6); | |
244 | } | |
1422dcbd CE |
245 | } |
246 | else { | |
247 | translate([10, -50, 0]) zmotorholder(); | |
248 | translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder(); | |
249 | translate([67, 14, 0]) rotate([0,0,90]) zrodholder(); | |
250 | translate([77, -14, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder(); | |
251 | } |