做电动飞机的方案时,最常被问的一句话就是:电机到底选多大?电池到底装多少?换到混动构型,还要追问一句:发动机、发电机怎么配,才不至于在空中变成“背着汽油跑的充电宝”。
我自己的习惯是,不在一开始就去死磕公式和电子表格,而是直接在 MATLAB/Simulink/Simscape 里把这个“组件尺寸”问题变成一组参数,先跑一条任务剖面再看结果。这个思路听起来很简单,真正落地时遇到的问题比想象中多。今天这篇就想把基于 Simscape 的电动和混合动力飞机组件尺寸建模方法拆开聊透,包括模型怎么搭、参数怎么设、批量扫描怎么做,以及那些文档里通常不会写的坑。
这套内容适合正在做 eVTOL、电动通航机型、混动推进系统概念设计的人,也适合准备做相关毕业设计或竞赛课题的同学。哪怕你原来是做汽车仿真、想往航空域迁移,这篇文章也能帮你把 Simscape 多域建模的方法论理顺。毕竟,飞机和电动车最大的区别在于重量极度敏感,尺寸选不好,航程直接打对折,这恰恰是仿真的价值所在。
1. 为什么组件尺寸要落到 Simscape 模型上
1.1 组件尺寸不是做一道方程题
很多人对“组件尺寸”的理解是算两个数:最大功率决定电机,总能量决定电池。但在航空场景里,这个说法只对了一半。
飞机任务剖面是一连串工况的叠加:起飞爬升段需要峰值功率,巡航段需要持续功率,下降段功率需求很小,如果还要考虑单发失效或者复飞,那一瞬间的功率余量就变成了硬约束。不同任务段对“组件尺寸”的拉扯方向是相反的。峰值功率大的段希望电机和电力电子加大,巡航段又希望电池和燃油足够多,而所有组件重量都会反向拖累续航。这种耦合关系靠一张电子表格是没法收敛的,你算完第二遍就会发现第一遍的重量假设已经不成立了。
所以组件尺寸本质上是一个“功率、能量、重量、热”四维约束下的迭代问题。Simscape 的价值就在于让这些约束在同一个模型里互相对话,你在扫描参数时能直接看到它们带来的结果,而不是靠人工去绕圈。
1.2 Simscape 把“参数”和“物理关系”分开
Simulink 传统的信号流建模习惯是:我规定一个信号从 A 到 B,功率从源到负载单向推下去。这在控制框图里没毛病,但用在电气和机械耦合的推进系统里会有问题,因为现实里的能量流动并不总是单向的。一个简单的例子:螺旋桨遇到阵风,扭矩倒灌回电机,母线电压可能会被抬高;电池和发电机并联供电时,功率分配也不是靠“信号方向”来约定,而是由电压和电流自动平衡。
Simscape 的物理建模方式是把不同能量域(电气、机械、热)的“端口”连接起来,让系统自己去满足物理规律。你可以把它想象成水管网络——压力和水流自然平衡,不需要提前规定谁推谁。这种双向因果对飞机推进系统尤其重要,因为组件尺寸模型里的关键现象——比如大电流放电导致的电压跌落、混动模式下电池和发电机的功率分流——本质上都是物理网络平衡出来的结果,而不是人为赋值的结果。
1.3 Specialized Power Systems 与基础 Simscape 别搞混了
刚开始用 Simscape Electrical 的人,十有八九会被库里的“两条线”搞晕。一个叫 “Simscape Electrical”,另一个叫 “Simscape Electrical(Specialized Power Systems)”,缩写经常是 SPB。网上很多老资料和模型里会写 “this model uses simscape electrical specialized power systems blocks”,这种句子确实有年头了。
我的建议是,做飞机推进系统组件尺寸,优先用基础 Simscape Electrical 的物理域建模,别走 SPB。SPB 是为电网、输配电、相量级电磁暂态分析服务的,它和基础 Simscape 的元件不能直接混用,而且跟机械域、热域的连接经常需要额外接口。飞机模型里电机、螺旋桨、传动轴、机体的机械动态必须和电气动态耦合,基础 Simscape 天然支持直接连机械端口和热端口,工程效率会高很多。
| 对比项 | 基础 Simscape Electrical | Specialized Power Systems (SPB) |
|---|---|---|
| 域支持 | 电气/机械/热等任意物理域耦合 | 以电气网络为主,多域连接需要接口 |
| 适用场景 | 电池、电机、电力电子、机电系统 | 电网、输配电、相量暂态分析 |
| 数值方式 | 物理域方程自动生成 | 常以相量/节点法为基础,风格偏电网络 |
| 与 Simscape Multibody 等联合 | 直接连接 | 一般需要信号接口转换 |
2. 电动/混动飞机尺寸建模的思路拆解
2.1 先定任务剖面和构型,再谈仿真
动笔搭 Simscape 模型之前,有两件事必须先定:任务剖面是什么,推进构型是什么。
任务剖面决定了模型的激励源。你可以简化成起飞、爬升、巡航、下降、备降这些阶段,每个阶段给一组速度、高度、推力需求和时间;也可以更细致地加进悬停、水平过渡、单发失效复飞等特殊工况。组件尺寸模型的激励不一定要很花哨,但必须覆盖能量消耗最多和功率需求最大的两个点,否则尺寸一定偏。
构型决定了你的模型网络结构。纯电动最直接,电机从电池取电,能量链最短;串联混动是发动机拖发电机,发电后再和电池一起汇到直流母线,电气耦合代替了机械耦合,组件尺寸变量包括发动机功率、发电机功率、电池容量和放电倍率;并联混动则多了一个机械功率汇流点,需要在变速箱或齿轮箱处把发动机和电机的功率叠加,发动机转速和电机转速要匹配,模型复杂度会明显上升。
2.2 第一轮“粗猜”参数:让模型不要从零收敛
我见过太多人搭完模型,直接按默认参数仿真,然后发现组件巨大无比或者任务完不成。正确的做法是先做一轮手算级别的初始估算,把模型里的参数设置到“合理的数量级”,再交给 Simscape 去动态校核。
以固定翼为例,先从最大起飞重量、翼载、极曲线阻力系数估算各任务段需要的推力。平飞巡航时推力约等于阻力,爬升时额外增加重力分量。然后计算轴功率:
P = T * V / (eta_prop * eta_motor)其中 T 是螺旋桨拉力,V 是空速,eta_prop 是螺旋桨效率,eta_motor 是电机效率。这个式子很简单,但注意要把巡航和爬升分别算一次,取较大值作为电机连续功率的基准。
电池容量则用任务总能量需求反推:把每个任务段的功率和时间积分,得到所需净能量,再除以可用放电深度(DOD)和放电效率,再留一点低温降额余量。混动构型里,发动机和发电机按“巡航平均功率 + 平均电气负载”来配,不用按峰值功率来配,这样可以明显减小发动机体积。这一轮粗猜出来的参数会作为 Simscape 模型的初值,精度不需要太高,但数量级一定要对。
2.3 模型保真度分级:不是越精细越好
组件尺寸阶段最容易犯的毛病,是模型建得太精细。有人一上来就装 IGBT 开关级逆变器,还带完整的热网络,结果一个任务剖面跑 40 分钟,扫描 20 组参数就要跑十几个小时。
我给模型保真度分了三个层级。L0 就是电子表格,纯静态估算。L1 是 Simscape 集总参数模型:电机用效率 MAP、电池用 SOC-内阻表、螺旋桨用负载曲线,变步长求解器几分钟跑完一个任务剖面,这是组件尺寸扫描的主力模型。L2 是精细化模型,带开关级电力电子、热管理、电流纹波,等 L1 帮你锁定几个候选尺寸组合之后,再对这几个候选方案跑 L2 做最终确认。
尺寸阶段就老老实实用 L1,跑得快比算得细更重要。“先粗模、后细模、粗扫圈、细验证”这个流程是我实际项目里最省时间的做法。
3. Simscape 飞机模型的搭建与参数化实操
3.1 模型顶层结构:任务剖面、动力系统、机体性能分开
一个可维护的组件尺寸模型,顶层结构一定要干净。我通常会分成四个模块:
- 任务剖面模块:输出目标速度、高度、推力需求随时间变化的曲线,用 Simulink 的阶梯/斜坡信号组合即可,不要写死成常量。
- 动力系统模块:电池、电机、发动机、发电机、螺旋桨都在这个 Simscape 子系统内部,通过物理端口连接。
- 机体性能模块:根据当前速度、高度和重量估算阻力,把计算结果输出给动力系统作为负载。
- 数据字典或参数文件:所有和尺寸相关的参数,统一放在 model workspace 或者外部
.m文件里。
这里要特别建议把尺寸参数集中管理。我习惯把电池额定能量、电机峰值功率、发动机轴功率这些变量做成一个 struct,比如Battery.E_kWh、Motor.P_peak_kW,这样后面对批量扫描特别方便。不要把所有参数都直接写在模块对话框里,不然后面要改几百个地方。
3.2 电池、电机和推进器:核心参数怎么设才靠谱
电池模块是组件尺寸模型里最敏感的部分。Simscape Electrical 里的电池建模有不同复杂度,组件尺寸阶段我建议用“开路电压 + 内阻”模型,但参数要带 SOC 依赖:内阻不是一个常数,而是随 SOC 下降迅速上升。容量参数要特别注意单位,设置成 Ah 或 As 时很容易搞混;如果输入1000 Ah,母线电压是 800 V,能量就是 800 kWh,算下来会吓人一跳。电池模块里还要设置初始 SOC 和可用下限,比如从 95% 放到 20%,这代表最大可用能量窗口,模型里体现得越清晰越好。
电机模块的关键不是型号,而是效率和限值。组件尺寸模型里至少要有两个属性:峰值功率和连续功率。峰值功率允许短时过载,连续功率决定热平衡点,二者比值一般在 1.1 到 1.5 之间,具体取决于冷却条件。效率不要设成一个常数,最好用一张二维效率 MAP,横轴是转速、纵轴是转矩或功率。效率 MAP 对尺寸的影响很大:如果电机长期工作在效率比较低的点,电池容量需求会明显上升,而这种耦合效应在常数效率模型里完全看不出来。
螺旋桨或者涵道风扇可以简化成“推力-转速-功率”的负载关系。常见做法是用一个二次方扭矩负载来模拟螺旋桨的扭矩随转速上升的特性。更精细一点可以给定不同空速下的螺旋桨效率曲线,然后通过信号读取当前工况。一个容易忽略的细节是转动惯量:电机和螺旋桨的惯量越大,爬升响应越慢,尺寸模型里必须带上,否则动态段的结果会偏乐观。
3.3 混动架构里的动力分流与控制策略
串联混动的模型网络相对直观:发动机输出机械功率到发电机,发电机通过整流/变换到直流母线,电池挂在同一母线上,电机直接从母线取电。这个网络上唯一的“控制点”是功率管理逻辑:什么时候让发电机多出力,什么时候电池放电,什么时候给电池充电。
我常用的控制策略很简单,但能反映绝大多数场景:当需求功率高于某个阈值、或者 SOC 低于目标值时,发动机启动并工作在“巡航供电 + 少量充电”的状态;当 SOC 达到上限或者需求功率很低时,发动机减载甚至停机。组件尺寸模型里不需要特别复杂的优化控制,因为这一阶段要回答的是“尺寸够不够”,而不是“这个策略最优不最优”,但策略的粗糙程度会直接影响尺寸结论,所以至少要把“峰值时谁补功率、巡航时谁带基础负载”这两个逻辑写清楚。
并联混动模型的机械耦合点会麻烦一些,发动机和电机需要经过齿轮箱/离合器汇流,这时候发动机转速和电机转速的匹配不当会直接产生功率回灌现象。建议第一次做混动飞机尺寸的人先从串联构型入手,等理解了功率分流原理之后,再尝试并联。
3.4 用脚本把“尺寸”变成可批量扫描的参数
模型搭好之后,组件尺寸的核心工作就变成了“批量跑工况”。我不推荐在 Simulink 界面里手动一次一次改参数,效率太低了。用 MATLAB 脚本配合Simulink.SimulationInput来做批量仿真非常稳。
举个例子,假设我要扫电池容量和电机功率两个维度,代码可以写成这样:
% 定义候选组件参数 BatteryCap_kWh = [120 160 200 240 280]; MotorPeak_kW = [180 220 260 300]; % 创建仿真输入数组 clear simIn for bi = 1:numel(BatteryCap_kWh) for mi = 1:numel(MotorPeak_kW) % 注意 si 计数 si = (bi-1)*numel(MotorPeak_kW) + mi; simIn(si) = Simulink.SimulationInput('Aircraft_MPG'); simIn(si) = simIn(si).setVariable('Battery.E_kWh', BatteryCap_kWh(bi)); simIn(si) = simIn(si).setVariable('Motor.P_peak_kW', MotorPeak_kW(mi)); % 记录维度索引,后续分析用 simIn(si) = simIn(si).setUserString([num2str(bi) '-' num2str(mi)]); end end % 并行仿真 out = parsim(simIn, 'ShowProgress', 'on'); % 从 out 里取每个算例末态 SOC、最低 SOC、总油耗等指标这里要提醒一个坑:setVariable只能覆盖 MATLAB 工作区或者数据字典里的变量,如果参数直接写在模型工作空间的某个块参数里,脚本是没法直接改的。所以前面强调“参数集中管理”在这里才真正体现价值。还有一个经验是第一次跑parsim之前,先单跑一组基准工况确认模型能跑通,否则一到并行队列里就报错,排查起来很费劲。
4. 结果判读与尺寸寻优
4.1 任务完成度指标:航程不只看终点 SOC
仿真跑完,第一步是看任务完成度。最常见的判断指标是任务末端 SOC,但只盯着这一个数据会漏掉关键信息。比如,电池 SOC 可能在中段某个爬升工况就掉到下限以下,后面是靠低功率滑翔“混”完的,这种结果从终点 SOC 看不出来。所以我习惯同时记录三件套:任务过程中的最低 SOC、最低母线电压、以及每个任务段的瞬时最大功率。
最低母线电压非常值得关注。SOC 低的时候电池内阻升高,大电流放电会让母线电压压到电机控制器的最低工作线以下,功率管甚至会产生保护动作。这些问题在纯能量计算里完全隐藏,但有时恰恰是它们锁定了电池的最小尺寸。
| 指标 | 判定意义 | 常用阈值 |
|---|---|---|
| 任务末端 SOC | 能量是否够用 | 不低于 15%~20% |
| 任务过程最低 SOC | 是否存在某个任务段耗能过猛 | 不低于可用下限 |
| 母线最低电压 | 电气系统是否稳定 | 高于电机控制器最低工作电压 |
| 峰值功率裕度 | 极端工况/复飞是否安全 | 最大需求功率 <= 组件峰值功率的 95% |
| 总燃油消耗/油耗 | 混动构型的经济性 | 对比同任务纯电耗能 |
4.2 敏感度分析:先调哪个参数最划算
组件尺寸工作的另一个重要产出是敏感度表。我常用的做法是固定其他参数,把某个关键参数从 -10% 到 +10% 扰动,记录航程或任务有效性能的变化。典型结果往往是这样的:航程对电池比能量最敏感,其次是对螺旋桨效率,再后才是电机效率。这个信息很有用,因为它直接告诉你项目资源应该往哪里倾斜——电池技术暂时提不上去,就把精力放在减阻或提升螺旋桨效率,而不是苦等一个“更好的电机”。
这个结论在不同构型里会变。纯电动构型对电池比能量和阻力极曲线的敏感度极高;串联混动里,发动机燃油消耗率(SFC)和发电机效率会逐渐占据敏感度前列。你可以用脚本批量跑几十组仿真,然后把结果画成敏感度柱状图或者二维热度图,比任何美化过的“方案对比 PPT”都更有说服力。
4.3 手动微调和数值优化:结果只是候选方案
如果要在多个维度里找最优组合,可以用fmincon这类优化器包在仿真外面跑。目标函数可以定义成“任务是否完成 + 总重量最小 + 燃油最少”的加权值,约束条件是 SOC 不低于下限、峰值功率有余量。实际操作中有一个很大的坑:目标函数往往不光滑,因为任务剖面里存在硬切换(比如爬升到巡航的模式转换、SOC 碰到上下限),优化器很容易卡在局部极值。我通常会先把变量离散到有限档位,用网格扫描找到几个较好的区域,再做局部精细化优化。
还有一点必须记住:优化器给出来的数值结果未必是工程上能直接买的组件。你不可能让电池刚好是 221.3 kWh,电机刚好是 342.7 kW。所以最终的组件尺寸,一定要把优化结果映射到现有产品目录,选一个“刚好盖住”需求、余量适中的型号,然后再把真实型号的参数放回模型里跑一次确认。优化结果只是候选方案,不是最终答案。
5. 常见问题与排查实录
5.1 代数环和电压震荡:模型跑得“抖”怎么办
做电气和机械强耦合模型时,最典型的问题就是代数环。现象是仿真时间步严重缩水,或者母线电压和电流在小幅高频抖动,看起来像是数值不稳定。根本原因是电压和电流互为因果,在同一个仿真采样点内形成无限循环。
我实际处理这个问题最有效的办法有三个:在直流母线上并联一个很小的理想电容(比如 1 mF)给电压建立一个状态;把部分子系统设置为Local Solver,让 Simscape 在那个子系统内部自闭环;或者在控制器环节加一个一阶惯性滤波,让控制信号不要瞬时反转。这三个方案里并联电容最推荐,因为它既是数值手段,也物理上说得通——真实飞机母线对地/母线间本来就存在滤波电容。
还有一个低级但高发的坑:模块里初始状态没有设好,模型在起步瞬间需要很大的冲击功率才能“拉”到工作点。只要给电机转子和电池 SOC 设合理的初始值,大都能消掉起始段的尖峰。
5.2 单位混用和物理域接口报错
Simscape 对单位比普通 Simulink 严格得多。我最常遇到的报错是 unit mismatch,比如把转速在 rad/s 和 rpm 之间混用,或者把电池容量用 Ah 写进要求 As 的端口。Airbus 这样的大厂商内部要求所有物理信号都强制标注单位,不是没有原因的——单位错误在组件尺寸阶段会直接导致容量差 3.6 倍,而且是那种“看起来一切正常”的错误。
排查方法其实简单:看模型里每个物理信号转换模块(PS-Simulink Converter)的 units 设置,在u函数或者模块对话框里统一成一套单位体系。我自己习惯在参数文件里全部用 SI 基本单位,只有在模块边界才转换成工程常用单位显示,这样可以最大限度减少人为换算出错。
5.3 模型仿真速度慢到离谱
组件尺寸模型不需要特别高的采样率,如果发现仿真慢得离谱,先检查是不是无意中开启了超高输出采样率,或者模型里塞了一堆波形记录。Scope 模块虽然方便,但批量仿真时每个 Scope 都在拖慢速度。批量扫描时建议把 Scope 去掉,只通过logsout记录关键信号,跑完再挑选个别算例看波形。
另外,求解器设置很关键。Simscape 的 local solver 和变步长参数需要配合模型尺度来调,我的经验是把相对容差放宽到1e-3,对组件尺寸阶段的结论几乎没有影响,但速度能明显提升。如果模型是纯连续、无开关谐波的,用daessc求解器通常比默认配置更快,也更稳。
5.4 工具箱和高版本模型打开问题
另一个常见问题是工具箱版本不齐。跑飞机推进系统组件尺寸,至少需要 Simulink、Simscape、Simscape Electrical 三个模块。如果需要把机械结构做成多刚体,还需要 Simscape Multibody。Simscape Electrical 在不同 MATLAB 版本里的元件库名称和图标有变化,打开旧模型时经常会弹提示让替换模块。不要机械地全部接受替换,先看看替换后参数是否保留,有时候替换会丢掉自定义参数。
关于授权,多说一句:软件授权一定走正规渠道,学校或公司的正版网络、MATLAB Online、试用版都可以。用非授权渠道获取的版本,不仅存在安全风险,版本功能和 bug 修复也跟不上,最后吃亏的还是自己的项目进度。
5.5 模型能跑,但结果“离谱”怎么定位
最让人头疼的情况是模型仿真顺利跑完,但结果比预想差了十万八千里。这时候不要急着调参数,先做一次“体检”:给螺旋桨一个固定转速,看它输出的推力和用手算的静推力是否一个数量级;断开发电机,单独让电池供电,看母线电压降和 SOC 变化是否符合理论估算;再看电机输入电功率和轴输出机械功率之差有没有超出正常损耗范围。
这类“不可思议的结果”,九成是因为某个地方少了负号、单位错位或者端口方向接反。做组件尺寸优化之前,一定要留一个“基准算例”,每次都先跑一遍,确认模型行为符合物理直觉,再批量扫描。这个习惯帮我省了太多时间。
6. 模型还能往哪里延伸
6.1 从“尺寸模型”变成“数字孪生”基座
同一个 Simscape 模型,其实不用大改就可以演进成后续的详细仿真平台。尺寸阶段用的是集总参数电池和效率 MAP 电机,等初步方案定了之后,把电池模块替换成带热网络和老化模型的版本,电机替换成带细节磁链和损耗计算的版本,控制器替换成 Stateflow 或真实嵌入式代码,就变成硬件在环平台的一部分。前期把参数结构和接口规划好,后面替换子模型时付出的代价会小很多。
6.2 与 STK、Carsim 等外部工具联合仿真
这套建模思路并不局限于飞机单机本身。如果你的任务场景涉及航迹规划或通信覆盖,可以把 Simscape 模型和 STK 做联合仿真,用 Simscape 输出的功率状态驱动任务规划约束;如果做的是飞行汽车、陆空两栖这类平台,联合 Carsim 这类车辆动力学工具,就能在地面滑跑和空中飞行之间做统一评估。方法和做飞机尺寸一样:定义物理接口、共享参数、同步时间步,关键是两边模型之间的数据交换格式要事先定清楚,不要等到联调时才互相踢皮球。
6.3 毕业设计和学科竞赛里的“套路化复用”
最近几年,研究生数学建模和各类工程竞赛里跟新能源相关的题目越来越多,电动飞机、无人机物流、储能配置都是高频主题。这套“任务剖面建模 + 参数化组件扫描 + 敏感度分析”的方法,本身就是一套可以复用的分析框架。不要只背软件操作,要把思路藏在脑子里:先定需求,再建模型,再扫描参数,再做决策。这个流程放在电动飞机上是组件尺寸,放在储能系统上就是容量配置,放在电动汽车上就是电池和电机匹配,底层逻辑是通的。
最后说一点个人体会。组件尺寸这项工作,真正难的不是公式,而是无数个“如果……会怎样”的追问。客户改一个任务剖面参数,电池新材料比能量涨了几个百分点,这些都会牵动整个系统重排。一套参数化做得好的 Simscape 模型,能让你在一个下午回答十个这样的问题,而不是每次重新做人。希望这篇梳理能帮你在自己的组件尺寸项目里少踩几个坑,也欢迎对模型结构有具体想法的同行来交流。