滾珠絲杠高精度傳動及(Python)自動化建模

滾珠絲杠,也稱為滾珠螺桿或滾珠螺桿副,是一種將旋轉運動精確地轉換為線性運動的機械裝置。它通過在絲杠軸和螺母之間循環滾動的鋼球,將傳統絲杠的滑動摩擦轉變為滾動摩擦,從而實現了極高的傳動效率、精度和可逆性。

滾珠絲杠憑借其將旋轉運動高效、精確地轉化為直線運動的核心能力,已成為現代工業的基石,廣泛應用于數控機床的進給驅動、工業機器人的多軸聯動、半導體及液晶面板生產設備中的精密定位、3D打印機的層高控制、醫療器械如CT掃描儀的床板移動、自動化產線的裝配與檢測,以及汽車制造中的電池包裝配等高端領域。在這些要求高速度、高精度和高可靠性的關鍵場合,滾珠絲杠是實現自動化、精密化生產不可或缺的核心傳動部件。

基本結構

滾珠絲杠主要由以下幾個部分組成(如圖1所示):

滾珠絲杠高精度傳動及(Python)自動化建模的圖1

圖1 滾珠絲杠的結構

絲杠(Screw Shaft):具有精確螺旋滾道的軸,是傳動的主動件。

螺母(Nut):內部加工有與絲杠滾道相匹配的螺旋滾道,是傳動的從動件。

滾珠(Steel Balls):在絲杠和螺母的滾道間滾動,起到傳遞力和運動的作用。

循環器(Return Mechanism):安裝在螺母的兩端或內部,引導滾珠從一端滾道流出,再從另一端滾道流回,形成封閉的循環回路。

工作原理

當絲杠和螺母之間是純粹的滑動摩擦,就像把一塊重物在地面上拖動。這種摩擦力非常大,導致傳動效率極低(通常只有30%-40%),意味著大部分輸入動力被浪費在了發熱和磨損上。時間長了會產生間隙,導致傳動精度急劇下降,設備定位不準。在絲杠的螺紋槽和螺母的螺紋槽之間,加入了一串經過精密淬火和研磨的鋼球(滾珠),將滑動摩擦轉為了高精度的滾動摩擦,由于滾動摩擦的摩擦系數遠小于滑動摩擦,滾珠絲杠的傳 動效率可以達到90%以上,甚至更高。

滾珠絲杠高精度傳動及(Python)自動化建模的圖2

1.當絲杠繞其軸線旋轉時,由于滾珠與滾道的相互作用,滾珠被沿著滾道推動。

2.滾珠的復合運動(既繞絲杠公轉,又繞自身自轉)迫使螺母沿絲杠的軸線方向移動,從而將絲杠的旋轉運動轉化為螺母的直線運動。

3. 在螺母內部,滾珠通過循環返向器形成一個連續的閉合回路,使滾珠能夠持續不斷地參與傳動。

滾珠絲杠建模

1、導入CAD模型:向RecurDyn導入CAD模型,對模型進行適當簡化和重命名,主要保留關鍵部件,絲杠(Shaft)、單個螺母(Nut)、循環器(ReturnMechanism)和滾珠(Ball1-Balln)、固定裝置(Lock)。

滾珠絲杠高精度傳動及(Python)自動化建模的圖3

滾珠絲杠高精度傳動及(Python)自動化建模的圖4

滾珠絲杠高精度傳動及(Python)自動化建模的圖5

2、定義材料屬性:該模型中,不考慮部件的變形,因此將所有部件視為剛體,只需要將材料屬性改為鋼(Steel)即可。

3、定義約束:根據運動關系對關鍵部件添加約束,絲杠(Shaft)與Ground旋轉副,循環器(Return Mechanism)與螺母(Nut)固定副,螺母上端固定裝置固定副,使用Cmotion(G)限制固定裝置的旋轉運動。

4、建立滾道面:為絲杠、循環器、螺母創建接觸面,分別拾取其可能與滾珠接觸的面,創建為FaceSurface1。

滾珠絲杠高精度傳動及(Python)自動化建模的圖6

5、添加接觸:接觸的添加是滾珠絲杠建模的重點,因為滾珠數量多,分別于絲桿、螺母,循環器的滾道均接觸,如果手動建模,容易出錯,且耗時過長,因此通過Pnet建模,會大大提高建模效率。本案例采用Pnet Python進行自動化建模,腳本示例如下:

