35kV真空断路器弹簧操动机构Adams动力学仿真与实测校验
2026/9/20 2:05:02 网站建设 项目流程

简介:围绕35kV真空断路器弹簧操动机构的设计优化,这份技术文档以Solidworks三维建模联合Adams运动学与动力学仿真为主线,面向高压开关设备研发、机械结构仿真方向的工程师与高校研究人员。内容完整记录了机构装配模型构建、约束与运动副添加、合闸弹簧力与分闸弹簧力加载、动触头阻尼设置,以及用STEP函数模拟分闸电磁铁脱扣驱动的全过程,并结合样机机械特性试验,对机构行程、动触头行程、合分闸时间与速度进行拟合验证,还梳理了CT26机构仿真、凸轮优化等前人研究基础。压缩包共1个docx文件,约17KB,篇幅精炼、便于快速查阅与引用。目前已有119人学习下载,适合需要了解虚拟样机建模流程、仿真参数设置与试验数据对比思路的读者参考。

1. 35kV真空断路器弹簧操动机构,为什么要先在Adams里跑一遍

高压断路器在电网里干两件事:正常运行时按需投切线路,出故障时把故障段切掉。这两件事都压在几十毫秒的一个动作上,而这个动作由操动机构完成。弹簧操动机构把储能弹簧的势能经凸轮、连杆、挚子逐级释放,带动输出轴和绝缘拉杆,最终推动动触头完成合分闸。机构输出行程、动触头行程、合闸速度、分闸速度这几个数,直接决定触头预击穿时间和弹跳情况。样机试制成本高,改一个凸轮型线或换一档弹簧刚度就要重新加工。这份资料走的是另一条路:Solidworks建三维装配模型,导入Adams做动力学仿真,先把机构行程、动触头行程、合闸速度、分闸速度算出来,再用机械特性仪实测数据回头校验模型。做中压开关本体设计和机构设计的工程师,可以直接把它当建模与验证的对照模板。

2. Solidworks装配模型转Adams虚拟样机:构件合并、约束与自由度自查

三维模型转进来只是第一步,真正决定仿真能不能跑通的是构件划分和约束拓扑。机构零件数量往往上百,螺栓、垫圈、挡圈、开口销对动力学结果贡献接近于零,却会把约束数量推高,最后求解器直接报冗余约束、雅可比矩阵奇异。合理做法是先做一轮装配层级上的简化,再逐个确认质量属性和运动副。

2.1 构件合并的判据:看相对运动而不是看零件表

合并的判据只有一条——同一时刻该零件与相邻件是否存在相对运动。储能轴和凸轮用键连接,工作时同步转动,可以直接合并成一个刚体;输出拐臂与输出轴同理。而挚子、脱扣板、分闸半轴之间虽然在装配上紧贴,但脱扣瞬间存在明确的相对转动,必须各自建part并单独加运动副。机架、外壳、支架这类固定件,常见做法是在Adams里替换成大地(ground),省掉整条约束链。

合并会改变系统的转动惯量分布,所以合并后的刚体必须重新编辑质量属性。这一步是新人最容易跳过的环节。Adams导入三维模型后按几何体积和默认密度自动算质量,凸轮、输出拐臂这些带减重孔和台阶的零件,自动值和称重值能差两成以上。凸轮又是弹簧能量输出的第一环,它的转动惯量直接决定分闸时间的量级。

! Adams/View 命令文件片段:批量建立构件与运动副 ! 单位制固定为 MMKS(mm / kg / N / s / deg),中途不要切换 model create model_name = .breaker_mech ! 凸轮:质量与转动惯量按 Solidworks 质量属性报告回填 part modify rigid_body name = .breaker_mech.cam & mass = 0.86 & inertia = (1.24e3, 1.51e3, 0.93e3) & location = (0.0, 0.0, 32.5) ! 储能轴与大地:绕轴向转动 constraint create joint revolute & joint_name = .breaker_mech.J_cam_shaft & i_marker = .breaker_mech.energy_shaft.MAR_1 & j_marker = .breaker_mech.ground.MAR_1 ! 储能轴与凸轮:键连接,无相对运动 constraint create joint fixed & joint_name = .breaker_mech.J_shaft_cam & i_marker = .breaker_mech.energy_shaft.MAR_2 & j_marker = .breaker_mech.cam.MAR_1 ! 垂直拉杆与输出轴:球面转动 constraint create joint spherical & joint_name = .breaker_mech.J_pullrod_output & i_marker = .breaker_mech.vertical_link.MAR_1 & j_marker = .breaker_mech.output_shaft.MAR_1

