WOLFRAM SYSTEM MODELER
ContactForcePointsInnerClass for calculation of cylindrical contact force between two teeth on an outer and inner spur gear |
SystemModel["RotatingMachinery.Gears.Components.ContactForcePointsInner"]
This model calculates the force between two teeth on an outer spur gear and an inner spur gear. It also determines when this force should be applied, dependent on the isFront parameter and toothIndexShift.
At initialization, a tooth pair will be selected with different indices, one tooth on the outer gear in frame_z1 and one tooth on the outer gear in frame_z2. Normally, six of these components are put in the component GearForceCalculationInner, which results in six tooth pairs. To visualize where these tooth pairs are located, it is possible to turn on a parameter called "debugPoints", which will result in the following visualization.
Figure 1: Debug points.
Two spheres with the same color should be paired up together. This way, you can see if the forces have been placed at appropriate positions.
The contact ratio is calculated continuously and can be found by plotting the variable epsilon. Epsilon is calculated through the following equations:
The contact ratio should never be below 1 for a stable simulation result. If it is below 1, it might mean that the gears are too far apart, and the conditions for ContactForcePoints to switch teeth might not be triggered correctly.
The forces calculated depend on the distance between two coordinates in a tooth pair. The coordinates will always be on the line of contact (LoC). The force used is based on Hertz contact theory between two cylinders.
It is assumed that the teeth have contact in the whole gearwheel width, i.e. no crowning. Equation for the Hertz contact width b:
and displacement of cylinders, delta:
where F is the force, nu is the Poisson ratio, Emod is Young's modulus, L is the length of the cylinder, and R is the radius of the cylinder. To simplify the equations, Ered is defined as:
With the preceding equations, delta as a function of contact force can be solved. However, the simulation time can be improved if the following equations are rewritten as shown. The error in deformation delta is normally less than 1% and in contact stress even better.
The relation between contact force and indentation depth can be written as:
where with good accuracy, k1 can be set to:
and
Then, the load indentation depth can be written as:
With the notation used in the source code:
This describes the force dependent on indentation depth and geometry of the cylinders. The geometry of the cylinders in contact will change when moving on the line of contact, i.e. the curvature radii rk1 and rk2 will either start with a small radius and increase when moving on the LoC or start with a big radius and decrease when moving on the LoC. They are defined through the following equation:
where rb1 and rb2 are the base circle radii of wheel 1 and wheel 2, respectively, and ToothBaseAngle describes the angle from the start of when the base of a tooth intersects with the LoC to its current angle. LoCTangent is a vector describing the LoC tangent line.
The forces are visualized by a blue and red arrow for each tooth pair, representing the force from wheel one and wheel two, respectively.
The Hertz contact stress for a cylinder contact is:
To be able to compare the forces from simulation to theoretical textbook values, there is a secondary implementation of the force. What can be compared is the contact pressure sigmaH and the indentation depth delta. The theoretical versions of these variables are called sigmaHTheoretical and deltaApprox. The theoretical values are calculated according to the formulas below:
where Kl is the load factor and Kv is the dynamic load factor (default value for both is 1).
where zH is the form factor, zM is the material factor, and zE is the gear ratio factor.
[1] Dahl, M., H. Wettergren, and H. Tidefelt. "Modelica Spur Gears with Hertzian Contact Forces." Proceedings of the 12th International Modelica Conference, Prague, Czech Republic, May 15-17, 2017. Linköping Electronic Conference Proceedings 132, no. 82 (2017): 755-763. http://dx.doi.org/10.3384/ecp17132755.
L |
Value: Type: Length (m) Description: Contact width of wheel |
---|---|
N_to_m |
Value: Type: Real (N/m) Description: Parameter that scales the arrows indicating the forces between teeth |
m |
Value: Type: Module (m) Description: Gear module |
alpha0 |
Value: 20 * Modelica.Constants.pi / 180 Type: Angle (rad) Description: Reference profile angle |
z1 |
Value: Type: Integer Description: Number of teeth in outer gear wheel |
z2 |
Value: Type: Integer Description: Number of teeth in inner gear wheel |
x1 |
Value: Type: Real Description: Profile shift for gear wheel one |
x2 |
Value: Type: Real Description: Profile shift for gear wheel two |
isFront |
Value: Type: Boolean Description: Boolean to show if forward flank is used, true = front, false = rear. Front means forward flank if wheel is rotating counter-clockwise |
useDebugPoints |
Value: false Type: Boolean Description: Set to true to get visualizers on bases of active teeth |
toothIndexShift |
Value: 0 Type: Integer Description: Parameter to shift the tooth initialized to. If = 0 will be the center tooth closest to LoC. |
toothIndexSkip |
Value: 2 Type: Integer Description: How many teeth to skip when finding a new tooth to calculate p1 and p2 |
tipReliefAmplitude1 |
Value: 0.001 * m Type: Distance (m) Description: Tip relief amplitude of a gear tooth on the outer spur gear |
tipReliefLength1 |
Value: 0.01 * m Type: Distance (m) Description: Tip relief length of a gear tooth on the outer spur gear |
rb1 |
Value: m * z1 * cos(alpha0) / 2 Type: Radius (m) Description: Base circle radius of tooth on wheel 1 |
rb2 |
Value: m * z2 * cos(alpha0) / 2 Type: Radius (m) Description: Base circle radius of tooth on wheel 2 |
ra1 |
Value: m * (z1 / 2 + x1 + 1) Type: Radius (m) Description: Top circle radius tooth on outer gear wheel |
ra2 |
Value: m * (z2 / 2 + x2 - 1) Type: Radius (m) Description: Top circle radius tooth on inner gear wheel |
rf1 |
Value: m * (z1 / 2 + x1 - 1.25) Type: Radius (m) Description: Root circle radius on wheel 1 |
rf2 |
Value: m * (z2 / 2 + x2 + 1.25) Type: Radius (m) Description: Distance from center to bottom of inner gear |
sa1 |
Value: (sb1 / rb1 - 2 * inva1) * ra1 Type: Distance (m) Description: Top thickness of tooth on outer gear wheel |
sa2 |
Value: (sb2 / rb2 + 2 * inva2) * ra2 Type: Distance (m) Description: Top thickness of tooth on inner gear wheel |
sb1 |
Value: (Modelica.Constants.pi / 2 + 2 * x1 * tan(alpha0) + z1 * inv20) * m * cos(alpha0) Type: Distance (m) Description: Base thickness of tooth on outer gear wheel |
sb2 |
Value: (Modelica.Constants.pi / 2 - 2 * x2 * tan(alpha0) - z2 * inv20) * m * cos(alpha0) Type: Distance (m) Description: Base thickness of tooth on inner gear wheel |
pb |
Value: Modelica.Constants.pi * m * cos(alpha0) Type: Distance (m) Description: Distance of bottom for entire gear, front base of tooth n to front base of tooth n+1 |
inva1 |
Value: tan(alphaa1) - alphaa1 Type: Angle (rad) Description: Involute for alphaa1 |
inva2 |
Value: tan(alphaa2) - alphaa2 Type: Angle (rad) Description: Involute for alphaa2 |
inv20 |
Value: tan(alpha0) - alpha0 Type: Angle (rad) Description: Involute of reference profile angle (inv(alpha0), alpha0 = 20 degrees) |
alphaa1 |
Value: acos(rb1 / ra1) Type: Angle (rad) Description: Angle between rb1 and ra1 (first to last point of contact) |
alphaa2 |
Value: acos(sqrt(ra1 ^ 2 - rb1 ^ 2) - rb1 / tan(alpha0) + rb2 / tan(alpha0)) Type: Angle (rad) Description: Angle between rb2 and last point of contact |
angleBetweenTeeth1 |
Value: 2 * Modelica.Constants.pi / z1 Type: Angle (rad) Description: Angle between the teeth in outer gear wheel |
angleBetweenTeeth2 |
Value: 2 * Modelica.Constants.pi / z2 Type: Angle (rad) Description: Angle between the teeth in inner gear wheel |
toothOffsetAngle1 |
Value: if isFront then sb1 / (2 * rb1) else -sb1 / (2 * rb1) Type: Angle (rad) Description: Offset angle (from center of tooth 1 to base of tooth 1 in outer wheel), depending on isFront |
toothOffsetAngle2 |
Value: if isFront then (pb - sb2) / (2 * rb2) else -(pb - sb2) / (2 * rb2) Type: Angle (rad) Description: Offset angle (from center of tooth 1 to base of tooth 1 in inner wheel), depending on isFront |
rollAngleRa1 |
Value: sqrt((ra1 / rb1) ^ 2 - 1) Type: Angle (rad) Description: Rolling angle for intersection with top circle on outer gear wheel |
rollAngleRa2 |
Value: sqrt((ra2 / rb2) ^ 2 - 1) Type: Angle (rad) Description: Rolling angle for intersection with top circle on inner gear wheel |
absolutePositionWheel1 |
Type: AbsolutePosition Description: Measure absolute position vector of the origin of a frame connector |
|
---|---|---|
absolutePositionWheel2 |
Type: AbsolutePosition Description: Measure absolute position vector of the origin of a frame connector |
|
absoluteAnglesWheel1 |
Type: AbsoluteAngles Description: Measure absolute angles between frame connector and the world frame |
|
absoluteAnglesWheel2 |
Type: AbsoluteAngles Description: Measure absolute angles between frame connector and the world frame |
|
force_z2 |
Type: WorldForce Description: External force acting at frame_b, defined by 3 input signals and resolved in frame world, frame_b or frame_resolve |
|
force_z1 |
Type: WorldForce Description: External force acting at frame_b, defined by 3 input signals and resolved in frame world, frame_b or frame_resolve |
|
torque_z2 |
Type: WorldTorque Description: External torque acting at frame_b, defined by 3 input signals and resolved in frame world, frame_b or frame_resolve |
|
torque_z1 |
Type: WorldTorque Description: External torque acting at frame_b, defined by 3 input signals and resolved in frame world, frame_b or frame_resolve |
|
fixedShape |
Type: FixedShape Description: Visualizing an elementary shape with dynamically varying shape attributes (has one frame connector) |
|
fixedShape1 |
Type: FixedShape Description: Visualizing an elementary shape with dynamically varying shape attributes (has one frame connector) |
|
arrow2 |
Type: Arrow Description: Visualizing an arrow with variable size |
|
arrow1 |
Type: Arrow Description: Visualizing an arrow with variable size |
RotatingMachinery.Gears.Components Class calculating internal gear mesh contact forces |