腳本1目的:創建一個由42個球體組成的鏈條,并為相鄰的球體之間(以及首尾球體之間)定義球對球接觸。

# 獲取模型對象model = model_document.Model
# --- 參數配置 ---# 球體的總數NUM_BALLS = 42# 接觸屬性的通用設置CONTACT_STIFFNESS = 1000.0CONTACT_DAMPING = 0.1CONTACT_FRICTION = 0.0
# --- 主循環 ---# 遍歷從 1 到 NUM_BALLS-1 的索引,用于創建 Ball1->Ball2, Ball2->Ball3, ..., Ball41->Ball42 的接觸for i in range(1, NUM_BALLS):    # 定義當前接觸關系中主動球體和基礎球體的名稱    # 例如,當 i=1 時,創建 Ball1 和 Ball2 之間的接觸    actionBody_name = f"Ball{i}"    baseBody_name = f"Ball{i + 1}"    contact_name = f"Contact_Ball{i}_To_Ball{i + 1}"
    # --- 獲取幾何體對象 ---    # 1. 獲取actionBody的實體,并將其轉換為 IBody 對象    actionBody_entity = model.GetEntity(actionBody_name)    actionBody = IBody(actionBody_entity)    # 2. 從actionBody中獲取其幾何實體(假設名為 "Ellipsoid1"),并轉換為 IGeometry 對象    geo1 = actionBody.GetEntity("Ellipsoid1")    if geo1 is not None:        geo1 = IGeometry(geo1)
    # 3. 獲取baseBody) 的實體,并將其轉換為 IBody 對象    baseBody_entity = model.GetEntity(baseBody_name)    baseBody = IBody(baseBody_entity)    # 4. 從基礎球體中獲取其幾何實體,并轉換為 IGeometry 對象    geo2 = baseBody.GetEntity("Ellipsoid1")    if geo2 is not None:        geo2 = IGeometry(geo2)
    # --- 創建接觸關系 ---    # 使用球對球接觸的創建函數,傳入接觸名稱和兩個幾何體    contact_geo = IContactGeoSurface(model.CreateContactSphereToSphere2(contact_name, geo1, geo2))
    # --- 設置接觸屬性 ---    contact_geo.ContactProperty.StiffnessCoefficient.Value = CONTACT_STIFFNESS    contact_geo.ContactProperty.DampingCoefficient.Value = CONTACT_DAMPING    contact_geo.ContactProperty.Friction.Coefficient.Value = CONTACT_FRICTION
    # 同步幾何體,球的接觸半徑與球體幾何同步    contact_geo.UseSyncGeometry = True
# --- 處理首尾球體的特殊接觸 (形成閉環) ---# 在循環結束后,單獨創建最后一個球體 (Ball42) 和第一個球體 (Ball1) 之間的接觸# 這樣就形成了一個由42個球體組成的閉環鏈條
# 定義首尾接觸的名稱first_last_contact_name = "Contact_Ball42_To_Ball1"
# 獲取第一個球體 (Ball1) 的幾何體first_ball_entity = model.GetEntity("Ball1")first_ball = IBody(first_ball_entity)geo_first = first_ball.GetEntity("Ellipsoid1")if geo_first is not None:    geo_first = IGeometry(geo_first)
# 獲取最后一個球體 (Ball42) 的幾何體last_ball_entity = model.GetEntity(f"Ball{NUM_BALLS}")last_ball = IBody(last_ball_entity)geo_last = last_ball.GetEntity("Ellipsoid1")if geo_last is not None:    geo_last = IGeometry(geo_last)
# 創建首尾接觸關系first_last_contact = IContactGeoSurface(    model.CreateContactSphereToSphere2(first_last_contact_name, geo_last, geo_first))
# 設置首尾接觸的屬性 (與上述接觸屬性保持一致)first_last_contact.ContactProperty.StiffnessCoefficient.Value = CONTACT_STIFFNESSfirst_last_contact.ContactProperty.DampingCoefficient.Value = CONTACT_DAMPINGfirst_last_contact.ContactProperty.Friction.Coefficient.Value = CONTACT_FRICTIONfirst_last_contact.UseSyncGeometry = True
print(f"成功創建了 {NUM_BALLS} 個球體之間的接觸關系,包括一個首尾閉環接觸。")