这段脚本的写法是Adams/View命令语言,i_markerj_marker分别指向两个构件上已经对齐的坐标系,两个marker的原点必须重合、Z轴方向一致,否则旋转副会变成带偏心的万向约束,动作一开始就发散。inertia三个分量是绕构件质心主轴的转动惯量,单位kg·mm²,直接照抄Solidworks质量属性报告里的数值即可,不要按kg·m²填,那会出现量级错误。

机构主要零件对的约束关系归纳如下。

零件对相对运动形式约束类型Adams 图标移除的自由度
储能轴—凸轮无相对运动固定副Fixed Joint6
储能轴—大地绕轴向转动旋转副Revolute Joint5
垂直拉杆—输出轴球面转动球铰副Spherical Joint3
滚子—凸轮高副接触曲线—曲线约束Curve-Curve接触约束
挚子—分闸半轴绕轴转动旋转副Revolute Joint5
脱扣板—分闸半轴绕轴转动旋转副Revolute Joint5
分闸弹簧座—机架沿轴向移动移动副Translational Joint5

2.2 冗余约束排查:模型能算和算得对是两回事

Adams在装配完成后会给出自由度统计,但如果一个刚体被两条平行路径同时约束,从统计上看自由度是零,实际求解时雅可比矩阵却会出现线性相关行,表现为位移曲线在某个时刻突然跳变或者求解步长被压到极小、仿真卡死。排查顺序一般是这样:先关掉弹簧力,只留驱动,跑0.05 s,看机构能不能顺滑地走完全行程;走得通再逐个把力加回来。哪一步出现卡顿,问题就在那一步对应的约束对上。

判据是冗余约束通常集中在闭合的传动链上——凸轮、滚子、连杆、输出拐臂如果形成一个四杆闭环,就容易出现。常见做法是保留一条主链的完整约束,把闭环中多余的一个旋转副改成接触力,让约束变成单向接触,冗余自然消除。

提示:Adams里的接触力求解代价远高于理想运动副,只用在必须建模碰撞或脱扣冲击的位置,闭环传动链的其余关节继续用刚性运动副。

3. 载荷、阻尼与STEP函数驱动:弹簧操动机构仿真参数的取值依据

约束搭好只是骨架,机构动起来靠的是弹簧力、阻尼和脱扣驱动这三类载荷。参数取值不能凭感觉给,预紧力要靠弹簧刚度反算,阻尼要靠摩擦力和电动力的量级折算,脱扣时序要靠STEP函数严格描述时间窗口。

3.1 弹簧预紧位移的换算

资料给出的合闸弹簧刚度系数是41 N/mm、预紧力3500 N,分闸弹簧同样是41 N/mm、预紧力2000 N。在Adams的spring-damper单元里,能直接填的是刚度、阻尼和自由长度(或预载),而机构装配到位时的实际弹簧长度是一个几何确定的量,所以必须先由F = k·Δx反算出预紧位移,再决定自由长度填多少。

