FOA Spring Rate Calculator & Coilover Setup Guide
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
line-height: 1.6;
color: #333;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
}
.calculator-container {
background: #ffffff;
border: 1px solid #e1e1e1;
border-radius: 8px;
padding: 30px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
margin-bottom: 40px;
}
.calc-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
}
@media (max-width: 768px) {
.calc-grid {
grid-template-columns: 1fr;
}
}
.input-group {
margin-bottom: 20px;
}
.input-group label {
display: block;
margin-bottom: 8px;
font-weight: 600;
color: #2c3e50;
}
.input-group input {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
box-sizing: border-box;
}
.input-group small {
color: #666;
font-size: 0.85em;
display: block;
margin-top: 5px;
}
.btn-calculate {
background-color: #d32f2f;
color: white;
border: none;
padding: 15px 30px;
font-size: 18px;
font-weight: bold;
border-radius: 4px;
cursor: pointer;
width: 100%;
transition: background-color 0.3s;
text-transform: uppercase;
}
.btn-calculate:hover {
background-color: #b71c1c;
}
.results-section {
background-color: #f0f0f0;
padding: 20px;
border-radius: 4px;
border-left: 5px solid #d32f2f;
margin-top: 20px;
}
.result-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
padding-bottom: 10px;
border-bottom: 1px solid #ddd;
}
.result-row:last-child {
border-bottom: none;
margin-bottom: 0;
padding-bottom: 0;
}
.result-label {
font-weight: 600;
}
.result-value {
font-size: 1.25em;
font-weight: bold;
color: #d32f2f;
}
.section-title {
color: #d32f2f;
border-bottom: 2px solid #eee;
padding-bottom: 10px;
margin-bottom: 20px;
margin-top: 0;
}
.article-content h2 {
color: #2c3e50;
margin-top: 30px;
}
.article-content p {
margin-bottom: 15px;
}
.dual-rate-box {
margin-top: 40px;
padding-top: 20px;
border-top: 2px dashed #ddd;
}
Step 1: Calculate Required Spring Rate
Target Setup Requirements
Angle Correction Factor:
0
Target Combined Rate:
0 lbs/in
This is the combined spring rate required to maintain your desired ride height. For coilovers, you will split this into two springs (Dual Rate) below.
Step 2: Dual Rate Combiner (Tender + Main)
Test different Upper and Lower spring combinations to match your Target Combined Rate above.
Combination Results
Actual Combined Rate:
0 lbs/in
Match Status:
–
Understanding FOA Spring Rate Calculations for Off-Road Suspensions
Setting up an off-road vehicle with FOA (First Over All) coilovers requires precise mathematical calculations to ensure the suspension performs correctly over rough terrain. Unlike standard street car suspensions, off-road setups often utilize a "Dual Rate" spring configuration, consisting of an upper spring (tender) and a lower spring (main).
Why Use a Dual Rate Setup?
A dual-rate coilover setup provides two distinct spring rates during the suspension travel.
- Combined Rate (Ride Rate): When the vehicle is at ride height and during the initial compression, both springs work together in series. This results in a softer spring rate that absorbs small bumps and provides a smooth ride.
- Lower Rate (Main Rate): Once the suspension compresses enough for the slider to hit the stop nuts, the upper spring is locked out. The suspension then transitions to using only the stiffer lower spring, preventing bottoming out on large jumps or hard hits.
Calculating Sprung Weight and Angle Correction
The most critical input for your calculation is the Sprung Corner Weight. This is the actual weight resting on the shock, excluding the weight of the tire, wheel, brakes, and axle (unsprung weight).
Additionally, the mounting angle of the shock drastically affects the effective spring rate. A shock mounted perfectly vertical (0 degrees) has a 1:1 efficiency ratio regarding angle. However, as you lay the shock down (increase the angle), the mechanical advantage of the weight over the spring increases.
The formula used in this calculator adjusts for the angle using the cosine squared of the angle from vertical. This ensures that if your shocks are mounted at a 20-degree angle, the calculator prescribes a stiffer spring rate to compensate for the loss of leverage.
The Dual Rate Formula
When two springs are stacked on top of each other, the resulting combined rate is softer than either individual spring. The formula for calculating the combined rate is:
Combined Rate = (Upper Rate × Lower Rate) ÷ (Upper Rate + Lower Rate)
For example, if you use a 200 lbs/in upper spring and a 300 lbs/in lower spring, your combined rate at ride height is 120 lbs/in. This allows for a plush ride while cruising, but transitions to the full 300 lbs/in stiffness when the suspension compresses deep into its travel.
How to Use This Calculator
- Determine Sprung Weight: Weigh the vehicle at each corner and subtract the unsprung weight (wheels/axles).
- Measure Shock Angle: Measure the angle of the shock relative to vertical.
- Decide on Sag: For off-road applications, target sag (droop) is usually between 40% and 50% of total shock travel. For example, on a 14″ travel shock, you might want 7″ of shaft showing (50% sag) or 8″ showing (approx 40% sag).
- Calculate Target Rate: Use the first section of the calculator to find the Combined Rate needed to hold the vehicle at that height.
- Select Springs: Use the second section to test different spring pairs (e.g., 150/200, 200/250) until their combined rate matches your target.
function calculateTargetRate() {
// Get Inputs
var weight = parseFloat(document.getElementById("cornerWeight").value);
var angle = parseFloat(document.getElementById("shockAngle").value);
var sag = parseFloat(document.getElementById("desiredSag").value);
// Validation
if (isNaN(weight) || isNaN(angle) || isNaN(sag) || sag === 0) {
alert("Please enter valid numbers for Weight, Angle, and Sag.");
return;
}
if (angle >= 90) {
alert("Shock angle must be less than 90 degrees.");
return;
}
// Calculations
// Convert angle to radians
var radians = angle * (Math.PI / 180);
// Angle Correction Factor (ACF)
// Physics: Force acts along the shock shaft = Weight / cos(theta)
// Travel ratio = Shock moves cos(theta) for every 1 unit of vertical wheel travel
// Stiffness Required = Weight / (Sag * cos(theta)^2)
// Note: Assuming Motion Ratio is 1:1 (Axle mounted) regarding the control arm leverage,
// strictly calculating based on shock angle geometry here.
var cosTheta = Math.cos(radians);
var angleFactor = Math.pow(cosTheta, 2); // cos^2(theta)
// Calculate Required Rate
// Formula: Rate = SprungWeight / (Sag * AngleFactor)
var rate = weight / (sag * angleFactor);
// Display Results
document.getElementById("targetResults").style.display = "block";
document.getElementById("angleFactor").innerHTML = angleFactor.toFixed(3);
document.getElementById("requiredRate").innerHTML = Math.round(rate) + " lbs/in";
// Store target for comparison
window.targetRateGlobal = rate;
}
function calculateDualRate() {
// Get Inputs
var upper = parseFloat(document.getElementById("upperSpring").value);
var lower = parseFloat(document.getElementById("lowerSpring").value);
// Validation
if (isNaN(upper) || isNaN(lower) || upper <= 0 || lower <= 0) {
alert("Please enter valid positive numbers for Spring Rates.");
return;
}
// Calculation: (K1 * K2) / (K1 + K2)
var combined = (upper * lower) / (upper + lower);
// Display Results
document.getElementById("dualResults").style.display = "block";
document.getElementById("calcCombinedRate").innerHTML = Math.round(combined) + " lbs/in";
// Compare with Target if available
var matchStatus = document.getElementById("matchStatus");
if (window.targetRateGlobal) {
var diff = Math.abs(window.targetRateGlobal – combined);
var percentageDiff = (diff / window.targetRateGlobal) * 100;
if (percentageDiff < 5) {
matchStatus.innerHTML = "
Perfect Match (Within 5%)";
} else if (combined > window.targetRateGlobal) {
matchStatus.innerHTML = "
Too Stiff (" + Math.round(percentageDiff) + "% variance)";
} else {
matchStatus.innerHTML = "
Too Soft (" + Math.round(percentageDiff) + "% variance)";
}
} else {
matchStatus.innerHTML = "Calculate Target Rate in Step 1 to see comparison.";
}
}