-
Notifications
You must be signed in to change notification settings - Fork 0
Spooling Analyses
There are five spooling analyses within the SpoolAnalysis module. These analyses determine the capacity of a tether design on a spool with given dimension, or determine the outer diameter/width of a spool necessary to fit a given tether while constraining either the width or outer diameter. Each analysis is listed below:
- Squarepack Spool Capacity: Determines the length of a passed tether that can fit on the spool by approximating perfect level winding.
- Hexpack Spool Capacity: Determines the length of a passed tether that can fit on the spool by approximating the the tether as a helix by stacking hexagons.
- Average Margined Spool Capacity: Determines the length of a passed tether that can fit on the spool by averaging the Square and Hex Pack spool capacities. Returns the margined capacity if desired.
- Determine Spool Width: Increases the width of a spool until the passed tether fits, given outer and inner diameters.
- Determine Spool OD: Increases the outer diameter of a spool until the passed tether first, given width and inner diameter.
- Spool Volume: Calculates the volume of a spool given inner diameter, outer diamaeter, and width.
Spools generally have three dimensions, but there is a variety of nomenclature for these dimensions. TetherCAD uses the following names for the dimensions of a spool:
- Inner Diameter (ID), the diameter of the dimension the innermost layer of tether is wrapped around. Often referred to as the "barrel" of the spool.
- Outer Diameter (OD), the diameter of the large sides of the spool. Often referred to as the flange of the spool.
- Width, the distance between the inside of the flanges. Often referred to as the traverse of the spool.
An illustration is provided for clarity:
This analysis estimates the amount of a given tether design that can fit on a given spool by approximating perfect level winding. The wires are perfectly stacked on top of each other like stacking squares as shown in cross-section below:
The squares are rotated around the spool at each of their radii from the center axis, the circumference is calculated, and all of the circumference values are summed to give the total length of tether that this spool can fit. This analysis can be run using the squarepack_spool_capacity()
function found in SpoolAnalysis.py
, returns the capacity in meters, and takes the following arguments:
- innerDiameter: The inner diameter (ID) of the spool in mm.
- outerDiameter: The outer diameter (OD) of the spool in mm.
- spoolWidth: The width of the spool in mm.
- tether: The RoundTetherDesign object to use to estimate the spool's capacity.
An example of using the analysis and its output can be seen below:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
from calculation_libraries.SpoolAnalysis import squarepack_spool_capacity
# 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)
# Estimate the spool capacity
capacity = squarepack_spool_capacity(tether.minBendRadius*2, 100, 300, tether)
print("Spool capacity: %fm" % capacity)
This analysis is another analysis that estimates the capacity of a spool for a given tether design. However, since perfect level winding can be very difficult to achieve, this analysis approximates the capacity of a spool by considering the wrap tether similar to stacking hexagons. As a result, each tether wrap fits into the gaps between two below it. An cross-section of this behavior can be seen below:
Like the squares, each wrap patterned this way is rotated around the spool at its radius from the center axis and the circumference is calculated. The sum of these circumferences represents the length of the tether that can fit on the spool, returned in meters.
This analysis can be run using the hexpack_spool_capacity()
function from SpoolAnalysis.py
and takes the following arguments:
- innerDiameter: The inner diameter (ID) of the spool in mm.
- outerDiameter: The outer diameter (OD) of the spool in mm.
- spoolWidth: The width of the spool in mm.
- tether: The RoundTetherDesign object to use to estimate the spool's capacity.
An example using this function with a tether design and the resulting output can be seen below:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
from calculation_libraries.SpoolAnalysis import hexpack_spool_capacity
# 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)
# Estimate the spool capacity
capacity = hexpack_spool_capacity(tether.minBendRadius*2, 100, 300, tether)
print("Spool capacity: %fm" % capacity)
It is unlikely though that either hex or square packing will be perfect when winding a given tether onto a spool. The tether will stack on top of the lower layer exactly in some cases and fall into the gaps in others. An example of a wrapping pattern that is thought to be more realisitc can be seen in the cross section below:
As a result, the average margined spool capacity uses the square and hex packing analyses and computes their average, with the goal of better estimating the capacity of a spool when this is the case. Additionally, it allows the user to specify an acceptable margin, acting as a knockdown factor on the estimate. The results of this analysis with a 30% margin is 0.7 times the actual results of the average. This is helpful when a factor of safety is wanted on a spool design.
The average_margined_spool_capacity()
function can be found in SpoolAnalysis.py
, returns the resultant capacity in meters, and takes the following arguments:
- innerDiameter: The inner diameter (ID) of the spool in mm.
- outerDiameter: The outer diameter (OD) of the spool in mm.
- spoolWidth: The width of the spool in mm.
- tether: The RoundTetherDesign object to use to estimate the spool's capacity.
- packMargin: (Optional) The amount of margin to place on the capacity estimate. 0.5 Corresponds to 50%. Default is 0.
An example using this analysis to estimate the capacity of a spool for a tether design, with 20% margin is shown below:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
from calculation_libraries.SpoolAnalysis import average_margined_spool_capacity
# 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)
# Estimate the spool capacity
capacity = average_margined_spool_capacity(tether.minBendRadius*2, 100, 300, tether, packMargin=0.2)
print("Spool capacity: %fm" % capacity)
This analysis determines the dimensions of a spool necessary to fit a specified tether design by keeping its OD and ID fixed while growing the width. It uses the average margined spool capacity analysis as its capacity estiamte at each iteration, and compares the capacity against the length property of the passed RoundTetherDesign object.
This analysis takes the following arguments:
- tether: The RoundTetherDesign object as a tether design
- innerDiameter: The fixed innerDiameter of the spool
- outerDiameter: The fixed outerDiameter of the spool
- packMargin: (Optional) The amount of margin to place on the capacity estimate. 0.5 Corresponds to 50%. Default is 0.
- verbose: (Optional) Wehther to print spool dimension information. Defaults to True.
This analysis can be called using the determine_spool_width()
function from SpoolAnalysis.py
, and an example using this analysis to size the width of a spool for a given tether design with zero margin can be seen below:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
from calculation_libraries.SpoolAnalysis import determine_spool_width
# 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)
# Estimate the spool capacity
capacity = determine_spool_width(tether, tether.minBendRadius*2, 300)
This analysis determines the dimensions of a spool necessary to fit a specified tether design by keeping its width and ID fixed while growing the OD. Ituses the average margined spool capacity analysis as its capacity estiamte at each iteration, and compares the capacity against the length property of the passed RoundTetherDesign object.
This analysis takes the following arguments:
- tether: The RoundTetherDesign object as a tether design
- innerDiameter: The fixed innerDiameter of the spool
- width: The fixed width of the spool
- packMargin: (Optional) The amount of margin to place on the capacity estimate. 0.5 Corresponds to 50%. Default is 0.
- verbose: (Optional) Wehther to print spool dimension information. Defaults to True.
This analysis can be called using the determine_spool_od()
function from SpoolAnalysis.py
, and an example using this analysis to size the width of a spool for a given tether design with zero margin can be seen below:
from tether_analysis.TetherDesign import Layer, Wire, RoundTetherDesign
from calculation_libraries.SpoolAnalysis import determine_spool_od
# 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)
# Estimate the spool capacity
capacity = determine_spool_od(tether, tether.minBendRadius*2, 150)
This analysis uses the dimensions of a spool (ID, OD, Width) to quickly calculate the amount of volume available for a tether. It returns the volume in
- outerDiameter: Outer diameter of the spool in mm.
- innerDiameter: Inner diameter of the spool in mm.
- spoolWidth: Width the spool in mm.
This analysis can be run using the determine_spool_vol()
function in SpoolAnalysis.py
and an example of its use can be seen below:
from calculation_libraries.SpoolAnalysis import determine_spool_vol
vol = determine_spool_vol(200, 100, 150)
print("Volume available for tether: %f mm^3" % vol)