「ボールねじ駆動のモータートルクを計算する|軸方向荷重・リード・加速慣性」の内容を表す技術イラスト
UNIT 01機械設計 FIG.00 · EYECATCH

ボールねじ駆動のモータートルクを計算する|軸方向荷重・リード・加速慣性

ボールねじ駆動に必要なモータートルクを、軸方向荷重、リード、効率、予圧、加速時間から計算します。負荷トルクと加速トルク、直線質量とねじ軸慣性の換算、Python実装まで解説します。

DOC NO.EKP-01-1112
DATE
REVB
READ約 15 分

ボールねじでテーブルを動かす装置では、軸方向荷重から求めたトルクだけでモーターを選ぶと、加速時にトルクが不足することがあります。反対に、加速時の最大値だけで連続運転の可否を判断すると、モーターの熱的な余裕を正しく評価できません。

必要なのは、次の値を分けて計算することです。

  • 等速運転中の負荷トルク
  • 直線移動部と回転部の慣性モーメント
  • 加速・減速に必要なトルク
  • 運転サイクル全体の実効トルク
  • 最高速度に対応するモーター回転数

この記事では、水平に設置したボールねじ駆動テーブルを例に、軸方向荷重、リード、効率、予圧、慣性、加速時間から必要トルクを求めます。最後にPythonへ実装し、モーター候補を変えながら再計算できる形へ整理します。

目次

計算の全体像

ボールねじのモーター選定は、負荷トルクだけを一度計算して終わる作業ではありません。

flowchart TD
  A["運転条件を定義"] --> B["軸方向荷重と負荷トルク"]
  B --> C["慣性と加速トルク"]
  C --> D["最大・実効トルクを確認"]
  D --> E["回転数と製品特性を照合"]
  E --> F{"条件を満たすか"}
  F -- いいえ --> A
  F -- はい --> G["候補を確定"]

THKは、ボールねじの駆動モーターを回転数、回転トルク、最小送り量から検討し、トルクについては等速時、加速時、減速時を分けて確認するよう示しています。さらに、最大トルクを瞬時最大トルク以下、実効トルクを定格トルク以下にする必要があります。

計算条件をそろえる

例として、減速機を使わず、水平な直動ガイド上でテーブルを動かす条件を設定します。

項目記号値
テーブルとワークの総質量m80 kg
案内面の摩擦係数μ0.01
運転方向の外力F_A150 N
ボールねじのリードP_B10 mm/rev
ボールねじ効率η0.90
予圧ナット内部摩擦係数μ_00.20
予圧荷重F_050 N
最高直線速度v0.30 m/s
加速時間t_a0.20 s
ねじ軸質量m_s5.0 kg
ねじ軸半径r_s0.010 m
カップリング慣性J_c0.000020 kg·m²

効率、予圧荷重、予圧トルクは、ボールねじの形式、精度、予圧方式、潤滑状態によって変わります。実設計では、メーカーの仕様値を優先します。表の値は計算手順を示すための例です。

運転方向荷重を求める

傾斜角を $\theta$ とすると、運転方向荷重は次の形で表せます。

$$F=F_A+mg(\sin\theta+\mu\cos\theta)$$

水平駆動では $\theta=0$ なので、式は次のように簡単になります。

$$F=F_A+\mu mg$$

例の条件を代入します。

$$F=150+0.01\times80\times9.807=157.85\ \mathrm{N}$$

運転方向荷重は約157.85 Nです。

ここで使う外力には、加工反力、押付力、ケーブルベアの抵抗、シール抵抗など、運転方向に作用する既知の力を含めます。ガイドの摩擦係数だけで全抵抗を代表させると、実機との差が大きくなることがあります。

等速時の負荷トルクを求める

軸方向荷重をリード $P_B$ のボールねじで駆動するとき、外部荷重によるトルクは次式で求められます。

$$T_F=\frac{FP_B}{2\pi\eta}$$

予圧による摩擦トルクを、予圧荷重 $F_0$ と予圧ナット内部摩擦係数 $\mu_0$ から見積もる場合は、次の項を加えます。

