Created
December 4, 2022 05:27
-
-
Save nagae/8a8cbe63bd97f4674177f61cdc5b96f7 to your computer and use it in GitHub Desktop.
ヘリカル減速機サマリシートチェッカー
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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