Off Road Coilover Spring Rate Calculator

Off-Road Coilover Spring Rate Calculator

Calculate optimal spring rates for custom off-road suspensions

Exclude weight of axle, wheels, and tires.
0° is straight up and down.
(Shock Travel / Wheel Travel). Usually 1.0 for solid axles.
How many inches the spring should compress at rest.

Recommended Setup

Total Required Spring Rate 0 lbs/in

Understanding Off-Road Spring Rates

Choosing the correct spring rate is the foundation of a high-performance off-road suspension. Whether you are building a rock crawler, a desert runner, or a custom overland rig, the spring rate determines your ride height, bottom-out resistance, and overall articulation ability.

How to Calculate Sprung Weight

Sprung weight is the portion of the vehicle's weight supported by the springs. To get an accurate calculation, you should subtract the "unsprung weight" (axles, wheels, tires, and half the weight of the shocks/links) from the total vehicle weight. For the best results, use corner scales to find the exact weight on each individual tire.

The Impact of Shock Angle

As a shock is angled away from vertical, its effectiveness decreases. This is known as "angle correction." An angled shock requires a stiffer spring to achieve the same ride height as a vertical shock. Our calculator uses the cosine of the angle to adjust the force requirements automatically.

Motion Ratio Explained

On most solid-axle vehicles where the shock is mounted directly to the axle, the motion ratio is 1:1. However, on independent front suspensions (IFS) or trailing arm rears, the shock is often mounted further inboard on the arm. If the shock moves 5 inches for every 10 inches of wheel travel, your motion ratio is 0.5. Because this is a leverage calculation, the motion ratio is squared in the final formula.

Dual Rate Coilover Tips

Most off-road coilovers use two springs (a primary and a tender). The "Combined Rate" (which this calculator provides) is active when both springs are compressing together.

Formula for Combined Rate: (Spring A x Spring B) / (Spring A + Spring B)

To achieve a 150 lbs/in combined rate, you might use two 300 lbs/in springs. Once the slider hits the stop (lockout), the rate jumps to the single rate of the lower spring.

function calculateSpringRate() { var cornerWeight = parseFloat(document.getElementById('cornerWeight').value); var shockAngle = parseFloat(document.getElementById('shockAngle').value); var motionRatio = parseFloat(document.getElementById('motionRatio').value); var targetCompression = parseFloat(document.getElementById('targetCompression').value); if (isNaN(cornerWeight) || isNaN(shockAngle) || isNaN(motionRatio) || isNaN(targetCompression) || targetCompression <= 0 || motionRatio <= 0) { alert("Please enter valid positive numbers for all fields."); return; } // Convert angle to radians var angleRad = shockAngle * (Math.PI / 180); // Step 1: Adjust weight for angle // Force at the shock = Corner Weight / cos(angle) var effectiveWeightAtShock = cornerWeight / Math.cos(angleRad); // Step 2: Adjust for Motion Ratio // Spring Rate = (Effective Weight / (Motion Ratio^2)) / Compression // However, in off-road terms usually MR is ShockTravel/WheelTravel // Required Force at Spring = EffectiveWeight / MotionRatio // But since the spring is on the shock, we divide by MR again for the leverage var requiredSpringRate = (effectiveWeightAtShock / (motionRatio * motionRatio)) / targetCompression; var finalRate = Math.round(requiredSpringRate); document.getElementById('finalRate').innerText = finalRate + " lbs/in"; // Provide a suggestion for dual-rate setup var upperSpring = Math.round(finalRate * 2); var lowerSpring = Math.round(finalRate * 2); var note = "To achieve this combined rate with a dual-rate setup, you could start with two " + (finalRate * 2) + " lbs/in springs. (Note: ( " + (finalRate * 2) + " * " + (finalRate * 2) + " ) / ( " + (finalRate * 2) + " + " + (finalRate * 2) + " ) = " + finalRate + ")."; document.getElementById('dualRateNote').innerText = note; document.getElementById('resultsArea').style.display = 'block'; // Smooth scroll to result document.getElementById('resultsArea').scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment