PaceDynamics Documentation Open the app
Contents

Springs and dampers

Springs, bars, heave and roll elements

What each spring gives the wheel, and in which motion: corner springs, anti-roll bars, and the heave and roll elements of a decoupled car.

Model as of 0.338Figures from the Formula Student single-car templateOctave check Exact

Three kinds of element can hold the body up, and they differ less in how stiff they are than in which motion of the wheels they see. This page turns each into the rate the wheel feels, works out a bar's rate from its tube, and shows why a corner spring is exactly a heave element plus a roll element. That identity is how a decoupled car can start out riding and rolling exactly as a car with corner springs and a bar does.

Three elements, one mode at a time

An axle seen from behind, three times: corner springs, a heave element on a beam across both wheels, and a roll element on a beam that slides in heave and turns in rollCorner springskwkwEach wheel on its own spring.Heave elementkhSees the mean of the two wheels.Roll elementkbslidesSees half their difference.
Fig. 1
A corner spring sees its own wheel, a heave element the axle’s mean, a roll element half the difference: each a mode of its own.
Schematic

A corner spring sits between one wheel and the body and sees that wheel alone. A heave element is driven by both wheels of an axle and sees their mean: both wheels up and it compresses, one up and one down and it does not move. A roll element sees half their difference, the mirror image. An anti-roll bar is a roll element; so is a shock spanning the two rockers of a decoupled axle.

Element Heave Pitch Roll
Corner spring works works works
Heave element works works free
Roll element or bar free free works

Pitch is the two axles moving opposite ways, each axle's wheels together, so it works whatever works in heave. Ride and roll rates builds the car's three stiffnesses from these elements once each is stated at the wheel.

At the wheel: the motion ratio squared

A spring is driven through the linkage, so it does not see the wheel's travel. Its motion ratio MR is how far it moves per millimetre the wheel does (Wishbones and struts). Move the wheel by ds and the spring compresses by MRds, pushing back with kMRds; by virtual work that force reaches the wheel multiplied by MR again:

Show the equations with
kw=kMR2,cw=cMR2(1)
kw,f=35⋅0.99902=34.93 N/mm(1)
k,c
the spring's rate and the damper's coefficient, at the unit
MR
the unit's travel per millimetre of wheel travel
kw,cw
the same at the wheel

A damper converts the same way: its speed is the wheel's times MR, and its force reaches the wheel through MR again. The template's corner damper, 2.5 N·s/mm, is 2.495 N·s/mm at the front wheel. That is for a linear damper; a curve converts point by point (Dampers). Because the ratio is squared, a 10 % error in it is a 21 % error in the rate.

The heave element

One element between the two rockers of an axle. Its ratio is its change of length per millimetre of travel of both wheels, and since one element works for two, each wheel gets half its rate at the wheel (Wishbones and struts derives it):

Show the equations with
kw=khMRh22(2)
kw,f=47.64⋅1.211022=34.93 N/mm(2)
kh
the heave element's rate, at the element
MRh
its change of length per millimetre of travel of both wheels

The roll element

A shock between the two rockers' bars is a roll element: in heave the rockers turn alike and it moves bodily, in roll they turn opposite ways and it changes length. Each of its eyes moves MRr along it per millimetre of its own wheel, so when one wheel rises by s and the other falls by s the shock shortens by 2MRrs. Its force F through that travel does the work of two wheels:

Show the equations with
F⋅2MRrds=2Fwds⇒kw=2krMRr2(3)
kw,f=2⋅81.99⋅0.57882=54.93 N/mm(3)
kr
the roll element's rate, at the element
MRr
one eye's travel along it per millimetre of one wheel, the other wheel moving opposite
Fw
the force at each wheel, kws

The factor 2 is the shock spanning both bars. A bar's rate is stated at one drop link already, so for a bar it is 1 and kw=klinkMR2.

A bar from its tube

A U-bar in an oblique view: a tube between two bearings, an arm at each end, a drop link at each arm’s tip, and the tube’s sectionFFLato the wheel’s linkageOne link up by s, the other down by s: the tube twists 2s/a, each arm bends.SectionDd
Fig. 2
A U-bar: the tube twists between its bearings and the arms bend, in series.
Schematic

A U-bar is a tube of length L turning in two bearings, with an arm of length a at each end and a drop link from each arm to its wheel's linkage. Push one link up by s and the other down by s: each arm turns s/a, opposite ways, so the tube twists 2s/a end to end and resists with a torque GJ/L⋅2s/a. At the tip of an arm that torque is a force over a. Each arm also bends as a cantilever, and the two compliances add:

Show the equations with
ktwist=2GJLa2,J=π(D4−d4)32(4)
J=3630 mm4,ktwist=2⋅80000⋅3630181⋅1302=189.9 N/mm(4)
karm=3EIa3,I=J2(5)
karm=520.5 N/mm(5)
klink=(1ktwist+1karm)−1,kw=klinkMRb2(6)
klink=139.1 N/mm,kw=139.1⋅0.59942=49.99 N/mm(6)
D,d
the tube's outside and inside diameters, 16 and 13 mm
G,E
the shear and Young's moduli of steel
MRb
the drop link's travel per millimetre of wheel travel

This is the bar the Kinematics tool's roll-element editor starts from, hung from the template's front rocker: a steel tube as long as the drop links put its arms apart. Compliances in series add, so a bar is never stiffer than its softest part, and stiff arms are worth as much as a thick tube. A drop link that stretches adds a third term to equation (6); this one's links are rigid.

The decoupling identity

Write the corner spring's force on one wheel in terms of what the axle's two wheels do, with di the travel of this wheel and dj of its partner:

kwdi=kwdi+dj2+kwdi−dj2(7)

The first term is a heave element of kw at the wheel, the second a roll element of kw. A corner spring is both at once, which is why it couples the car's heave to its roll. An axle's stiffness in each motion is the sum of what works in it:

kheave=kw+kh,kroll=kw+kb(8)

with kh and kb the heave and roll elements at the wheel. So a decoupled axle can be set up to behave exactly as a coupled one: give its heave element the corner spring's wheel rate, and its roll element the corner spring's plus the bar's. The template was built that way. Its front axle was sized from a 35 N/mm corner spring at a motion ratio of 0.999 and a 20 N/mm bar; its heave element gives each wheel 34.93 N/mm, the corner spring's 34.93, and its roll element 54.93 N/mm, the corner spring's plus 20. The dampers follow the same rule, at 2.495 N·s/mm in both. From there the two motions can be tuned apart, which is the point of decoupling.

The template’s corner spring, heave element and roll element, each at the element and at the wheel, front and rear020406080N/mmFrontCorner spring, sized from35.034.93Heave element47.634.93Roll element82.054.93RearCorner spring, sized from40.038.73Heave element54.438.73Roll element82.753.73
At the elementAt the wheel, frontAt the wheel, rearThe bar’s share
Fig. 3
At the wheel the heave element is the corner spring it replaced, and the roll element the corner spring plus the bar.
Measured

What the model assumes

  • Every rate is linear and taken at the static ride. The motion ratios are read there and do not change with travel; Kinematics and compliance follows them through the stroke.
  • A heave element sees nothing in roll and a roll element nothing in heave. A real linkage leaks a little of each into the other, and the Kinematics tool shows how much.
  • The bar's tube twists and its arms bend, each as a slender elastic beam. The bearings hold the tube without friction or play, and the ends of the tube do not warp.
  • A gapped third spring, one that only engages after some travel, has no rate at the static ride; here it reads zero.

In the app

Kinematics, under "Elements" in the readout rail, gives each axle's heave and roll element ratios, the roll element at its link, and the damping each element gives the wheel. The element editors set a heave or roll element's spring and damper, or switch a roll element between a shock and a bar; a bar's rate comes from its section and arms.

Vehicle Dynamics reads the elements at the wheel, as equations (1) to (3) give them. With a suspension geometry on the car, the springs, bars and elements come from it.

Check it yourself

The script converts the template's corner springs and both elements to the wheel, checks the identity on both axles, and works the starting U-bar's rate from its tube.

springs_and_elements.mwith example_springs.m, pd_compare.mExact: agrees to machine precision
>> springs_and_elements

  Quantity                                This script   PaceDynamics       Diff
  -----------------------------------------------------------------------------
  front corner spring, N/mm                    34.929         34.929         0% 
  front corner damper, N*s/mm                 2.49493        2.49493         0% 
  front heave element, N/mm                    34.929         34.929     2e-14% 
  front   = corner spring                      34.929         34.929     2e-14% 
  front roll element, N/mm                     54.929         54.929         0% 
  front   = corner spring + bar                54.929         54.929         0% 
  front heave damper, N*s/mm                  2.49493        2.49493   1.8e-14% 
  front roll damper, N*s/mm                   2.49493        2.49493         0% 
  rear corner spring, N/mm                    38.7348        38.7348         0% 
  rear corner damper, N*s/mm                  2.42093        2.42093         0% 
  rear heave element, N/mm                    38.7348        38.7348         0% 
  rear   = corner spring                      38.7348        38.7348         0% 
  rear roll element, N/mm                     53.7348        53.7348         0% 
  rear   = corner spring + bar                53.7348        53.7348         0% 
  rear heave damper, N*s/mm                   2.42093        2.42093         0% 
  rear roll damper, N*s/mm                    2.42093        2.42093   1.8e-14% 
  bar: polar moment J, mm^4                   3630.01        3630.01         0% 
  bar: torsion GJ/L, N*mm/rad             1.60443e+06    1.60443e+06         0% 
  bar: twist alone, N/mm                      189.873        189.873         0% 
  bar: arms alone, N/mm                       520.461        520.461         0% 
  bar: at the link, N/mm                       139.12         139.12         0% 
  bar: at the wheel, N/mm                     49.9874        49.9874   1.4e-14% 

  All 22 quantities agree with PaceDynamics (largest difference 2e-14 %).
