x-end: refine integration with MK3 idler tensioner
[clinton/prusa3.git] / box_frame / x-end.scad
... / ...
CommitLineData
1// PRUSA iteration3
2// X end prototype
3// GNU GPL v3
4// Josef Průša <iam@josefprusa.cz> and contributors
5// http://www.reprap.org/wiki/Prusa_Mendel
6// http://prusamendel.org
7
8// Also includes code from Wilson and Wilson2, (c) Marty Rice
9// https://github.com/mjrice/wilson
10
11// major issues with rev 3
12
13// - motor side screw hole conflicts with switch / other rear mount is
14// inaccessible without removing the leadscrew from the nut
15
16use <bushing.scad>
17include <configuration.scad>
18
19pushfit_d = bushing_xy[0] * 2 + 0.2;
20thinwall = single_wall_width * 6; // 3 perimeters
21vertical_bushing_base_size = bushing_z[1]*2 + 2 * thinwall;
22
23x_box_length = 45; // TODO: auto-adjust based on bearing size?
24// z position of rotor shaft
25motor_shaft_z = 30.25;
26
27// todo: add ghost bearing model to make it easier to spot check if
28// everything is aligned
29module vertical_bushing_base(){
30 translate(v=[-2-vertical_bushing_base_size/4,0,x_box_height/2]) cube(size = [4+vertical_bushing_base_size/2,vertical_bushing_base_size,x_box_height], center = true);
31 cylinder(h = x_box_height, r=vertical_bushing_base_size/2, $fn = 90);
32}
33
34module vertical_bushing_holes(){
35 // FIXME: is extra cut necessary? check conf_bushing
36 bushing_cut_extra = 0.2; // padding so it's not too tight
37 translate(v=[0,0,-4]) cylinder(h = x_box_height + 3, r=bushing_z[1] + bushing_cut_extra, $fn = 60);
38 translate(v=[0,0,x_box_height-4]) cylinder(h=x_box_height,r=bushing_z[1]-1,$fn=60);
39 // TODO: is slit too wide or too low? Wilson increased width from 1
40 // -> 2 mm, slit also might need to end 1-2mm before the base
41 #rotate(a=[0,0,-50]) translate(v=[thinwall*2 + 1,0,x_box_height/2 - 2]) cube(size = [bushing_z[2]/2, 2 ,x_box_height], center = true);
42 translate([0,0,-1]) cylinder(h=9,r1=bushing_z[1]+thinwall/2+1,r2=4,$fn=60);
43}
44
45module nut_trap_base () {
46 // TODO: cube doesn't line up with edge of base, cylinder is slightly asymmetrical
47 // adapt newer nut trap from prusa i3 mk3 instead of wilson2
48 cube(size=[16,21,8],center=true);
49 translate ([2,0,0]) cylinder(h=8,r=12.5,$fn=50,center=true);
50}
51
52module nut_trap () {
53 union() {
54 // center post of brass nut
55 cylinder(h=12,r=5.45,$fn=50,center=true);
56 // holes for m3 screws in brass nut
57 translate(v=[8,0,0]) cylinder(h=12,r=1.8,$fn=20,center=true);
58 #rotate([0,0,90]) translate(v=[8,0,0]) cylinder(h=12,r=1.8,$fn=20,center=true);
59 rotate([0,0,180]) translate(v=[8,0,0]) cylinder(h=12,r=1.8,$fn=20,center=true);
60 #rotate([0,0,270]) translate(v=[8,0,0]) cylinder(h=12,r=1.8,$fn=20,center=true);
61 }
62}
63
64// x position of edge of main block (facing frame), for attaching objects to it
65function x_base_back() = -10 - bushing_xy[0] - x_box_width/2;
66// y position of edge of main block facing away from x-axis
67function x_base_outside() = vertical_bushing_base_size/2;
68// y position of edge of main block facing toward the x-axis
69function x_base_inside() = -x_box_length/2 - vertical_bushing_base_size/2;
70// z position of motor shaft (for aligning idler pulley)
71function x_motor_shaft_z() = motor_shaft_z; // TODO: if it's straightforward, return vector [x,y,z]. x = x_base_inside()
72
73module x_end_base(){
74// Main block
75translate(v=[-10 - bushing_xy[0], -x_box_length/2 + vertical_bushing_base_size/2,x_box_height/2]) cube(size = [x_box_width,x_box_length,x_box_height], center = true);
76// Bearing holder
77 vertical_bushing_base();
78//Nut trap
79 translate(v=[-4+zmotor_delta_x,-17-zmotor_delta_y,4]) nut_trap_base ();
80}
81
82// TODO: x translation of belt and smooth rods needs to adapt to
83// x_end_width and motor/idler pulley position.
84
85module x_end_holes(){
86 vertical_bushing_holes();
87 // Belt hole
88 translate(v=[-1,0,0]){
89 // Stress relief
90 translate(v=[-5.5-10+1.5,-bushing_z[1]-4,30]) cube(size = [20,1,28], center = true);
91 // Cut out for belt (this is NOT centered because the motor isn't centered)
92 x_box_offset = -x_box_length/2 + vertical_bushing_base_size/2;
93 difference(){
94 translate(v=[-5.5-10+1.5, x_box_offset ,30]) cube(size = [10, x_box_length + 1,28], center = true);
95
96 // Nice edges
97 translate(v=[-5.5-10+1.5,x_box_offset,30+23]) rotate([0,45,0]) cube(size = [10,x_box_length + 1,28], center = true);
98 translate(v=[-5.5-10+1.5,x_box_offset,30+23]) rotate([0,-45,0]) cube(size = [10,x_box_length + 1,28], center = true);
99 translate(v=[-5.5-10+1.5,x_box_offset,30-23]) rotate([0,45,0]) cube(size = [10,x_box_length + 1,28], center = true);
100 translate(v=[-5.5-10+1.5,x_box_offset,30-23]) rotate([0,-45,0]) cube(size = [10,x_box_length + 1,28], center = true);
101
102 }
103}
104
105
106 // FIXME: confirm length of smooth rod doesn't change when x_box_length or bearing size changes
107 // should also make sure this is long enough if x-ends somehow end up larger than 50mm
108 // TODO: needs to shift top rod as diameter increases, wall is very
109 // thing for 10mm, and fails entirely for 12mm
110 translate([-10 - bushing_xy[0], 0, 0]) {
111 // Top pushfit rod
112 #translate([0, -41.5, 6]) rotate([-90, 0, 0]) pushfit_rod(pushfit_d, 50);
113 // Bottom pushfit rod
114 translate([0, -41.5, xaxis_rod_distance+6]) rotate([-90, 0, 0]) pushfit_rod(pushfit_d, 50);
115 }
116
117// Nut trap
118 translate(v=[zmotor_delta_x,-17-zmotor_delta_y,3]) rotate ([0, 0, 45]) nut_trap ();
119}
120
121
122// Final prototype
123module x_end_plain(){
124 difference(){
125 x_end_base();
126 x_end_holes();
127 }
128}
129
130x_end_plain();
131
132
133module pushfit_rod(diameter,length){
134 translate([0,-0.3,0]) cylinder(h = length, r=diameter/2, $fn=30);
135 translate([0,0.3,0]) cylinder(h = length, r=diameter/2, $fn=30);
136 // TODO: reintroduce teardrop holes?
137// difference(){
138// translate(v=[0,-diameter/2.85,length/2]) rotate([0,0,45]) cube(size = [diameter/2,diameter/2,length], center = true);
139// translate(v=[0,-diameter/4-diameter/2-0.4,length/2]) rotate([0,0,0]) cube(size = [diameter,diameter/2,length], center = true);
140// }
141
142}