Contents
Springs and dampers
Ride and roll rates
How stiff the car is in heave, roll and pitch, from the springs, the bars and the tyres under them.
A spring's rate means little on its own. What the car feels is the rate at the wheel, in the way the body moves, with the tyre underneath. This page builds the car's three stiffnesses from those parts: heave, which sets the ride frequency; roll, which sets how far the body leans in a corner and how the load divides between the axles; and pitch, under braking and drive.
Three elements, two motions
An axle moves in two ways. In heave both wheels rise together; in roll one rises and the other falls. Three kinds of element can spring a wheel, and each works in some of these motions only:
- a corner spring works in both,
- a heave element, a third spring between the two wheels' rockers, works only in heave,
- a roll element or anti-roll bar works only in roll.
A car with corner springs and a bar is coupled: its corner springs carry heave and part of the roll. A car without corner springs is decoupled: the heave element sets the ride and the roll element the roll, each on its own. The template is decoupled at both ends.
Every rate on this page is at the wheel: an element's own rate times the square of its motion ratio, the element's travel per unit of wheel travel. A heave or roll element is stated as the rate each wheel feels from it in its motion.
The tyre in series
The suspension does not stand on the road. It stands on the tyre, and the two are springs in series: each carries the whole load, and their deflections add. The pair is softer than either:
- the suspension's rate at the wheel in the motion: corner spring plus heave element for heave, corner spring plus roll element for roll
- the tyre's vertical rate, 110 N/mm on the template
Heave: the ride rate
In heave the suspension offers its corner spring and its heave element:
- the corner spring at the wheel
- the heave element at the wheel
The ride rate and a corner's share of the sprung mass give the ride frequency, 3.27 Hz at the front and 3.20 Hz at the rear of the template; see Sprung and unsprung mass.
Roll: the roll rate
Roll the body by a small angle about the car's centre-line, and each wheel of an axle moves by , one up and one down. Each pushes back with , a lever of from the centre, so the pair resists with a moment
- the roll element or anti-roll bar at the wheel
- the axle's track
The rear's is 468.9 N·m/deg, so the front carries 49.5 % of the car's roll stiffness. That share is the strongest lever on how the load transfer divides between the axles, and so on the car's balance; see Load transfer.
How far the body rolls
The body does not roll about its centre-line but about the roll axis, the line through the front and rear roll centres (see Roll and pitch centres). The sideways inertia force acts at the centre of gravity, a height above that axis, and rolls the body against both axles' stiffness. As the body rolls its centre of gravity swings outboard, and its weight adds a moment of its own, . Together:
- both axles' roll stiffness, 929.3 N·m/deg on the template
- the CG's height above the roll axis where the CG is, 297.0 mm
- how much the CG swinging outboard adds; it grows without bound as the springs get too soft to hold the body up
A roll gradient near 1 deg/g is soft for a Formula Student car and usual for a road car; with aerodynamic downforce to protect, race cars run less.
Pitch
Under braking the front axle compresses and the rear extends, each on its ride rate: the body pitches about a point between them. With and the two axles' rates, both wheels together, over the wheelbase :
- the CG height, 300 mm
- the load the CG puts on the front axle per metre of nose-down movement, as it goes forward with the pitch
Equation (6) takes the load transfer per g, compresses the front and extends the rear by it, and divides by the wheelbase. Like the roll gradient it is stated as a magnitude: nose down per g of braking, nose up per g of drive. The anti features, which take some of the transfer through the links instead of the springs, are not in this number; see Roll and pitch centres.
What the model assumes
- Every rate is linear and taken at the static ride: the motion ratios do not change with travel, and the tyre's rate does not change with load.
- The body is rigid. It does not twist between the axles.
- The roll centres and the roll axis stay where they are at the static ride.
- Heave, roll and pitch are separate. On a real car with unequal axles they couple a little.
- The roll gradient is the body's roll on its springs and tyres. Roll the tyres' own lean adds through their sidewalls is in the tyre rate, not separate.
In the app
Vehicle Dynamics › Balance & loads, under "Ride & roll (steady state)", lists the ride rates, ride frequencies, roll rates, roll gradient, pitch rate, pitch gradient and the front's share of the roll stiffness, "Roll-stiffness front". The roll and pitch rates are in N·m per degree, as equations (3) and (5) give them.
Kinematics, under "Rates" in the readout rail, gives each axle's roll rate with the bar and heave element at the wheel, and the car's pitch rate and both gradients. The rates there are the ones the model starts from: the springs and elements times the square of their motion ratios, read off the linkage.
Check it yourself
The script builds the three stiffnesses of the template from example_car.m and compares all fourteen numbers with the app's.
>> ride_and_roll_rates Quantity This script PaceDynamics Diff ----------------------------------------------------------------------------- Ride rate, front [N/mm] 26.5109 26.5109 0% Ride rate, rear [N/mm] 28.6472 28.6472 0% Ride frequency, front [Hz] 3.26536 3.26536 0% Ride frequency, rear [Hz] 3.19647 3.19647 0% Roll rate at the wheel, front [N/mm] 36.6351 36.6351 0% Roll rate at the wheel, rear [N/mm] 36.1 36.1 0% Roll stiffness, front [N*m/deg] 460.37 460.37 1.2e-14% Roll stiffness, rear [N*m/deg] 468.894 468.894 1.2e-14% Front share of roll stiffness [-] 0.495414 0.495414 0% CG roll gain [-] 1.01489 1.01489 0% Roll gradient [deg/g] 0.852918 0.852918 0% CG pitch gain [-] 1.01131 1.01131 0% Pitch gradient [deg/g] 0.725694 0.725694 1.5e-14% Pitch stiffness [N*m/deg] 1230.39 1230.39 1.8e-14% All 14 quantities agree with PaceDynamics (largest difference 1.8e-14 %).
The script
%% Ride and roll rates: what the car stands on, in heave, roll and pitch % % Companion to the documentation page "Ride and roll rates". Runs unchanged in GNU Octave % (7 or later) and MATLAB. Edit the car in example_car.m and run: % % >> ride_and_roll_rates % % Three elements can spring a wheel, and each works in some modes only: % % corner spring heave, pitch and roll % heave element heave and pitch (both wheels of an axle rise together) % roll element/bar roll (one wheel rises, the other falls) % % In every mode the tyre is in series with what the suspension offers. All rates are % at the wheel: a spring's own rate times the square of its motion ratio, which the % Kinematics tool works out from the hardpoints. % % References: W. F. Milliken and D. L. Milliken, Race Car Vehicle Dynamics (SAE, 1995), % ch. 16 and 18; T. D. Gillespie, Fundamentals of Vehicle Dynamics (SAE, 1992), ch. 5. % % Part of the PaceDynamics documentation, https://pacedyn.dev/docs % SPDX-License-Identifier: MIT [car, app] = example_car(); app = app.rates; g = 9.81; % m/s^2 mm = 1e-3; % m per mm series = @(a, b) a .* b ./ (a + b); m_u = 4 * car.unsprungPerCorner; % kg m_s = car.massTotal - m_u; % kg, sprung m_sf = m_s * car.frontMassFrac; m_sr = m_s * (1 - car.frontMassFrac); %% Heave: ride rate and ride frequency k_ride_f = series(car.wheelRateFront + car.heaveSpringFront, car.tireRateFront); % N/mm at the wheel k_ride_r = series(car.wheelRateRear + car.heaveSpringRear, car.tireRateRear); f_ride_f = sqrt(k_ride_f / mm / (m_sf / 2)) / (2 * pi); % Hz, a corner's sprung mass f_ride_r = sqrt(k_ride_r / mm / (m_sr / 2)) / (2 * pi); %% Roll: a wheel pair of rate k on a track t resists roll with K = k t^2 / 2 k_roll_f = series(car.wheelRateFront + car.arbFront, car.tireRateFront); % N/mm at the wheel k_roll_r = series(car.wheelRateRear + car.arbRear, car.tireRateRear); K_f = (k_roll_f / mm) * (car.trackFront * mm)^2 / 2; % N*m/rad K_r = (k_roll_r / mm) * (car.trackRear * mm)^2 / 2; K = K_f + K_r; % The body rolls about the roll axis, through the two roll centres. Its weight, moved % outboard by the roll, adds a moment of its own: m_s g h_ra phi. h_rc = car.rcHeightFront + (car.rcHeightRear - car.rcHeightFront) * (1 - car.frontMassFrac); % mm, at the CG h_ra = (car.cgHeight - h_rc) * mm; % m G_roll = 1 / (1 - m_s * g * h_ra / K); roll_gradient = m_s * g * h_ra / K * G_roll * 180 / pi; % deg per g %% Pitch: the two axles in series over the wheelbase L = car.wheelbase * mm; % m kF = 2 * k_ride_f / mm; % N/m, both front wheels kR = 2 * k_ride_r / mm; dW = car.massTotal * g * car.cgHeight * mm / L; % N moved front to rear per g of a_x sigma = m_s * g * car.cgHeight * mm / L^2; % N/m: front load per metre of nose-down rake G_pitch = 1 / (1 - sigma * (1 / kF + 1 / kR)); pitch_gradient = (dW / kF + dW / kR) / L * G_pitch * 180 / pi; % deg per g, nose down braking K_pitch = L^2 * series(kF, kR); % N*m/rad %% Against the app pd_compare('Ride rate, front [N/mm]', k_ride_f, app.rideRateFront); pd_compare('Ride rate, rear [N/mm]', k_ride_r, app.rideRateRear); pd_compare('Ride frequency, front [Hz]', f_ride_f, app.rideFreqFront); pd_compare('Ride frequency, rear [Hz]', f_ride_r, app.rideFreqRear); pd_compare('Roll rate at the wheel, front [N/mm]', k_roll_f, app.rollWheelRateFront); pd_compare('Roll rate at the wheel, rear [N/mm]', k_roll_r, app.rollWheelRateRear); pd_compare('Roll stiffness, front [N*m/deg]', K_f * pi / 180, app.rollRateFront); pd_compare('Roll stiffness, rear [N*m/deg]', K_r * pi / 180, app.rollRateRear); pd_compare('Front share of roll stiffness [-]', K_f / K, app.frontRollStiffFrac); pd_compare('CG roll gain [-]', G_roll, app.cgRollGain); pd_compare('Roll gradient [deg/g]', roll_gradient, app.rollGradient); pd_compare('CG pitch gain [-]', G_pitch, app.cgPitchGain); pd_compare('Pitch gradient [deg/g]', pitch_gradient, app.pitchGradient); pd_compare('Pitch stiffness [N*m/deg]', K_pitch * pi / 180, app.pitchRate); pd_compare();
Download: ride_and_roll_rates.m · example_car.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, on ride and roll rates.
- T. D. Gillespie, Fundamentals of Vehicle Dynamics (SAE, 1992), ch. 5 and 7.
- J. C. Dixon, Suspension Geometry and Computation (Wiley, 2009), on roll and the roll axis.