
简介openMotor 是一款面向火箭发动机实验人员与业余推进爱好者的开源内部弹道模拟器用 Python 编写可根据推进剂特性、颗粒几何形状与喷嘴规格估算燃烧室压力和推力并借助快速行进法计算任意芯部几何的退行过程适合具备一定推进基础、希望在设计阶段快速验证方案的中高级爱好者与工程人员。资源包共 156 个文件约 351KB以 77 个 py 源码文件为核心配合 18 个 ric 图标资源、14 个 ui 界面文件、19 个 yaml 配置及少量 csv 数据、rst 文档与打包脚本构成完整的桌面应用工程结构。目前已有 795 人学习下载。软件支持公制与英制切换内置 BATES、Finocyl、Star 等常见晶粒几何也可从 DXF 导入自定义形状并提供推进剂编辑器、晶粒退行可视化、ENG 文件导出与 Burnsim 进出口方便读者直接运行源码、研究弹道算法或二次开发是学习火箭发动机内弹道仿真的实用工具。1. 开源内部弹道模拟器到底在算什么如果你做过固体火箭发动机的地面试车大概率经历过这种场面试车台上一切正常数据回传后却发现推力曲线和预期差了将近两成喉部烧蚀比估算的严重点火初期还有一段莫名其妙的压强爬升。事后复盘问题往往不在加工而在设计阶段对内部弹道的估算过于粗糙——燃面退移、喷管流动、两相流损失这些耦合在一起手算根本兜不住。openMotor 就是冲着这个场景来的。它是一款面向火箭发动机实验人员的开源内部弹道模拟器核心工作是在给定推进剂、药柱几何和喷管参数的前提下算出燃烧室压强、推力、质量流量随时间的变化曲线。它不替代试车但能让你在加工之前把方案筛一遍把明显不靠谱的几何和喷管组合先淘汰掉。适合谁用做小型固体发动机验证的实验室人员、业余高能爱好者里已经过了“随便装个药柱就点”阶段的那批人以及需要快速评估不同药柱构型的工程专业学生。它解决的不是“能不能飞”而是“这个设计在试车台上大概会给出什么曲线”。2. 内部弹道求解器怎么把燃面退移算成压强曲线2.1 零维平衡压强模型与燃面退移的耦合逻辑内部弹道最核心的方程其实就一条燃烧室质量生成率等于喷管质量流出率时压强达到平衡。写成式子就是ρ_p * A_b * a * P^n C_d * A_t * P / sqrt(T_c * R / M)左边是推进剂燃烧生成的气体质量流率右边是喷管 choked 条件下的流出流率。A_b 是燃面面积A_t 是喉部面积a 和 n 是推进剂的燃速系数和压强指数。这个方程本身不复杂麻烦的是 A_b 会随着燃烧进行不断变化——药柱从内孔往外烧燃面可能增大也可能减小取决于几何构型。openMotor 的做法是时间步进每个时间步根据当前燃面位置算出 A_b代入方程解出平衡压强 P再根据 P 和燃速公式反推燃面退移速率更新几何进入下一步。这个循环听起来简单但燃速公式对压强极度敏感n 值通常在 0.2 到 0.7 之间压强算偏一点退移速率就偏一截几十步累积下来曲线就飞了。我一般会先确认推进剂的 a 和 n 是不是来自实际配方。很多公开数据是针对特定压强区间拟合的如果你的工作压强落在区间外外推误差会很大。openMotor 允许你直接输入 a、n 和密度也支持导入燃速表做插值后者在压强跨度大时更稳。2.2 药柱几何的参数化输入与燃面计算药柱几何是内部弹道模拟里最容易翻车的部分。openMotor 支持几种常见构型内孔燃烧的管状药柱、星形内孔、车轮形、以及端面燃烧。每种构型需要输入的参数不一样但核心逻辑都是把燃面离散成若干段每段按各自的退移方向推进。以最简单的管状内孔为例你需要给的参数是外径、内径、长度、是否有包覆层。模拟开始时燃面就是内孔表面积随着燃烧进行内径增大燃面面积单调增加压强曲线会呈现上升趋势。如果外径不够大烧到一定程度外壁会被烧穿这时候燃面突然增大压强会有一个尖峰——这个尖峰在试车中往往就是壳体破裂的前兆。星形内孔的参数就多得多星角数、星角半径、星根半径、星尖角度。这些参数决定了燃面随退移的变化是先增后减还是单调变化。openMotor 的几何编辑器可以让你实时看到燃面形状的演变我建议在跑模拟之前先手动拖一遍退移过程确认没有奇怪的几何突变。有一次我输入星角半径时把单位搞错了模拟出来的压强曲线在 0.3 秒处直接跳到 20 MPa检查了半天才发现是半径给成了直径。2.3 喷管参数与两相流损失的修正喷管这边openMotor 需要你输入喉部直径、出口直径、收敛半角和扩张半角。喉部面积直接决定流出流率是压强曲线最敏感的输入之一。喉部直径差 0.5 mm在 50 mm 量级的发动机上就能让平衡压强偏移 10% 以上。但真实喷管不是理想 choked 流动。两相流损失——也就是凝相颗粒在喷管里跟不上气相加速——会让实际流出流率比理论值低几个百分点。openMotor 里有一个“喷管效率”参数默认值通常在 0.95 到 0.98 之间。这个值怎么定如果你有试车数据可以反推用实测压强和喉部面积算出实际流出系数再和理论值比。没有数据的话小型发动机取 0.96 左右比较稳妥大型发动机因为停留时间长两相流损失更大可以取到 0.94。还有一个容易被忽略的参数是喉部烧蚀。石墨喉衬在高温下会逐渐扩大等效于 A_t 随时间增大压强会缓慢下降。openMotor 支持输入喉部退移速率单位通常是 mm/s。如果你用的是一次性石墨喉衬退移速率在 0.05 到 0.15 mm/s 量级跑长程模拟时这个修正不能省。3. 用 openMotor 跑通一条完整推力曲线的操作步骤3.1 新建推进剂与燃速参数的录入打开 openMotor 后第一步是建推进剂。在推进剂编辑界面你需要填四个核心参数密度、燃速系数 a、压强指数 n、以及特征速度 c*。前三个决定质量生成率c* 决定理论流出速度。# 推进剂参数示例以某虚构配方为例 propellant { name: AP-HTPB-80, # 推进剂代号 density: 1.72, # 密度单位 g/cm³ burn_rate_coeff: 0.035, # 燃速系数 a单位 mm/(s·MPa^n) pressure_exponent: 0.35, # 压强指数 n无量纲 c_star: 1520, # 特征速度单位 m/s temperature: 2800 # 燃烧温度单位 K用于喷管计算 }这里 a 的单位要特别注意。不同来源的燃速数据用的单位制不一样有的用 mm/(s·MPa^n)有的用 in/(s·psi^n)。openMotor 内部统一用公制如果你拿到的数据是英制先换算再输入。n 值一般在 0.2 到 0.5 之间AP 系复合推进剂常见值在 0.3 到 0.4。c* 如果不知道可以用 NASA CEA 之类的热力学代码算或者找同配方文献值。c* 偏 5%推力就偏 5%这个参数不能拍脑袋。3.2 药柱几何的建模与燃面预览推进剂建好后新建一个药柱。选择内孔燃烧管状构型输入外径、内径、长度。假设外径 80 mm内径 30 mm长度 200 mm无包覆。# 药柱几何参数 grain { type: tubular, # 管状内孔燃烧 outer_diameter: 80.0, # 外径单位 mm inner_diameter: 30.0, # 初始内径单位 mm length: 200.0, # 长度单位 mm inhibited_ends: True, # 端面是否包覆 inhibited_outer: False # 外壁是否包覆 }输入后点燃面预览你会看到内孔表面被高亮。拖动时间滑块内径逐渐增大燃面面积曲线在下方实时更新。管状药柱的燃面面积是单调增加的所以压强曲线会往上走。如果你希望压强更平稳可以考虑端面不包覆让燃面先增后减但那样需要更复杂的几何。预览时重点看两个东西一是燃面面积有没有突变二是烧到后期外壁剩余厚度够不够。一般建议外壁最小厚度不低于初始内径的 20%否则烧穿风险很高。3.3 喷管配置与模拟运行喷管这边输入喉部直径、出口直径、收敛半角、扩张半角。假设喉部 20 mm出口 50 mm收敛半角 30 度扩张半角 15 度。# 喷管参数 nozzle { throat_diameter: 20.0, # 喉部直径单位 mm exit_diameter: 50.0, # 出口直径单位 mm convergence_angle: 30.0, # 收敛半角单位度 divergence_angle: 15.0, # 扩张半角单位度 efficiency: 0.96, # 喷管效率含两相流损失 throat_erosion_rate: 0.08 # 喉部退移速率单位 mm/s }配置完点运行openMotor 会输出压强-时间、推力-时间、质量流量-时间三条曲线。第一次跑建议把时间步长设小一点比如 0.001 秒确认曲线光滑没有数值振荡。如果曲线在某个时间点出现锯齿多半是燃面计算在那一步出现了几何不连续回去检查药柱参数。跑完之后重点看三个数最大压强、平均推力、燃烧时间。最大压强决定壳体壁厚平均推力决定飞行性能燃烧时间决定总冲。这三个数和你手算的粗略估计对一下如果偏差超过 15%先别急着改几何回去查推进剂参数和喷管效率。4. 避坑内部弹道模拟里最容易翻车的五个地方4.1 燃速数据单位混用导致压强整体偏移现象模拟出来的压强曲线形状对但整体比预期高 30% 到 50%。原因燃速系数 a 的单位没统一。很多英文文献用 in/(s·psi^n)直接填进 openMotor 的公制输入框数值看起来差不多但实际差了将近一个数量级。解决输入前先确认单位英制转公制的换算关系是 1 in/(s·psi^n) ≈ 25.4 mm/(s·(0.006895 MPa)^n)n 不同换算系数也不同最好用脚本算一遍。4.2 药柱外壁烧穿导致压强尖峰现象压强曲线在燃烧后期突然跳升有时伴随数值发散。原因药柱外径给小了或者外壁没有包覆烧到后期剩余肉厚不足燃面突然从内孔扩展到外壁。解决在几何预览里把时间拖到燃烧结束看外壁剩余厚度。经验值是外壁最小厚度不低于初始内径的 25%高压发动机还要再留余量。4.3 喷管效率取值过于乐观现象模拟推力比试车实测高 8% 到 12%。原因喷管效率默认取了 0.98 甚至 1.0没有考虑两相流损失和摩擦损失。解决小型发动机取 0.95 到 0.97含铝推进剂取 0.93 到 0.95大型发动机取 0.92 到 0.94。如果有试车数据用实测压强反推实际效率再回填到模拟里。4.4 时间步长过大导致数值振荡现象压强曲线出现高频锯齿或者燃烧时间比预期短一截。原因时间步长太大燃面退移一步跨过了几何特征点平衡方程在两步之间来回跳。解决把时间步长降到 0.0005 秒以下或者开启自适应步长。管状药柱一般 0.001 秒够用星形药柱因为燃面变化剧烈建议 0.0002 秒起步。4.5 忽略喉部烧蚀导致长程模拟偏差累积现象燃烧时间超过 2 秒后模拟压强比实测偏高且偏差随时间增大。原因石墨喉衬在高温下逐渐扩大实际 A_t 在增大流出流率比模拟值高压强应该更低。解决在喷管参数里填入喉部退移速率石墨喉衬典型值 0.05 到 0.15 mm/s高铝推进剂取上限。如果没有数据跑完试车后测量喉部直径变化反推退移速率。5. 用试车数据反推参数让模拟曲线逼近实测的调参手法模拟跑通之后真正的功夫在“对齐”。你手上如果有一次试车数据哪怕只是压强-时间曲线就能反过来把模拟参数校准一遍。我一般按这个顺序调先对齐点火后的压强平台再对齐燃烧时间最后看推力曲线。第一步把实测压强曲线和模拟曲线叠在一起。如果平台段模拟偏高优先调喷管效率每次降 0.01看偏差缩小多少。如果调效率调不过来再动燃速系数 a但 a 一改整条曲线都会平移所以要小步走每次改 2% 到 3%。第二步看燃烧时间。模拟燃烧时间比实测长说明燃速偏低或者药柱几何偏厚。先确认药柱实际尺寸和模拟输入是否一致尤其是内径——加工公差经常让内径偏小燃面比设计值低燃烧时间就拉长了。如果尺寸没问题再微调 a。第三步看推力曲线。推力对喷管出口直径和 c* 更敏感。如果压强对上了但推力偏低多半是 c* 给低了或者喷管扩张比不够。c* 每提高 1%推力大约提高 1%但压强也会跟着变所以调 c* 之后要重新对齐压强。这里有一个我踩过的坑不要同时调多个参数。有一次我一边改喷管效率一边改燃速系数结果曲线形状对了但数值全偏回头根本不知道是哪个参数起的作用。后来我养成的习惯是每次只动一个参数记录改动量和曲线变化调完一轮再动下一个。这个过程有点像解耦合方程急不得。还有一个技巧是用 openMotor 的参数扫描功能。它可以让你在一个范围内自动跑多组参数输出每条曲线的最大压强和总冲你拿实测值去匹配。比如喷管效率从 0.93 到 0.98 扫五组燃速系数从 0.030 到 0.040 扫五组二十五条曲线里总有一条最接近。这个方法比手动调快得多但前提是你的实测数据质量够好——如果试车时压强传感器本身就有 5% 的误差那扫出来的最优解也只是在拟合噪声。最后说一个习惯每次模拟跑完把输入参数、输出曲线、以及和实测的偏差记在一个表里。下次做类似设计时这些记录就是你的经验数据库。内部弹道模拟的精度很大程度上取决于你对推进剂和喷管实际行为的了解程度而这些东西试车台不会主动告诉你得自己一笔一笔攒。希望帮到你。本文还有配套的精品资源点击获取