Skip to content

Mechanical Analyses

Austen Goddu edited this page Nov 6, 2024 · 1 revision

The geometry informed characteristics encompass the analyses that rely on the tether's construction to be calculate. Each is its own standalone function that can be used to provide more information, but the high-level results can also be viewed using the RoundTetherDesign.tetherDetails() function.

Mass

The RoundTetherDesign class has a calculateMass() function which traverses the tree layer by layer and calculates the mass from the layer's volume and density of its material. This function is run on construction of the RoundTetherDesign object, but can also be run standalone for more information.

This function has only two, optional, arguments:

  • breakdown: Toggles returning a matrix of layer specific mass information for the tether. Defaults to False.
  • verbose: Prints the aforementioned matrix in a more human-readable format. Defaults to false.

An example of calculating the mass information for a given tether design with an abbreviated output (which can get quite long) is shown below using the same tether design from the Quick Start page:

Code

from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign

# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)

# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]

# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)

# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)

# Calculate mass & 
mass = tether.calculateMass(breakdown=False, verbose=True)

Output (Abbreviated)

image

Strength

The strength analysis within the tools is split into two different analyses which define estimates for the upper and lower bounds on the tether's strength, expressed in newtons. Both analyses, unhelixStrength() and straightRunStrength() are run automatically when creating a RoundTetherDesign object and correspond to its strengthUpperBound and strengthLowerBound members respectively.

Unhelix Strength

The upper bound estimate is the RoundTetherDesign.unhelixStrength() function, which calculates the breaking force from the yield stress/strain assuming helixed layers would see load only after the tether has stretched some amount. Layers only contribute if their length is less than or equal to the first yield strain reach by the materials. This analysis has two arguments:

  • output: Whether to print the analysis results in addition to returning the value. Defaults to True.
  • verbose: Whether to include a per-layer breakdown on strength contribution when output is True. Defaults to False.

An example of the unhelixStrength analysis can be seen below using the example tether design from the quick start section:

Code

from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign

# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)

# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]

# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)

# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)

# Calculate unhelix strength
strengthUpperBound = tether.unhelixStrength(output=True, verbose=True)

Output

image

Straight Run Strength

The lower bound estimate of a tether's strength is provided by the RoundTetherDesign.straightRunStrength() function. This analysis assumes that all layers in a construction see load immediately, without accounting for helixed members. Like the unhelixStrength() function this has two optional arguments:

  • output: Whether to print the analysis results in addition to returning the value. Defaults to True.
  • verbose: Whether to include a per-layer breakdown on strength contribution when output is True. Defaults to False.

An example of the straightRunStrength analysis can be seen below using the example tether design from the quick start section:

Code

from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign

# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)

# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]

# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)

# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)

# Calculate straight-run strength
strengthLowerBound = tether.straightRunStrength(output=True, verbose=True)

Output (abbreviated)

image

Minimum Bend Radius

The RoundTetherDesign class has a function called calculateMinBendRadius() which estimates the minimum bending radius for a given tether design based on rules of thumb from vendors and the fiber optic association. There are three guidelines used within TetherCAD:

  • The MBR should be no smaller than 8 times the overall tether diameter.
  • The MBR should be no smaller than 12 times the diameter of the largest electrical wire.
  • The MBR should be no smaller than 20 times the diameter of the largest fiber optic wire.

These guidelines are adapted from the following sources: Fiber Optic Association Anixter

The calculateMinBendRadius() function calculates each of these guidelines and returns the greatest as the minimum bend radius of the tether. This information is calculated on the creation of a RoundTetherDesign object and is printed with the tetherDetails() function, but can also be run standalone:

Code

from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign

# Construct a kapton insulated copper wire
conductor = Layer("copper", "Conductor", 0.25)
insulator = Wire("electrical", "kapton", "Kapton Wire", 0.15, innerLayer=conductor)

# Arrange the wires in a list
wireList = [insulator, insulator, insulator, insulator]

# Build the layers of the tether
core = Layer("fep", "Core", 0.25, color="black")
memLayer = Layer("fep", "Wires", 0.1, innerLayer=core, memberList=wireList)
strength_layer = Layer("vectran_kuraray_ht", "strength_layer", 0.15, innerLayer=memLayer)
abrasionLayer = Layer("ptfe", "abrasion", 0.2, innerLayer=strength_layer)

# Pass to a tether design object
tether = RoundTetherDesign("Example", abrasionLayer, 100)

# Calculate minimum bend radius 
minBend = tether.calculateMinBendRadius()
print("Min Bend Radius: %f mm" % minBend)

Output

image