Skip to content

Commit

Permalink
Add tilting effector stability coefficient TES - Add delta-six dataset
Browse files Browse the repository at this point in the history
A new coefficient is defined to caracterize the geometrical stability of
the effector. See text for theoretical explanation.
  • Loading branch information
PRouzeau committed Dec 21, 2015
1 parent 7a9b056 commit c02eae9
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 21 deletions.
56 changes: 39 additions & 17 deletions Delta_simulator.scad
@@ -1,20 +1,21 @@
// Parallel columns delta robot simulator, extracted from my Delta printer design.
// This simulator could emulate any delta travels, provided the paramaters are accurate.
// Needs OpenScad 2015.03 or, for animations, the nightly versions.
// This simulator could emulate any delta travels, provided the parameters are accurate.
// Needs OpenScad 2015.03 or, for animations, the development snapshots.

// Play with it! you won't broke anything. See line 92 for existing datasets.

// To run the animation click [View][Animate],a panel open in the bottom right of your screen. Set 10~25 in the FPS fied and 360 in the field 'Steps'. A lower number will make larger steps. You can manipulate the view during animation.
// OpenScad official version 2015.03 have a lot of flickering during animation. This is corrected in the nightly versions, which I recommended to use.
// OpenScad official version 2015.03 have a lot of flickering during animation. This is corrected in the development snapshots, which I recommended to use.
// Licence GPL V2.0 - Pierre ROUZEAU aka PRZ -
// version 0.4.4 - 5 July 2015
// 25 May 2015 - add twin rods in addition of extrusion - display bot name - modifs for micros deltas (Fisher delta and Micro Delta) - allow user part build for effector, corners and carriage.
// 29 may 2015 - added internal comments to explain use. Frame order build modified for tranparent panels
// June - allow more personalisation - review fan , spool - allow dataset text lines
// 29 may 2015 - added internal comments to explain use. Frame order build modified for transparent panels
// June - allow more personalisation - review fan, spool - allow dataset text lines
// 12 June: 'square Delta'
// end june - correct data sets broken by the revision 0.4.3
// 5 July 15: atan2 function simplify polar transformation
// 13 Oct 15: add Delta-six dataset by sage (dataset written by geodave810). explanation of personalisation
// 21 dec 15: add effector stability coefficient - see drawing and text

// set below variable to false if you want to do a closeup view during animation
camPos = true; //if true force camera position according request in dataset
Expand All @@ -40,7 +41,7 @@ car_hor_offset=20; //Carriage: horizontal distance between the articulation and
car_vert_dist=27; //Carriage: vertical articulation distance/reference plane (at the top of the carriage)
hcar=75; // carriage height - no effect on travel
dia_ball = 10;
dia_arm = 8;
dia_arm = 6;

//-- Effector data --------------------------------------
eff_hor_offset=28; //Distance effector center/articulations Kossel mini: 20, Rostock max: 33mm
Expand All @@ -59,7 +60,7 @@ arm_length = 0; // Alternatively, you could define the arm length, which will su

mini_angle = 20; //minimum angle/horizontal. 20° is generally considered as the practical limit. That will not modify the design, only give you an approximate information about the maximum possible range. The range is not really circular, but will be considered so for practical reasons. You could go below 20°, but there is no real point, because when the other arms are nearing vertical, the effector bang the columns. Also, it drives to dynamic problems (a small effector move need a large carriage move), extra loads and effector loss of stability.

hotend_vert_dist = 20;//vertical distance between hotend nozzle and effector bottom plate. depends from the effector design and hotend type.
hotend_vert_dist = 30;//vertical distance between hotend nozzle and effector bottom plate. depends from the effector design and hotend type.

//Frame details
frame_corner_radius=1.5*extrusion; //modify corner shape radius.
Expand Down Expand Up @@ -163,6 +164,14 @@ rdiff = beam_int_radius-car_hor_offset-working_dia/2; // horiz dist between top
ht_side = sqrt (ar_length*ar_length-rdiff*rdiff); //Carriage height while at working radius
working_height_min = travel_stop-(effVtPos +(ht_side+car_vert_dist+eff_vert_dist));

//Effector geometrical stability calculation - OpenScad angles in deg
Rd = sqrt (pow(arm_space/2,2)+pow(eff_hor_offset,2));
An = 60-atan (arm_space/2/eff_hor_offset);
ball_end_space = 2*sin(An)*Rd; //echo (ball_end_space =ball_end_space);
htv = tan (d_angle)*eff_hor_offset; echo (htv=htv); //virtual articulation pos
virtual_axis_d = htv-eff_vert_dist-hotend_vert_dist; //diff hotend/virtual arti
TESc = pow(arm_space,2)/ball_end_space/abs(virtual_axis_d); // arbitrary coef

//====================================================================