$$T_P=\frac{\mu_0F_0P_B}{2\pi}$$

したがって、等速時の負荷トルクは、

$$T_L=T_F+T_P$$

です。リード10 mm/revを0.010 m/revへ換算して代入します。

$$T_F=\frac{157.85\times0.010}{2\pi\times0.90}=0.2791\ \mathrm{N\cdot m}$$

$$T_P=\frac{0.20\times50\times0.010}{2\pi}=0.0159\ \mathrm{N\cdot m}$$

$$T_L=0.2791+0.0159=0.2950\ \mathrm{N\cdot m}$$

等速時の負荷トルクは約0.295 N·mです。

予圧トルクが製品仕様として提示されている場合は、この簡易計算よりカタログ値を優先します。また、支持軸受やシールなどの損失も別途加える必要があります。

直線移動部を回転慣性へ換算する

加速トルクを求めるには、直線移動する質量をボールねじ軸上の慣性モーメントへ換算します。

$$J_W=m\left(\frac{P_B}{2\pi}\right)^2$$

例では、

$$J_W=80\left(\frac{0.010}{2\pi}\right)^2=0.0002026\ \mathrm{kg\cdot m^2}$$

となります。

ねじ軸を一様な中実円柱として近似すると、その回転軸まわりの慣性モーメントは、

$$J_S=\frac{1}{2}m_sr_s^2$$

です。

$$J_S=\frac{1}{2}\times5.0\times0.010^2=0.0002500\ \mathrm{kg\cdot m^2}$$

モーターを除いた機構側の慣性は、直線移動部、ねじ軸、カップリングを合計して、

$$J_L=J_W+J_S+J_C$$

$$J_L=0.0002026+0.0002500+0.0000200=0.0004726\ \mathrm{kg\cdot m^2}$$

機構側の慣性モーメントは約0.000473 kg·m²です。

ねじ軸に段差や中空部がある場合、単純な円柱近似では誤差が生じます。形状を区間ごとに分けるか、CADの質量特性を使って回転軸まわりの値を取得します。

加速トルクを求める

直線速度 $v$ とリード $P_B$ から、ボールねじ回転数を求めます。

$$n=\frac{60v}{P_B}$$

$$n=\frac{60\times0.30}{0.010}=1800\ \mathrm{rpm}$$

停止状態から時間 $t_a$ で一定加速度により1800 rpmへ到達するとき、角加速度は、

$$\alpha=\frac{2\pi n}{60t_a}$$

$$\alpha=\frac{2\pi\times1800}{60\times0.20}=942.48\ \mathrm{rad/s^2}$$

まず、モーター自身のローター慣性を含めない機構側だけの加速トルクを求めると、

$$T_{a,L}=J_L\alpha$$

$$T_{a,L}=0.0004726\times942.48=0.4455\ \mathrm{N\cdot m}$$

したがって、機構側から見た加速中のトルクは、

$$T_{acc}=T_L+T_{a,L}=0.2950+0.4455=0.7405\ \mathrm{N\cdot m}$$

ローター慣性を含める前の加速中トルクは約0.741 N·mです。

モーター候補を入れて再計算する

加速トルクには、モーターのローター慣性も影響します。そのため、選定は一度で完結せず、候補モーターの仕様値を入れて再計算します。

候補モーターのローター慣性を $J_M=0.000050\ \mathrm{kg\cdot m^2}$ と仮定すると、総慣性は、

$$J_{total}=J_L+J_M=0.0005226\ \mathrm{kg\cdot m^2}$$

加速トルクは、

$$T_a=J_{total}\alpha=0.4926\ \mathrm{N\cdot m}$$

したがって、加速中の必要トルクは、

$$T_{acc}=T_L+T_a=0.7876\ \mathrm{N\cdot m}$$

この値は安全率を掛ける前の計算値です。オリエンタルモーターは、必要トルクを $(T_L+T_a)S_f$ として示しています。安全率はモーター形式、速度域、負荷変動、停止精度などに応じて設定し、メーカーの選定基準と照合します。

最大トルクと実効トルクを分ける

