☰
增程式混动整车Simulink建模与CD/CS能量管理策略仿真详解
2026/10/20 17:04:45 网站建设 项目流程

直接上手说正事。增程式混合动力汽车,业内习惯叫EREV,这几年热度一直没下来过。原因不复杂——它有纯电驱动的平顺安静,又用一台发动机当“充电宝”兜底续航,结构上比并联混动和功率分流简单得多,特别适合城市通勤和高速巡航的混合场景。而研究这种车,最难的从来不是装一台电机或者选一块电池,而是整车的能量流到底怎么分配:什么时候纯电跑,什么时候发动机启动,SOC压到多少开始充电,充到多少又停机。这些问题不放到仿真平台里反复跑,光靠实车标定,时间和成本都兜不住。

所以就有了这篇东西。我想用一个完整案例,手把手带你把一套增程式混动整车的Matlab/Simulink模型从零搭起来:先讲清楚增程构型背后的能量逻辑,再拆整车动力学模型、电池模型、电机模型、发动机模型怎么建,然后写一套简单的CD/CS能量管理策略,最后跑一个标准工况看结果。整个过程用的都是Simulink/Simscape里最常见的基础模块,不依赖第三方工具箱,适合车辆工程在校生、刚转行做三电系统的工程师,以及想自己搭平台验证控制策略的算法工程师。下面内容有点长,但每一步我都标注了参数来源和避坑点,跟着走,大概率能一次跑通。

1. 增程式混动构型与建模整体思路

1.1 增程式构型的基本能量流

增程式混动在结构上是典型的串联构型,发动机不直接驱动车轮,发动机只带动发电机发电,发的电要么直接供给驱动电机,要么存进动力电池,车轮永远只由电机驱动。这个构型最大的好处是发动机可以始终工作在高效区,转速和负载由控制器主动调节,不跟车速绑定,噪声振动控制也相对容易。

建模之前先画一张能量流图(用文字示意):

  • 纯电模式:电池 → 电机控制器 → 驱动电机 → 车轮
  • 增程模式:发动机 → 发电机 → 电机控制器 → 驱动电机(多余电量存入电池)
  • 制动能量回收:车轮 → 电机(发电状态)→ 电池

三条路径对应三种核心工作状态,后文的所有模型都是围绕这三条路径展开的。建模第一步不是急着拖模块,而是先把这条路想明白,否则后面信号线会绕成蜘蛛网。

1.2 前向仿真与后向仿真的取舍

搞混动仿真的人一定会遇到一对概念:前向仿真(Forward Simulation)和后向仿真(Backward Simulation)。

后向仿真假设车辆完全跟随工况车速,从车轮端反向推导,逐级计算工况需求功率,沿着传动链往上游反推,最终得到发动机或电池需要提供的能量。这种模型计算快、精度要求低,适合做燃油经济性的粗略估算,但是它的缺点是没法真实反映驾驶员行为,也做不了动态控制策略。

前向仿真则相反,模型里有一个“虚拟驾驶员”,通过PID调节模拟驾驶员踩加速/刹车踏板,把目标车速和实际车速的误差换算成踏板开度,再转成功扭矩和功率需求,向下游部件逐级传递。这种方式更接近真实车辆行为,适合验证控制策略,代价是计算量更大、模型更复杂。

我这次选择前向仿真,原因很直接:我们建模型的目的就是为了写能量管理策略,策略要能真正跑起来,就必须有闭环反馈,后向模型没有这个能力。

1.3 Simulink模型顶层架构

建议把模型按物理子系统拆成几个模块,而不是把所有东西堆在同一个model里。推荐的最低粒度是这样:

模块名称作用输入信号输出信号
驾驶员模块生成踏板开度目标车速、实际车速加速踏板、制动踏板
整车控制器模块模式判断、功率分配踏板、SOC、车速发动机启停指令、发电机功率指令
增程器模块发动机+发电机发电功率指令、状态指令发电功率、燃油消耗率
动力电池模块电池充放电功率需求SOC、端电压
驱动电机模块电机驱动与回馈扭矩指令实际扭矩、功率消耗
整车动力学模块车辆纵向运动驱动力/制动力实际车速

信号流方向:驾驶员模块输出的踏板信号进入控制器,控制器根据SOC和踏板开度决定模式,然后分别向增程器、电池、电机发送指令,最后所有功率汇总到整车动力学模块,算出新车速反馈回驾驶员模块。这是一个闭环结构,层与层之间用Goto/From或者Bus都行,我建议用Bus,信号多了以后管理更清晰。

2. 整车纵向动力学模型搭建

2.1 整车关键参数与行驶阻力方程

车辆行驶时,电机输出扭矩经过减速器和主减速器后变成轮端驱动力,这个力要克服滚动阻力、空气阻力、坡度阻力和加速阻力。这是所有整车模型的物理基础,增程式混动也不例外。

行驶阻力公式为:

F = m·g·f·cos(α) + 0.5·ρ·Cd·A·v² + m·g·sin(α) + δ·m·a

其中,m是整车质量,g是重力加速度,f是滚动阻力系数,α是道路坡度,ρ是空气密度,Cd是风阻系数,A是迎风面积,v是车速,δ是旋转质量换算系数,a是纵向加速度。

以一台典型增程式SUV为例,取一组常用参数:整备质量1850kg,满载质量2150kg,考虑到成员和行李,仿真质量取2000kg;风阻系数0.31,迎风面积2.48m²,滚动阻力系数0.012,旋转质量换算系数取1.08。坡度默认0,平路工况为主。

2.2 需求功率与轮端扭矩换算

有了阻力就可以算轮端需求功率:

P = F·v

这个功率就是整车需要电机提供的机械功率(暂不考虑制动回收时,驱动工况下)。再往上游推,电机的输出功率需求为:

P_motor = P / (η_gear · η_motor)

其中η_gear是减速机构的传动效率,取0.95,η_motor是电机在不同工况点的效率,由电机MAP图查表得到。

建模建议:用Simulink的Constant模块放参数,用Product/Sum组合搭建公式,用Lookup Table模块放电机效率MAP。不要硬编码数字,后面调参的时候你会感谢自己当初用了变量。

2.3 驾驶员模型与循环工况

前向仿真需要一个虚拟驾驶员。标准做法是目标车速与实际车速做差,经过一个PID控制器输出踏板开度(0到1),再通过“加速踏板→驱动扭矩”“制动踏板→制动力”的映射关系,转换成对车辆的输入。

PID参数的粗调经验:车速这类大惯量对象,比例项取0.8~1.5,积分项取0.05~0.3,微分项可以很小甚至取0。我遇到过很多人问为什么车速跟踪不上,一看PID参数全是0——那当然跟踪不上,插个零就断开了反比例。

循环工况选择方面,国内最常用的三个:WLTC(全球轻型车测试循环)、CLTC(中国轻型车测试循环)、NEDC(旧欧洲循环,已逐渐淘汰但在学术文献里还在大量出现)。CLTC更适合国内场景,比较常见。直接把循环工况的Excel数据导出成Signal Builder块或者From Workspace,作为目标车速输入。

2.4 整车模块的Simulink实现

整车动力学模块本质是解这个方程:由驱动力-阻力差求得加速度,再积分得到车速。

在后向路径上,从目标车速反推需求扭矩;在前向路径上,从电机输出的实际驱动力向前推车速。这里最容易犯的错是:用需求功率/需求扭矩去算车速,导致模型出现代数环。正确的做法是在整车模块里只做一件事——受力分析和牛顿第二定律,把驱动力当成输入,把车速当输出,扭矩和功率的换算放在电机和控制器那一层。

3. 动力部件模型:电池、电机与增程器

3.1 动力电池模型——初学者版Rint

电池建模是一个很大的领域,但从整车控制策略验证的角度,一个Rint模型完全够用。Rint模型把电池等效为理想电压源与一个串联内阻,开路电压Voc和内阻R0都是SOC的函数,通过查表得到。

核心关系式是这样:

  • 端电压:U = Voc(SOC) - I·R0(SOC)
  • 功率平衡:P_batt = U·I
  • 电流求解:I = (Voc - sqrt(Voc² - 4·R0·P_batt)) / (2·R0) (放电为正方向)

SOC由安时积分法的表达式计算:

SOC(t) = SOC_0 - (1 / Q_max)·∫I·dt

其中Q_max是电池最大可用容量(Ah)。

实现注意三点:

第一,Voc和R0对SOC的查表曲线,可以取磷酸铁锂或三元锂的典型数据,前期没有实验数据时用文献参考值就行,但要保证SOC在0.2~0.9之间不要剧烈跳变。

