Application Center - Maplesoft

App Preview:

Dynamics and Deformation of a Helical Steel Spring

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


Dynamics And Deformation of a Helical Steel Spring 

Harald Kammerer 

Introduction 

A helical steel spring seems to be a very regular structure. But the following calculation shws that this is not for all points of view valid. 

 

Here a steel spring with three complete coils is considered. The lower end of the spring is fixed for all translations and the rotations around all three principal spatial axes. The upper end the spring is free in all degrees of freedom. 

 

First we have to do some initialisation 

> restart:
 

> libname := libname, "C:/mylib/StructuralMechanics/StructuralMechanics.lib":
 

> with(LinearAlgebra):with(plots):with(plottools):with(StringTools):
 

> with(StructuralMechanics):
 

Definition of the Geometry 

The spring has three coils. We use 20 beam elements to define each coil of the spring. 

> numberofcoil:=3;
 

> elementspercoil:=20;
 

The total height of the spring is 100mm, the coil diameter is 50mm. 

> springheight:=0.1;
 

> coildiameter:=0.05;
 

For the desription of the element nodes we use some additional parameters. First we define the arc length along the spring coils by the spring wire and the angle. 

> s:=coildiameter/2*phi;
 

The total lengt of the steel wire is thus 

> L_spring:=coildiameter*Pi*numberofcoil;
 

We define the global z-axis as the spring axis through the center of the coils. So global the x- and y-coordinates of the nodes are on the circle around the z-axis with radian r=coildiameter/2. 

> r:=coildiameter/2;
 

The x- and y- coordinates are in general 

> x:=r*sin(phi);
 

> y:=r*cos(phi);
 

The z-coordinate of the nodes increase linear with the angle phi. 

> z:=evalf(springheight*s/L_spring);
 

Now have a look on the spring geometry 

> spacecurve([x,y,z],phi=0..numberofcoil*2*Pi,axes=normal,thickness=3,scaling=constrained,color=black,orientation=[20, 60]);
 

Define the Load 

The spring is loaded ba a single vertical force of the value 1 at the upper end 

> FORCE:=[[numberofcoil*elementspercoil+1,[0,0,200,0,0,0]]];
 

Define the Input for the StructuralMechanics Package 

Now the global coordinates of the element nodes must be defined. To do this the above defined functions for the coordinates x, y and z are used. 

> NODE:=[seq(evalf(subs(phi=(i-1)*Pi*2/(elementspercoil),[x,y,z])),i=1..elementspercoil*numberofcoil+1)];
 

We show this definition of the nodes graphical 

> spacecurve(NODE,style=point,symbol=circle,symbolsize=10,axes=normal,shading=none,scaling=constrained,orientation=[20, 60]);
 

Next the beam elements have to be defined. This is done easy for this system, because the end nodes of the elements are a very regular sequence. 

> BEAM:=[seq([i,i+1],i=1..nops(NODE)-1)];
 

The beam director defines the orientation of the principal axis of the cross section for beam elements. here we will use a circular cross section, so every direction expect for the element axis can be used as the director. We use here the vector from the node to the center of the coil. 

> BEAMDIRECTOR:=[seq([0,0,NODE[i][3]]-NODE[i],i=1..nops(BEAM))];
 

The spring is totally fixed at the lower end at node 1. All other nodes are free. 

> SUPPORT:=[[1,[0,0,0,0,0,0]]];
 

System Matrices 

now all is defined to create the system matrices 

> Systemmatrices():
 

This function defines automatic all the necessary matrices and parameters which are necessary for the following calculation 

Show the structure 

Next have a look on the structure including the force, the global coordinate axis, the supports and the nodes 

> structurplot("FORCE","COORDINATES","SUPPORT","NODES");
 

The yellow cylinders at node 1 symbolice that the rotation and the translation with respect to the corresponding axis is fixed at this node. 

Define the Cross Section Values and the Material Properties 

The cross section is circular with the diameter 5mm 

> wirediameter:=0.005;
 

This shape can be shown. 

> crosssection('plot','circle',wirediameter/2);
 

The material is steel. For this material and cross section the specific parameters can be calculated by use the following routine 

> B:=beamsection('circle','steel',wirediameter/2);
 

This values are asigned to all beam elements. 

> for i from 1 by 1 to nB do
 

> Iy[i]:=B[2][4];
 

> Iz[i]:=B[2][5];
 

> A[i]:=B[2][1];
 

> Asy[i]:=B[2][1];
 

> Asz[i]:=B[2][1];
 

> J[i]:=B[2][7];
 

> E[i]:=B[1][1]/210*205;
 

> G[i]:=B[1][2]/81*71;
 

> rho[i]:=B[1][3];
 

> od:
 

Eigenmotion 

As first point of the solution the eigenmotion is calculated 

> eigensolution(MM2,KM2):
 

The first 10 natural frequencies are 

> for i from 1 by 1 to 10 do i,evalf(EVU[i]) od;
 

Some eigenmotions are shown 

> eigenform(1,1,ANIMATEFORM);
 

> eigenform(2,1,ANIMATEFORM);
 

> eigenform(10,1,ANIMATEFORM);
 

Static Deformation 

Next the deformation resulting of the static load is calculated. This is done by the following procedure of this package. 

> staticsolve():
 

And after this the static reactions can be calculated. 

> staticreaction():
 

The deformed system is shown in the following figure. 

> DPL1:=display(deformation(),structurplot("SUPPORT","COORDINATES","FORCE")):
 

> display(DPL1);
 

The support reactions at the fixed node 1 are 

> seq(Fout[i],i=1..6);
 

And the forces and moments at the loaded node at the upper end of the spring are 

> seq(Fout[DOF(nN,"xt")-1+i],i=1..6);
 

The displacement of the upper end is 

> seq(Xout[DOF(nN,"xt")-1+i],i=1..6);
 

We express the asymmetry of the spring by the relation of the horizontal displacement to the vertical displacement of the upper end. 

> dis_x:=Xout[DOF(nN,"xt")];
 

> dis_y:=Xout[DOF(nN,"yt")];
 

> dis_z:=Xout[DOF(nN,"zt")];
 

> asymmetry:=sqrt(dis_x**2+dis_y**2)/dis_z;
 

We see that the horizontal displacement of this "regular" spring caused by a vertical load is nearly the same as the vertical displacement. And the horizontal displacement points in the direction with the angle to the y-axis 

> angle:=evalf(arctan(dis_y/dis_x)*180/Pi);
 

Of cause the value of this relation depends on the geometry of the spring.