Skip to content

Instantly share code, notes, and snippets.

@nagae
Created December 4, 2022 05:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nagae/8a8cbe63bd97f4674177f61cdc5b96f7 to your computer and use it in GitHub Desktop.
Save nagae/8a8cbe63bd97f4674177f61cdc5b96f7 to your computer and use it in GitHub Desktop.
ヘリカル減速機サマリシートチェッカー
from math import *
import pandas as pd
def checker(xl_name):
# Excel
edf = pd.read_excel(xl_name, header=1, index_col="項目",dtype=str)["値"]
# 個別に与えられる仕様
P, n, i = edf.loc[["駆動機出力", "駆動機回転速度", "減速比"]].astype(float)
# 選択した値
za2 = int(edf.loc["大歯車波数"])
m_n, b_b, b_a, La = edf.loc[["モジュール", "bの歯幅", "aの歯幅", "中心距離"]].astype(float)
LI_1, LI_2, LII_2, LII_3, LIII_1 = edf.loc[["I軸 L1", "I軸 L2", "Ⅱ軸 L2", "Ⅱ軸 L3", "Ⅲ軸 L1"]].astype(float)
da1, df1, da2, db1, db2, dbf = edf.loc[["軸径(歯車a1部)", "軸径(動力入力部)", "軸径(歯車a2取付部)", "軸径(歯車b1部)", "歯車b2取付部", "出力軸径"]].astype(float)
B1, B3, B5, B6 = edf.loc[["Ⅰ軸の軸受タイプ", "Ⅱ軸の軸受タイプ", "Ⅲ軸の内側軸受タイプ", "Ⅲ軸の出力側軸受タイプ"]]
La2, Lb2 = edf.loc[["歯車aのキー長さ", "歯車bのキー長さ"]].astype(float)
nB1, nB2, nB3, nB4, nB5, nB6 = edf.loc[["B1の個数", "B2の個数", "B3の個数", "B4の個数", "B5の個数", "B6の個数"]].astype(int)
#nbolt, sbolt = edf.loc[["蓋締め使用本数-1", "ボルトサイズ(ex. 5)"]].astype(int)
# 軸受のカタログ
B62 = pd.read_csv("https://gist.githubusercontent.com/nagae/8756dc2de16082219e1ae6a80a73dfb3/raw/bearing_62.csv", index_col="呼び番号")
B63 = pd.read_csv("https://gist.githubusercontent.com/nagae/8756dc2de16082219e1ae6a80a73dfb3/raw/bearing_63.csv", index_col="呼び番号")
# ボルトのカタログ
JIS_B_1180=pd.read_csv("https://gist.githubusercontent.com/nagae/8756dc2de16082219e1ae6a80a73dfb3/raw/JIS_B_1180.csv", header=0, index_col=0)
# 以下は全学生共通のパラメタ
g = 9.8 #[m/s^2] 重力加速度
alpha_n = radians(20) #圧力角は20度(ラジアン)
beta0 = radians(10) # ねじれ角は10度(ラジアン)
k = 1 # 歯幅係数(b/d) (ここではアドホックに仮定)
K = 0.2 # 比応力係数(テキストp.12, 表3-5からK=0.226となるが,一貫してK=0.2とする)
sigma_b = 30 # 許容曲げ応力 [kgf/mm^2] (テキストp.11)
sigma = 6 # 許容圧縮応力 [kgf/mm^2] (アドホックに仮定)
tau = 4.8 # 許容剪断応力 [kgf/mm^2] (テキストp.41ではτ=4〜6)
fW = 0.74 #歯車の荷重係数(2022.12.1訂正:0.8→0.74)
eta = 0.95 # 機械効率(軸に作用するねじりモーメントの計算に用いる)
zb1_min = 14 # 限界歯数
y = 0.092 # 歯形係数
Km = 1.5 #曲げモーメントに対する動的効果係数
Kt = 1.0 #ねじりモーメントに対する動的効果係数
alpha_key = 1.35 # キー溝への応力集中係数
theta_max = 0.25 # 許容ねじれ角 [°/m]
G = 8.1*1e3 # 横弾性係数 [kgf mm^2]
f_d=1.8 # 軸受の荷重係数(テキストp.88)
f_g=1.1 # 軸受の車係数(テキストp.88)
L_h=15000 # 軸の寿命時間 [h](テキスト p.49)
print("==========\n\n減速比,回転数の決定\n\n==========")
i1, i2 = sqrt(i), sqrt(i) # 減速比
n1 = n # I軸の回転数
n2 = n1/i1 # II軸の回転数
n3 = n2/i2 # III軸の回転数
print("1段目,2段目の減速比(i1, i2):\t{:5.2f}".format(i1))
print("I軸の回転速度(n1):\t\t{:5.2f} [rpm]".format(n))
print("II軸の回転速度(n2):\t{:5.2f} [rpm]".format(n2))
print("III軸の回転速度(n3):\t{:5.2f} [rpm]".format(n3))
print("==========\n\nピッチ円の仮定\n\n==========")
# 各歯車のピッチ円の仮定(あとで真値で上書きされる)
Da1 = ( 60/(g*pi)*1E6*(1+i1)/(i1*k*K) )**(1/3) * (P/n1)**(1/3)
Da2 = ( 60/(g*pi)*1E6*(i1*(1+i1))/(k*K) )**(1/3) * (P/n2)**(1/3)
Db1 = ( 60/(g*pi)*1E6*(1+i2)/(i2*k*K) )**(1/3) * (P/n2)**(1/3)
Db2 = ( 60/(g*pi)*1E6*(i2*(1+i2))/(k*K) )**(1/3) * (P/n3)**(1/3)
print("Da1:\t{:5.3f} [mm]\nDa2:\t{:5.3f} [mm]\nDb1:\t{:5.3f} [mm]\nDb2:\t{:5.3f} [mm]".format(Da1, Da2, Db1, Db2))
print("==========\n\nモジュールの決定\n\n==========")
Vb1 = pi*Db1*n2/(60*1000) # 歯車b1の周速度
Fb1 = 1E3/g*P/Vb1
# 速度Vに対応した速度係数fVを返す関数
def fV(V):
if V < 5: return 3/(3+V)
elif V < 20: return 6/(6+V)
else: return 5.5/(5.5+sqrt(V))
# 歯車b1の速度係数
fVb1 = fV(Vb1)
#表示
print("周速度(Vb1):\t\t{:5.2f}[m/s]\n接線力(Fb1):\t\t{:5.2f}[N]\n速度係数(fVb1):\t{:5.2f}\n荷重係数(fW):\t{:5.2f}".format(Vb1, Fb1, fVb1, fW))
# 曲げ強度から求められるモジュール
m_n_a_min = ( ( 60*1E6*P*cos(beta0) ) / (25*g*pi**2*zb1min*n2*sigma_b*fVb1*fW*y) )**(1/3)
m_n_a_max = ( ( 60*1E6*P*cos(beta0) ) / (20*g*pi**2*zb1min*n2*sigma_b*fVb1*fW*y) )**(1/3)
print("曲げ強度に基づくモジュールの範囲: {:4.2f}〜{:4.2f}".format(m_n_a_min, m_n_a_max))
# 面圧強度から求められるモジュール
m_n_b_min = sqrt( ( Fb1*(1+i2)*cos(beta0)**3 ) / (25 * K * fVb1 * zb1min * i2 ) )
m_n_b_max = sqrt( ( Fb1*(1+i2)*cos(beta0)**3 ) / (20 * K * fVb1 * zb1min * i2 ) )
print("面圧強度に基づくモジュールの範囲: {:4.2f}〜{:4.2f}".format(m_n_b_min, m_n_b_max))
#JIS_B_1701に記載されている標準モジュール値
JIS_B_1701 = {0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 1.25, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10}
if m_n not in JIS_B_1701:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nモジュール(m_n){:5.2f}はJIS B 1701の標準値ではありません\n".format(m_n))
# 小歯車の歯数は限界歯数
za1 = zb1 = zb1_min
print("小歯車の歯数(za1, zb1):\t{:d}".format(za1))
print("大歯車の歯数(za2, zb2)の目安:\t{:}〜{:}".format(floor(za1*i1), ceil(za1*i1)))
print("選択した大歯車の歯数(za2, zb2):\t{:d}".format(za2))
ir=(za2/za1)**2 # 実際の減速比
ir1 = ir2 = sqrt(ir) # 実際の1段目/2段目の減速比
epsilon = ( i - ir )/ir * 100 # 減速比誤差
print("仕様が求める減速比(i):\t\t{:3.2f}\n実際の減速比(ir):\t\t\t{:3.2f}\n減速比誤差(ε):\t\t\t{:3.2f}[%]".format(i, ir, epsilon))
print("小・大歯数の最大公約数:\t{:d}".format(gcd(za1, za2)))
if abs(epsilon) > 4:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n減速比誤差(ε){:5.2f}が4%を超えています\n".format(epsilon))
print("==========\n\n大小歯車ピッチ円の決定\n\n==========")
# 大小歯車のピッチ円直径
Da1 = Db1 = zb1*m_n/cos(beta0) #小歯車(上書き)
Da2 = Db2 = zb2*m_n/cos(beta0) #大歯車(上書き)
print("小歯車ピッチ円直径(Da1,Db1):\t{:3.2f} [mm]\n大歯車ピッチ円直径(Da2,Db2):\t{:3.2f} [mm]".format(Da1, Da2))
# 歯車a1, b1の周速度と速度係数を算出し直す
Va1 = pi*Da1*n1/(60*1000) # 歯車a1の周速度
fVa1 = fV(Va1) # 歯車a1の速度係数
Vb1 = pi*Db1*n2/(60*1000) # 歯車b1の周速度(上書き)
fVb1 = fV(Vb1) # 歯車b1の速度係数(上書き)
print("歯車a1の周速度(Va1):\t\t\t{:5.2f} [m/s]".format(Va1))
print("歯車a1の速度係数(fVa1):\t\t{:5.2f}".format(fVa1))
print("歯車b1の周速度(Vb1):\t\t\t{:5.2f} [m/s]".format(Vb1))
print("歯車b1の速度係数(fVb1):\t\t{:5.2f}".format(fVb1))
print("==========\n\n歯車の歯幅の検討\n\n===========")
Fb1 = 1E3/g*P/Vb1 # 歯車b1の接線力(再計算) [kgf]
bb_min_1 = Fb1/(sigma_b*fVb1*fW*pi*m_n*y) # 曲げ強さに基づく歯幅の最小値
bb_min_2 = Fb1*cos(beta0)**3/(fVb1*K*zb1*m_n)*(1+ir2)/ir2 # 面圧強さに基づく歯幅の最小値
print("■歯車b1の歯幅(b_b):\t\t\t{:5.2f} [mm]".format(b_b))
print("歯車b1の接線力(Fb1):\t\t\t{:5.2f} [kgf]".format(Fb1))
print("曲げ強さに基づく最低歯幅(bb_min_1):\t{:5.2f} [mm]".format(bb_min_1))
print("面圧強さに基づく最低歯幅(bb_min_2):\t{:5.2f} [mm]".format(bb_min_2))
print("経験則に基づく2段目の適切な歯幅の範囲:\t{:5.2f}〜{:5.2f} [mm]".format(20*m_n, 25*m_n))
if (b_b < bb_min_1) or (b_b < bb_min_2):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n歯幅b_b={:5.2f}が最小値{:5.2f}を下回っています\n".format(b_b, max(bb_min_1, bb_min_2)))
if (b_b < 20*m_n) or (b_b > 25*m_n):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n歯幅b_b={:5.2f}が適正範囲{:5.2f}〜{:5.2f}にありません\n".format(b_b, 20*m_n, 25*m_n))
print("==========\n\n歯車の寸法を決定\n\n==========")
hk = m_n # 歯末のたけ
hf = 1.25 *m_n # 歯元のたけ
h = hk + hf # 全歯のたけ
Da1k = Db1k = Da1+2*hk #小歯車の外径
Da2k = Da2k = Da2+2*hk #大歯車の外径
La_i = (Da1+Da2)/2 # 中心距離(理論値)
Ld_a1 = Ld_b1 = pi*Da1/tan(beta0) # 小歯車のリード長
Ld_a2 = Ld_b2 = pi*Da2/tan(beta0) # 大歯車のリード長
print("歯末のたけ(hk):\t\t\t{:5.2f} [mm]\n歯元のたけ(hf):\t\t\t{:5.2f} [mm]\n全歯のたけ(h):\t\t\t{:5.2f} [mm]".format(hk, hf, h))
print("小歯車の外径(Da1k,Db1k):\t{:5.2f} [mm]\n大歯車の外径(Da2k,Db2k):\t{:5.2f} [mm]".format(Da1k, Da2k))
print("中心距離(理論値)(La_i):\t\t{:5.2f} [mm]\n小歯車リード長(Ld_a1,Ld_b1):\t{:5.2f} [mm]\n大歯車リード長(Ld_a2,Ld_b2):\t{:5.2f} [mm]".format(La_i, Ld_a1, Ld_a2))
print("==========\n\n軸の強度計算および軸径の決定\n\n==========")
print("歯車に作用する荷重\n-----")
F1 = 2*30*1e6*P/(g*pi*Da1*n1)
Fs1 = F1/cos(beta0)*tan(alpha_n)
Fa1 = F1*tan(beta0)
F2, Fs2, Fa2 = F1, Fs1, Fa1
F3 = 2*30*1e6*P/(g*pi*Db1*n2)
Fs3 = F3/cos(beta0)*tan(alpha_n)
Fa3 = F3*tan(beta0)
F4, Fs4, Fa4 = F3, Fs3, Fa3
print("歯車a1, a2")
print("接線方向の荷重(F1,F2):\t\t{:5.2f} [kgf]".format(F1))
print("半径方向の荷重(Fs1,Fs2):\t\t{:5.2f} [kgf]".format(Fs1))
print("スラスト方向の荷重(Fa1,Fa2):\t{:5.2f} [kgf]".format(Fa1))
print()
print("歯車b1, b2")
print("接線方向の荷重(F3,F4):\t\t{:5.2f} [kgf]".format(F3))
print("半径方向の荷重(Fs3,Fs4):\t\t{:5.2f} [kgf]".format(Fs3))
print("スラスト方向の荷重(Fa3,Fa4):\t{:5.2f} [kgf]".format(Fa3))
print("\n各軸に作用する反力および曲げモーメント\n-----")
# 自由度なく決定される長さ
LII_1 = LI_1 # II軸の軸受B3から歯車a2中心までの長さ [mm]
LIII_2 = LII_3 # III軸の歯車b2中心から軸受B6までの長さ [mm]
# 各軸の軸受間長さ
LI = LI_1 + LI_2
LII = LII_2 + LII_3
LIII = LIII_1 + LIII_2
# 寸法を表示し,歯幅と比較
print("【参考】中心距離(理論値)(La_i): {:5.2f}\t歯車a1, a2の歯幅(b_a): {:5.2f} [mm]\t歯車b1, b2の歯幅(b_b): {:5.2f} [mm]".format(La_i, b_a, b_b))
print("■中心距離:\t\tLa: {:5.2f} [mm]".format(La))
print("■I軸の寸法:\t\tLI: {:5.2f} [mm]\tLI_1: {:5.2f} [mm]\t\tLI_2: {:5.2f} [mm]".format(LI, LI_1, LI_2) )
print("■II軸の寸法:\t\tLII: {:5.2f} [mm]\tLII_1: {:5.2f} [mm]\tLII_2: {:5.2f} [mm]\tLII_3: {:5.2f} [mm]\t".format(LII, LII_1, LII_2, LII_3) )
print("■III軸の寸法:\t\tLIII: {:5.2f} [mm]\tLIII_1: {:5.2f} [mm]\tLIII_2: {:5.2f} [mm]\t".format(LIII, LIII_1, LIII_2) )
# I軸, II軸, III軸の寸法を確認
if (La < La_i - 0.4) or (La > La_i+0.4):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n中心距離(La){:5.2f}が理論値(La_i){:5.2f}から離れています\n".format(La, La_i))
if LII <= LI+LIII:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nII軸の軸間長さ(LII){:5.2f}はI軸の軸間長さ(LI):{:5.2f}とIII軸の軸間長さ(LIII):{:5.2f}の和より長い必要があります\n".format(LII, LI, LIII))
if LI < b_a:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nI軸の軸間長さ(LI){:5.2}は歯車a1, a2の歯幅(b_a):{:5.2f}より長い必要があります\n".format(LI, b_a))
if LIII < b_b:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nIII軸の軸間長さ(LIII){:5.2}は歯車b1, b2の歯幅(b_b):{:5.2f}より長い必要があります\n".format(LIII, b_b))
# 接線方向の反力 [kgf]
R1 = F1*LI_2/LI
R2 = F1*LI_1/LI
# 半径方向の反力 [kgf]
R1p = Fs1*LI_2/LI
R2p = Fs1*LI_1/LI
# スラスト方向の反力 [kgf]
R1pp = - Fa1*Da1/(2*LI)
R2pp = - R1pp
# 合成反力 [kgf]
Rn1 = sqrt( R1**2+(R1p+R1pp)**2 )
Rn2 = sqrt( R2**2+(R2p+R2pp)**2 )
# I軸に働く最大の曲げモーメント [kgf mm]
Ma1 = max(Rn1*LI_1, Rn2*LI_2)
print("I軸に働く曲げモーメント")
print("軸の長さ:\t\tLI_1: {:5.2f} [mm]\t LI_2: {:5.2f} [mm]\tLI: {:5.2f} [mm]".format(LI_1, LI_2, LI) )
print("接線方向の反力\tR1: {:5.2f} [kgf]\t R2: {:5.2f} [kgf]".format(R1, R2))
print("半径方向の反力\tR1': {:5.2f} [kgf]\t R2': {:5.2f} [kgf]".format(R1p, R2p))
print("スラスト方向の反力\tR1'': {:5.2f} [kgf]\t R2'': {:5.2f} [kgf]".format(R1pp, R2pp))
print("合成反力\t\t\tRn1: {:5.2f} [kgf]\t Rn2: {:5.2f} [kgf]".format(Rn1, Rn2))
print("I軸に働く最大の曲げモーメント (Ma1):\t{:5.2f} [kgf mm]".format(Ma1))
# 接線方向の反力 [kgf]
R3 = (F3*LII_3 - F2*(LII-LII_1))/LII
R4 = (F3*LII_2 - F2*LII_1)/LII
# 半径方向の反力 [kgf]
R3p = (Fs3*LII_3 + Fs2*(LII-LII_1))/LII
R4p = (Fs2*LII_1 + Fs3*LII_2)/LII
# スラスト方向の反力 [kgf]
R3pp = (Fa2*Da2 - Fa3*Db1)/(2*LII)
R4pp = (Fa3*Db1 - Fa2*Da2)/(2*LII)
# 合成反力 [kgf]
Rn3 = sqrt( R3**2+(R3p+R3pp)**2 )
Rn4 = sqrt( R4**2+(R4p+R4pp)**2 )
# II軸に働く曲げモーメント [kgf mm]
Ma2 = Rn3*LII_1
Mb1 = Rn4*LII_3
print("II軸に働く曲げモーメント")
print("軸の長さ:\t\tLII_1: {:5.2f} [mm]\tLII_2: {:5.2f} [mm]\tLII_3: {:5.2f} [mm]\tLII: {:5.2f} [mm]".format(LII_1, LII_2, LII_3, LII) )
print("接線方向の反力\tR3: {:5.2f} [kgf]\t R4: {:5.2f} [kgf]".format(R3, R4))
print("半径方向の反力\tR3': {:5.2f} [kgf]\t R4': {:5.2f} [kgf]".format(R3p, R4p))
print("スラスト方向の反力\tR3'': {:5.2f} [kgf]\t R4'': {:5.2f} [kgf]".format(R3pp, R4pp))
print("合成反力\t\t\tRn3: {:5.2f} [kgf]\t Rn4: {:5.2f} [kgf]".format(Rn3, Rn4))
print("II軸に働く曲げモーメント (Ma2):\t{:5.2f} [kgf mm]".format(Ma2))
print("II軸に働く曲げモーメント (Mb1):\t{:5.2f} [kgf mm]".format(Mb1))
# 接線方向の反力 [kgf]
R5 = F3*LIII_2/LIII
R6 = F3*LIII_1/LIII
# 半径方向の反力 [kgf]
R5p = Fs3*LIII_2/LIII
R6p = Fs3*LIII_1/LIII
# スラスト方向の反力 [kgf]
R5pp = Fa3*Db2/(2*LIII)
R6pp = - R5pp
# 合成反力 [kgf]
Rn5 = sqrt( R5**2+(R5p+R5pp)**2 )
Rn6 = sqrt( R6**2+(R6p+R6pp)**2 )
# III軸に働く最大の曲げモーメント [kgf mm]
Mb2 = max(Rn5*LIII_1, Rn6*LIII_2)
print("III軸に働く曲げモーメント")
print("軸の長さ:\t\tLIII_1: {:5.2f} [mm]\t LIII_2: {:5.2f} [mm]\tLIII: {:5.2f} [mm]".format(LIII_1, LIII_2, LIII) )
print("接線方向の反力\tR5: {:5.2f} [kgf]\t R6: {:5.2f} [kgf]".format(R5, R6))
print("半径方向の反力\tR5': {:5.2f} [kgf]\t R6': {:5.2f} [kgf]".format(R5p, R6p))
print("スラスト方向の反力\tR5'': {:5.2f} [kgf]\t R6'': {:5.2f} [kgf]".format(R5pp, R6pp))
print("合成反力\t\t\tRn5: {:5.2f} [kgf]\t Rn6: {:5.2f} [kgf]".format(Rn5, Rn6))
print("III軸に働く最大の曲げモーメント (Mb2):\t{:5.2f} [kgf mm]".format(Mb2))
print("\n軸の決定")
# I軸 歯車a1取付部の軸径 da1 および動力取付部の軸径 df1
# 歯車a1取付部の軸径 da1 の強度計算
Ta1 = 2*30*1e6*P/(2*pi*g*n1 * eta) # ねじりモーメント [kgf mm]
Tea1 = sqrt( (Km*Ma1)**2+ (Kt*Ta1)**2 ) # 相当ねじりモーメント [kgf mm]
da1_min = ( 16*Tea1 / (pi*tau) )**(1/3) # da1の最小値 [mm]
# 動力取付部の軸径 df1 の強度計算
df1_min1 = alpha_key * (16*Ta1/(pi*tau) ) ** (1/3) # ねじりモーメントを考慮した場合の df1 最小値 [mm]
df1_min2 = ( 180*32*1e3*Ta1 / (pi**2*theta_max*G) ) **(1/4) # ねじれこわさを考慮した場合の df1 最小値 [mm]
print("■I軸歯車a1部の軸径(da1):\t{:5.2f} [mm]".format(da1))
print("ねじりモーメント(Ta1):\t\t{:5.2f} [kgf mm]\n曲げモーメント(Ma1):\t\t{:5.2f} [kgf mm]\n相当ねじりモーメント(Tea1):\t{:5.2f} [kgf mm]\n歯車a1取り付け部最小軸径(da1_min):\t\t{:5.2f} [mm]".format(Ta1, Ma1, Tea1, da1_min))
print("歯車a1の歯底円径(Da1-2*hf):\t{:5.2f} [mm]".format(Da1-2*hf))
print()
print("■I軸動力取付部の軸径(df1):\t{:5.2f} [mm]".format(df1))
print("ねじれモーメントに基づく最小軸径(df1_min1):\t{:5.2f} [mm]\nねじれこわさに基づく最小軸径(df1_min2):\t\t{:5.2f} [mm]".format(df1_min1, df1_min2))
if da1 < da1_min:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nI軸の軸径(da1){:5.2f}が最小軸径(da1_min){:5.2f}より小さくなっています\n".format(da1, da1_min))
if da1 > Da1-2*hf:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nI軸の軸径(da1){:5.2f}が歯車a1の歯底円(Da1-2*hf){:5.2f}よ大きくなっています\n".format(da1, Da1-2*hf))
if (df1 < df1_min1) or (df1 < df1_min2):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nI軸の軸径(df1){:5.2f}が最小軸径(df1_min){:5.2f}より小さくなっています\n".format(df1, max(df1_min1, df1_min2)))
if df1 > da1:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B1を適切に選択するためにはdf1<da1である必要があります\n".format(df1, da2))
# II軸 歯車a2取付部の軸径 da2 および歯車b1取付部の軸径 db1
# da2の強度計算
Ta2 = 2*30*1e6*P/(2*pi*g*n2*eta) # ねじりモーメント [kgf mm] (教科書 p.88では使われていないが,発生するトルクには機械効率を加味すべき)
Tea2 = sqrt( (Km*Ma2)**2+ (Kt*Ta2)**2 ) # 相当ねじりモーメント [kgf mm]
da2_min = alpha_key * ( 16*Tea2 / (pi*tau) )**(1/3) # da2の最小値 [mm]
# db1の強度計算
Tb1 = Ta2 # ねじりモーメントは a2部に作用するモーメントに一致 [kgf mm]
Teb1 = sqrt( (Km*Mb1)**2+ (Kt*Tb1)**2 ) # 相当ねじりモーメント [kgf mm]
db1_min = ( 16*Teb1 / (pi*tau) )**(1/3) # db1の最小値 [mm]
print("■II軸歯車a2部の軸径(da2):\t{:5.2f} [mm]".format(da2))
print("ねじりモーメント(Ta2):\t\t{:5.2f} [kgf mm]\n曲げモーメント(Ma2):\t\t{:5.2f} [kgf mm]\n相当ねじりモーメント(Tea2):\t{:5.2f} [kgf mm]\nda2最小値(da2_min):\t\t{:5.2f} [mm]".format(Ta2, Ma2, Tea2, da2_min))
print()
print("■II軸歯車b1部の軸径(db1):\t{:5.2f} [mm]".format(db1))
print("ねじりモーメント(Tb1):\t\t{:5.2f} [kgf mm]\n曲げモーメント(Mb1):\t\t{:5.2f} [kgf mm]\n相当ねじりモーメント(Teb1):\t{:5.2f} [kgf mm]\ndb1最小値(db1_min):\t\t{:5.2f} [mm]".format(Tb1, Mb1, Teb1, db1_min))
print("歯車b1の歯底円径(Db1-2*hf):\t{:5.2f} [mm]".format(Db1-2*hf))
if da2 < da2_min:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nII軸の軸径(da2){:5.2f}が最小軸径(da2_min){:5.2f}より小さくなっています\n".format(da2, da2_min))
if db1 < db1_min:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nII軸の軸径(db1){:5.2f}が最小軸径(db1_min){:5.2f}より小さくなっています\n".format(db1, db1_min))
if db1 > Db1-2*hf:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nII軸の軸径(db1){:5.2f}が歯車b1の歯底円(Db1-2*hf){:5.2f}より大きくなっています\n".format(db1, Db1-2*hf))
# III軸 歯車b2取付部の軸径 db1 および出力取付部の軸径 dbf
# 軸の強度計算2*
Tb2 = 2*30*1e6*P/(2*pi*g*n3*eta) # ねじりモーメント [kgf mm](教科書 p.88では使われていないが,発生するトルクには機械効率を加味すべき)
Teb2 = sqrt( (Km*Mb2)**2+ (Kt*Tb2)**2 ) # 相当ねじりモーメント [kfg mm]
db2_min = alpha_key * ( 16*Teb2 / (pi*tau) )**(1/3) # 最小の軸径 [mm]
dbf_min1 = alpha_key * (16*Tb2/(pi*tau) ) ** (1/3) # ねじりモーメントを考慮した場合の dbf 最小値 [mm]
dbf_min2 = ( 180*32*1e3*Tb2 / (pi**2*theta_max*G) ) **(1/4) # ねじれこわさを考慮した場合の dbf 最小値 [mm]
print("■III軸歯車b2取付部の軸径(db2):\t{:5.2f} [mm]".format(db2))
print("ねじりモーメント(Tb2):\t\t{:5.2f} [kgf mm]\n曲げモーメント(Mb2):\t\t{:5.2f} [kgf mm]\n相当ねじりモーメント(Teb2):\t{:5.2f} [kgf mm]\n最小軸径(db2_min):\t\t{:5.2f} [mm]".format(Tb2, Mb2, Teb2, db2_min))
print()
print("■III軸出力取付部の軸径(dbf):\t{:5.2f} [mm]".format(dbf))
print("ねじれモーメントに基づく最小軸径(dbf_min1):\t{:5.2f} [mm]\nねじれこわさに基づく最小軸径(dbf_min2):\t\t{:5.2f} [mm]".format(dbf_min1, dbf_min2))
if db2 < db2_min:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nIII軸の軸径(db2){:5.2f}が最小軸径(db2_min){:5.2f}より小さくなっています\n".format(db2, db2_min))
if (dbf < dbf_min1) or (dbf < dbf_min2):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nIII軸の軸径(dbf){:5.2f}が最小軸径(db_min){:5.2f}より小さくなっています\n".format(dbf, max(dbf_min1, dbf_min2)))
print("==========\n\nキーの決定\n\n==========")
# 歯車a2, b2を止めるキーの長 La2, Lb2
#JIS B 1301より,軸径の最小値,最大値に対応したキーの幅(b)と高さ(h)を辞書として格納
JIS_B_1301_dict = {( 6, 8): (2,2), ( 8,10): (3,3), (10,12): (4,4), (12,17): (5,5),
(17,22): (6,6), (22,30): (8,7), (30,38): (10,8), (38,44): (12,8),
(44,50): (14,9), (50,58): (16,10), (58,65): (18,11), (65,75): (20,12),
(75,85): (22,14), (85,95): (25,14), (95,110): (28,16), (110,130): (32,18) }
#引数として渡された軸径dに応じた幅と高さを返す
def JIS_B_1301(d):
for (dmin, dmax) in JIS_B_1301_dict:
if (dmin <= d) and (d < dmax):
return JIS_B_1301_dict[dmin, dmax]
#それぞれのキーの幅と高さを JIS B 1301から取得
ba2, ha2 = JIS_B_1301(da2)
bb2, hb2 = JIS_B_1301(db2)
#それぞれのキーに作用する接線力
Pa2 = 2*Ta2/da2
Pb2 = 2*Tb2/db2
#剪断応力を考慮したキー長の最小値
La2_min1 = Pa2/(ba2*tau)
Lb2_min1 = Pb2/(bb2*tau)
#圧縮応力を考慮したキー長の最小値
La2_min2 = 2*Pa2/(ha2*sigma)
Lb2_min2 = 2*Pb2/(hb2*sigma)
print("歯車a2取り付け部の軸径(da2):{:5.2f} [mm]".format(da2))
print("軸径da2に適したキーの呼び寸法\t幅(ba2): {:5.2f} [mm]\t高さ(ha2): {:5.2f} [mm]".format(ba2, ha2))
print("■歯車a2を止めるキーの長さ(La2)\t{:5.2f} [mm]".format(La2))
print("キー長(La2)の最小値:\t剪断応力より(La2_min1): {:5.2f} [mm]\t圧縮応力より(La2_min2): {:5.2f} [mm]".format(La2_min1, La2_min2))
print("歯車a2の歯幅(b_a):\t{:5.2f} [mm]".format(b_a))
print()
print("歯車b2取り付け部の軸径(db2):{:5.2f} [mm]".format(db2))
print("軸径db2に適したキーの呼び寸法\t幅(bb2): {:5.2f} [mm]\t高さ(hb2): {:5.2f} [mm]".format(bb2, hb2))
print("■歯車b2を止めるキーの長さ(Lb2)\t: {:5.2f} [mm]".format(Lb2))
print("キー長(Lb2)の最小値:\t剪断応力より(Lb2_min1): {:5.2f} [mm]\t圧縮応力より(Lb2_min2): {:5.2f} [mm]".format(Lb2_min1, Lb2_min2))
print("歯車b2の歯幅(b_b):\t{:5.2f} [mm]".format(b_b))
if (La2 < La2_min1) or (La2 < La2_min2):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nキー長(La2) {:5.2f}が必要な値{:5.2f}より小さくなっています\n".format(La2, max(La2_min1, La2_min2)))
if (La2 > b_a):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n歯車a2のキー長(La2) {:5.2f}が歯幅(b_a) {:5.2f}を超えています\n".format(La2, b_a))
if (Lb2 < Lb2_min1) or (Lb2 < Lb2_min2):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nキー長(Lb2) {:5.2f}が必要な値{:5.2f}より小さくなっています\n".format(Lb2, max(Lb2_min1, Lb2_min2)))
if (Lb2 > b_b):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n歯車b2のキー長(Lb2) {:5.2f}が歯幅(b_b) {:5.2f}を超えています\n".format(Lb2, b_b))
print("==========\n\n軸受の選定\n\n==========")
## 各軸受の基本動定格荷重を計算する
def Fe(Fr, Fa): #ラジアル荷重 Frとスラスト荷重Faから等価ラジアル荷重 Feを計算する
# Fa/Fr < 0.19 の場合は Fe = Fr
if Fa/Fr < 0.19:
return Fr
# Fa/Fr ≧ 0.19 の場合は Fe = X*Fr + Y*Fa
X = 0.56
if Fa/Fr < 0.22: Y = 2.30
elif Fa/Fr < 0.26: Y = 1.99
elif Fa/Fr < 0.28: Y = 1.71
elif Fa/Fr < 0.30: Y = 1.55
elif Fa/Fr < 0.34: Y = 1.45
else: Y = 1.31
return X * Fr + Y * Fa
# 各軸受に作用するラジアル荷重
Fr1, Fr2 = Rn1*f_d*f_g, Rn2*f_d*f_g
Fr3, Fr4 = Rn3*f_d*f_g, Rn4*f_d*f_g
Fr5, Fr6 = Rn5*f_d*f_g, Rn6*f_d*f_g
# 等価ラジアル荷重
Fe1 = Fe(Fr1, 0)
Fe2 = Fe(Fr2, Fa1)
Fe5 = Fe(Fr5, Fa4)
Fe6 = Fe(Fr6, 0)
# 寿命係数
f_h = ( L_h/500 )**(1/3)
# 速度係数
f_n1 = ( 1e6/(500*60*n1) )**(1/3) # I軸の速度係数
f_n2 = ( 1e6/(500*60*n2) )**(1/3) # I軸の速度係数
f_n3 = ( 1e6/(500*60*n3) )**(1/3) # I軸の速度係数
#基本動定格荷重
C1 = f_h/f_n1*Fe1 # I軸B1
C2 = f_h/f_n1*Fe2 # I軸B2
C3 = f_h/f_n2*Fr3 # II軸B3
C4 = f_h/f_n2*Fr4 # II軸B4
C5 = f_h/f_n3*Fe5 # III軸B5
C6 = f_h/f_n3*Fe6 # III軸B6
#軸受の呼び番号から内径と基本定格動荷重を取得
dB1=dB2=int(B62.loc[B1]["d [mm]"])
dB3=dB4=int(B63.loc[B3]["d [mm]"])
dB5=int(B62.loc[B5]["d [mm]"])
dB6=int(B62.loc[B6]["d [mm]"])
BC1=BC2=B62.loc[B1]["Cr [kN]"]
BC3=BC4=B63.loc[B3]["Cr [kN]"]
BC5=B62.loc[B5]["Cr [kN]"]
BC6=B62.loc[B6]["Cr [kN]"]
#表示
print("寿命係数(f_h): {:5.2f}\t".format(f_h))
print("I軸回転数(n1): {:5.2f} [rpm]\tII軸回転数(n2): {:5.2f} [rpm]\tIII軸回転数(n3): {:5.2f} [rpm]".format(n1, n2, n3))
print("■I軸軸受B1=B2\t呼び番号: {:5s}\t内径 {:3d} [mm]\t 基本定格荷重 {:5.2f}[kN]\tB1個数: {:1d}\tB2個数: {:1d}".format(B1, dB1, BC1, nB1, nB2))
print("I軸速度係数(f_n1): {:5.2f}\tII軸速度係数(f_n2): {:5.2f}\tIII軸速度係数(f_n3): {:5.2f}".format(f_n1, f_n2, f_n3))
print("I軸B1\t基本動定格荷重(C1): {:5.2f}[kgf] ({:5.2f} [kN])\tラジアル荷重(Fr1): {:5.2f}[kgf]".format(C1,C1*g/1e3, Fr1))
print("I軸B2\t基本動定格荷重(C2): {:5.2f}[kgf] ({:5.2f} [kN])\tラジアル荷重(Fr2): {:5.2f}[kgf]\tスラスト荷重(Fa1) {:5.2f}[kgf]\t等価ラジアル荷重(Fe2) {:5.2f}[kgf]".format(C2, C2*g/1e3,Fr2, Fa1, Fe2))
print("(参考) df1:{:5.2f} [mm] < dB1=dB2 < da2:{:5.2f} [mm]".format(df1, da2))
if (dB1 < df1) or (dB2 > da2):
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nB1の軸受の内径は df1={:5.2f} [mm]より大きく da2={:5.2f} [mm]より小さくなければなりません\n".format(df1, da1))
if BC1*nB1 < C1*g/1e3:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B1に作用する基本動定格荷重{:5.2f}が許容値{:5.2f}*{:5.2f}={:5.2f} [kN]を超えています\n".format(C1*g/1e3, BC1, nB1, BC1*nB1))
if BC2*nB2 < C2*g/1e3:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B2に作用する基本動定格荷重{:5.2f}が許容値{:5.2f}*{:5.2f}={:5.2f} [kN]を超えています\n".format(C2*g/1e3, BC2, nB2, BC2*nB2))
print("")
print("■II軸軸受B3=B4\t呼び番号: {:5s}\t内径 {:3d} [mm]\t 基本定格荷重 {:5.2f}[kN]\tB3個数: {:1d}\tB4個数: {:1d}".format(B3, dB3, BC3, nB3, nB4))
print("II軸B3\t基本動定格荷重(C3): {:5.2f}[kgf] ({:5.2f} [kN])\tラジアル荷重(Fr3): {:5.2f}[kgf]".format(C3, C3*g/1e3, Fr3))
print("II軸B4\t基本動定格荷重(C4): {:5.2f}[kgf] ({:5.2f} [kN])\tラジアル荷重(Fr4): {:5.2f}[kgf]".format(C4, C4*g/1e3,Fr4))
if BC3*nB3 < C3*g/1e3:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B3に作用する基本動定格荷重{:5.2f}が許容値{:5.2f}*{:5.2f}={:5.2f} [kN]を超えています\n".format(C3*g/1e3, BC3, nB3, BC3*nB3))
if BC4*nB4 < C4*g/1e3:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B4に作用する基本動定格荷重{:5.2f}が許容値{:5.2f}*{:5.2f}={:5.2f} [kN]を超えています\n".format(C4*g/1e3, BC4, nB4, BC4*nB4))
print("")
print("■III軸軸受B5\t呼び番号: {:5s} \t内径 {:3d} [mm]\t 基本定格荷重 {:5.2f}[kN]\tB5個数: {:1d}".format(B5, dB5, BC5, nB5))
print("III軸B5\t基本動定格荷重(C5): {:5.2f}[kgf] ({:5.2f} [kN])\tラジアル荷重(Fr5): {:5.2f}[kgf]\tスラスト荷重(Fa4) {:5.2f}[kgf]\t等価ラジアル荷重(Fe5) {:5.2f}[kgf]".format(C5, C5*g/1e3,Fr5, Fa4, Fe5))
if BC5*nB5 < C5*g/1e3:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B5に作用する基本動定格荷重{:5.2f}が許容値{:5.2f}*{:5.2f}={:5.2f} [kN]を超えています\n".format(C5*g/1e3, BC5, nB5, BC5*nB5))
print("■III軸軸受B6\t呼び番号: {:5s} \t内径 {:3d} [mm]\t 基本定格荷重 {:5.2f}[kN]\tB6個数: {:1d}".format(B6, dB6, BC6, nB6))
print("III軸B6\t基本動定格荷重(C6): {:5.2f}[kgf] ({:5.2f} [kN])\tラジアル荷重(Fr6): {:5.2f}[kgf]".format(C6, C6*g/1e3, Fr6))
print("(参考) dB6 < dbf:{:5.2f} [mm]".format(dbf))
if BC6*nB6 < C6*g/1e3:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\n軸受B6に作用する基本動定格荷重{:5.2f}が許容値{:5.2f}*{:5.2f}={:5.2f} [kN]を超えています\n".format(C6*g/1e3, BC6, nB6, BC6*nB6))
if dB6 > dbf:
print("<<<<<<<<<<【注意!!】>>>>>>>>>>\nB6の軸受の内径は dbf={:5.2f} [mm]より小さくなければなりません\n".format(dbf))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment