滚珠丝杠高精度传动及(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