第二,安时积分法的问题在于SOC误差会随积分累积,在策略验证场景可以接受,但你要是想研究SOC估计,就得换卡尔曼滤波等方案,这不属于本文讨论范围。

第三,仿真容易遇到的数值问题是在功率P_batt很大且SOC很低时,根号内出现负数。这就是Rint模型的物理极限——彻的低电量大功率时电池已经“供不上”了,模型直接报错。工程上的处理方法是限制电池最大放电功率:

P_max_disch = (Voc² / (4·R0)) (根号内为零的临界功率)

在模型里加一个Min块,把功率指令限幅到P_max_disch以内。这一步是很多初版模型跑崩的最常见原因,加了之后基本能消除。

3.2 驱动电机建模——效率MAP查表法

整车仿真不需要电机电磁内部结构,用稳态外特性+效率MAP就够了。电机模型要做两件事:根据扭矩指令和当前转速,计算实际输出扭矩(受外特性限制);根据输出机械功率查效率,计算出输入电功率。

外特性的处理方式:在Simulink中用Lookup Table实现扭矩上限随转速变化。低速恒扭矩区、高速恒功率区是典型特征。临界转速看电机类型,永磁同步电机通常在4000~6000rpm进入弱磁区。

效率MAP是一个二维查表:输入转速和扭矩(或功率),输出效率。推荐用Lookup Table(n-D)模块,把效率矩阵填进去。数据来源可以有三种:台架实验数据、文献参考数据、用电机设计软件仿真出来的数据。很多公开论文都有某功率等级电机的效率MAP,可以拿来当初始数据。

电机模型的功率关系要注意方向:

  • 驱动状态:P_electric = P_mech / η
  • 发电状态(回馈):P_electric = P_mech · η

有些模型在电机前面统一乘效率,导致制动回收时能量反而变大,这是方向性错误。

3.3 增程器模型——发动机万有特性与发电机效率

增程器是“发动机+发电机”组合,发动机拖动发电机发电,输出的电功率进入直流母线。增程器建模的核心是:给定一个发电功率指令,发动机要工作在什么转速、什么扭矩点,对应多少燃油消耗。

工程上的简化做法:认为增程器有最佳的“功率-油耗率”曲线,也就是在发电功率P_gen的每个值下,发动机都工作在最优BSFC点(制动比油耗,Brake Specific Fuel Consumption,单位g/kWh)。于是可以提前计算出一条静态曲线:

  • 横轴:发电功率 P_gen(kW)
  • 纵轴:发动机最优油耗率 b_e(g/kWh)或每小时燃油消耗 m_dot_fuel(g/s)

模型运行时,根据发电功率指令,直接查表得到燃油消耗率。这种方式避免了发动机动态过程的建模,对能量管理策略验证完全够用,甚至很多整车厂的初步仿真都是这么干的。

发电机模型更简单:一个效率常数或效率查表。永磁同步发电机在高效区效率可以达到0.92~0.95,取一个随功率变化的效率表更合适。发电功率除以发电机效率就是机械功率,机械功率除以发动机效率就是燃油能量。

燃油消耗计算:

m_dot_fuel = P_gen / (η_gen · η_engine · LHV_fuel)

其中LHV_fuel是燃油低热值,取44.3MJ/kg(等效12.3kWh/kg)。注意单位换算,这里坑特别多,我第一次换算的时候整整浪费了半天,最后的油耗结果整整差了一个数量级。

3.4 油箱和整车质量耦合

增程器工作时要烧油,油箱里的油减少,整车质量也跟着变。绝大多数初学模型不会考虑这一点,直接用固定质量。在短工况(比如一个CLTC约30km)里这个问题确实可以忽略,但如果要跑超长里程或者跑能量流分析,质量变化会引起阻力变化,最后会影响电耗和油耗的准确度。

建议在模型里把整车质量定义为初始质量减去消耗燃油量。Simulink里做法不复杂:燃油消耗率积分得到累计耗油量,再用Sum块更新质量即可。需要注意单位是kg,油耗单位从g换算的时候除以1000。

4. 能量管理策略:CD/CS两阶段控制

4.1 CD/CS策略的核心思想