# 弹簧参数换算:由刚度与预紧力反推预紧位移,供 Adams spring-damper 单元填写 K_CLOSING = 41.0 # N/mm,合闸弹簧刚度系数 F_CLOSING = 3500.0 # N,合闸弹簧预紧力(取绝对值) K_OPENING = 41.0 # N/mm,分闸弹簧刚度系数 F_OPENING = 2000.0 # N,分闸弹簧预紧力 def preload_stroke(force, stiffness): """按 F = k·Δx 反算预紧位移,返回 mm""" return force / stiffness STROKE = 39.0 # mm,机构输出行程(仿真收敛值) for name, f, k in (("合闸弹簧", F_CLOSING, K_CLOSING), ("分闸弹簧", F_OPENING, K_OPENING)): dx = preload_stroke(f, k) # 行程结束时弹簧进一步变形,出力上升,用来判断驱动能力够不够 f_end = f + k * STROKE print(f"{name}: 刚度 {k} N/mm, 预紧位移 {dx:.1f} mm, " f"行程末端出力 {f_end:.0f} N (增加 {k * STROKE / f * 100:.0f}%)")

运行后合闸弹簧预紧位移约85.4 mm,分闸弹簧约48.8 mm。这两个值要和Solidworks装配体里弹簧座到弹簧座的实际中心距对照,如果反算出的预紧位移在几何上装不进去,说明刚度系数或预紧力的取值有误,先查设计图纸再改仿真。行程末端出力那一列反映弹簧在机构走完全程后还剩多少驱动余量,合闸弹簧从3500 N涨到接近5100 N,余量接近五成;分闸弹簧涨幅更大,说明分闸过程后半段容易出现速度过冲,缓冲设计的必要性就在这里。

3.2 动触头等效阻尼的物理含义与量级核对

动触头运动时的摩擦力和电动力,资料采用施加阻尼的方式替代,取值0.5 N·s/mm。换算到SI单位就是500 N·s/m。这个等效是否合理,可以用平均速度反推:合闸平均速度约0.6 m/s,阻尼力约300 N;分闸平均速度约1.5 m/s,阻尼力约750 N。相对于合闸弹簧3500 N的预紧力,阻尼力占比不到一成到两成,属于合理区间。如果换成0.05 N·s/mm,仿真曲线会明显比实测光滑、速度偏高,反过来0.5 N·s/mm又会让合闸速度被压低,资料里仿真合闸速度0.6 m/s、实测0.9 m/s的差距,一部分就来自这里。

注意:把摩擦和电动力合并成一个速度阻尼项是工程简化,它无法反映静摩擦、Stribeck效应和分闸末段的电磁反力。如果研究重点是触头弹跳或分闸末速度,建议把摩擦单独建成库仑摩擦项,电动力按I²·系数的时间函数单独施加。

3.3 STEP函数脱扣时序拆解

机构分闸时,需要模拟分闸电磁铁动铁芯对分闸脱扣板的脱扣动作。资料给出的输入函数是:

step(time, 0.04, 0, 0.045, -80) + step(time, 0.05, 0, 0.06, 80)

STEP函数的定义是step(自变量, 起点, 起点值, 终点, 终点值),在两个时间点之间用三次多项式平滑过渡,两端一阶导数为零。逐段拆解:

时间段第一项输出第二项输出合力物理含义
0~0.04 s000分闸半轴被扣接,无外力
0.04~0.045 s0→-8000→-80建立保持力,扣接状态稳定
0.045~0.05 s-800-80保持力持续
0.05~0.06 s-800→+80-80→0脱扣力抵掉保持力,半轴释放
0.06 s 之后-80+800脱扣完成,外力归零

两段STEP叠加以后,净力从-80 N平滑过渡到0,脱扣板在0.05~0.06 s这10 ms内完成解锁。这个时间窗口要和分闸电磁铁的实测电流上升时间比对,如果电磁铁实际出力建立需要15 ms,仿真里就该把第二个时间窗口放宽到0.05~0.065 s,否则仿真分闸时间会比实测偏短。

3.4 求解器选择与积分步长

机构仿真同时存在刚性运动副和接触,属于典型的刚性微分方程组。GSTIFF是Adams里对这类系统最常用的变阶变步长积分器,误差容限取1.0e-5能够兼顾精度和速度,再往下调到1.0e-6,步长会被迫压到1e-6 s量级,仿真时间成倍增长而曲线几乎不变。整个合分闸过程不到0.3 s,输出步长按3000步给,相当于每0.1 ms一个结果点,足以刻画脱扣冲击那一段的细节。