加速時の約0.788 N·mだけでは、サーボモーターの選定は完了しません。

最大トルクは、加速や外乱が重なる瞬間に必要なピークトルクです。一方、実効トルクは運転サイクル全体の熱的な負荷を表します。工程ごとのトルクを $T_i$、継続時間を $t_i$ とすると、実効トルクは次式で求められます。

$$T_{rms}=\sqrt{\frac{\sum T_i^2t_i}{\sum t_i}}$$

選定時は、少なくとも次の二つを確認します。

  • 計算した最大トルクが、対象回転数でモーターの瞬時最大トルク以下であること
  • 計算した実効トルクが、モーターの定格トルク以下であること

モーターのトルクは回転数によって変わるため、定格値だけでなく速度―トルク特性上の1800 rpm付近を確認します。ドライバの電源電圧、回生能力、周囲温度、取り付け条件による制限も対象です。

Pythonで計算する

同じ計算を再利用できる関数にすると、質量、リード、速度、加速時間を変更した比較が容易になります。

from math import pi, sin, cos, radians, sqrt


def ball_screw_motor_torque(
    moving_mass_kg: float,
    friction_coefficient: float,
    external_force_n: float,
    incline_deg: float,
    lead_m_rev: float,
    screw_efficiency: float,
    preload_force_n: float,
    preload_friction_coefficient: float,
    target_speed_m_s: float,
    acceleration_time_s: float,
    screw_mass_kg: float,
    screw_radius_m: float,
    coupling_inertia_kg_m2: float,
    motor_inertia_kg_m2: float = 0.0,
) -> dict[str, float]:
    if moving_mass_kg < 0 or screw_mass_kg < 0:
        raise ValueError("mass must be non-negative")
    if lead_m_rev <= 0 or acceleration_time_s <= 0:
        raise ValueError("lead and acceleration time must be positive")
    if not 0 < screw_efficiency <= 1:
        raise ValueError("screw efficiency must be in (0, 1]")

    g = 9.807
    angle = radians(incline_deg)
    axial_force_n = external_force_n + moving_mass_kg * g * (
        sin(angle) + friction_coefficient * cos(angle)
    )

    external_load_torque_nm = (
        axial_force_n * lead_m_rev / (2 * pi * screw_efficiency)
    )
    preload_torque_nm = (
        preload_friction_coefficient
        * preload_force_n
        * lead_m_rev
        / (2 * pi)
    )
    load_torque_nm = external_load_torque_nm + preload_torque_nm

    reflected_linear_inertia = moving_mass_kg * (lead_m_rev / (2 * pi)) ** 2
    screw_inertia = 0.5 * screw_mass_kg * screw_radius_m**2
    load_inertia = (
        reflected_linear_inertia
        + screw_inertia
        + coupling_inertia_kg_m2
    )
    total_inertia = load_inertia + motor_inertia_kg_m2

    speed_rpm = 60 * target_speed_m_s / lead_m_rev
    angular_acceleration = 2 * pi * speed_rpm / (60 * acceleration_time_s)
    acceleration_torque_nm = total_inertia * angular_acceleration
    peak_torque_nm = load_torque_nm + acceleration_torque_nm

    return {
        "axial_force_n": axial_force_n,
        "load_torque_nm": load_torque_nm,
        "load_inertia_kg_m2": load_inertia,
        "speed_rpm": speed_rpm,
        "angular_acceleration_rad_s2": angular_acceleration,
        "acceleration_torque_nm": acceleration_torque_nm,
        "peak_torque_before_safety_nm": peak_torque_nm,
    }


result = ball_screw_motor_torque(
    moving_mass_kg=80.0,
    friction_coefficient=0.01,
    external_force_n=150.0,
    incline_deg=0.0,
    lead_m_rev=0.010,
    screw_efficiency=0.90,
    preload_force_n=50.0,
    preload_friction_coefficient=0.20,
    target_speed_m_s=0.30,
    acceleration_time_s=0.20,
    screw_mass_kg=5.0,
    screw_radius_m=0.010,
    coupling_inertia_kg_m2=0.000020,
    motor_inertia_kg_m2=0.000050,
)