增程式混动最常见的控制策略是电量消耗-电量维持(Charge Depleting - Charge Sustaining),也就是CD/CS。CD阶段相当于一台纯电动车,电池SOC从满电往下消耗;当SOC降到阈值(比如25%),整车进入CS阶段,此时增程器开始工作,维持电量在一定范围内波动。

为什么用CD/CS?因为增程混动本质上是“纯电优先”,日常通勤距离短就直接当纯电车开,跑长途才启动增程器。这种策略在NEDC/WLTC/CLTC下测试时,结果直接体现为CD阶段的纯电续航和CS阶段的油耗两个指标。

4.2 SOC阈值与功率分配标定

判据逻辑如下:

  • SOC > SOC_high:纯电模式,增程器停机
  • SOC_low < SOC < SOC_high:维持当前状态(滞回,避免频繁启停)
  • SOC < SOC_low:增程模式,增程器开机

SOC_high和SOC_low之间要设置滞回区间(比如SOC_low=25%,SOC_high=30%)。没有滞回的话,发动机在临界点附近会反复启停,不仅NVH差,油耗也高。

增程器工作时的功率分配有几种策略:

  • 恒功率:发动机固定在某个功率点发电,比如20kW。简单粗暴,但可能造成电池过充或过放。
  • 功率跟随:发动机发电功率跟随需求功率。电池只作为“缓冲池”,削峰填谷。这个模式效率较高,但发动机动态起伏大。
  • 最优曲线:按SOC查表决定发电功率。SOC低多发电,SOC高少发电。这是最常用、最稳的折中方案。

我个人推荐初版模型用“SOC查表+功率跟随限幅”组合:先根据SOC的偏差确定目标发电功率,再用一个大范围的跟随项修正,最后限幅在增程器最高发电功率以内。

4.3 Stateflow实现逻辑状态切换

Simulink里做模式切换,最顺手的工具是Stateflow。定义三个状态:

  1. EV_Mode(纯电)
  2. CS_Mode(增程)
  3. Transition之间的转移条件

核心转移条件:

  • 从EV进入CS:SOC <= SOC_low 且车速 > 0(车速太低时即使SOC低也不急着启动)
  • 从CS退回EV:SOC >= SOC_high
  • 停机条件:停车且SOC > SOC_high,触发发动机延时停机

Stateflow里可以顺便写功率分配逻辑,用一个函数块查表或算公式输出P_gen指令和发动机启停标志。

写策略时有几个细节容易出错:

第一,发动机启动不能瞬态响应,应加一个启动延迟和功率爬坡。最简单的做法是给P_gen指令加一阶惯性环节,时间常数取0.5~1秒。

第二,模式切换瞬间要防止功率跳变导致模型数值振荡。加个Rate Limiter模块可能给你省掉大麻烦。

第三,CD阶段不是完全不能启动发动机,比如你踩地板油爬山,功率需求远超电池放电能力,这时即使SOC很高也要启动增程器“助力”。更完善的做法是加一个“大功率请求”条件:需求功率超过电池最大放电功率与电机最大功率的差额时,无条件启动增程器。

4.4 几种经典策略的对比

策略类型实现难度油耗水平电池寿命影响适用场景
CD/CS恒定阈值低中中入门学习、初版验证
功率跟随中较低较好日常场景优化
动态规划/MPC高最优好科研、离线优化参考

CD/CS不是最优策略,但它是理解能量管理的必要起点,后面的模型预测控制、动态规划都是在它的基础上演进的。

5. 从模型到仿真:集成、调试与结果分析

5.1 模型集成要点与代数环问题

各个部件模型建好后,用Bus对象将信号连接起来。最关键的连接线有两条:一条是“功率需求”线从控制器到电池和增程器;另一条是“车速反馈”线从整车动力学模块回到驾驶员模块。

连完线后最容易遇到的问题就是代数环。典型表现:Simulink报错“Algebraic loop”。本质是一个模块的输出经过纯增益/查表路径直接回到自己输入,中间没有状态更新。

举一个最常见的例子:电池模块需要电流来算功率,而功率计算公式里又需要电流——如果直接用电流输入功率模块再除以电压,就会产生代数环。解决办法有两个:一是给电流反馈路径加一个单位延迟(Unit Delay)或一阶惯性环节,打断循环;二是改写公式,像前面第3.1节那样用二次方程直接由功率解出电流,彻底绕开代数环。专业人士更推荐后者,加延迟会引入不需要的动态误差。