载荷与驱动的完整参数清单如下。

参数数值单位设置位置取值依据
合闸弹簧刚度41N/mmspring_damper.stiffness设计给定
合闸弹簧预紧力3500Nspring_damper.preload由预紧位移 85.4 mm 反算
合闸弹簧施加处数2三相本体保留中间相
分闸弹簧刚度41N/mmspring_damper.stiffness设计给定
分闸弹簧预紧力2000Nspring_damper.preload由预紧位移 48.8 mm 反算
分闸弹簧施加处数1单相本体
动触头等效阻尼0.5N·s/mmspring_damper.damping等效摩擦力与电动力
脱扣保持力-80NSF_trip.function分闸半轴扣接保持
脱扣力+80NSF_trip.function分闸电磁铁动铁芯出力
积分器与误差GSTIFF / 1.0e-5simulation set刚性系统常规取值
仿真步数3000simulate dynamic约 0.1 ms 输出间隔

4. 仿真曲线与机械特性试验数据的拟合校验

仿真模型对不对,不是看曲线好不好看,而是看它和样机实测数据对不对得上。资料用机械特性仪对真空断路器样机做了合闸、分闸特性测试,生成行程曲线、断口线、线圈电流曲线,再把仿真得到的动触头行程和速度两条曲线叠上去比。这个比对要做对,前提是几个口径先统一。

4.1 机械特性仪怎么读速度和时间

仪器输出的三条曲线共用一个时间横轴,横轴单位ms,纵轴单位mm。行程曲线反映动触头位置随时间的变化,断口线反映触头分断时刻,线圈电流曲线反映脱扣线圈和合闸线圈的通流过程。选中“速度分析”功能后,把标线A移到合闸行程起始点、标线B移到合闸行程终点,仪器自动在分析速度显示区给出这一段区间的平均速度。把标线B再移到线圈电流发生变化的时刻,横坐标差就是合闸时间。资料里用这个方法读出合闸速度0.9 m/s、合闸时间47 ms、分闸速度1.6 m/s、分闸时间20 ms。

这里有个容易忽略的点:平均速度是“区间位移除以区间时间”,标线放的位置不同,读出来的数就不同。有些仪器的默认区间是从起点到终点,有些是从起点到触头刚接触,两者能差出10%以上。所以仿真侧必须用完全相同的区间来定义平均速度。

4.2 四条曲线的对齐方法

import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import interp1d # Adams 导出:时间(s)、动触头位移(mm) t_sim, x_sim = np.loadtxt("adams_travel.csv", delimiter=",", unpack=True) # 机械特性仪导出:时间(ms)、动触头位移(mm) t_exp, x_exp = np.loadtxt("test_travel.csv", delimiter=",", unpack=True) # 1) 时间单位统一到秒 t_exp = t_exp * 1e-3 # 2) 位移零点各自归零,抵消传感器安装基准差 x_sim = x_sim - x_sim[0] x_exp = x_exp - x_exp[0] # 3) 时间原点对齐:以行程首次超过 0.5 mm 的时刻作为动作起点 t0_sim = t_sim[np.argmax(x_sim > 0.5)] t0_exp = t_exp[np.argmax(x_exp > 0.5)] t_sim = t_sim - t0_sim t_exp = t_exp - t0_exp # 4) 重采样到 0.1 ms 栅格,消除两侧采样率差异带来的视觉误差 grid = np.arange(0.0, 0.080, 1e-4) f_sim = interp1d(t_sim, x_sim, bounds_error=False, fill_value="extrapolate") f_exp = interp1d(t_exp, x_exp, bounds_error=False, fill_value="extrapolate") xs, xe = f_sim(grid), f_exp(grid) # 5) 平均速度统一按“区间位移 / 区间时间”定义,两侧口径必须一致 def mean_velocity(x, t): return (x[-1] - x[0]) / (t[-1] - t[0]) / 1000.0 # mm/s 转 m/s print(f"仿真平均速度 {mean_velocity(xs, grid):.3f} m/s,位移 {xs[-1]:.1f} mm") print(f"试验平均速度 {mean_velocity(xe, grid):.3f} m/s,位移 {xe[-1]:.1f} mm") # 6) 逐点相对误差,用来定位偏差集中出现的时段 err = (xs - xe) / np.where(np.abs(xe) < 1e-3, np.nan, xe) * 100 worst = np.nanargmax(np.abs(err)) print(f"最大相对偏差 {err[worst]:.1f}%,出现在 {grid[worst] * 1000:.1f} ms") fig, ax = plt.subplots(1, 2, figsize=(10, 4)) ax[0].plot(grid * 1e3, xs, label="ADAMS") ax[0].plot(grid * 1e3, xe, label="test") ax[0].set_xlabel("t / ms"); ax[0].set_ylabel("travel / mm"); ax[0].legend() ax[1].plot(grid * 1e3, err) ax[1].set_xlabel("t / ms"); ax[1].set_ylabel("relative error / %") plt.tight_layout(); plt.savefig("travel_fit.png", dpi=200)