for name, value in result.items():
    print(f"{name}: {value:.6f}")

主な結果は次のとおりです。

axial_force_n: 157.845600
load_torque_nm: 0.295051
load_inertia_kg_m2: 0.000473
speed_rpm: 1800.000000
angular_acceleration_rad_s2: 942.477796
acceleration_torque_nm: 0.492579
peak_torque_before_safety_nm: 0.787627

この関数が返すピークトルクは、一定加速度、剛体、一定効率という前提の計算値です。加速度がS字形の場合は、指令プロファイルの最大角加速度を使用します。共振、バックラッシ、ねじり剛性、制御応答は別の動特性検討が必要です。

設計データとして保存する項目

計算を表計算やWebツールへ展開する場合は、入力値、出典、結果、判定を分離して保存します。

{
  "mechanism": {
    "type": "ball_screw",
    "lead_m_rev": 0.01,
    "efficiency": 0.9,
    "preload_force_n": 50.0
  },
  "motion": {
    "moving_mass_kg": 80.0,
    "target_speed_m_s": 0.3,
    "acceleration_time_s": 0.2
  },
  "motor_candidate": {
    "rotor_inertia_kg_m2": 0.00005
  },
  "result": {
    "required_speed_rpm": 1800.0,
    "peak_torque_before_safety_nm": 0.787627
  }
}

効率やローター慣性には、値だけでなくメーカー名、形番、カタログ版、参照日を持たせます。これにより、部品変更や仕様改訂時に再計算すべき範囲を追跡できます。

実務で起こりやすい失敗

軸方向荷重によるトルクだけで選ぶ。
停止から所定速度へ上げるには加速トルクが必要です。移動質量だけでなく、ねじ軸、カップリング、ローターの慣性も加えます。

mm単位のリードをそのまま式へ入れる。
トルクをN·mで求める式では、リードをm/revへ換算します。10 mm/revは0.010 m/revです。

ボールねじ効率を1として扱う。
実際の効率は製品と使用条件で変わります。メーカー仕様を使い、送り方向と逆駆動で条件が異なる場合も確認します。

予圧や支持部の抵抗を落とす。
高精度な予圧ボールねじほど、予圧トルクが無視できない場合があります。支持軸受、シール、ケーブル類の抵抗も確認します。

最大トルクだけで連続運転を判定する。
瞬時最大トルクを満たしても、実効トルクが定格を超えると熱的に使用できません。加速、等速、減速、停止を含むサイクルで計算します。

ねじ軸の限界回転数を確認しない。
モーターが1800 rpmを出せても、ボールねじの危険速度、DN値、支持方法、軸端強度が許容しなければ使用できません。

垂直軸を水平軸と同じように扱う。
垂直軸では重力荷重、下降時の回生、停電時の落下防止、保持ブレーキを含めて検討します。上昇と下降でトルクの向きも変わります。

まとめ

ボールねじ駆動のモータートルクは、等速時の負荷と加速時の慣性負荷を分けて求めます。

外部荷重と予圧を含む負荷トルクは、

$$T_L=\frac{FP_B}{2\pi\eta}+\frac{\mu_0F_0P_B}{2\pi}$$

直線移動質量の換算慣性は、

$$J_W=m\left(\frac{P_B}{2\pi}\right)^2$$

加速トルクは、

$$T_a=J_{total}\alpha$$

です。必要トルクは、負荷トルクと加速トルクを合計し、用途に応じた安全率を考慮します。

計算後は、最大トルク、実効トルク、回転数、ローター慣性、速度―トルク特性をモーター仕様と照合します。さらに、ボールねじ側の許容回転数、寿命、座屈、軸端強度も確認します。

この流れをデータ化すれば、質量、リード、速度、加速時間を変更した比較や、複数のモーター候補を一括評価する選定ツールへ発展させられます。

参考情報

参考になったらシェアしてください
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

機械設計・油圧・CAD・Python・AIなど、ものづくりに関わる技術を扱っています。工学知識を整理・構造化し、設計や自動化に再利用できる形へ変えていくことを目指しています。

目次