做飞机动力系统的早期选型,最难的不是把某个部件算精确,而是把电机、电池、燃油、螺旋桨、气动阻力这些跨学科的变量放进一个统一的逻辑里互相牵制着迭代。我这两年用MATLAB/Simulink/Simscape搭过一套用于组件尺寸设计的电动/混动飞机模型,踩了不少坑,也积累了一些实打实的经验。这篇文章就围绕这套模型展开:它到底能干什么、为什么用这三个工具组合、模型内部怎么组织、尺寸迭代流程怎么走、以及最容易翻车的几个地方。有一定Simulink基础、正在做电推进飞行器预研的工程师或者研究生,读这篇应该能少走很多弯路。
1. 这模型解决的第一个问题:组件尺寸为什么不能靠“拍脑袋”
飞机概念设计阶段选电机、选电池、选发动机,最尴尬的地方在于:所有东西都是“互相咬合”的。电池重了,起飞所需功率就大,电机就得加大;电机大了更重,又回头让电池容量需求上涨。这种强耦合关系,用经验系数估算很容易把设计余量留得太厚,导致整机重量虚胖,或者反过来,组件选小了,试飞数据一出来发现爬升率不达标。
这套模型的定位就是早期组件尺寸权衡工具,用准静态或低阶动态模型把各动力组件的行为“跑起来”,让设计师在画详细CAD和做高保真仿真之前,就能回答一个问题:目标任务剖面下,电机额定/峰值功率该取多少、电池能量和放电倍率该取多少、增程器功率该取多少、螺旋桨直径该取多少。
它和详细设计的区别要讲清楚:详细设计需要电磁场仿真、CFD、结构有限元那一大套;早期尺寸只需要“够用的精度”——损耗曲线、效率Map、电池内阻随SOC变化这类趋势性准确就行。模型追求的不是“猜中某个部件的最终重量”,而是在公平的比较基准下,让多个候选方案具备可比性。打个比方,这不是用精密天平称重量,而是用同一杆秤把两袋米分出轻重。
当时我们给一个目标为500公里航程的混动支线飞机做预研,纯靠重量估算公式推了三个动力架构,结果每个都“看起来可行”,但一问到“电池放电倍率能不能满足起飞段”就答不上来。后来把这个模型搭起来,把六个组件换掉参数重新跑一遍,三种架构的真实功率流和能量消耗曲线摊在眼前,差距立刻一目了然。
2. 工具链拆解:MATLAB、Simulink、Simscape各管哪一段
这套模型不是单一工具的作用,而是三个层次的配合。很多人一上来就想着全用Simscape物理域搭一个大而全的模型,结果solv er崩、初始化报错、仿真速度慢到怀疑人生。实际上,这三个工具在尺寸设计任务里的角色是完全不同的。
2.1 MATLAB是“大脑”:驱动优化迭代循环
组件尺寸设计本质是一个多变量寻优问题,外层需要反复修改电机额定功率、电池容量、发动机功率、螺旋桨直径这些设计变量,然后跑完整个任务剖面,读取结果指标(总能量消耗、起飞爬升能力、系统总重),判断是否收敛、有哪些约束被违反。
MATLAB脚本在这一层做循环控制最合适。我们当时的结构是:一个design_case.m文件定义设计变量和飞行任务剖面,再调用Simulink模型,模型跑完后把结果写到工作区,脚本做后处理,计算下一轮的设计变量值。用sim()命令批量跑,加上parfor并行,一个30个点迭代的任务剖面,分钟级就能完成一轮尺寸循环,这在纯手算时代根本不敢想。
2.2 Simulink是“神经系统”:管控制策略和逻辑
混动飞机和纯电飞机最大的区别就在能量管理策略——什么时候用电、什么时候用油、爬升段要不要开增程器、下降段要不要回收能量。这些控制逻辑用Simulink的状态机和逻辑模块来搭,调试起来非常直观。
控制策略会直接影响组件尺寸。举个例子:如果策略允许“起飞用电池峰值放电,巡航段增程器持续给电池补电”,那电池的倍率要求会比“全程电池单独扛”低很多,尺寸结果也就不一样。所以模型里控制策略不能省。
2.3 Simscape是“肌肉”:处理多物理域约束
Simscape的物理建模价值在于把不同物理域连成一体:电气域(电压、电流)、机械域(扭矩、转速)、热域(损耗发热)。飞机动力系统恰好就是三域强耦合的典型——电机端电压正比于转速、电流正比于扭矩需求、电池SOC又同时被功率消耗和温度影响。
Simscape Foundation库里的电学、机械转动、热学元件,配合Simscape Electrical里现成的电机模型、电池模型,可以用物理连接线搭出真正的“功率流拓扑”。机械轴上可以直接加螺旋桨负载模型,母线电压变化会真实地传导到电机电流里,这种跨域反馈是普通信号流模型给不了的。
下表是我们当时最常用的Simscape块清单,给后来的人一个参考:
| 组件 | 主要Simscape块 | 建模层级 | 用途 |
|---|---|---|---|
| 电动机/发电机 | Simscape Electrical中永磁同步电机 | 均值模型(back-EMF+损耗) | 功率和扭矩传递 |
| 电池 | Simscape Electrical中的电池块,查表内阻+容量 | 等效电路 | 端电压与SOC变化 |
| 内燃机(增程器) | 简化扭矩源+燃油消耗表 | 查表 | 发电机拖动输入与油耗 |
| 螺旋桨 | 机械转动库的扭矩源,扭矩=阻力系数×转速² | 代数关系 | 功率需求转化为负载 |
| 机身气动 | Simulink信号计算升阻比和阻力,再反馈为轴功率 | 信号流 | 任务功率需求 |
这里强调一点:Simscape模型并非搭得越细越好。早期尺寸阶段,电机细分到每一个电气参数反而会把仿真搞得极慢且难收敛。核心思想是保留关键物理约束,忽略暂态谐波、磁饱和这些次要效应。
3. 动力架构怎么选:纯电、串联混动、并联混动在模型里的映射
模型要在早期支撑架构权衡,就必须能快速切换动力拓扑。我们当时用Simscape物理连接线的最大好处就是:切换架构只需要改动物理拓扑连接,不用重写控制逻辑和参数表。能往下走的架构无非那几种,它们的建模差异值得掰开讲。
3.1 纯电架构(全电)
纯电拓扑最简单:电池→逆变器→电机→减速箱→螺旋桨,加一个直流母线测电压、一个扭矩传感器抓负载线。建模上唯一要小心的是电池的C-rate约束。很多纯电飞机设计失败都是因为只看能量够了(kWh足够多),没算瞬时功率,起飞拉升段爆发电流太大,电池端电压被拉低,系统直接掉输出。
3.2 串联混动(发动机只发电,不推进)
串联拓扑里,发动机只带一个发电机,电力汇入直流母线,再统一由推进电机驱动。模型结构上,Simscape多了一个内燃机扭矩源拖发电机,直流母线上出现“电池+发电机双源并联”。
尺寸逻辑变化:发动机功率不需要覆盖起飞峰值,峰值由电池补,发动机只需要覆盖巡航平均功率。这个架构对电池倍率要求低,但对发电机和整流器的容量有需求。模型能清晰地把发电机尺寸和电池尺寸做trade-off。
3.3 并联混动(发动机和电机都能直接驱动螺旋桨)
并联架构在机械轴上做功率汇合,Simscape里需要用到变速箱或齿轮连接,把发动机输出轴和电机转子机械地耦合到同一根螺旋桨轴上。建模时比较麻烦的是发动机最低稳定转速限制和电机转矩转速范围的匹配,控制策略里要包含“模式切换”——电机助推、发动机单独驱动、联合驱动、电充电模式。
并联的好处是冗余度高,但尺寸设计的时候变量变多:发动机和电机的功率比、离合器的位置、是不是要带变速箱。模型的机械耦合反馈会导致初始化更难,需要多花精力调状态变量初值。
3.4 架构间切换的实现技巧
我们是把动力架构的拓扑关系做成了Simscape物理连接线的使能开关——用受控开关替换手动连线,然后写一个顶层参数arch_type来选择。每个架构对应的控制策略放在单独的Simulink子系统里,用switch选择激活。这样跑方案对比时,只需要外层循环变换arch_type,所有执行逻辑自动跟随。
这种可插拔架构设计思想,是这套模型效率的关键。如果每种架构扛一套完整独立模型,后期的维护量会大到怀疑人生,而且还不容易保证各个架构之间基准一致。
4. 核心组件的建模层级:什么时候用查表,什么时候用等效电路
Simscape里组件建模层级很多,从理想的增益元件到完整的热-磁-机械耦合都有。尺寸设计阶段,我们遵循了一套选型准则,这里详细说一下,大概率能帮你们避免“模型做大了反而没法用”的局面。
4.1 电动机:均值状态空间模型,不要矢量控制
全FOC矢量控制的电机模型在电机设计阶段精确,但在飞机尺寸权衡阶段纯粹是累赘:开关频率、PI参数调节、坐标变换,全部是无关细节,还会让仿真步长小到一微秒级,20分钟的任务剖面跑不动。
推荐做法是用电机均值模型:把逆变器视为理想电压源,电机用定子电感、电阻、反电动势系数、转矩常数这个简化层级的Simscape块。效率特性用查表曲线(转矩-转速-效率Map)叠加上去。实测下来,这种模型对尺寸评估的误差在可接受范围内,仿真速度却能快几个数量级。
4.2 电池:等效电路模型+Rint内阻,SOC决定性重要
电池建模最容易犯的两种错:要么用恒定电压的“理想电池”,要么上完整电化学模型。理想电池完全看不到端电压跌落和SOC耦合,设计结果直接低估电池容量需求;完整电化学模型则慢得没法跑迭代。
折中方案是Rint等效电路:开路电压随SOC查表、内阻随SOC和温度查表,串联一个RC环节粗略模拟动态响应。重点是一定要设置合理的放电倍率限值,否则SOC在峰值段掉得飞快,端电压过低导致功率输出不足——这个结果是真实的设计约束,是早期尺寸必须要看到的。
4.3 发动机/发电机:油耗特性曲线是灵魂
混动方案里,发动机组的尺寸核心是比油耗(BSFC)曲线。很多资料照着理想等熵循环来,算出来的油耗过于乐观。我们实测是直接用供应商数据或公开的发动机map,转动惯量简化掉,只用扭矩-转速-燃油流量查表关系,把发电机效率作为串联因数叠加上去。
这里有个经验:增程器的“最优工作点”和组件尺寸强相关。发动机有小尺寸高转速效率高、低转速扭矩大的区别,模型里如果省掉了这个特性,选出来的增程器尺寸可能会倾向错误方向——选太大但大部分时间工作在低效区,反而比按巡航点定点设计的小型发动机费油。
4.4 螺旋桨翼型:用简化功率系数模型
螺旋桨是最容易被忽视但影响最大的组件。早期尺寸模型不需要做片条理论或涡格法,直接用一个C_P = f(J)(推进比函数)的功率系数查表就够。J是前进比,由飞行速度和转速决定,查表得到功率系数,再乘上密度项,就是轴上的负载扭矩。
一定要把气动效率(绳索效率)随J变化做进去。如果把它当常数处理的话,起飞段和高速巡航段的功率需求误差会非常大,因为螺旋桨在这两个区间效率能差20个百分点以上。
5. 尺寸设计流程的闭环:从任务剖面到组件规格表的完整链路
这节是整篇文章最核心的操作部分,按我们实际跑通的流程走,可以一步一步复现。
5.1 任务剖面定义:先定“飞机怎么飞”
任何组件尺寸都从任务剖面开始,不是从功率开始。我们当时用的剖面是:起飞滑跑→初始爬升→巡航→下降→备用巡航→降落。每个阶段定义速度、高度、距离或时间、爬升率要求。这里的关键认知是:起飞和爬升段决定功率需求,巡航段决定能量需求,而两者推出来的组件往往互相矛盾,这就是尺寸模型存在的意义。
飞行剖面在Simulink里用一个From Workspace信号源作为速度指令,给到气动和螺旋桨。高度变化通过标准大气模型计算密度和音速,反算阻力。
5.2 设计变量初始化和约束定义
外层MATLAB脚本里定义初始设计变量向量,比如:
| 变量 | 初始猜测 | 约束范围 | 约束类型 |
|---|---|---|---|
| 电机峰值功率 | 120 kW | 80-200 kW | 覆盖起飞爬升需求 |
| 电池能量容量 | 100 kWh | 60-160 kWh | 巡航能量+应急余量 |
| 电池持续倍率 | 2C | 1C-5C | 放电限制 |
| 增程器功率 | 40 kW | 20-80 kW | 巡航平均功率补足 |
| 螺旋桨直径 | 2.2 m | 1.8-2.6 m | 叶尖马赫数限制 |
每一条约束的意义都要写清楚,这些会作为后面迭代的判断条件。很多初学者漏掉约束,模型跑出来的“最优解”根本没法用——选型结果一看就知道起飞速度段失速了。
5.3 仿真执行:信号传递和物理连接怎么配合
在Simulink里,物理域(Simscape)处理“功率流”,信号域(Simulink)处理“控制指令”。任务剖面的速度指令通过信号线给气动模型,气动模型算出阻力功率需求,作为信号给到螺旋桨块前面的参考扭矩输入;螺旋桨块(Simscape机械转动源)装载这个扭矩负载,电机轴输出的机械功率就被真实地转换成了螺旋桨的转动驱动。母线电压和电流的反馈信号再从物理域抽样出来,经Simulink信号送回到控制逻辑,形成闭环。
要注意给物理域设置合适的初始状态猜测值。我们当时在电机转速、电池SOC、机械轴角度上都初始化了合理值,Simscape的瞬态收敛才顺利。否则模型一启动就报“initialization failed”,排查半天发现是轴上的角度状态没设初值,非常浪费工。
5.4 指标提取与收敛判断
仿真完成后,后处理脚本从输出日志里提取关键指标:起飞段最大功率需求、巡航段消耗能量、总油量消耗、电池最小SOC、系统总重量估算(各组件重量用线性经验公式,如电池重量=容量×比能量系数)。约束审查用一组条件判断,比如“最小SOC不低于10%”“爬升段电网母线电压不低于临界值”“螺旋桨叶尖马赫数小于0.8”。
如果约束有违反,脚本自动调整对应设计变量:比如功率不足就加电机功率和电池倍率,能量不足就加电池容量,重量增加反过来又影响气动阻力——下一轮仿真阻力变大,功率需求又上去了。这个负反馈循环就是尺寸迭代的引擎,一般20-50轮后就能看到一个收敛的候选方案。
5.5 一个收敛案例的复盘
我们之前收敛出来一版:电机峰值功率95kW、电池容量68kWh、增程器45kW、螺旋桨直径2.1m。结果是总重比最初经验估算轻了12%,原因是初期把电池倍率定得偏高、电机又偏大,混动架构下增程器接管巡航后,电池持续高倍率放电需求大幅下降,电池重量和散热要求都跟着减。这个结论如果靠手算是很难往这个方向推的——经验公式会倾向“把所有余量都叠满”。
6. 实测踩坑实录:Simscape模型最容易翻车的五个环节
工具再好用,坑也不少。以下五条是按代价从大到小排的,都是我实际碰过、正常文档里很少写的。
6.1 数值刚性:物理域步长和任务时间长跨度的冲突
飞机任务剖面是分钟到小时级的,但Simscape物理域动态响应是毫秒到秒级的。电气瞬态、机械转速动态、热时间常数跨度太大,导致最优步长很难找。我们用ode23t配合相对容差1e-3解决了大部分问题,但还要注意把Simscape块的“动态响应”简化掉——比如电机均值模型里的电感不要设得太小,否则电气时间常数太短,步长被逼得极小。
6.2 电池SOC初值与“收敛到奇奇怪怪稳态”的坑
电池模型里SOC积分初值设成50%还是95%,对迭代结果影响巨大。第一次跑时设成了60%,巡航还没结束SOC就弹射到下限了,代码自动判定“方案不可行”,连续淘汰了十几个候选方案。后来检查发现是SOC初始值和充电策略的默认状态没对齐——问题不在方案,而在模型初始状态定义。这里要严格按任务剖面第一步的状态设定初值,包括电池满充状态、油箱满油状态、起动前系统整备状态。
6.3 增程器“最小负载”约束被忽略的教训
串联混动里,增程器带发电机给电池充电时,如果负载小于发动机带不动的最低功率点,发动机就会进入极低效区,甚至因转矩不够停机。这个约束我们一开始没在模型里做,结果仿真显示“增程器功率完美覆盖巡航需求”,但实际上那台发动机在低负载下完全无法稳定运行,真机上早就抖熄火了。
修正方法:在增程器模型里加一个最低供油限制,低于该值则功率输出为0并启用电池单独供电,这部分必须做成控制逻辑的一部分。
6.4 螺旋桨翘曲(叶尖马赫)约束没接进尺寸循环
我们没有把螺旋桨直径和转速与叶尖马赫数关联,导致某轮迭代选出一个2.5m的大直径螺旋桨,转速上去后叶尖已经接近音速,效率暴跌,结果爬升性能全部归零。后处理脚本要单独算出叶尖马赫数,把这条硬约束写进尺寸循环里去,直径的初始猜测范围才可以收窄,否则白跑好几轮。
6.5 重量估算和能耗是“双向扯皮”,单边修正必炸
好的尺寸模型一定要把“重量估算”作为一个反馈节点:总重变化→阻力变化→功率需求变化→能耗变化→组件尺寸变化→又回到重量。有些团队为省事,把重量当作常量,只调功率和能量,最后算出的最优方案装机总重和输入假设差了20%,等于结论废掉。重量估算要简单但不省略——电池重量、电机重量、增程器重量、螺旋桨重量、线缆重量、结构重量修正系数,全部做成参数,而不是硬编码进模型。
7. 模型可信度怎么评价:拿什么衡量这模型的“准”
任何仿真模型都要回答“凭啥信它”这个问题。我们在项目里做了三层验证,思路供参考。
第一层是文献基准对拍。拿已发表的某型混动通航飞机数据,把我们模型的输入修改成和文献一致,对比输出端的电机功率、电池容量、巡航电耗。误差当时在8%以内,算可以接受。
第二层是部件级对比。把电机模型跑出来的峰值功率和厂商数据表比对,效率map偏差、电池SOC轨迹和单次放电实验数据比对。模型内部趋势性正确,外推就相对放心。
第三层是全系统“算例逻辑审计”。人为设置一组极端假想条件(例如电池容量减半),看模型给出的结果是不是呈现合理趋势——功率不足、续航大幅缩短——而不是出现不合理突变。这种审计能揪出很多深层bug。
实测下来,最合理的态度是:把这个模型当比较器,不把它当计算器。就是说,模型的绝对数值不一定精,但放到同一基准下比方案优劣、比趋势方向,它是靠谱的。一旦要出详细图纸了,再转入高保真仿真也不迟。
8. 进阶玩法:模型深度扩展的几个方向
如果已经跑通了基本模型,下面这几个方向值得考虑,它们对组件尺寸都有显著影响。
8.1 热载荷和散热系统尺寸回馈
电池放电效率和电机效率带来的热量不是一句“忽略不计”就行的。热管理系统的重量和空气动力阻力可能占总重5-10%。我们在后续版本里把电机损耗和电池产热通过Simscape热域连到散热器,散热器重量反算回总重。加了这个闭环之后,高功率架构方案被大幅惩罚,研究结论也随之改变。
8.2 任务剖面不确定性的鲁棒尺寸
单点任务剖面选出来的尺寸,面对真实运营时的风速、温度、备用绕航,余量往往不一定够。可以在外层MATLAB脚本里做蒙特卡洛抽样,跑一组任务剖面扰动,统计组件尺寸的概率分布。这个在我们的预研里挺有价值,给定的是一个“尺寸带”而不是一个点。
8.3 能量管理策略的在线优化联动
尺寸固定的前提下,换个能量管理策略,整机可用度就变了。把模型的控制策略部分从逻辑查表换成在线优化(比如等价燃油最小化策略),可以反过来修正组件尺寸需求——这个联动会让选出来的尺寸更贴近实际运营策略。它的仿真速度会下降一截,但尺寸设计的可信度能再上一个台阶。
以上就是这套模型从框架到细节、从踩坑到验证的完整经验。每个项目在这条链路上踩的坑可能不一样,但只要把组件的“互相牵制”这条主线抓稳,方向就不会太偏。想直接用这个思路建模的同仁,建议先拿一个纯电小飞机剖面跑通,再往混动架构上“横向扩展”。模型这个东西,一旦拓扑合理了,后面的迭代就会越来越顺。