Created: 2026-04-25Updated: 2026-05-17

Spiral Torsion Spring Optimizer

Volume

Range of Motion

Material Data

Other

Output to CAD

Height mm
Thickness mm
Center Pad Radius mm
Spring Inner Radius mm
Pitch @ Rest mm
Minimum Coil Gap0.50 mm
Revolutions @ Rest

Optimizer Message

Idle

Run the optimizer to see status.

Other Outputs

Outer Radius @ Preload mm
Spiral Arclength mm
Stiffness Nmm/rad
Unutilized Elasticity MPa
Max Preload Torque Nmm

Generating the 3D Model

To generate a usable spring model, paste the outputs from this optimizer into the parametric FreeCAD file found on my printables page. There are instructions on that page for where to paste the outputs

Source Code

Find the source code along with an in-depth explanation of how this works on my github.

Getting errors/no output?

It is possible to input values to this optimizer for which no feasible spring exists, and in this case the behavior is not totally predicable. In the future I will add more input validation and create more error codes that explain what is wrong and how to adjust the inputs so a feasible spring can be found. There are many moving parts in this problem so to speak, and the relationships between the parameters are not always intuitive. For instance, often setting the preload torque to zero will result in an infeasible spring when one was feasible before. How can this be? You would think that mandating a certain preload torque would be adding more constraints, right? So, removing that constraint cannot result in an infeasible spring, right? Well, actually, the optimizer only constrains the radius of the spring at the preload state, meaning its radius at rest can be anything if a preload torque is specified. This gives the optimizer a much larger search space in which to find a feasible optimum. When you eliminate the preload torque, now the radius at rest has to be constrained, and you wind up with a much smaller search space, in which there may not be any feasible candidates. There are other such counter-intuitive situations that I have not documented yet. Please read the readme file on the github for more information.

Comments

No comments yet. Be the first to share your thoughts!