这段脚本的核心是三处对齐。时间单位统一解决横轴量纲问题;位移零点归零解决传感器安装位置和模型坐标系原点不一致的问题,样机上动触头的位移是靠角位移传感器或直线位移传感器换算来的,两次装夹零点就不同;动作起点对齐解决仿真从0 s开始、实测从上电时刻开始的时间差。三处对齐做完,剩下的偏差才是模型本身的偏差。

对比结果汇总如下。

参数设计要求仿真值试验值判定
机构输出行程37 mm39 mm略大于设计值
动触头行程22±3 mm约 30 mm与仿真趋势一致需回查几何
合闸时间小于 75 ms45 ms47 ms满足
平均合闸速度0.8±0.3 m/s约 0.6 m/s0.9 m/s两侧均在带内
分闸时间不大于 60 ms约 20 ms20 ms满足
平均分闸速度1.7±0.3 m/s1.5 m/s1.6 m/s满足

4.3 偏差归因:从摩擦、缓冲到接触刚度

合闸侧仿真行程略高于实测、仿真合闸速度低于实测,这两个偏差方向不一致,说明不是单纯的比例误差。行程偏高通常是连杆几何简化带来的累积误差,输出拐臂的圆心位置、绝缘拉杆的两端孔距哪怕差0.5 mm,经过杠杆比放大到动触头端就能差出好几毫米。速度偏低则是阻尼等效过头,把摩擦力和电动力合成一个线性阻尼项,在速度上升段给出的阻力偏大,所以仿真曲线比实测更平滑。

分闸侧偏差出现在曲线后半段。资料明确提到仿真缓冲效果不如样机,样机速度变化更舒缓。样机在分闸末段有油缓冲或弹簧缓冲装置,仿真里如果没有单独建缓冲元件,动触头会以接近刚体碰撞的方式到位,速度曲线出现一个陡降。解决办法是在分闸弹簧座附近补一个单向弹簧阻尼单元,刚度按缓冲器实测力—位移曲线拟合,阻尼取临界阻尼的0.3~0.5倍。

提示:合闸侧出现“仿真行程大、速度小”时,先查几何再调阻尼,顺序反了会把几何误差用阻尼掩盖过去,后面做参数优化时结论会跑偏。

5. 把校验过的模型改成参数化算例,用于弹簧刚度与凸轮相位的组合寻优

模型一旦和实测对得上,就可以当作设计工具用,而不只是验证工具。具体做法是把需要研究的参数抽成变量,模板化Adams命令文件,让求解器批处理跑几十上百个算例,再从结果里筛出同时满足行程、时间、速度三组约束的组合。对弹簧操动机构来说,最值得扫的三个量是合闸弹簧刚度、分闸弹簧刚度和凸轮安装相位,前两个决定出力大小,第三个决定弹簧能量释放的时机。