The script
%% Springs, bars, heave and roll elements: each one's rate at the wheel
%
% Companion to the documentation page "Springs, bars, heave and roll elements". Runs
% unchanged in GNU Octave (7 or later) and MATLAB. Edit the car in example_springs.m and run:
%
%   >> springs_and_elements
%
% An element of rate k that moves MR mm per mm of the wheel gives the wheel k*MR^2: its
% force reaches the wheel through MR, and so does its travel. The two elements of a
% decoupled axle differ only in how they share that:
%
%   heave element   one part between both rockers:  k * MR^2 / 2 at each wheel, in heave
%   roll element    one part between both rockers:  2 * k * MR^2 at each wheel, in roll
%
% A corner spring of k_w at the wheel is exactly a heave element of k_w and a roll element
% of k_w, so the template's elements were sized to give what its corner springs and bars
% gave. The script checks that, and works the starting U-bar's rate from its tube.
%
% The motion ratios come from the Kinematics tool, which solves the linkage for them; the
% script takes them as given.
%
% References: W. F. Milliken and D. L. Milliken, Race Car Vehicle Dynamics (SAE, 1995),
% ch. 16; W. C. Young and R. G. Budynas, Roark's Formulas for Stress and Strain (McGraw-Hill,
% 2002), on torsion and bending of round tubes.
%
% Part of the PaceDynamics documentation, https://pacedyn.dev/docs
% SPDX-License-Identifier: MIT

[car, app] = example_springs();
app = app.springs;

axles = {'front', 'rear'};
for i = 1:2
  a = car.(axles{i});
  c = a.corner;

  %% The corner spring and damper, at the wheel: k * MR^2
  k_corner = c.springRate * c.mr^2;                        % N/mm
  c_corner = c.damper * c.mr^2;                            % N*s/mm

  %% The heave element: one part, both wheels, so each wheel takes half
  k_heave = a.heave.rate * a.heave.mr^2 / 2;               % N/mm at each wheel, in heave
  c_heave = a.heave.damper * a.heave.mr^2 / 2;

  %% The roll element: one part between the bars, which moves with both eyes
  k_roll = a.roll.leverage * a.roll.rate * a.roll.mr^2;    % N/mm at each wheel, in roll
  c_roll = a.roll.leverage * a.roll.damper * a.roll.mr^2;

  %% The identity: heave = corner (+ any third spring), roll = corner + bar
  pd_compare([axles{i} ' corner spring, N/mm'], k_corner, app.(axles{i}).cornerWheel);
  pd_compare([axles{i} ' corner damper, N*s/mm'], c_corner, app.(axles{i}).cornerDamperWheel);
  pd_compare([axles{i} ' heave element, N/mm'], k_heave, app.(axles{i}).heaveWheel);
  pd_compare([axles{i} '   = corner spring'], k_corner, app.(axles{i}).heaveWheel);
  pd_compare([axles{i} ' roll element, N/mm'], k_roll, app.(axles{i}).rollWheel);
  pd_compare([axles{i} '   = corner spring + bar'], k_corner + c.bar, app.(axles{i}).rollWheel);
  pd_compare([axles{i} ' heave damper, N*s/mm'], c_heave, app.(axles{i}).heaveDamper);
  pd_compare([axles{i} ' roll damper, N*s/mm'], c_roll, app.(axles{i}).rollDamper);
end

%% A U-bar from its tube: twist and bending in series
b = car.bar;
J = pi * (b.od^4 - b.id^4) / 32;                % mm^4, polar second moment
I = J / 2;                                      % mm^4, in bending
K_t = b.G * J / b.barLength;                    % N*mm/rad, the tube in torsion
% One link up s, the other down s: the tube twists 2s/a end to end, and the force at a tip
% is the torque over the arm.
k_twist = 2 * K_t / b.armLength^2;              % N/mm at the link
k_arm = 3 * b.E * I / b.armLength^3;            % N/mm, each arm a cantilever
k_link = 1 / (1 / k_twist + 1 / k_arm);         % in series: compliances add
k_wheel = k_link * b.mr^2;                      % N/mm at the wheel

pd_compare('bar: polar moment J, mm^4', J, app.bar.J);
pd_compare('bar: torsion GJ/L, N*mm/rad', K_t, app.bar.torsional);
pd_compare('bar: twist alone, N/mm', k_twist, app.bar.barTwist);
pd_compare('bar: arms alone, N/mm', k_arm, app.bar.armBending);
pd_compare('bar: at the link, N/mm', k_link, app.bar.rateAtLink);
pd_compare('bar: at the wheel, N/mm', k_wheel, app.bar.wheelRate);
pd_compare();

Download: springs_and_elements.m · example_springs.m · pd_compare.m. The scripts are MIT licensed.

Further reading

  • W. F. Milliken and D. L. Milliken, Race Car Vehicle Dynamics (SAE, 1995), ch. 16 and 17, on wheel rates and anti-roll bars.
  • W. C. Young and R. G. Budynas, Roark's Formulas for Stress and Strain (McGraw-Hill, 2002), on torsion and bending of round tubes.
  • J. C. Dixon, Suspension Geometry and Computation (Wiley, 2009), on motion ratios and decoupled layouts.
ChapterSprings, bars, heave and roll elements
PartSprings and dampers
Model as of0.338
Example carthe Formula Student single-car template