Automotive industry deals with reciprocating engines, in which the piston has a linear motion within the cylinder. The crank mechanism transforms the linear movement of the piston into rotational movement of the crankshaft.

Because of this kind of movement, the piston’s velocity goes through zero at the top dead center (TDC) and bottom dead center (BDC) positions.

In this tutorial we are going to analyze the kinematics of the piston, and determine the mathematical equations of the position, speed and acceleration function of crankshaft angle.

In the image below we have depicted the basic geometry of the reciprocating internal combustion engine.

where:

IV – intake valve

EV – exhaust valve

TDC – top dead center

BDC – bottom dead center

B – cylinder bore

S – piston stroke

r – connecting rod length

a – crank radius (offset)

x – distance between the crank axis and the piston pin axis

θ – crank angle

V_{d} – displaced (swept) volume

V_{c} – clearance volume

As we can see, the piston’s pin point, with the connecting rod-crankshaft connection and the center of the crankshaft **forms a triangle** during operation. The crank radius (offset) *a* and connecting rod length *r* are always constants, the distance between piston’s pin and crankshaft center *x* being variable function of crankshaft angle *θ*.

##### Law of Cosine

Recall the Law of Cosine for triangles:

\[c^2 = a^2 + b^2 – 2ab \cdot \text{cos}(\gamma)\]where:

a,b,c – the lengths of the triangle’s sides

γ – the angle between a and b

### Piston position

Applying the Law of Cosine to our crank mechanism, we get to following relationship:

\[r^2 = a^2 + x^2 -2ax \cdot \text{cos}(\theta) \tag{1}\]From this equation we need to extract the relationship between *x* and *θ*. This is not necessarily easy to do because we are dealing with a second order function.

##### Trigonometry identity

Recall the trigonometric identity:

\[\text{sin}^2 (\theta) + \text{cos}^2 (\theta) = 1 \tag{2}\]First step is to take equation (1) and add an additional term which is basically zero (*0*):

Using equation (2), zero can be written as:

\[0 = \text{sin}^2 (\theta) + \text{cos}^2 (\theta) – 1 \tag{4}\]Replacing (4) in (3) gives:

\[ \begin{split}r^2 &= a^2 + x^2 -2ax \cdot \text{cos}(\theta) + a^2 \left[ \text{sin}^2 (\theta) + \text{cos}^2 (\theta) – 1 \right]\\

r^2 &= a^2 + x^2 -2ax \cdot \text{cos}(\theta) + a^2 \text{sin}^2 (\theta) + a^2 \text{cos}^2 (\theta) – a^2\\

r^2 &= x^2 -2ax \cdot \text{cos}(\theta) + a^2 \text{cos}^2 (\theta) + a^2 \text{sin}^2 (\theta)

\end{split} \]

##### Algebraic expansion

Recall the algebraic expansion:

\[(a-b)^2 = a^2 – 2ab + b^2 \tag{5}\]Using (5) we can rewrite the function *x(θ)* as:

r^2 = \left[x – a \cdot \text{cos}(\theta) \right]^2 + a^2 \text{sin}^2 (\theta)\\

\left[x – a \cdot \text{cos}(\theta) \right]^2 = r^2 – a^2 \text{sin}^2 (\theta)\\

x – a \cdot \text{cos}(\theta) = \sqrt{r^2 – a^2 \text{sin}^2 (\theta)}

\end{split} \]

This gives the relationship of displacement *x* function of the crank angle *θ*:

The maximum (at TDC) and minimum (at BDC) positions of the piston’s pin center, relative to the center of the crankshaft, will be:

\[ \begin{split}\bbox[#FFFF9D]{x_{max} = r + a\\

x_{min} = r – a}

\end{split} \]

We can easily deduce that the piston stroke *S* is equal with twice the crank offset *a*:

### Piston speed

To determine the relationship of the piston speed function of the crank angle, we need to calculate the derivative of equation (6) function of *θ*:

Before going into the derivative calculation we need to recall some of the properties of the derivative functions.

##### Trigonometric function derivative

Recall some of the mathematical properties of trigonometric functions:

\[ \begin{split}\frac{d}{d \theta} \text{sin}(\theta) &= \text{cos}(\theta)\\

\frac{d}{d \theta} \text{cos}(\theta) &= – \text{sin}(\theta)\\

\frac{d}{d \theta} \left( f(\theta) \cdot g(\theta) \right) &= f'(\theta) \cdot g(\theta) + f(\theta) \cdot g'(\theta) \quad \text{(Product Rule)}\\

\frac{d}{d \theta} \left( \frac{g(\theta)}{h(\theta)} \right) &= \frac{g'(\theta) \cdot h(\theta) – g(\theta) \cdot h'(\theta)}{[h(\theta)]^2} \quad \text{(Quotient Rule)}\\

\frac{dx}{d \theta} &= \frac{dx}{du} \cdot \frac{du}{d \theta} \quad \text{(Chain Rule)}

\end{split} \]

Taking the first derivative of equation (6), we get:

\[\frac{dx}{d \theta} = \frac{d}{d \theta} \left( a \cdot \text{cos}(\theta) + \sqrt{r^2 – a^2 \text{sin}^2 (\theta)} \right)\]The derivative of the sum of two terms is the sum of the derivative of each term, therefore:

\[\frac{d}{d \theta} \left( a \cdot \text{cos}(\theta) \right) = -a \cdot \text{sin}(\theta) \tag{7}\]We can write the square root function as an power function:

\[\frac{d}{d \theta} \left( (r^2 – a^2 \text{sin}^2 (\theta))^{\frac{1}{2}} \right)\]Applying the Chain Rule, we introduce the function *u(θ)* equal with:

The deritative of *u(θ)* is:

which gives:

\[\frac{du}{d \theta} = -2a^2 \cdot \text{sin}(\theta) \text{cos}(\theta) \tag{9}\]Since we used the function *u*, we have *x* function of *u* as:

The derivative of the function is:

\[\frac{d}{du} \left( u^{\frac{1}{2}} \right) = \frac{1}{2}u^{- \frac{1}{2}}=\frac{1}{2} \frac{1}{\sqrt{u}}\]which gives:

\[\frac{dx}{du} = \frac{1}{2} \frac{1}{\sqrt{u}} \tag{10}\]Replacing (8), (9) and (10) in the Chain Rule derivative, gives:

\[ \begin{split}\frac{dx}{d \theta} &= \frac{du}{d \theta} \cdot \frac{dx}{du}\\

\frac{dx}{d \theta} &= -2a^2 \cdot \text{sin}(\theta) \text{cos}(\theta) \cdot \frac{1}{2} \frac{1}{\sqrt{u}}\\

\frac{dx}{d \theta} &= -a^2 \cdot \text{sin}(\theta) \text{cos}(\theta) \cdot \frac{1}{\sqrt{r^2 – a^2 \text{sin}^2 (\theta)}}\\

\frac{dx}{d \theta} &= \frac{-a^2 \cdot \text{sin}(\theta) \text{cos}(\theta)}{\sqrt{r^2 – a^2 \text{sin}^2 (\theta)}}

\end{split} \]

We now write the mathematical expression of the piston speed *v* function of the crank angle *θ*:

### Piston acceleration

The piston acceleration is determined by applying the first order derivative to the piston speed equation. The mathematics behind it’s quite complex so we need to be organized.

First, we are going to split the equation of the piston speed in several function:

\[v(\theta) = f(\theta) – \frac{g(\theta)}{h(\theta)}\]where:

\[ f(\theta)=-a \cdot \text{sin}(\theta) \tag{12} \]

\[ g(\theta)=a^2 \text{sin}(\theta) \text{cos}(\theta) \tag{13}\]

\[ h(\theta)= \sqrt{r^2 – a^2 \text{sin}^2 (\theta)} \tag{14}\]

Further, we will apply the first order derivative to each term of the expression. The derivative of *f(θ)* is straight forward:

which gives *f'(θ)*:

For the second term we need to apply the Quotient Rule of derivation. For this we need to calculate the first order derivative for each function, *g(θ)* and *h(θ)*.

\frac{dg}{d \theta} &= \frac{d}{d \theta} \left( a^2 \text{sin}(\theta)\text{cos}(\theta) \right)\\

&= a^2 \left(\text{cos}^2(\theta)-\text{sin}^2(\theta) \right)

\end{split} \]

which gives *g'(θ)*:

To find the derivative of h'(θ) we need to apply the Chain Rule for computing the derivative.

\[ \begin{split}\frac{dh}{d \theta} &= \frac{d}{d \theta} \left( (r^2-a^2\text{sin}^2(\theta))^{\frac{1}{2}} \right)\\

u(\theta) &=r^2-a^2\text{sin}^2(\theta)\\

\frac{du}{d \theta} &= -2a^2 \text{sin}(\theta) \text{cos}(\theta)\\

h(u)&=u^{\frac{1}{2}}\\

\frac{dh}{du}&=\frac{1}{2}u^{-\frac{1}{2}}=\frac{1}{2}\frac{1}{\sqrt{u}}\\

\frac{dh}{d \theta} &= \frac{du}{d \theta} \cdot \frac{dh}{du}=-2a^2 \text{sin}(\theta) \text{cos}(\theta) \cdot \frac{1}{2}\frac{1}{\sqrt{u}}\\

\frac{dh}{d \theta} &= \frac{-a^2 \text{sin}(\theta) \text{cos}(\theta)}{\sqrt{r^2-a^2\text{sin}^2(\theta)}}

\end{split}\]

which gives *h'(θ)*:

The acceleration of the piston function of the crank angle is:

\[a(\theta)=\frac{d}{d \theta}(v(\theta))=\frac{d}{d \theta} \left( f(\theta) – \frac{g(\theta)}{h(\theta)} \right)\]Applying the derivative rule of a difference and the Quotient Rule, gives *a(θ)*:

Replacing (13), (14), (15), (16) and (17) in (18), gives:

\[ \begin{split}a(\theta) &= -a\cdot\text{cos}(\theta)-\left[ \frac{a^2(\text{cos}^2(\theta)-\text{sin}^2(\theta))\cdot\sqrt{r^2-a^2\text{sin}^2(\theta)}-a^2\text{sin}(\theta)\text{cos}(\theta)\cdot\frac{-a^2\text{sin}(\theta)\text{cos}(\theta)}{\sqrt{r^2-a^2\text{sin}^2(\theta)}}}{r^2-a^2\text{sin}^2(\theta)} \right]\\

a(\theta) &= -a\cdot\text{cos}(\theta)-\left[ \frac{a^2(\text{cos}^2(\theta)-\text{sin}^2(\theta))\cdot\sqrt{r^2-a^2\text{sin}^2(\theta)}+\frac{a^4\text{sin}^2(\theta)\text{cos}^2(\theta)}{\sqrt{r^2-a^2\text{sin}^2(\theta)}}}{r^2-a^2\text{sin}^2(\theta)} \right]\\

a(\theta) &= -a\cdot\text{cos}(\theta)-\left[ \frac{a^2(\text{cos}^2(\theta)-\text{sin}^2(\theta))\cdot\left(r^2-a^2\text{sin}^2(\theta)\right)+a^4\text{sin}^2(\theta)\text{cos}^2(\theta)}{\left(r^2-a^2\text{sin}^2(\theta)\right)^{\frac{3}{2}}} \right]

\end{split} \]

We now have the mathematical expression of the piston acceleration function of the crank angle:

\[\bbox[#FFFF9D]{a(\theta) = -a\cdot\text{cos}(\theta)-\left[ \frac{a^2(\text{cos}^2(\theta)-\text{sin}^2(\theta))\cdot\left(r^2-a^2\text{sin}^2(\theta)\right)+a^4\text{sin}^2(\theta)\text{cos}^2(\theta)}{\left(r^2-a^2\text{sin}^2(\theta)\right)^{\frac{3}{2}}} \right]} \tag{19}\]### Exercise

Let’s plot the piston position, speed and acceleration function of the crank angle *θ* for an engine with:

- connecting rod length
*r = 155 mm* - crank radius (offset)
*a = 44 mm* - crank angle
*θ = 0 … 4π rad*(two complete rotations, one engine cycle)

First we’ll calculate the minimum and maximum displacement value *x* relative to the position of the crankshaft:

x_{max} = 217 \text{ mm}\\

x_{min} = 93 \text{ mm}

\end{split} \]

The stroke of the piston is:

\[S=88 \text{ mm}\]To plot the variation of position, speed and acceleration function of the crank angle we are going to create a Scilab script:

clear clc exec('axisFormat.sci') r = 155; a = 62; t = 0:0.01:4*%pi; x_max = r + a; x_min = r - a; S = 2*a; x = a*cos(t) + sqrt(r^2-a^2*sin(t).^2); subplot(3,1,3) plot(t,x,'LineWidth',2) axisFormat(); ha.data_bounds=[min(t),min(x);max(t),max(x)]; xlabel("$\theta\hspace{5}[^\circ]$",'FontSize', 4) ylabel("x [mm]",'FontSize', 2) dx = -a*sin(t)+ (-a^2*sin(t).*cos(t))./(sqrt(r^2-a^2*sin(t).^2)); subplot(3,1,2) plot(t,dx,'LineWidth',2) plot(t,zeros(1:length(t)),'--r') axisFormat(); ha.data_bounds=[min(t),min(dx);max(t),max(dx)]; ylabel("v [mm/rad]",'FontSize', 2) d2x = -a*cos(t)-(a^2*(cos(t).^2-sin(t).^2).* .. (r^2-a^2*sin(t).^2)+a^4*sin(t).^2.*cos(t).^2)./((r^2-a^2*sin(t).^2).^(3/2)); subplot(3,1,1) plot(t,d2x,'LineWidth',2) plot(t,zeros(1:length(t)),'--r') axisFormat(); ha.data_bounds=[min(t),min(d2x);max(t),max(d2x)]; ylabel("a [mm/rad^2]",'FontSize', 2)

The Scilab script is calling the function `axisFormat.sci`

which is formatting the axes. The content of the function is:

function axisFormat() ha=gca(); ha.tight_limits = ["on","off","off"] ha.font_size=1; ha.x_ticks=tlist(["ticks","locations","labels"],... [0;%pi/2;%pi;3*%pi/2;2*%pi;5*%pi/2;3*%pi;7*%pi/2;4*%pi],... ["0";"90";"180";"270";"360";"450";"540";"630";"720"]); xgrid() endfunction

By running the script, we get the following graphical window:

As you can see, when the crank angle is at 0°, the **piston is positioned** at TDC and the displacement *x* reaches the maximum value. After half of rotation (180°), the piston is at BDC and the displacement reaches minimum value.

The **piston’s speed** goes through zero each time the piston is at TDC or BDC. This is because, at the dead centers, the piston changes direction, and for a fraction of the time it doesn’t move. This is the main reason for which internal combustion engines have flywheels on the crankshaft, to keep the pistons moving through the dead centers.

When the piston is travelling from TDC to BDC, the speed has the maximum value before the middle position of the stroke is reached, when the crank angle is around 72°. When the piston is going from BDC to TDC, the speed has the maximum value after the middle position of the stroke is passed, when the crank angle is around 290°.

The **piston’s acceleration** is a measure of how rapidly the speed (velocity) is changing function of the crank angle. It can be also expressed function of time, if the rotational speed of the engine is set.

Piston acceleration is one of the main source of vibration produced by an internal combustion engine. It’s value will directly affect the forces in the piston, connection rod and crankshaft. This is why it’s critical to have a deep understanding on how the geometric parameters of the crank mechanism will affect the acceleration of the piston. The variation of the acceleration is also function of the connecting rod length to crank offset ratio.

### Mean piston speed

Another important parameter of the kinematics of internal combustion engines is the mean piston speed *v _{m} [m/s]*. It is important because the higher the piston speed, the higher the inertial force, friction losses and wear.

Also, the piston speed should be limited to cope with the maximum velocity of the flowing gases into the cylinder.

As we have seen, the piston speed depend on the crank angle. With the mean value we want to see what is the average piston speed on a stroke, from TDC to BDC (or reverse).

We know that the linear speed *v* of an object is the ratio between distance *x* and elapsed time *Δt*:

In the same time, the rotational speed of an object *ω* is the ratio between the angle *θ* and elapsed time *Δt*:

Since we are interested of the mean piston speed during a piston stroke (180°), we can write that:

\[\theta = \pi \tag{22}\]We also know that in a single complete rotation, the crank angle will be *2π*. This means that, the total angle on a point of the crankshaft will rotate with the angular speed:

From (21), (22) and (23) we get the following relationship:

\[2 \pi n_e = \frac{\pi}{\Delta t}\]which gives the expression of the elapsed time:

\[\Delta t = \frac{1}{2n_e} \tag{24}\]The distance *x* is equal with the stroke length *S*:

Replacing (25) and (24) in (20) gives the expression of the mean piston speed *v _{m} [m/s]*:

where *n _{e}* is in rotations per second

*[rps]*and

*S*in meters

*[m]*.

We are going to use the following Scilab script to produce a plot of the mean piston speed for two engines, a gasoline and a diesel:

S = [90.7 94]*1e-3; // [m] Nmax = [8000 5200]; // [rpm] ne = [linspace(850,Nmax(1),10);linspace(850,Nmax(2),10)]; // [rpm] for i=1:length(S) for j=1:max(size(ne)) vm(i,j)=2*S(i)*ne(i,j)/60; end end plot(ne(1,:),vm(1,:)) plot(ne(2,:),vm(2,:),'r') xgrid() xlabel('Ne [rpm]','FontSize',2) ylabel('vm [m/s]','FontSize',2) legend('2.2 Honda S2000','2.2 Mazda Skyactiv-D',2)

By running the above script, we get the following graphical window:

As we can see, the mean piston speed is directly proportional with the engine speed and piston stroke.

The maximum mean piston speed, for most of the internal combustion engines, will be in the range of 5 to 25 [m/s], with large commercial vehicle engines on the low end and high-performance automobile engines on the high end.

The strength of the engine components material is one important limiting factor for the piston speed because the higher the value, the higher the inertial forces in the components.

The second main limiting factor is the gas exchanged within the cylinder. The piston’s speed has a direct influence of the instantaneous flow rate of the air / air-fuel mass into the cylinder during intake, and exhaust flow mass rate during exhaust. The higher the piston speed, the higher the valve diameter needs to be in order to allow the gases to flow in/out the cylinder.

For any questions, observations and queries regarding this article, use the comment form below.

Don’t forget to Like, Share and Subscribe!

## Joe

How does this change as the piston pin location and crankshaft location are offset from the bore centerline to reduce piston slap or friction?