import csv import re import subprocess from itertools import product # 待扫参数网格 grid = { "K_CLOSING": [38, 41, 44, 47], # N/mm 合闸弹簧刚度 "K_OPENING": [38, 41, 44], # N/mm 分闸弹簧刚度 "CAM_PHASE": [-2, 0, 2], # deg 凸轮安装相位 "DAMPING": [0.3, 0.5, 0.8], # N·s/mm 动触头等效阻尼 } def render_case(k_cl, k_op, phase, c, tag): """把参数写进 Adams 命令模板,生成一次性算例文件""" tpl = open("template.cmd", encoding="utf-8").read() body = (tpl.replace("__K_CL__", str(k_cl)) .replace("__K_OP__", str(k_op)) .replace("__PHASE__", str(phase)) .replace("__C__", str(c)) .replace("__TAG__", tag)) path = f"case_{tag}.cmd" with open(path, "w", encoding="utf-8") as f: f.write(body) return path def run_solver(cmd_path): """批处理模式调用 Adams 求解器,返回日志路径""" log = cmd_path.replace(".cmd", ".log") # 可执行文件名按本地安装版本调整,例如 adams2020 / adams2023 subprocess.run(["adams2020", "ru-standard", "b", cmd_path, "e", "o", log], check=True, stdout=subprocess.DEVNULL) return log def parse_log(log_path): """从求解日志里抓出关键性能指标""" text = open(log_path, encoding="utf-8", errors="ignore").read() def grab(key): m = re.search(rf"{key}\s*=\s*([-\d.]+)", text) return float(m.group(1)) if m else float("nan") return {"t_close": grab("T_CLOSE"), "t_open": grab("T_OPEN"), "v_close": grab("V_CLOSE"), "v_open": grab("V_OPEN")} rows = [] for i, (k_cl, k_op, phase, c) in enumerate(product(*grid.values())): tag = f"{i:03d}" log = run_solver(render_case(k_cl, k_op, phase, c, tag)) rows.append({"tag": tag, "K_CLOSING": k_cl, "K_OPENING": k_op, "CAM_PHASE": phase, "DAMPING": c, **parse_log(log)}) with open("doe_result.csv", "w", newline="", encoding="utf-8") as f: w = csv.DictWriter(f, fieldnames=list(rows[0].keys())) w.writeheader() w.writerows(rows) # 按设计要求筛选:合闸时间 < 75 ms,合闸速度 0.5~1.1 m/s,分闸速度 1.4~2.0 m/s ok = [r for r in rows if r["t_close"] < 75 and 0.5 <= r["v_close"] <= 1.1 and 1.4 <= r["v_open"] <= 2.0] print(f"{len(ok)} / {len(rows)} 组参数同时满足设计要求")

这段脚本的分工是:render_case负责参数注入,用占位符替换的方式保持命令模板不变;run_solver负责无界面批处理求解,ru-standard是Adams的标准求解器入口,b表示批处理,e o后面跟日志文件名;parse_log负责从日志里正则提取性能指标,模板里需要提前用print或测量函数把T_CLOSEV_OPEN这些量写进日志。108个算例按单次30秒估算,一小时内能跑完,比做三轮样机便宜得多。

筛选结果通常不会只有一个解。合闸弹簧刚度往大调,合闸时间缩短、合闸速度上升,但弹簧座和凸轮的接触应力同步上升;凸轮安装相位提前2度,能量释放更早,分闸末段的速度峰值会抬高,缓冲器负担加重。实际取舍时,我会先按约束筛出可行域,再在可行域边缘留一档余量作为设计推荐值,避免样机加工公差把参数推出可行区。

最后给一个实操上的量化参考:把Adams输出步长压到0.05 ms,对同一组参数重跑一次,如果合闸时间和平均速度的变化都在1%以内,说明当前步长已经收敛,可以直接用于批量扫描;若变化超过3%,说明脱扣冲击段还没被解析清楚,先回到求解器设置里把误差容限从1.0e-5收紧到1.0e-6,再重新做步长收敛性检查。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询