軸にトルク(ねじりモーメント)が作用すると、断面にはせん断応力が発生し、軸はねじれ変形を起こします。動力伝達軸やボルトの設計において、ねじりの理解は不可欠です。
本記事の内容
- せん断応力公式 $\tau = Tr/I_p$ の導出
- ねじり角の公式 $\theta = TL/(GI_p)$
- 極断面二次モーメント $I_p$ の計算
- 動力伝達軸の設計
- Pythonでの可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
ねじりの基本仮定
丸棒のねじり理論では以下を仮定します:
- 断面は平面を保つ: ねじり後も断面は平面のまま
- 半径線は直線のまま: 断面内の半径は変形後も直線
- 微小変形: せん断ひずみは微小
せん断応力の導出
せん断ひずみ
長さ $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$ を大きくでき、質量効率に優れる
次のステップとして、以下の記事も参考にしてください。