The dynamics of the suspension of a vehicle can be analysed by running simulations through a mathematical model. The simplest model of a vehicle’s suspension is called **quarter-car suspension model**.

The model consists of two mass bodies, quarter vehicle and wheel, and lumped parameters for stiffness and damping, for both suspension and tyre.

In the article Quarter-car suspension modeling and simulation in Xcos we have determined the system of differential equations for the quarter-car suspension model as:

\[ \left\{\begin{matrix}m_1 \ddot{z_1} &=& k_1 (z_2 – z_1) &+& c_1 \left ( \dot{z_2} – \dot{z_1} \right )& \tag{1}\\

m_2 \ddot{z_2} &=& k_2 (u – z_2) &+& c_2 \left ( \dot{u} -\dot{z_2} \right )& – k_1 (z_2 – z_1) – c_1 \left ( \dot{z_2} – \dot{z_1} \right )

\end{matrix}\right. \]

where:

m_{1} [kg] – the mass of a quarter of the vehicle body

m_{2} [kg] – the mass of the wheel and suspension

k_{1} [N/m] – spring constant (stiffness) of the suspension system

c_{1} [N·s/m] – damping constant of the suspension system

k_{2} [N/m] – spring constant (stiffness) of the wheel and tire

c_{2} [N·s/m] – damping constant of the wheel and tire

z_{1} [m] – displacement of the vehicle body (output)

z_{2} [m] – displacement of the wheel (output)

u [m] – road profile change (input)

Considering all initial conditions being zero and applying Lapace’s transform to equations (1) gives:

\[Z_{1}(s) \left ( m_{1}s^{2} + c_{1}s + k_{1} \right ) = Z_{2}(s) \left ( c_{1}s + k_{1} \right ) \tag{2}\] \[Z_{2}(s) = \left ( m_{2}s^{2} + k_{2} + c_{2}s + k_{1} + c_{1}s \right ) = U(s) \left ( c_{2}s + k_{2} \right ) + Z_{1}(s) \left ( k_{1} + c_{1}s \right ) \tag{3}\]For more details about how Laplace transform is applied to a differential equation, read the article How to find the transfer function of a system.

From the system of equations (1) we can determine two transfer functions, depending on which displacement (*z _{1}* or z

_{2}) we consider as the output of the system.

Let’s consider the **displacement of the quarter vehicle mass z_{1} as the output** of the system. From equation (2) we extract

*Z*as:

_{2}(s)Replacing (4) in (3) and after doing the necessary simplification gives the first transfer function:

\[ \begin{split}&H_{1}(s) = \frac{Z_{1}(s)}{U(s)} = \\

&= \frac{c_{1}c_{2}s^{2} + (k_{1}c_{2}+k_{2}c_{1})s + k_{1}k_{2}}{m_{1}m_{2}s^{4} + (m_{1}c_{1}+m_{1}c_{2}+m_{2}c_{1})s^{3} + (m_{1}k_{1}+m_{1}k_{2}+k_{1}m_{2}+c_{1}c_{2})s^{2} + (c_{1}k_{2}+k_{1}c_{2})s + k_{1}k_{2}}

\end{split} \]

where displacement of the quarter vehicle body mass *z _{1}(t)* is considered the output and the road irregularities

*u(t)*the input.

Let’s consider the **displacement of the wheel mass z_{2} as the output** of the system. From equation (2) we extract

*Z*as:

_{1}(s)Replacing (5) in (3) and after doing the necessary simplification gives the first transfer function:

\[ \begin{split}&H_{2}(s) = \frac{Z_{2}(s)}{U(s)} = \\

&= \frac{m_{1}c_{2}s^{3} + (c_{1}c_{2}+m_{1}k_{2})s^{2} + (k_{1}c_{2}+c_{1}k_{2})s + k_{1}k_{2}}{m_{1}m_{2}s^{4} + (m_{1}c_{1}+m_{1}c_{2}+m_{2}c_{1})s^{3} + (m_{1}k_{1}+m_{1}k_{2}+k_{1}m_{2})s^{2} + (c_{1}c_{2}+c_{1}k_{2}+k_{1}c_{2})s + k_{1}k_{2}}

\end{split} \]

where displacement of the quarter vehicle body mass *z _{2}(t)* is considered the output and the road irregularities

*u(t)*the input.

One way of testing our transfer functions for the quarter-car suspension model is to define them in Scilab.

clc() // Define parameters m1 = 290; // [kg] m2 = 15; // [kg] k1 = 16200; // [N/m] k2 = 191000; // [N/m] c1 = 1000; // [Ns/m] c2 = 2500; // [Ns/m] t=0:0.001:7; // [s] u=0.1; // [m] // Define transfer function s=poly(0,'s'); // Transfer function for z1 as output num1=c1*c2*s^2+(k1*c2+k2*c1)*s+k1*k2; den1=m1*m2*s^4+(m1*c1+m1*c2+m2*c1)*s^3+(m1*k1+m1*k2+k1*m2+c1*c2)*s^2+(c1*k2+k1*c2)*s+k1*k2; Hs1=[num1/den1]; sys1=syslin('c',Hs1); // Transfer function for z2 as output num2=m1*c2*s^3+(c1*c2+m1*k2)*s^2+(k1*c2+c1*k2)*s+k1*k2; den2=m1*m2*s^4+(m1*c1+m1*c2+m2*c1)*s^3+(m1*k1+m1*k2+k1*m2)*s^2+(c1*c2+c1*k2+k1*c2)*s+k1*k2; Hs2=[num2/den2]; sys2=syslin('c',Hs2); // Run step response z1 = u*csim('step',t,sys1); z2 = u*csim('step',t,sys2); figure(1) plot(t,z1,'b'), xgrid() plot(t,z2,'r') hf=gcf(); hf.background = -2; title("x-engineer.org","Color",'b') ylabel('Displacement [m]') xlabel('Time [s]') legend('$\Large{z_{1}(t)}$','$\Large{z_{2}(t)}$',1)

Running the above Scilab instructions outputs the following plot:

The plot represents the system’s response, displacement of the body masses *z _{1}(t)* and

*z*, for a step input of

_{2}(t)*u = 0.1 m*. The step input is performed at

*t = 0*.

The same result should be obtained by modelling and simulation of the quarter-car suspension model transfer function in Xcos.

Running the simulation for `7 s`

will save the input *u(t)* and both outputs *z _{1}(t)* and

*z*in the Scilab workspace as structure variable

_{2}(t)`simOut`

.To plot the results, we’ll use the Scilab instructions below:

clc() // Read simulation outputs t = simOut.time; u = simOut.values(:,1); z1 = simOut.values(:,2); z2 = simOut.values(:,3); // Plot results figure(0) hf=gcf(); hf.background = -2; plot(t,u,'g') plot(t,z1,'b') plot(t,z2,'r') xgrid() ylabel('Displacement [m]') legend('$\Large{u(t)}$','$\Large{z_{1}(t)}$','$\Large{z_{2}(t)}$',1) xlabel('Time [s]') title("x-engineer.org","Color","b")

Running the instructions above will output the following plot:

The system’s response is equivalent with the wheel going across a sharp road obstacle of 10 cm height. You can clearly see the oscillation of the body mass having higher amplitude than the wheel oscillation.

For further analysis, we can adjust the mass, stiffness or damping parameters, and understand their impact on the overall dynamic response of the suspension.

## Jackson Huff

I echo the other comments, the Z2 transfer function should have c1c2 enclosed under s^2.

See matlab code, I used b instead of c when deriving the equations

Matlab:

syms k1 b1 k2 b2 s m1 m2 x2

x2 = (k2+b2*s)/((m2*s*s+(b1+b2)*s+(k1+k2))-(k1+b1*s)*((k1+b1*s)/(m1*s*s+k1+b1*s)));

X2nice=collect(simplify(x2));

pretty(X2nice)

## gab

for the Z2 transfer function shouldnt c1c2 be enclosed under s^2 instead of s

## Tamim

hi this was very helpful however shouldnt equation 3 be z2(s)*(m2S…) instead of Z2(S)=(m2S…)