腳本2目的:為多個球體(Ball1 到 Ball42)分別定義它們與三個部件(返回器、螺母、絲杠)之間的球面-曲面接觸。通過循環遍歷每個球體,并為每個球體創建三組接觸對。

# 球體的總數,循環將從 1 到 41 (range(1, 42))NUM_BALLS = 42# 接觸屬性的通用設置CONTACT_STIFFNESS = 100.0CONTACT_DAMPING = 0.1CONTACT_FRICTION = 0.05
# --- 主循環 ---# 遍歷從 1 到 NUM_BALLS 的索引,為每個球體創建接觸for i in range(1, NUM_BALLS + 1):    # 為當前循環的球體生成名稱,例如 "Ball1", "Ball2", ...    current_ball_name = f"Ball{i}"
    # 獲取當前球體的幾何體    # 1. 從模型中獲取名為 "Ball{i}" 的實體(Body)    ball_body = IBody(model.GetEntity(current_ball_name))    # 2. 從該Body中獲取名為 "Ellipsoid1" 的幾何實體    ball_geo = ball_body.GetEntity("Ellipsoid1")
    # 檢查幾何體是否存在,如果不存在則跳過后續創建接觸的操作,避免腳本出錯    if ball_geo is None:        print(f"警告:未在球體 {current_ball_name} 中找到幾何體 'Ellipsoid1',跳過創建接觸。")        continue  # 跳過本次循環的剩余部分
    # 將獲取到的幾何體對象轉換為 IGeometry 類型    ball_geo = IGeometry(ball_geo)
    # 定義三個接觸的目標部件及其接觸面    contact_targets = [        {"body_name": "ReturnMechanism", "face_name": "FaceSurface1", "contact_name_suffix": "Tube"},        {"body_name": "Nut", "face_name": "FaceSurface1", "contact_name_suffix": "Nut"},        {"body_name": "Shaft", "face_name": "FaceSurface1", "contact_name_suffix": "Shaft"}    ]
    # 遍歷定義好的目標部件,為當前球體創建三組接觸    for target in contact_targets:        # 1. 獲取目標部件的幾何體        target_body = IBody(model.GetEntity(target["body_name"]))        target_geo = target_body.GetEntity(target["face_name"])        if target_geo is None:            print(f"警告:未在部件 {target['body_name']} 中找到幾何體 '{target['face_name']}',跳過創建接觸。")            continue  # 跳過當前目標部件的接觸創建
        target_geo = IGeometry(target_geo)
        # 2. 創建唯一的接觸名稱,例如 "GeoSphereTube1", "GeoSphereNut1" 等        contact_name = f"GeoSphere{target['contact_name_suffix']}{i}"
        # 3. 創建球面-曲面接觸        # 假設 model.CreateContactGeoSphere 接受 (名稱, 球體幾何體, 目標曲面幾何體) 作為參數        contact = IContactGeoSurface(model.CreateContactGeoSphere(contact_name, ball_geo, target_geo))
        # 4. 為新創建的接觸設置通用屬性        contact.ContactProperty.StiffnessCoefficient.Value = CONTACT_STIFFNESS        contact.ContactProperty.DampingCoefficient.Value = CONTACT_DAMPING        contact.ContactProperty.Friction.Coefficient.Value = CONTACT_FRICTION        contact.ActionSyncGeometry = True  # 啟用同步幾何,確保接觸計算準確
    # --- 循環結束 ---    # 循環將在 i 達到 NUM_BALLS (即 42) 后自動結束

6、定義運動:滾珠絲杠工作時候,絲杠提供旋轉運動,因此定義絲杠的旋轉運動,設置速度為-10(rad/s)。

7、設置仿真時間和步長等參數并開始仿真。

8、后處理:仿真完成后,可通過RecurDyn后處理工具,輸出仿真動畫、接觸力曲線,研究系統的動態特性,如滾珠通過頻率,傳動效率等,也可用于振動和噪聲分析等。

滾珠絲杠高精度傳動及(Python)自動化建模的圖7

滾珠絲杠高精度傳動及(Python)自動化建模的圖8

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1