资讯详情

资讯详情

基于Matlab/Simulink的纯电动汽车动力性与经济性仿真模型搭建指南

搞纯电动汽车项目的朋友应该都遇到过这样的场景车型还没出来试验车也没有但指标评审已经盯着0-100km/h加速时间、最高车速、NEDC或者CLTC电耗这几个数不放了。硬着头皮拍脑袋估个数不靠谱等样车出来再实测又太晚。我这次做的就是用Matlab/Simulink搭了一套完整的纯电动汽车软件仿真模型把整车动力性和经济性先算出来。这套模型不依赖硬件覆盖驾驶员、电机、电池、传动系统、整车纵向动力学和基础控制策略一台普通办公电脑就能跑非常适合做前期方案评估、参数匹配以及给研究生课题当基础平台用。仿真的核心价值就是让你在图纸阶段就能回答三个问题这车能不能达到设计指标电池和电机怎么匹配才合适跑完一个循环工况大概消耗多少电。模型搭好之后改参数、换工况都非常快比每次都在台架上试要省太多时间。这篇内容我尽量按实际搭建顺序来写重点不是把每个Simulink模块截图贴一遍而是讲清楚每一个环节为什么这么做、有哪些坑照着这套思路你能自己搭出来。1. 建模前的核心决策整车模型为什么要这样搭1.1 工具选型为什么用Simulink而不是其他方案仿真工具这件事圈子里其实是有分歧的。有人习惯用AVL Cruise这类成熟的商业软件把模块一拖、参数一填就能跑省事也有人用Excel先把稳态阻力算一遍粗略估算加速和续航。这两条路我都走过但这次最终选Matlab/Simulink主要原因是“透明”和“灵活”。Excel做稳态计算的问题很明显加速过程是整车质量、转速、功率、扭矩、阻力互相耦合的动态过程用电子表格只能做非常粗糙的积分近似而且电机效率map、电池OCV-SOC曲线这种二维查表在Excel里处理起来很别扭。你算出来的曲线没法直观看到换挡、限功率、打滑这些瞬态行为。商业软件虽然模块齐全但是很多内部细节是黑盒你没法完全控制它的计算逻辑如果要做控制策略验证、加自定义算法还得看它支不支持二次开发。最现实的问题是License不便宜初版方案阶段就上商业软件性价比不高。Simulink解决的是这两者的痛点。它本质上是一个开放框图环境动力学的每个环节你都知道是怎么算的模型里链接着什么样的公式所以出问题好排查。更重要的是同一个模型既能做前向仿真有驾驶员模型跟踪车速去踩油门/刹车也能很容易改成后向仿真模型复用性很强。而且Simulink自带的Simscape、Powertrain Blockset里都有很多现成的电动车部件模型不求细的话直接改参数就能用。1.2 顶层架构一个模型分几层才清晰拿到需求之后我第一件事不是打开Simulink拖模块而是在纸上画架构。整车动力性经济性仿真模型的顶层逻辑不复杂本质就是一条功率和扭矩的传递链条驾驶员根据目标车速和实际车速的差值给出加速踏板和制动踏板信号VCU根据踏板信号和当前电池、电机状态计算请求扭矩电机把电能转换成机械能经过减速器放大扭矩传到车轮克服滚动阻力、空气阻力和坡度阻力之后推动整车运动反过来制动的时候车轮的动能通过电机发电回充到电池。我在模型里把这条链条拆成了六个顶层模块模块核心功能主要输入主要输出驾驶员车速跟踪输出踏板信号目标车速、实际车速油门开度、制动请求VCU控制扭矩分配、功率限制、模式切换踏板信号、SOC、车速驱动/制动扭矩指令电机系统扭矩响应、效率计算扭矩指令、转速实际扭矩、输入电功率电池系统SOC估算、电压电流响应电机功率、附件功率母线电压、SOC、可用功率传动系减速、扭矩放大、效率损失电机扭矩、转速轮端扭矩、轮速整车纵向动力学阻力计算、加速度积分轮端驱动力、制动扭矩车速、行驶距离这样分层有个明显好处每一个模块你都可以独立测试。比如你要验证电池模型的SOC算得准不准可以喂一个固定的功率曲线进去看端电压响应不用整车模型参与你要验证控制策略的防抖逻辑也可以单独把VCU和电机模型拉出来跑。对做项目的人来说分开测试比整体联调好定位问题得多。1.3 子系统接口定义先定好单位再建模我在实际建模中被单位坑过不止一次。Simulink里默认单位是国际单位制但工程上大家习惯用km/h、kW、rpm、kWh这些单位结果就是模型里到处是增益模块。扭力传感器、转速传感器都还好说最怕的是在信号线上随手写个常数把kW当成W算整条能耗曲线直接偏大几千倍。所以我的做法是在建模之前就定一套统一的接口单位规则车速接口统一用km/h电机转速用rpm扭矩用Nm功率用kWSOC用百分数0-100距离用km。内部计算需要国际单位的地方在模块内部转换别在信号线上到处转否则查错的时候会疯。这件事听起来简单但很多模型跑出来结果离谱八成都是单位搞混了。2. 五个关键子系统的建模实操2.1 驾驶员模型不是简单加个PID就完事驾驶员模型的功能只有一个让车辆跟随目标车速。听起来简单实现起来有讲究。最常用的形式是一个PI控制器加限幅输入是目标车速和实际车速的差值输出是加速踏板百分比或制动踏板百分比。纯积分环节看目标车速比例环节看瞬时误差两者配合确保稳态无差、动态响应够快。但有一个细节很多人忽略如果不限制踏板的响应速率PI控制器会在循环工况的换挡点或车速突变的时刻给出一个非常激进的踏板阶跃结果就是车辆加速度曲线很难看直接导致仿真结果里电耗异常偏高。实际上驾驶员的加速踏板操作是有生理极限的所以我在驾驶员模型输出端加了一个速率限制模块踏板变化率限制在100%每秒左右仿真结果就平滑多了。此外PI控制器需要加积分限幅否则在低速大负荷工况下积分项会一直累积等车速稳下来之后突然饱和车辆反而超速。这里还有个模型结构选择是做开环还是闭环。动力性仿真全油门加速通常用开环直接给100%踏板经济性循环工况仿真用闭环驾驶员模型去跟踪工况车速。开环和闭环不能用一个模型结构硬套分开建两个模式用Simulink里的枚举变量做模式切换比复制模型快得多。2.2 驱动电机模型效率Map才是灵魂电机模型的核心有两块外特性扭矩限值和效率Map。外特性决定这台电机能出多大劲效率Map决定电耗算得准不准。我在模型里用的是一张以转速为横轴、扭矩为纵轴的二维效率查表表里的数值来自供应商提供的实测数据单位是百分比。Simulink里用2-D Lookup Table就能实现断点数据注意按从小到大排列这个不复杂但很容易因为表格断点顺序错了算出来的效率直接是零。电机模型的扭矩响应不可能是瞬时的实际电机控制器有个扭矩响应时间通常几毫秒到几十毫秒。我在模型里用一阶惯性环节模拟这个动态特性时间常数默认取20ms。这个值对经济性仿真影响不大但对动力性仿真影响明显时间常数太大0-100km/h加速时间会变慢。有一个经验值可以参考做加速性能仿真时从实测台架数据里辨识这个时间常数别拍脑袋取。驱动模式和发电模式要分开处理。驱动时电功率[扭矩(Nm)×转速(rpm)/9550]/效率发电时电功率[扭矩×转速/9550]×效率符号刚好相反。电机扭矩在驱动和发电两个方向的效率不一样查表时要注意用绝对值索引、符号还原。我用的是同一个效率表但加了方向判断逻辑避免负扭矩查表出错。2.3 动力电池模型SOC和功率限制是两大命门动力电池模型我分三个层级来做。最粗的是SOC积分模型电流对时间积分除以电池容量再乘100%作为SOC输出。这个模型简单但对动力性和经济性仿真基本够用。稍微细一点的是等效电路模型我这次用的是OCV加内阻的模型开路电压OCV通过SOC查表得到内阻分充电内阻和放电内阻两张表。OCV-SOC曲线是电池的关键数据不同SOC区间的OCV变化率差异很大尤其到了低SOC区间电压掉得很快这直接影响整车可用功率。电池模型里最容易出错的是内阻的处理。同一块电池放电内阻和充电内阻不一样而且受温度影响很大。经济性仿真如果忽略温度只用常温数据冬季电耗就完全失真。我这个模型为了简化没有做完整的热模型但在电池模块里加了一个环境温度输入用来选择不同温度下的内阻表。对纯做动力性和经济性的仿真来说这么做已经够用了。功率限制是电池模型必须输出的一个量。电池能不能在某个SOC下输出300kW取决于电压和内阻最大放电功率受最低电压限制最大充电功率受最高电压限制。我在模型里根据当前SOC和内阻计算可用充放电功率输出给VCU模块做扭矩限制。这个环节如果省了就会出现仿真里电池电压已经跌到保护值以下电机还在疯狂要功率的假象导致加速曲线异常。2.4 传动系统与整车纵向动力学阻力公式要写对纯电动汽车大多数是单挡减速器没有传统意义上的换挡逻辑这让传动模型简单了不少。传动模块的核心参数就是减速比和传动效率。减速比的作用是把电机的高转速高扭矩转化到轮端合适的转速和扭矩效率则是机械损耗的体现通常取0.92到0.95之间。建模时我不把传动效率放在传动比增益之后而是单独用一个效率因子乘在扭矩传输路径上方便后期改成变速器模型时复用。整车纵向动力学是模型闭合的关键。驱动力克服四大阻力滚动阻力、空气阻力、坡度阻力和加速阻力。公式不复杂但每一个量都要算对滚动阻力F_f m·g·f·cos(α)f一般取0.01到0.015空气阻力F_w 0.5·ρ·Cd·A·v²ρ取1.2258 kg/m³坡度阻力F_i m·g·sin(α)平路是0加速阻力F_j δ·m·aδ是旋转质量换算系数旋转质量换算系数我用了一个固定值1.05意思是传动系统旋转部件带来的等效质量大约是整车质量的5%。严格算的话应该对每个挡位分别计算但对于单挡电动车取固定值够了。最终加速度是合力的结果a (F_traction - F_resistance) / (δ·m)。加速度再积分一次得到车速车速再积分得到行驶距离这两个积分器是模型的闭环核心。2.5 控制策略动力性车型和经济性车型都一样吗控制策略这个模块在初期建模时最容易忽略。很多人觉得纯电动车控制就是踏板踩多少给多少扭矩实际上不是。真正的VCU策略至少包含三件事扭矩解析、功率限制、能量回判定。扭矩解析的含义是驾驶员请求的加速踏板百分比要转换成电机扭矩请求。常用做法是查表横轴是踏板开度纵轴是可用扭矩比例有些车厂做成一条带斜率的曲线低速段缓、高速段陡这样驾驶感受更线性。在Simulink里我用一个1-D Lookup Table搞定踏板开度50%对应50%的可用峰值扭矩先不做踏板map标定里的那些细节。功率限制是VCU对电池和电机的妥协VCU收到驾驶员的扭矩请求之后必须先跟电池的可用功率、电机的当前峰值功率做限制取三者最小值才是最终扭矩指令。逻辑上用这个优先级驾驶员请求扭矩、电机外特性限制扭矩、电池功率限制扭矩、传动系安全扭矩取最小值。这样能保证仿真中不会出现电池过放的工况。能量回收在控制策略里的实现是另一个大坑。回收集成在制动踏板里还是独立放在加速踏板反端我用的方案是当加速踏板完全松开且车速高于某个阈值比如5km/h时VCU根据驾驶模式输出一个负扭矩请求扭矩大小按车速查表车速高回收扭矩大车速低回收扭矩小。这样可以模拟出单踏板的大致效果。要注意的是回收扭矩必须跟机械制动协调如果要精细模拟制动感觉得引入制动踏板解耦模型。对经济性仿真来说能量回收策略的价值非常大好的回收策略能显著提升循环工况续航所以这一步值得做。3. 动力性仿真工况设计与结果解读3.1 0-100km/h全油门加速仿真工况设置比想象中讲究动力性仿真车型参数我按一辆典型的A级纯电轿车来设整车整备质量1500kg迎风面积2.2m²风阻系数0.28滚动阻力系数0.012轮胎滚动半径0.32m减速比9传动效率0.94电机峰值功率150kW峰值扭矩320Nm最高转速12000rpm电池容量60kWh。这套参数本质上是一台主流家用纯电车的水平用来做方法演示很合适。0-100km/h仿真设计很直接驾驶员模块输出100%加速踏板仿真从静止开始记录车速到达100km/h的时刻。但有几个细节需要注意第一初始SOC一定要设到90%以上。电池在低SOC时内阻大、可用功率低加速性能会明显下降仿真结果就不是“这台车”的极限性能。第二车速信号的单位转换要清楚积分的车速是m/s但工况限定值是100km/h中间要除以3.6。第三也是最关键的一点仿真步长和求解器会影响加速时间的准确性。整车模型里电流、扭矩控制这些环节时间常数很小用变步长求解器在某些瞬间会步长过小导致仿真极慢我实测下来用固定步长ode4Runge-Kutta1ms仿真效果稳定且速度和精度比较均衡。如果你手头的模型没有高频动态用变步长ode45也可以但每一步的合理步长控制要自己关注。跑完加速工况关键输出是车速-时间曲线和电机扭矩曲线。从我搭的模型跑出来的0-100km/h加速时间大约是7.3s左右和同参数车型的实测数据偏差在可接受范围内。查看扭矩曲线时你第一时间会看到扭矩在前段一直被限制在峰值320Nm附近持平随着转速超过拐点扭矩沿着功率受限曲线往下掉。这个扭矩拐点就是150kW功率限制开始生效的时刻对应转速大约是150000/320×30/π≈4477rpm也就是电机在拐点之前出满扭矩拐点之后出满功率。如果仿真结果在某个转速段扭矩看起来异常优先检查电机外特性表是不是在拐点处平滑过渡。3.2 最高车速仿真平衡点能不能到320km/h工况最高车速仿真更简单设定一条超高速的目标车速线比如200km/h让驾驶员模型去追。车辆能不能达到这个目标取决于驱动力和阻力能不能达到平衡。最高车速本质上是“驱动力等于总阻力”的那一点超过之后没有剩余驱动力车速就稳定了。很多人会问为什么不直接算把电机最大功率代入空气阻力公式v_max(P/0.5ρCdA)^(1/3)这是工程上快速估算的办法但它忽略了很多约束电机最高转速限制、传动比限制、电池功率限制和扭矩输出限制。比如前面那组参数理论最高车速按功率估算接近170km/h以上但实际上电机最高转速12000rpm配合减速比9轮端最高转速是12000/91333rpm换算成车速是1333×(2π/60)×0.32×3.6≈160.6km/h所以最高车速被传动比和电机转速锁死在160km/h左右不是功率随便给的。这个逻辑在模型里一定要体现否则就会出现一个奇怪的仿真结果车速还在往上爬但电机转速已经超过限值了。3.3 最大爬坡度验算低速大扭矩校核爬坡度这个指标说到底是低速工况下的驱动力校核。车辆低速爬坡时空气阻力几乎可以忽略关键是驱动力要能克服滚动阻力和坡度阻力。我用前面的参数手工校核一遍轮端最大驱动力 电机峰值扭矩 × 减速比 × 传动效率 / 轮胎半径 320×9×0.94/0.32 8460N。整车重力1500×9.814700N。如果爬30%坡大约对应坡角16.7°sin值0.287坡道阻力14700×0.2874219N。滚动阻力在坡道上约14700×0.012×cos16.7°≈169N。总阻力约4388N小于8460N所以按驱动力看是可以爬30%坡的。实际多数厂商标的是爬坡度30%左右因为还要考虑附着条件路面附着系数0.8以上才算合理。仿真设置这个工况时我给车辆一个恒定低速比如10km/h然后坡度信号从0开始线性增加到设定值看车速能不能稳住。如果车速往下掉说明驱动力不够要么换减速比要么提高电机扭矩。动力性仿真的三个工况其实共享一套模型只是驾驶员模块的目标不同。我在项目中习惯把它们做进同一个模型的不同仿真快照里面用Simulink的SimInput对象去切换这样不容易改乱改个参数重跑也很快。4. 经济性仿真循环工况、SOC与能耗分析4.1 循环工况选型与载入NEDC、WLTC还是CLTC经济性仿真的第一个问题是用哪个循环工况。国内主流乘用车现在基本都看CLTC它和WLTC、NEDC的最大区别是平均车速更低、怠速占比更高、加减速更频繁更贴近中国城市路况。NEDC是旧标准工况曲线非常平缓跑出来的电耗会偏乐观但它数据丰富、早期车型对比都需要所以我三个工况都做了做法完全一样。在Simulink里载入工况数据我一般不用Signal Builder太老也不好操作而是把工况数据放到MATLAB工作区用From Workspace模块引入Simulink。速度时间的序列作为一列带时间的数组比如cltc_time (0:1:1799); cltc_speed [...]; cltc_data timeseries(cltc_speed, cltc_time);。要注意的是工况的时间步长原始标准数据通常是1秒一条但Simulink的连续模型积分器内部步长更小所以From Workspace信号默认线性插值就可以不必重采样。插值模式选用的原则是车速曲线原本就是线性变化的线性插值足够准确不要用了平滑插值导致工况峰值被削掉。经济性仿真的创口是“电耗怎么算才叫准”。我统计三类能量驱动消耗的电能、回收返回电池的电能、附件消耗的电能。模型里加一个能量积分模块对电池输出功率做积分输出正值为放电能量、负值为充电能量。循环跑完总放电能量减去总回充能量除以行驶里程就是百公里电耗。严格说还要乘一个充电效率因为从电网充电到电池里本身有损耗但那是充电层面的问题整车经济性仿真通常先不管这部分输出的是“电池端电耗”。4.2 能量回收经济性仿真里收益最大的策略循环工况下能量回收的收益非常明显。CLTC工况频繁减速如果不回收刹车产生的动能全部变成了刹车盘上的热白白浪费。我的回收策略是简单的车速查表踏板完全松开时VCU根据当前车速给一个负扭矩车速40km/h左右给到最大回收扭矩比如-80Nm低于10km/h逐渐降到0。简单策略的好处是容易调、容易复现作为基础方案验证够用。回收工况下电池的充电功率必须要限制。如果电池SOC已经接近100%回收扭矩必须迅速撤掉否则电池过充仿真里会出现电压异常上升。所以在回收扭矩路径上我加了一个基于SOC和电池可用充电功率的限幅模块。另一个值得注意的是回收扭矩叠加到传动系上时符号方向和驱动相反传动效率处理不当会导致回收功率算错。驱动扭矩经过传动效率后轮端扭矩变小回收扭矩经过传动效率后电池端功率变小方向不同效率的乘除位置也不一样这个细节在实际模型里非常容易搞反。搞反的结果就是跑出来的回收能量偏大看着很爽但数据不能信。4.3 能耗结果分析与百公里电耗模型跑完CLTC工况我会从工作区把几个关键信号拉出来画图车速跟随曲线、电池SOC曲线、母线电流曲线、能量积分曲线。先用车速跟随曲线做校验如果实际车速和目标车速贴合良好说明驾驶员模型和动力系统模型工作正常能耗数据才可信。以我现在的模型参数为例跑完一个完整CLTC工况约30分钟里程约14.5kmSOC下降大约在15%左右电池放电总能量约18.7kWh/100km这里其实是按百公里折算后的回充能量约2.6kWh/100km两者相减的电池端百公里电耗大约在16.1kWh/100km。这个数对于一台150kW、1500kg级别的纯电轿车来说是个正常水平。如果你跑出来一个特别低或者特别高的电耗别急着调模型先看是不是工况没跑完、SOC初值不对、或者说附件功率给的太离谱。我身边的同事最常见问题就是忘了加附件功耗只算驱动电耗结果比同级别车低好几度明显失真。经济性仿真还有一个常用结果是续航里程估算满电可用能量除以电池端百公里电耗再乘100。60kWh电池按上面计算大概是60/16.1×100≈373kmCLTC工况这个数字和同级别车型官方CLTC续航400km左右相比偏保守一点原因在于我用的附件功耗设置偏大、驱动效率map偏保守。续航估算这个东西跟工况、附件功耗、能量回收标定都有密切关系是多个因素叠加的结果不同企业数据差异大很正常。关键是模型能给出趋势判断比如“把风阻系数从0.30降到0.26续航提升百分之几”这是经济性仿真最大的应用价值。5. 仿真中常见的坑与排查心得5.1 模型发散、代数环与求解器选择做过一段时间仿真的人一定会遇到模型跑着跑着数值发散的场景。最常见的原因是代数环两个模块的输出直接互相作为对方的输入中间没有任何状态或延迟Simulink只能通过迭代求解一旦迭代失败就会报错或发散。典型的代数环出现在“电池功率→电机功率→电池功率”的回路里。电机要扭矩就要电流电流从电池来电池电压又受电流影响结果两边互相等。解决办法是切断这个环比如电机模块内部用一个延迟环节或者把电池电压作为上一时刻的值反馈过去或者干脆用基于功率平衡的方式解算而不是电压电流直接闭环。求解器选择方面经济性仿真工况时间长变步长ode45在每分钟能跑完但可能会出现局部步长太小卡死的情况我最终还是统一用了固定步长ode4步长1ms单次CLTC仿真大约需要半分钟到几分钟取决于电脑配置。固定步长求解器在电机扭矩切换、模式切换这些不连续点上可能出现数值振荡轻度振荡问题不大严重了就要查是不是查表断点写得太突兀。5.2 工况跟踪误差和查表问题曲线跑偏怎么定位循环工况仿真里最让人头疼的是实际车速跟目标车速对不上。起步阶段跟不住、减速段过冲、换挡点振荡这些问题的根子很大程度上都在驾驶员PI参数上。我调PI参数的思路是先把比例项调大让跟踪速度够再加积分项消除稳态误差最后加踏板速率限制和积分限幅消除动态过冲。千万别一上来就加积分项积分上太大会加剧振荡。查表模块的问题通常表现为曲线出现台阶或者突变。比如电机效率map断点太少车速曲线在某个转速点效率跳变能耗曲线就不光滑。解决办法不是硬调模型而是把Map数据在MATLAB里先做平滑处理用griddedInterpolant或者interp2做插值把断点细密一些再喂给Lookup Table。这是仿真库数据和实际台架数据之间的高频问题原始试验数据本身有噪声直接用于查表会让仿真结果很毛糙。5.3 几个实测有效的调参技巧这个模型从搭完到出可信结果我调了不少参数有几个技巧对后来者很有价值。第一个是车速信号处理。Simulink里从连续积分器出来的车速信号在显示和对比工况时噪声很小但从车身动力学反馈过来的加速度信号对噪声比较敏感我习惯在信号进入驾驶员模型之前加一个低通滤波截止频率大约5Hz可以明显减少PI控制器因为噪声抖动的问题。第二个是SOC初值的设置。经济性仿真在CLTC或WLTC工况下通常跑一个循环就结束SOC初值设在80%最合理。如果设90%以上加上制动回收很容易触发电池的充电功率限制导致回收扭矩被砍掉电耗数据反而偏高如果设太低比如20%电池放电功率受限车辆加速阶段就会表现出“脚软”一样的无力感车速跟不住工况能耗数据同样失真。第三个是数据记录。别把整个模型所有信号全记成日志文件会巨大而且后处理慢。我一般在模型里用几个To Workspace模块只记录目标车速、实际车速、SOC、电池电压电流、能量积分、电机转速扭矩这几个关键量然后统一放在一个结构体输出里。这样跑一次CLTC模型生成的数据量很小后处理画图很快而且Simulink的模型连接多个To Workspace也没负担。最后再分享一个我做整车仿真项目多年下来最深的体会仿真模型的价值不在于它算出来的数字跟实测有多接近这是需要标定工作去逼近的事情而在于它能把整车层面的逻辑关系画清楚。你用这套模型改电池容量、电机峰值功率、减速比马上就能看到电耗、加速、爬坡度这几个指标怎么联动变化。这种快速试错能力在项目前期方案论证阶段是最值钱的。我搭这套纯电动汽车Simulink模型的初衷也就是为了在实车出来之前把每一个设计决定背后的数据逻辑都想明白。参数调整的过程反而不是最难的最难的是面对一个看着合理的仿真结果时你能不能解释清楚它是为什么合理。这一点希望你也在这套模型里感受到。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →