The Euler-Eytelwein belt-friction law (1769)#

A sailor holds a heavy load with a few turns of rope round a bollard. Leonhard Euler (1762, published 1769) explained why: on each small arc \(d\theta\) of contact the rope presses on the drum with force \(T\,d\theta\), friction can resist up to \(\mu T\,d\theta\), so tension can grow by \(dT = \mu T\,d\theta\) and \(T_1/T_2 = e^{\mu\theta}\). Johann Albert Eytelwein (1808) brought the result to engineers, for whom it sets the power a belt drive can transmit (belt_tension_ratio(), belt_speed()). The example builds the exponential from small arcs, then sizes a flat and a V-belt.

import matplotlib.pyplot as plt
import numpy as np

from engineeringkit.mechanical_engineering import belt_speed, belt_tension_ratio

Small arcs add up to an exponential#

Each arc multiplies the tension by \(1 + \mu\,\Delta\theta\).

mu, wrap = 0.3, np.pi
for n in (4, 40, 400, 40000):
    print(f"{n:6d} arcs: T1/T2 = {(1 + mu * wrap / n) ** n:.5f}")
print(f"  exact     : T1/T2 = {belt_tension_ratio(mu, wrap):.5f}")
assert np.isclose((1 + mu * wrap / 40000) ** 40000, belt_tension_ratio(mu, wrap), rtol=1e-4)
    4 arcs: T1/T2 = 2.33098
   40 arcs: T1/T2 = 2.53843
  400 arcs: T1/T2 = 2.56349
40000 arcs: T1/T2 = 2.56630
 exact     : T1/T2 = 2.56633

Turns round a bollard#

for turns in (0.5, 1, 2, 3):
    print(f"{turns:3} turns: a 100 N pull holds {100 * belt_tension_ratio(mu, 2 * np.pi * turns) / 1e3:7.2f} kN")
0.5 turns: a 100 N pull holds    0.26 kN
  1 turns: a 100 N pull holds    0.66 kN
  2 turns: a 100 N pull holds    4.34 kN
  3 turns: a 100 N pull holds   28.57 kN

Power a belt drive can carry#

A 200 mm pulley at 1450 rpm with 170 degrees of wrap and a tight side limited to 1.2 kN transmits \(P = (T_1 - T_2) v\) before slipping. A V-belt in a 38-degree groove wedges in and grips \(1/\sin 19^\circ\) times harder.

v = belt_speed(0.2, 1450)
T1, wrap = 1200.0, np.radians(170)
for name, ratio in (("flat belt", belt_tension_ratio(mu, wrap)), ("V-belt", belt_tension_ratio(mu, wrap, groove_angle=np.radians(38)))):
    print(f"{name:9s}: T1/T2 = {ratio:6.2f}, power {(T1 - T1 / ratio) * v / 1e3:.2f} kW at {v:.2f} m/s")
assert np.isclose(np.log(belt_tension_ratio(mu, wrap, groove_angle=np.radians(38))), mu * wrap / np.sin(np.radians(19)))

angle = np.linspace(0, 4 * np.pi, 400)
fig, ax = plt.subplots(figsize=(6, 3.5))
for coefficient in (0.1, 0.2, 0.3):
    ax.semilogy(angle / (2 * np.pi), belt_tension_ratio(coefficient, angle), label=f"mu = {coefficient}")
ax.set(xlabel="turns of wrap", ylabel="T1 / T2", title="Capstan amplification")
ax.legend()
fig.tight_layout()

plt.show()
Capstan amplification
flat belt: T1/T2 =   2.44, power 10.74 kW at 15.18 m/s
V-belt   : T1/T2 =  15.40, power 17.04 kW at 15.18 m/s

Total running time of the script: (0 minutes 0.039 seconds)

Gallery generated by Sphinx-Gallery