ねじり(丸棒のねじりとせん断応力)

軸にトルク(ねじりモーメント)が作用すると、断面にはせん断応力が発生し、軸はねじれ変形を起こします。動力伝達軸やボルトの設計において、ねじりの理解は不可欠です。

本記事の内容

  • せん断応力公式 $\tau = Tr/I_p$ の導出
  • ねじり角の公式 $\theta = TL/(GI_p)$
  • 極断面二次モーメント $I_p$ の計算
  • 動力伝達軸の設計
  • Pythonでの可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

ねじりの基本仮定

丸棒のねじり理論では以下を仮定します:

  1. 断面は平面を保つ: ねじり後も断面は平面のまま
  2. 半径線は直線のまま: 断面内の半径は変形後も直線
  3. 微小変形: せん断ひずみは微小

せん断応力の導出

せん断ひずみ

長さ $L$ の丸棒の一端を固定し、他端にトルク $T$ を加えてねじり角 $\theta$ が生じたとします。中心から距離 $r$ の位置でのせん断ひずみ $\gamma$ は:

$$ \gamma = \frac{r\theta}{L} $$

せん断ひずみは中心からの距離に比例し、中心でゼロ、外周で最大です。

フックの法則の適用

せん断応力 $\tau$ とせん断ひずみ $\gamma$ の関係(フックの法則):

$$ \tau = G\gamma = \frac{Gr\theta}{L} $$

ここで $G$ は横弾性係数(せん断弾性係数)です。

トルクとの関係

断面に作用するトルクは、せん断応力のモーメントの総和です:

$$ T = \int_A \tau \cdot r \, dA = \int_A \frac{G\theta}{L} r^2 \, dA = \frac{G\theta}{L} \int_A r^2 \, dA $$

ここで $\int_A r^2 \, dA$ が極断面二次モーメント $I_p$ です:

$$ \boxed{I_p = \int_A r^2 \, dA} $$

したがって:

$$ T = \frac{GI_p\theta}{L} $$

せん断応力公式

$\theta/L = T/(GI_p)$ を $\tau = Gr\theta/L$ に代入すると:

$$ \boxed{\tau = \frac{Tr}{I_p}} $$

ねじり角

$$ \boxed{\theta = \frac{TL}{GI_p}} $$

極断面二次モーメント

中実円形断面(半径 $R$)

$$ I_p = \int_0^{2\pi}\int_0^R r^2 \cdot r \, dr \, d\theta = 2\pi \cdot \frac{R^4}{4} = \frac{\pi R^4}{2} = \frac{\pi d^4}{32} $$

中空円形断面(外径 $D$、内径 $d$)

$$ \boxed{I_p = \frac{\pi(D^4 – d^4)}{32}} $$

動力伝達

回転軸が角速度 $\omega$ [rad/s] で回転するとき、伝達動力 $P$ [W] は:

$$ P = T\omega = T \cdot \frac{2\pi n}{60} $$

ここで $n$ は回転数 [rpm] です。

Pythonでの可視化

import numpy as np
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 3, figsize=(16, 5))

# (1) せん断応力分布(中実 vs 中空)
R_solid = 0.03  # 中実:半径30mm
R_out = 0.035   # 中空:外径35mm
R_in = 0.025    # 中空:内径25mm
T = 500         # トルク [N·m]

Ip_solid = np.pi * R_solid**4 / 2
Ip_hollow = np.pi * (R_out**4 - R_in**4) / 2

r_s = np.linspace(0, R_solid, 100)
tau_s = T * r_s / Ip_solid
r_h = np.linspace(R_in, R_out, 100)
tau_h = T * r_h / Ip_hollow

axes[0].plot(tau_s / 1e6, r_s * 1e3, 'b-', lw=2.5, label='Solid')
axes[0].plot(tau_h / 1e6, r_h * 1e3, 'r-', lw=2.5, label='Hollow')
axes[0].set_xlabel('$\\tau$ [MPa]'); axes[0].set_ylabel('$r$ [mm]')
axes[0].set_title('Shear stress distribution'); axes[0].legend()
axes[0].grid(True, alpha=0.3)

# (2) ねじり角 vs トルク
G = 80e9  # 鋼のせん断弾性係数 [Pa]
L = 1.0   # 長さ [m]
T_range = np.linspace(0, 2000, 100)
theta_s = T_range * L / (G * Ip_solid) * 180 / np.pi
theta_h = T_range * L / (G * Ip_hollow) * 180 / np.pi

axes[1].plot(T_range, theta_s, 'b-', lw=2, label='Solid')
axes[1].plot(T_range, theta_h, 'r-', lw=2, label='Hollow')
axes[1].set_xlabel('Torque $T$ [N·m]'); axes[1].set_ylabel('Twist angle $\\theta$ [deg]')
axes[1].set_title('Torque vs twist angle'); axes[1].legend()
axes[1].grid(True, alpha=0.3)

# (3) 動力伝達:トルク vs 回転数の等出力線
n_rpm = np.linspace(100, 5000, 200)
for P_kW in [1, 5, 10, 50]:
    T_power = P_kW * 1e3 / (2 * np.pi * n_rpm / 60)
    axes[2].plot(n_rpm, T_power, lw=2, label=f'{P_kW} kW')

axes[2].set_xlabel('Rotation speed [rpm]'); axes[2].set_ylabel('Torque $T$ [N·m]')
axes[2].set_title('Power transmission'); axes[2].legend()
axes[2].set_ylim(0, 500); axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

まとめ

  • せん断応力: $\tau = Tr/I_p$(中心からの距離に比例)
  • ねじり角: $\theta = TL/(GI_p)$
  • 極断面二次モーメント: 中実 $I_p = \pi d^4/32$、中空 $I_p = \pi(D^4 – d^4)/32$
  • 動力伝達: $P = T\omega$
  • 中空断面は同じ断面積で $I_p$ を大きくでき、質量効率に優れる

次のステップとして、以下の記事も参考にしてください。