Contents
Tyres
Load sensitivity
Why a tyre grips less per newton the harder it is pressed, and why that makes load transfer cost a pair of tyres grip.
Press a tyre twice as hard into the road and it does not make twice the side force. Its friction coefficient falls as its load rises, and that one fact explains why load transfer costs grip, why a light car is not simply a scaled heavy one, and why the balance of a car can be set with springs and bars. Slip and the Magic Formula gives the formula; this page follows it to the axle.
Peak force against load
The friction coefficient falls in a straight line with the load's change from the file's nominal load , so the peak force, the coefficient times the load, is a parabola that bends over:
- the friction coefficient at the nominal load
- its change per unit of relative load: negative for every real tyre
The template's tyre loses nearly a tenth of its friction coefficient between 260 N and 1123 N: 1.945 against 1.764. The app reads off the curve rather than out of equation (1): the largest side force over the slip angle, found to a tenth of a degree, divided by the load. For this tyre, whose curve has no vertical shift, the two agree to a few parts in a million.
Two wheels, one axle
In a turn the axle's load does not change, but it moves outward: the outside wheel gains and the inside wheel loses it (Load transfer). On a parabola the pair's sum is less than twice the middle:
- each wheel's share of the axle's load, standing
- the load moved from the inside wheel to the outside one
The loss grows with the square of the transfer. Nothing about the tyre's slip enters: it is the curvature of alone. Fig. 1 draws it, the two front wheels in a 1.2 g left turn on the curve and their mean below it.
| In a 1.2 g turn | Front axle | Rear axle |
|---|---|---|
| Standing, both wheels at their static load | 2565 N | 2863 N |
| Turning, the outside wheel's peak plus the inside one's | 2487 N | 2785 N |
| Grip lost to the transfer | 78.4 N, 3.1 % | 78.3 N, 2.7 % |
| Equation (2) | 78.4 N | 78.3 N |
The template moves almost the same load across each axle, so each loses almost the same grip in newtons. The front has less to lose it from, so it loses the larger share. Move more of the transfer to one axle, with a stiffer bar or a higher roll centre at that end, and that axle loses more of its grip. That is how springs and bars set a car's balance at the limit.
The cornering stiffness bends over too
The slope through the origin, the cornering stiffness, follows a sine of an arctangent in the load (Slip and the Magic Formula, equation 5). It rises, flattens and peaks where the sine's argument reaches a right angle:
- the file's cornering-stiffness coefficients
Below its peak the curve is concave, so load transfer costs cornering stiffness as it costs grip, and by a larger share: the template's front pair falls from 41 777 to 37 204 N/rad, 10.9 %, and the rear by 10.2 %. In the linear range that is what moves the understeer gradient with lateral acceleration, since each axle's slip angle is its side force over its pair's cornering stiffness.
What the model assumes
- Pure slip, at zero camber and the nominal pressure. Camber moves the friction coefficient with , and a loaded outside wheel usually runs more camber than the inside one.
- The loads are the steady-state ones of Load transfer. The grip envelope reads every wheel at its own load the same way, then adds what the tyres' slip and the car's balance allow.
- Grip falls in a straight line with load. Some tyres bend more at the light end; the Magic Formula's has no higher term, so a fit cannot follow that, and the Tyres tool marks loads beyond where a fit stops behaving like a tyre.
In the app
Tyres draws "Peak lateral μ vs load" and "Cornering stiffness vs load" for each tyre in the library, the curves in Fig. 1 and Fig. 2, out to the most any wheel carries on the car's own g-envelope. The Compare tab reads every tyre at three loads: the lightest wheel, a wheel going straight and the heaviest.
Check it yourself
The script reads and the cornering stiffness off the formula the way the app does, at the six loads in the table, and prints each axle's loss beside equation (2).
>> load_sensitivity In a 1.2 g left turn: Axle standing [N] turning [N] lost [N] parabola (2) [N] front 2565.0 2486.6 78.4 78.4 rear 2863.5 2785.1 78.3 78.3 The parabola is the formula's own peak; the app reads the peak off the curve, in steps of 0.1 deg, so the two can differ by a fraction of a newton. Axle C_alpha standing C_alpha turning front 41777 N/rad 37204 N/rad rear 45660 N/rad 40994 N/rad Quantity This script PaceDynamics Diff ----------------------------------------------------------------------------- mu_y, front, standing [-] 1.8544 1.8544 0% mu_y, rear, standing [-] 1.83581 1.83581 0% mu_y, FL, inside [-] 1.9452 1.9452 0% mu_y, FR, outside [-] 1.76357 1.76357 0% mu_y, RL, inside [-] 1.92661 1.92661 0% mu_y, RR, outside [-] 1.745 1.745 0% C_alpha, front, standing [N/rad] 20888.4 20888.4 0% C_alpha, rear, standing [N/rad] 22829.8 22829.8 0% C_alpha, FL, inside [N/rad] 8734.97 8734.97 0% C_alpha, FR, outside [N/rad] 28469.1 28469.1 0% C_alpha, RL, inside [N/rad] 11533.9 11533.9 0% C_alpha, RR, outside [N/rad] 29460 29460 0% All 12 quantities agree with PaceDynamics (largest difference 0 %).
The script
%% Load sensitivity: why a pair of tyres loses grip to load transfer % % Companion to the documentation page "Load sensitivity". Runs unchanged in GNU Octave % (7 or later) and MATLAB. Edit the tyre in example_tyre.m and run: % % >> load_sensitivity % % A tyre's friction coefficient falls as its load grows, % % mu_y(F_z) = p_Dy1 + p_Dy2 dfz, dfz = (F_z - F_z0) / F_z0, p_Dy2 < 0 % % so its peak force D = mu_y F_z bends over: a parabola in the load. Two wheels sharing % 2 F_z, one with F_z + dF and one with F_z - dF, then make % % D(F_z + dF) + D(F_z - dF) = 2 D(F_z) + 2 p_Dy2 dF^2 / F_z0 % % which is less than the pair standing, by an amount that grows with the SQUARE of the % load transferred. The cornering stiffness bends over the same way. % % The app reads each wheel's mu_y from its curve, as the largest |F_y| over the slip % angle divided by the load, and its cornering stiffness from a difference across % +-0.1 deg. This script does both the same way, at the loads the Load transfer page % puts on the template's four wheels in a left turn. % % Reference: W. F. Milliken and D. L. Milliken, Race Car Vehicle Dynamics (SAE, 1995), % ch. 2.4 and 18. % % Part of the PaceDynamics documentation, https://pacedyn.dev/docs % SPDX-License-Identifier: MIT [t, app] = example_tyre(); L = app.load; deg = pi / 180; wheels = {'staticFront', 'staticRear', 'FL', 'FR', 'RL', 'RR'}; names = {'front, standing', 'rear, standing', 'FL, inside', 'FR, outside', 'RL, inside', 'RR, outside'}; mu = zeros(1, numel(wheels)); Ca = zeros(1, numel(wheels)); for i = 1:numel(wheels) Fz = L.loads.(wheels{i}); Fy = @(a) getfield(pd_mf(t, Fz, a, 0), 'Fy0'); mu(i) = pd_peak(@(a) Fy(a * deg), 45, 1) / max(1, Fz); e = 0.1 * deg; Ca(i) = abs((Fy(e) - Fy(-e)) / (2 * e)); end %% What the pair loses, axle by axle D = @(i) mu(i) * L.loads.(wheels{i}); fprintf('\nIn a %g g left turn:\n\n', L.ayG); fprintf(' %-6s %12s %12s %12s %16s\n', 'Axle', 'standing [N]', 'turning [N]', 'lost [N]', 'parabola (2) [N]'); pairs = {[1 3 4], [2 5 6]}; axles = {'front', 'rear'}; for k = 1:2 p = pairs{k}; standing = 2 * D(p(1)); turning = D(p(2)) + D(p(3)); dF = (L.loads.(wheels{p(3)}) - L.loads.(wheels{p(2)})) / 2; % the load transferred parabola = -2 * t.PDY2 * t.LMUY * dF^2 / (t.LFZO * t.FNOMIN); fprintf(' %-6s %12.1f %12.1f %12.1f %16.1f\n', axles{k}, standing, turning, standing - turning, parabola); end fprintf('\n The parabola is the formula''s own peak; the app reads the peak off the curve,\n'); fprintf(' in steps of 0.1 deg, so the two can differ by a fraction of a newton.\n'); fprintf('\n %-6s %18s %18s\n', 'Axle', 'C_alpha standing', 'C_alpha turning'); for k = 1:2 p = pairs{k}; fprintf(' %-6s %13.0f N/rad %13.0f N/rad\n', axles{k}, 2 * Ca(p(1)), Ca(p(2)) + Ca(p(3))); end %% Against the app for i = 1:numel(wheels) pd_compare(sprintf('mu_y, %s [-]', names{i}), mu(i), L.muY.(wheels{i})); end for i = 1:numel(wheels) pd_compare(sprintf('C_alpha, %s [N/rad]', names{i}), Ca(i), L.corneringStiffness.(wheels{i})); end pd_compare();
Download: load_sensitivity.m · example_tyre.m · pd_mf.m · pd_peak.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. 2.4, on load sensitivity, and ch. 18, on load transfer and balance.
- H. B. Pacejka, Tyre and Vehicle Dynamics, 3rd ed. (Butterworth-Heinemann, 2012), ch. 4.3.2, on the Magic Formula's load dependence.