5.2 仿真参数设置

求解器选择:固定步长比变步长更稳,推荐用ode4(四阶Runge-Kutta),步长0.01~0.05秒。如果模型里有一阶惯性为0.1秒级别,步长0.01秒已经足够。

仿真时长:CLTC工况时长1800秒,仿真时间设置1800秒即可。如果内存足够,可以一次性把数据存到工作空间。

有一个参数很多人容易漏掉:微分环节的采样时间。Simulink里PID模块默认连续时间,如果整模型都是离散步长,PID模块也要改成离散时间,不然会出现仿真警告。

5.3 结果分析:怎样判断模型是对的

跑完仿真,第一步不是看油耗,而不是先看“合理性”:

  • 车速跟踪是否贴合工况曲线:虚拟驾驶员如果不能跟踪车速,应该是PID参数的问题,模型本身无错。
  • SOC曲线是否平滑下降:CD阶段以稳定斜率下降,CS阶段在滞回区间内波动,没有突变。
  • 增程器启停是否太频繁:一个CLTC循环里,启停次数控制在个位数。如果几十次,说明滞回阈值设小了,或者功率跟随太激进。
  • 油耗是否在合理范围:参照增程式车型官方油耗(馈电状态5-8L/100km)看自己结果的量级,如果算出来是几十升/百公里,多半是单位换算错了。

输出燃油消耗率时,把瞬时耗油率(g/s)积分得到总耗油量(g),然后除以工况行驶里程(km),再乘以100,就得到百公里油耗。

5.4 常见问题速查表

我把搭建和调试过程中最常踩到的坑整理成一张速查表,每一项都是实际运行中遇到的问题。遇到报错时可以对照排查。

现象原因解决方案
仿真起步就报错“Root found when evaluating”代数环检查电池功率/电流反馈回路,改写公式法解电流
SOC在CD阶段先升后降制动回收能量大于驱动消耗,正常现象不用处理,观察整体趋势
CS阶段发动机反复启停滞回区间过窄或功率跟随过强拉大SOC_low与SOC_high间距,功率跟随加惯性
整车车速恒为0扭矩到加速度的传导链路断开检查整车动力学模块里驱动力与车速积分的连接
油耗大得离谱燃油低热值单位错误或效率方向反了核对LHV单位,确认查询效率时功率方向正确
PID跟踪不上车速比例增益过小或积分饱和调大Kp,给积分加限幅
高功率时仿真崩溃电池模型根号内负数加上文提到的P_max_disch限幅
结果油耗为0增程器没有启动指令检查SOC阈值设置,确认工况循环前是否初始化满电

5.5 初版模型的扩展方向

模型跑通之后,我建议按下面的优先级去扩展。

第一步,完善SOC精度。安时积分法在长周期仿真里误差会积累,接一个卡尔曼滤波或扩展卡尔曼滤波对SOC做在线估计。

第二步,把电池热模型加进来。增程式在CS模式下电池反复充放,热管理对电池寿命影响很大,加个集总热容模型,看温升趋势。

第三步,替换逻辑策略为实时优化策略。等值燃油消耗最小策略(Equivalent Consumption Minimization Strategy,ECMS)比CD/CS省油5%~10%,是业内用的最多的实时次优策略,实现也不复杂——核心是定义等效因子,把电能折算成等效燃油消耗,然后每个时刻最小化等效油耗,选出发电功率或放电功率。这个比MPC简单得多,强烈建议作为CD/CS的下一个进阶方向。

写在最后

整套模型的搭建和调试过程里,我体会最深的一点是,增程式混动建模的难度不在某个部件有多复杂,而在于能量流怎么跨层级串起来。电池里解的电流要和发动机烧的油发生关系,两者又在一个状态机控制下协同工作——这种跨物理域的逻辑链是Simulink建模的价值的真正来源。我第一次把整车模型跑通的时候,SOC曲线在CS阶段稳定维持、增程器只在需要的时刻启动,那种感觉确实是“通了”。如果你搭的过程中卡在哪一步,大概率可以在上面的速查表里找到答案。给初学者的建议,先跑通,再调参,最后才谈得上算法优化——仿真平台本来就是试错成本最低的地方,这一步走得越扎实,后面做策略优化越省力。

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

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

立即咨询