module view () {//if no fixed xe,ye,ze, viewing trajectory and other stuff as a function of $t
Expand Down Expand Up @@ -231,7 +240,7 @@ module delta_cal (x, y, z, rot) { // calculation of arms angles and display
txta = str("Angles: vertical: ",90-round(h_angle*10)/10, " horizontal: ", round(z_angle*10)/10);
ltxtsup = $dtxt? len($dtxt):0;
rot (0,-10,txtangle-move_rot)
tsl (txtxpos, txtypos,txtzpos-txtsize*22.3-ltxtsup*1.5)
tsl (txtxpos, txtypos,txtzpos-txtsize*25-ltxtsup*1.5)
rot (90,0,90) color("black")
textz(txta, txtsize*0.85, 2, false);
}
Expand Down Expand Up @@ -272,11 +281,16 @@ module disp_armcar(x,y,z,i, ang_hor, ang_ver, vpos_car, car_col, arm_col) {// ar
tsl (x,y) rotz (i) { // arms grow from effector
// Arm creation and duplication
tsl (-arm_space/2,eff_hor_offset,zpos){
duplx(arm_space) {
color("silver")
sphere (d=dia_ball,$fn=64); // ball
color("grey") rot(ang_hor,0,ang_ver)
cylz (dia_arm, ar_length-dia_ball,0,0,dia_ball/2);
if ($bArm)
buildArm (ang_hor,ang_ver);
else {
duplx(arm_space) {
color("grey")
rot(ang_hor,0,ang_ver)
cylz (dia_arm, ar_length-dia_ball,0,0,dia_ball/2);
color("silver")
sphere (d=dia_ball,$fn=64); // ball
}
}
if (eff_vert_dist >=10) // ball supports
color(moving_color)
Expand Down Expand Up @@ -351,9 +365,9 @@ dec_housing = (beam_int_radius+3+extrusion)/2 + max(extrusion, railwidth)/2;
cubez(extrusion, extrusion, htotal, beam_int_radius+extrusion/2);
if (belt_dist||$bdist) {
bd = $bdist ? $bdist:belt_dist;
ht = $ht_tens?$ht_tens-25:0; // if tensioner at the bottom
ht = $ht_tens?$ht_tens-25:25; // if tensioner at the bottom
color("black")
cubez (6,14,htotal-30-ht, beam_int_radius-bd+3,0,15+ht);
cubez (6,14,htotal-ht-40, beam_int_radius-bd+3,0,ht);
}
}
bed_dia = $bedDia?$bedDia:working_dia*1.12;
Expand All @@ -364,7 +378,7 @@ dec_housing = (beam_int_radius+3+extrusion)/2 + max(extrusion, railwidth)/2;
sprot = $spool_rot? $spool_rot:[0,0,0];
sptsl = $spool_tsl? $spool_tsl:[0,0,htotal+spool_thk/10];
if(spool_diam)
translate (sptsl) rotate (sprot) spool();
rotate (sprot) translate (sptsl) spool();
if ($bSide) buildSides(); // allow specific sides to be built - at the end if transparent
}
}
Expand Down Expand Up @@ -414,7 +428,7 @@ module disp_text(angz,xpos,ypos,zpos) { // display printer data on a panel
str("For bed/ceiling: ",round(travel_stop-hbase-bed_level)," mm"),
str("-Centre working height: ",round(working_height_cent)," mm"),
str("-Minimum working height: ",round(working_height_min)," mm"),
"",
str("Effector stability:", round(TESc*100)/100, " distV:",round(virtual_axis_d*10)/10,"mm"),
""
];
vtext1 = $dtxt? concat (vtext0,$dtxt):vtext0; //add dataset text, if any - shall be an array
Expand Down Expand Up @@ -496,6 +510,14 @@ module cylx (diam,length,x=0,y=0,z=0,div=$fn) {//Cylinder on X axis
cylinder (d=(abs(diam)), h=abs(length), $fn=div, center=center);
}

module cyly (diam,length,x=0,y=0,z=0,div=$fn) {//Cylinder on X axis
mv=(length<0)?length:0; // not ok if diam AND length are negative. who cares ?
center=(diam<0)?true:false;
translate([x,y+mv,z])
rotate([-90,0,0])
cylinder (d=(abs(diam)), h=abs(length), $fn=div, center=center);
}

module cubez(xd,yd,zd,x=0,y=0,z=0) { // centered on x and y, not centered on z
mz=(zd<0)?zd:0;
tsl (x-xd/2,y-yd/2,mz+z)
Expand Down
Binary file added Tilt_effector_stability.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Tilt_effector_stability.odg
Binary file not shown.
39 changes: 39 additions & 0 deletions Tilt_effector_stability.txt
@@ -0,0 +1,39 @@
I have defined in the OpenScad delta simulator an arbitrary coefficient to evaluate the effect of the geometry on effector tilting stability. This effector stability coefficient is an element among others affecting stability, as it is only related to geometry. Lack of stiffness of articulations or carriage may also drive to low stability. A printer is a mechanical ensemble with a lot of interactions. Also, theory tells that loads on articulated rods are only axial, however in real world, some articulation type have significant friction on the articulation, creating bending moments in the rods, transferred to the effector.
A good geometrical stability may help to cope with some construction faults.
The only drawback is that if you lower the hotend to have the nozzle located as near as possible to the virtual articulation (see below), you loose some usable height.

The theoretical base of this coefficient calculation is that a mobile attached to articulated rods tend to rotate around a virtual articulation point located at the rod convergence point. So, on a delta printer, if the nozzle is located at this virtual articulation point, tilting the effector will displace it, while the nozzle end will stay at the same place. This is verified by manually tilting an effector. However, for constructive reasons, the nozzle end is never located at this 'best location'. In addition, this virtual articulation point move relatively to the effector while the effector displaced sideways.
Something which is not always well understood is that the lowest offset will give the best stability. The aim of a designer shall be to have the articulation points at the corners of the effector to be as near as possible, to prevent effector tilting moment. That does not in itself improve the effector stability, but it reduced the tilting moment, so it shall be taken into account. There are a few design where the articulation points are merged (as the Spiderbot which have a three ball effector). In this case, the geometrical stability is infinite, as there is no tilting moment.
Large arm space (which is also associated with small space at the articulation end) will help limit the effect of play in articulations.

Definition of this coefficient, named TES for tilting effector stability.
Look at the drawing for details
a being the lever due to arm space (see drawing)
b being the space between balls (articulations)
c being the space between hotend nozzle and arms axis crossing (virtual articulation)

-Tilt geometric load moment is related to a/b, a being proportional to arm space
-Tilt stiffness is proportional to arm space
-Effect of tilting is proportional to c (distance between arm convergence and hotend nozzle)

TES = (Arm space)�/b/abs(c),
with c defined at center and at maximum radius
So there will be TESc (at center) and TESr (at max radius). Yet only TESc is calculated in the simulator.

It is important to note that the TES does not depend from arm length, only effector geometry. Indeed, the arm stiffness in their axis is huge compared to other elements, notably articulation stiffness, so the arm length have nearly no effect on tilting stability. This is why you could install the small Kossel mini effectors on large printers without problems.

Numbers (as hotend length may vary, this may be approximative value)�:
Larger is better.
Kossel (with J-head)TESc�: 18�: hotend 8mm below virtual articulation
Rostock Max TESc�: 1.8�: hotend is way above virtual articulation (> 40mm), offset is large
Fisher TESc�: 9 While hotend is 18mm above virtual articulation, the low space between balls at the end helps stability.
Micro-delta�TESc : 1.3�: hotend 48 mm above virtual articulation, large offset, large space between balls contribute to a low stability.
D-Box (my printer) TESc�: 28�: hotend nozzle is 25mm above virtual articulation (with two nuts on the Prometheus), however, the large arm space (84mm) coupled with very low distance between balls at the angles (10 mm) gives a very good stability, which is evident while manipulating the effector by hand. However, the friction of the articulations is significant and that creates a moment in the effector which is not taken into account in the TES.

Having hotend above effector as for micro-delta (e-motion tech) or Rostock max (seemeCNC) contribute to a low stability. That increase vertical usable height, which is a bit irrelevant for the Rostock max, which is a very tall machine. For the Rostock Max, given its large offset, stability may be greatly improved with the hotend below the effector and will simplify part fan installation.
The hotend below effector as made on Kossel drive the nozzle being below virtual articulation, but with a lower absolute difference than other designs, with the added benefit of a much lower offset, hence relatively good stability.

First public issue of this coefficient was done in the following thread of Deltabot Forum�:
https://groups.google.com/forum/#!topic/deltabot/iIAQ1cGgcWY

� Pierre ROUZEAU 2015 CC BY-SA
6 changes: 2 additions & 4 deletions data_Delta-Six.scad
@@ -1,6 +1,7 @@
// Data Set for Openbuilds Delta-Six, designed by Sage
Delta_name = "Delta-Six by Sage"; // Geodave 810, October, 2015 - adaptation and mods by PRZ noted by !!
// See http://www.openbuilds.com/builds/delta-six.476 for files

$bAllFrame = true; // replace frame by following routine - no need to modify the simulator program
module buildAllFrame() { DrawFinal();} //run by the simulator in 'simul' module
*DrawFinal(); // use for development only
Expand Down Expand Up @@ -39,14 +40,11 @@ mini_angle = 20; // !! Not defined in original description, but comply with bed
hotend_vert_dist = 12;
dia_ball= 8;
dia_arm = 6;
railthk =0;
railwidth =0;
rail_base=0;
frame_corner_radius=100;
frame_face_radius= 0;
corner_offset=-65;

belt_dist=18; //!! added to check conflicts
belt_dist=18; //!! added to check conflicts with effector
spool_diam = 0;
spool_thk = 0;

Expand Down

0 comments on commit c02eae9

Please sign in to comment.