z-axis: sanely layout parts on plate
[clinton/prusa3.git] / box_frame / z-axis.scad
CommitLineData
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
22include <configuration.scad>
23
cec35279 24module 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 60module 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]);
9865d15a
CE
88 if (bottom_x < board_to_xz_distance - z_delta + zaxis_delta_y) {
89 translate([bottom_x, bottom_y, 0]) {
90 //large fillet that makes it stiffer by lot. Thanks to Marcus Wolschon
91 difference(){
92 cube([holder_inner_r, holder_inner_r, bottom_thickness]);
93 translate([holder_inner_r, holder_inner_r, -0.5])
94 cylinder(r=holder_inner_r, h=bottom_thickness + 1);
95 }
96 }
97 }
cec35279
CE
98 if (frame_type != frame_alu) {
99 translate([5, 5, 0]) {
100 difference(){
101 cube([holder_inner_r2, holder_inner_r2, thickness - 5.5]);
102 translate([holder_inner_r2, holder_inner_r2, -0.5])
103 cylinder(r=holder_inner_r2, h=thickness + 1, $fn=20);
104 }
105 }
0f6ec51a 106 }
0802ac49
CE
107 // leadscrew bearing hole is cut from this
108 if (am_top) {
109 lead_bearing_y = board_to_xz_distance + zaxis_delta_y - zmotor_delta_y;
110 lead_bearing_x = board_to_xz_distance - zaxis_delta_x + zmotor_delta_x;
111 translate ([lead_bearing_y, lead_bearing_x, 0]) cylinder (d = bearing_608[0] + 1 + 2, h = bearing_608[2] + layer_height*4);
112 }
3506b70b 113 //piece along cut side of the board
cec35279
CE
114 if (frame_type == frame_box) {
115 translate([-board_thickness, 0, 0])
116 cube_fillet([board_thickness + board_to_xz_distance + bushing_z[0], 5, thickness], radius=2, top = [0, 0, 0, thickness], $fn=99);
117 } else if (frame_type == frame_alu) {
846248f3 118 // split piece in front of and behind into separate pieces
cec35279 119 translate([-board_thickness, 0, 0]) {
846248f3
CE
120 cube_fillet([board_thickness, 5.0, thickness], vertical = [0, 0, 0, 0], top = [0, 0, 0, 0]);
121 }
122
51dbb82b 123 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
124
125 // extra support along edge of smooth rod hole
126 radius_diff = smooth_rod_insert_radius - bushing_z[0];
127 hull () {
128 translate([-board_thickness/3, -zaxis_delta_x/3, 0]) {
129 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]);
130 }
131 translate([board_to_xz_distance/2, -zaxis_delta_x + radius_diff/6, 0]) {
132 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]);
133 }
cec35279 134 }
5e8013bd 135 } else {
eb40b77a 136 translate([-board_thickness/2, 0, 0])
0f6ec51a 137 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
138 }
139 //smooth rod insert
846248f3 140 translate([board_to_xz_distance - z_delta + zaxis_delta_y, 9 - zaxis_delta_x, 0])
1ebfb5d4 141 cylinder(h=bottom_thickness * (am_top ? 1.75 : 1.75), r=smooth_rod_insert_radius);
3506b70b 142 }
0802ac49
CE
143
144 // === difference ===
145
3506b70b 146 //smooth rod hole
1ebfb5d4 147 #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 148 //inside rouned corner
cec35279
CE
149 if (frame_type != frame_alu) {
150 translate([0, 5, -1]) cylinder(r=0.8, h=100, $fn=8);
151 }
152
0802ac49
CE
153 // leadscrew hole
154 if (am_top) {
155 lead_bearing_y = board_to_xz_distance + zaxis_delta_y - zmotor_delta_y;
156 lead_bearing_x = board_to_xz_distance - zaxis_delta_x + zmotor_delta_x;
157 translate ([lead_bearing_y, lead_bearing_x, 0]) {
158 difference () {
159 union () {
160 translate ([0, 0, 1]) cylinder (d = 10.8, h = bearing_608[2]*2);
161 translate ([0, 0, -1]) cylinder (d = 23, h = bearing_608[2]+1);
162 }
163 #translate ([0, 0, bearing_608[2]-layer_height]) cylinder (d = 23, h = layer_height);
164 }
165 }
166 }
167
5e8013bd 168 //front screws
cec35279
CE
169 if (frame_type == frame_single) {
170 //single plate has both screws on front
171 translate([16, 35, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) {
172 plate_screw();
173 }
174 translate([16, 15, bottom_thickness + 4.5 + zdelta]) rotate([0, -90, 0]) {
175 plate_screw();
176 }
177 //motor mount has third screw
178 translate([16, 25, bottom_thickness + 4.5 + zdelta + 20]) rotate([0, -90, 0]) {
179 plate_screw();
180 }
181 } else if (frame_type == frame_alu) {
182 // three screws on front
04ddc678
CE
183 translate([18, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw();
184 translate([18, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, -90, 0]) plate_screw();
185 translate([18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0])
cec35279
CE
186 plate_screw();
187
188 // motor mount screw for opposite extrusion
04ddc678 189 translate([18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, -90, 0])
cec35279
CE
190 plate_screw();
191
192 // back plate
04ddc678 193 translate([-board_thickness-18, ylen - board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0])
cec35279 194 plate_screw();
04ddc678 195 translate([-board_thickness-18, 5 + board_thickness/2, thickness - board_thickness/2]) rotate([0, 90, 0])
cec35279 196 plate_screw();
04ddc678
CE
197 translate([-board_thickness-18, ylen - board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw();
198 #translate([-board_thickness-18, 5 + board_thickness/2, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([0, 90, 0]) plate_screw();
cec35279
CE
199
200 //side screws
04ddc678
CE
201 #translate([-board_thickness/2, -13, thickness-board_thickness/2]) rotate([-90, 0, 0]) plate_screw();
202 translate([-board_thickness/2, -13, bottom_thickness/2 + board_thickness/2 + zdelta]) rotate([-90, 0, 0]) plate_screw();
cec35279
CE
203 } else if (frame_type == frame_box) {
204 translate([16, 30, bottom_thickness+4]) rotate([0, -90, 0]) {
205 plate_screw();
206 }
5e8013bd 207 //side screw
0f6ec51a 208 translate([-board_thickness/2, -11, thickness/2]) rotate([-90, 0, 0]) plate_screw();
b32bbd0f 209 }
3506b70b
VAH
210 }
211 }
212 }
d3618a65 213}
1422dcbd
CE
214
215if (frame_type == frame_alu) {
216 // 2020 aluminum frame parts are larger
7b8e1e54
CE
217 translate([0, -60, 0]) zmotorholder(thickness=55, bottom_thickness=6);
218 translate([0, 60, 0]) mirror([0, 1, 0]) zmotorholder(thickness=55, bottom_thickness=6);
219
220 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);
221 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);
222
1422dcbd
CE
223}
224else {
225 translate([10, -50, 0]) zmotorholder();
226 translate([0, 50, 0]) mirror([0, 1, 0]) zmotorholder();
227 translate([67, 14, 0]) rotate([0,0,90]) zrodholder();
228 translate([77, -14, 0]) rotate([0, 0, -90]) mirror([0, 1, 0]) zrodholder();
229}