ラック&ピニオンでテーブルや走行軸を動かすとき、定速時の抵抗力だけでモーターを選ぶと、加速中にトルクが不足することがあります。反対に、最大加速トルクだけを見ても、連続運転時の発熱や減速機・歯面の許容荷重は判断できません。
必要なのは、次の量を同じ計算境界で整理することです。
- テーブルを動かす運転方向荷重
- ピニオンのピッチ円半径で変換した負荷トルク
- 減速比と伝達効率を反映したモーター軸トルク
- 移動質量、ピニオン、減速機、ローターの加速トルク
- 速度―トルク特性、実効トルク、歯面の許容伝達力
この記事では、ラック&ピニオン駆動に必要なモーター回転数とトルクを、水平走行軸の計算例とPythonコードで整理します。
計算の全体像
ラック&ピニオンでは、ピニオンの回転がラックの直線移動へ変換されます。ピニオンのピッチ円半径を $r$、角速度を $\omega_p$ とすると、ラック速度は次式です。
$$ v=r\omega_p $$
モーターとピニオンの間に減速機があり、減速比を「モーター回転数 ÷ ピニオン回転数」として $i$ と定義すると、
$$ \omega_m=i\omega_p $$
です。したがって、モーター回転数はラック速度、ピッチ円半径、減速比から求められます。
flowchart TD A["質量・摩擦・外力"] --> B["運転方向荷重"] B --> C["ピニオン軸トルク"] C --> D["減速比と効率でモーター軸へ換算"] D --> E["加速慣性を加えて候補と照合"]
オリエンタルモーターの技術資料でも、ワイヤ・ベルト駆動とラック・ピニオン駆動について、運転方向荷重をピッチ円直径、効率、減速比からモーター軸の負荷トルクへ換算する考え方が示されています。
記号と計算条件
例として、水平なリニアガイド上の走行テーブルをラック&ピニオンで駆動します。
| 項目 | 記号 | 値 |
|---|---|---|
| テーブルとワークの総質量 | m | 120 kg |
| 案内部の等価摩擦係数 | μ | 0.015 |
| 運転方向の外力 | F_A | 200 N |
| 傾斜角 | θ | 0° |
| ピニオンのピッチ円直径 | d | 80 mm |
| 減速比 | i | 5 |
| 伝達効率 | η | 0.90 |
| 目標直線速度 | v | 0.80 m/s |
| 加速時間 | t_a | 0.40 s |
| ピニオン側回転体の慣性 | J_p | 0.00040 kg·m² |
| モーターローター慣性 | J_m | 0.00008 kg·m² |
摩擦係数、伝達効率、回転体慣性は機構によって変わります。実設計では、ガイド、減速機、カップリング、ピニオン、モーターの仕様値を使用します。表の値は計算手順を示すための例です。
運転方向荷重を求める
傾斜角を $\theta$ とすると、テーブルを一定速度で動かすための運転方向荷重は次式で表せます。
$$ F=F_A+mg(\sin\theta+\mu\cos\theta) $$
水平軸では $\theta=0$ なので、
$$ F=F_A+\mu mg $$
となります。重力加速度を $g=9.807\ \mathrm{m/s^2}$ として代入します。
$$ F=200+0.015\times120\times9.807=217.65\ \mathrm{N} $$
定速時の運転方向荷重は約217.65 Nです。
ここでいう外力には、加工反力、ケーブルベアの抵抗、シール抵抗、ワイパー抵抗など、運転方向に作用する既知の力を含めます。摩擦係数だけで全抵抗を代表できない場合は、実測した走行抵抗を使う方が確実です。
定速時の負荷トルクを求める
ピニオンのピッチ円半径は、直径80 mmをmへ換算して、
$$ r=\frac{d}{2}=\frac{0.080}{2}=0.040\ \mathrm{m} $$
です。ピニオン軸で必要なトルクは、
$$ T_p=Fr $$
なので、
$$ T_p=217.65\times0.040=8.706\ \mathrm{N\cdot m} $$
となります。
減速比 $i$ と伝達効率 $\eta$ を考慮したモーター軸の負荷トルクは、
$$ T_L=\frac{Fr}{\eta i}=\frac{Fd}{2\eta i} $$
です。
$$ T_L=\frac{217.65\times0.040}{0.90\times5}=1.935\ \mathrm{N\cdot m} $$
定速時のモーター軸負荷トルクは約1.94 N·mです。
減速比の定義を逆にすると計算結果も逆になります。本記事では一貫して、$i=$ モーター回転数 ÷ ピニオン回転数としています。
必要回転数を求める
ピニオン1回転でラックが移動する距離は、ピッチ円周 $\pi d$ です。ピニオン回転数は、
$$ n_p=\frac{60v}{\pi d} $$
となります。
$$ n_p=\frac{60\times0.80}{\pi\times0.080}=190.99\ \mathrm{rpm} $$
モーター回転数は、
$$ n_m=in_p=5\times190.99=954.93\ \mathrm{rpm} $$
です。
目標速度0.80 m/sに必要なモーター回転数は約955 rpmです。
候補モーターは、この回転数で必要トルクを出せる必要があります。定格回転数や無負荷回転数だけでなく、ドライバと組み合わせた速度―トルク特性を確認します。
加速中の直線慣性力を求める
停止状態から0.40秒で0.80 m/sまで一定加速度で立ち上げると、直線加速度は、
$$ a=\frac{v}{t_a}=\frac{0.80}{0.40}=2.0\ \mathrm{m/s^2} $$
です。移動質量を加速するための力は、
$$ F_a=ma=120\times2.0=240\ \mathrm{N} $$
となります。
定速抵抗と加速力を合計し、モーター軸トルクへ換算すると、
$$ T_{trans}=\frac{(F+F_a)r}{\eta i} $$
$$ T_{trans}=\frac{(217.65+240)\times0.040}{0.90\times5}=4.068\ \mathrm{N\cdot m} $$
この値には、テーブルの直線慣性と定速抵抗が含まれますが、ピニオンやモーターローター自身の回転慣性はまだ含まれていません。
回転体の加速トルクを加える
ピニオン角加速度は、直線加速度とピッチ円半径から求められます。
$$ \alpha_p=\frac{a}{r}=\frac{2.0}{0.040}=50\ \mathrm{rad/s^2} $$
モーター角加速度は、
$$ \alpha_m=i\alpha_p=5\times50=250\ \mathrm{rad/s^2} $$
です。
ピニオン側回転体の慣性トルクをモーター軸へ換算すると、
$$ T_{Jp}=\frac{J_p\alpha_p}{\eta i} $$
$$ T_{Jp}=\frac{0.00040\times50}{0.90\times5}=0.0044\ \mathrm{N\cdot m} $$
モーターローターの加速トルクは、
$$ T_{Jm}=J_m\alpha_m $$
$$ T_{Jm}=0.00008\times250=0.0200\ \mathrm{N\cdot m} $$
したがって、加速中のモーター軸トルクは、
$$ T_{acc}=T_{trans}+T_{Jp}+T_{Jm} $$
$$ T_{acc}=4.0680+0.0044+0.0200=4.0925\ \mathrm{N\cdot m} $$
安全率を掛ける前の加速中トルクは約4.09 N·mです。
減速機内部の慣性は、メーカーが示す入力軸換算慣性をモーター側へ加えます。入力軸換算値と出力軸側の慣性を混在させると、減速比を二重に反映するため注意が必要です。
最大トルクと実効トルクを分ける
約4.09 N·mは加速中のピーク候補であり、連続運転の熱的判定値ではありません。工程ごとのトルクを $T_k$、継続時間を $t_k$ とすると、実効トルクは次式で求められます。
$$ T_{rms}=\sqrt{\frac{\sum T_k^2t_k}{\sum t_k}} $$
少なくとも次の二つを別々に確認します。
- 加速・減速・外力変動を含む最大トルクが、対象回転数でモーターの瞬時最大トルク以下であること
- 運転サイクル全体の実効トルクが、モーターの定格トルク以下であること
減速時には、慣性トルクの向きが変わります。下降軸や外力が移動を助ける条件では回生状態になるため、ドライバの回生能力、回生抵抗、保持ブレーキも確認します。
Pythonで計算する
同じ計算を再利用できる関数にすると、ピニオン径、減速比、速度、加速時間を変えた比較が容易になります。
from math import cos, pi, radians, sin
def rack_pinion_motor_torque(
moving_mass_kg: float,
friction_coefficient: float,
external_force_n: float,
incline_deg: float,
pinion_pitch_diameter_m: float,
gear_ratio: float,
transmission_efficiency: float,
target_speed_m_s: float,
acceleration_time_s: float,
output_rotating_inertia_kg_m2: float = 0.0,
motor_inertia_kg_m2: float = 0.0,
) -> dict[str, float]:
if moving_mass_kg < 0:
raise ValueError("moving_mass_kg must be non-negative")
if pinion_pitch_diameter_m <= 0:
raise ValueError("pinion_pitch_diameter_m must be positive")
if gear_ratio <= 0 or acceleration_time_s <= 0:
raise ValueError("gear_ratio and acceleration_time_s must be positive")
if not 0 < transmission_efficiency <= 1:
raise ValueError("transmission_efficiency must be in (0, 1]")
g = 9.807
angle = radians(incline_deg)
radius_m = pinion_pitch_diameter_m / 2
running_force_n = external_force_n + moving_mass_kg * g * (
sin(angle) + friction_coefficient * cos(angle)
)
linear_acceleration_m_s2 = target_speed_m_s / acceleration_time_s
acceleration_force_n = moving_mass_kg * linear_acceleration_m_s2
pinion_speed_rpm = 60 * target_speed_m_s / (2 * pi * radius_m)
motor_speed_rpm = gear_ratio * pinion_speed_rpm
pinion_angular_acceleration = linear_acceleration_m_s2 / radius_m
motor_angular_acceleration = gear_ratio * pinion_angular_acceleration
steady_motor_torque_nm = (
running_force_n
* radius_m
/ (transmission_efficiency * gear_ratio)
)
translational_accel_torque_nm = (
acceleration_force_n
* radius_m
/ (transmission_efficiency * gear_ratio)
)
output_inertia_torque_nm = (
output_rotating_inertia_kg_m2
* pinion_angular_acceleration
/ (transmission_efficiency * gear_ratio)
)
motor_inertia_torque_nm = (
motor_inertia_kg_m2 * motor_angular_acceleration
)
peak_torque_nm = (
steady_motor_torque_nm
+ translational_accel_torque_nm
+ output_inertia_torque_nm
+ motor_inertia_torque_nm
)
return {
"running_force_n": running_force_n,
"pinion_speed_rpm": pinion_speed_rpm,
"motor_speed_rpm": motor_speed_rpm,
"steady_motor_torque_nm": steady_motor_torque_nm,
"acceleration_force_n": acceleration_force_n,
"peak_torque_before_safety_nm": peak_torque_nm,
}
result = rack_pinion_motor_torque(
moving_mass_kg=120.0,
friction_coefficient=0.015,
external_force_n=200.0,
incline_deg=0.0,
pinion_pitch_diameter_m=0.080,
gear_ratio=5.0,
transmission_efficiency=0.90,
target_speed_m_s=0.80,
acceleration_time_s=0.40,
output_rotating_inertia_kg_m2=0.00040,
motor_inertia_kg_m2=0.00008,
)
for name, value in result.items():
print(f"{name}: {value:.6f}")
主な出力は次のとおりです。
running_force_n: 217.652600
pinion_speed_rpm: 190.985932
motor_speed_rpm: 954.929659
steady_motor_torque_nm: 1.934690
acceleration_force_n: 240.000000
peak_torque_before_safety_nm: 4.092468
この関数は、一定加速度、剛体、一定効率を前提とします。S字加減速では指令プロファイルの最大加速度を使用し、ねじり剛性、バックラッシ、共振、制御応答は別途検討します。
歯面と減速機を別に確認する
モーターが必要トルクを出せても、ラック、ピニオン、減速機が荷重に耐えられるとは限りません。機械要素側では、少なくとも次を確認します。
- ピニオンの接線力とラックの許容伝達力
- 歯元曲げ強さと歯面強さ
- 衝撃、始動頻度、負荷変動を含む使用係数
- ピニオン軸と軸受に作用する荷重
- 減速機の定格・瞬時最大トルク、許容ラジアル荷重
- バックラッシ、かみ合い率、潤滑、取付精度
THKのラック付きLMガイド資料でも、ピニオンが負荷する最大推力と、ラック&ピニオンの許容伝達力を照合する考え方が示されています。モーター選定と歯面強度の確認は、同じ推力条件から別々に行います。
実務で起こりやすい失敗
ピニオン外径でトルクを計算する。
力の作用半径には、歯先円半径ではなくピッチ円半径を使います。メーカー図面のピッチ円直径を確認します。
減速比の定義を混在させる。
モーター回転数 ÷ 出力回転数なのか、その逆なのかを最初に定義します。速度とトルクで同じ定義を使います。
定速トルクだけで選ぶ。
移動質量、回転体、ローターを加速するトルクが必要です。短い加速時間ほどピークトルクは大きくなります。
効率を二重に反映する。
力からトルクへ換算するときに効率で補正した後、等価慣性側でも同じ損失を加えると過大評価になります。計算境界を統一します。
モーター軸換算値と出力軸値を足す。
慣性やトルクは、どの軸の値かを明記します。出力側慣性をモーター側へ移す場合は減速比の二乗で換算します。
歯面強度をモータートルクで代用する。
ラックの許容伝達力、ピニオンの歯元・歯面強度、減速機の許容荷重は別に確認します。
実効トルクを確認しない。
ピークトルクが瞬時最大値以下でも、実効トルクが定格を超えると熱的に使用できません。
まとめ
ラック&ピニオン駆動のモータートルクは、運転方向荷重を求め、ピッチ円半径、減速比、伝達効率でモーター軸へ換算します。
$$ F=F_A+mg(\sin\theta+\mu\cos\theta) $$
$$ T_L=\frac{Fr}{\eta i} $$
必要回転数は、
$$ n_m=i\frac{60v}{2\pi r} $$
です。加速中は、移動質量による $ma$ と、ピニオン、減速機、ローターの回転慣性を加えます。
計算後は、最大トルク、実効トルク、対象回転数での速度―トルク特性をモーター仕様と照合します。さらに、ラックの許容伝達力、歯面強度、減速機の許容トルクと軸荷重、バックラッシ、潤滑、取付精度も確認します。
この流れをデータ化するときは、入力値、出典、計算結果、判定を分離し、ピニオン径、効率、慣性、許容伝達力にはメーカー名、形番、資料版、参照日を持たせます。ピニオン径、減速比、速度、加速時間を変更した比較や、複数モーター・減速機候補の一括評価へ発展させられます。
